Socket
Socket
Sign inDemoInstall

dynamsoft-label-recognizer

Package Overview
Dependencies
15
Maintainers
4
Versions
32
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.2.11 to 2.2.30-beta07242257

dist/dlr-2.2.30.browser.worker.js

6

dist/dlr.esm.js

@@ -5,8 +5,8 @@ /*!

* @website http://www.dynamsoft.com
* @copyright Copyright 2022, Dynamsoft Corporation
* @copyright Copyright 2023, Dynamsoft Corporation
* @author Dynamsoft
* @version 2.2.11 (js 20220808)
* @version 2.2.30 (js 20230725)
* @fileoverview Dynamsoft JavaScript Library for Label Recognizer
* More info on DLR JS: https://www.dynamsoft.com/label-recognizer/sdk-javascript/
*/
import{Howl as e}from"dm-howler";const t="undefined"==typeof self;let s,r,i,n,a;if("undefined"!=typeof navigator&&(s=navigator,r=s.userAgent,i=s.platform,n=s.mediaDevices),!t){const e={init:function(){this.browser=this.searchString(this.dataBrowser)||"unknownBrowser",this.version=this.searchVersion(r)||this.searchVersion(s.appVersion)||0,this.OS=this.searchString(this.dataOS)||"unknownOS","Linux"==this.OS&&-1!=r.indexOf("Windows NT")&&(this.OS="HarmonyOS")},searchString:function(e){for(let t=0;t<e.length;t++){let s=e[t].string,r=e[t].prop;if(this.versionSearchString=e[t].versionSearch||e[t].identity,s){if(-1!=s.indexOf(e[t].subString))return e[t].identity}else if(r)return e[t].identity}},searchVersion:function(e){let t=e.indexOf(this.versionSearchString);if(-1!=t)return parseFloat(e.substring(t+this.versionSearchString.length+1))},dataBrowser:[{string:r,subString:"Edge",identity:"Edge"},{string:r,subString:"OPR",identity:"OPR"},{string:r,subString:"Chrome",identity:"Chrome"},{string:s.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},{string:r,subString:"Firefox",identity:"Firefox"},{string:r,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"}],dataOS:[{string:r,subString:"HarmonyOS",identity:"HarmonyOS"},{string:r,subString:"Android",identity:"Android"},{string:r,subString:"iPhone",identity:"iPhone"},{string:i,subString:"Win",identity:"Windows"},{string:i,subString:"Mac",identity:"Mac"},{string:i,subString:"Linux",identity:"Linux"}]};e.init(),a={browser:e.browser,version:e.version,OS:e.OS}}t&&(a={browser:"ssr",version:0,OS:"ssr"});const o="undefined"!=typeof WebAssembly&&r&&!(/Safari/.test(r)&&!/Chrome/.test(r)&&/\(.+\s11_2_([2-6]).*\)/.test(r)),l=!("undefined"==typeof Worker),c=!(!n||!n.getUserMedia),h=async()=>{let e=!1;if(c)try{(await n.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const u=(()=>{if(!t&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),d=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!t&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!t&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",f=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let s=0;s<e.length;++s){if(!t){let t=document.createElement("a");t.href=e[s],e[s]=t.href}e[s].endsWith("/")||(e[s]+="/")}}return e},A=e=>e&&"object"==typeof e&&"function"==typeof e.then;var m,R,p,S,w;!function(e){e[e.IPF_BINARY=0]="IPF_BINARY",e[e.IPF_BINARYINVERTED=1]="IPF_BINARYINVERTED",e[e.IPF_GRAYSCALED=2]="IPF_GRAYSCALED",e[e.IPF_NV21=3]="IPF_NV21",e[e.IPF_RGB_565=4]="IPF_RGB_565",e[e.IPF_RGB_555=5]="IPF_RGB_555",e[e.IPF_RGB_888=6]="IPF_RGB_888",e[e.IPF_ARGB_8888=7]="IPF_ARGB_8888",e[e.IPF_RGB_161616=8]="IPF_RGB_161616",e[e.IPF_ARGB_16161616=9]="IPF_ARGB_16161616",e[e.IPF_ABGR_8888=10]="IPF_ABGR_8888",e[e.IPF_ABGR_16161616=11]="IPF_ABGR_16161616",e[e.IPF_BGR_888=12]="IPF_BGR_888"}(m||(m={})),function(e){e[e.OK=0]="OK",e[e.UNKNOWN=-1e4]="UNKNOWN",e[e.NO_MEMORY=-10001]="NO_MEMORY",e[e.NULL_POINTER=-10002]="NULL_POINTER",e[e.LICENSE_INVALID=-10003]="LICENSE_INVALID",e[e.LICENSE_EXPIRED=-10004]="LICENSE_EXPIRED",e[e.FILE_NOT_FOUND=-10005]="FILE_NOT_FOUND",e[e.FILETYPE_NOT_SUPPORTED=-10006]="FILETYPE_NOT_SUPPORTED",e[e.BPP_NOT_SUPPORTED=-10007]="BPP_NOT_SUPPORTED",e[e.IMAGE_READ_FAILED=-10012]="IMAGE_READ_FAILED",e[e.TIFF_READ_FAILED=-10013]="TIFF_READ_FAILED",e[e.PDF_READ_FAILED=-10021]="PDF_READ_FAILED",e[e.PDF_DLL_MISSING=-10022]="PDF_DLL_MISSING",e[e.RECOGNITION_TIMEOUT=-10026]="RECOGNITION_TIMEOUT",e[e.JSON_PARSE_FAILED=-10030]="JSON_PARSE_FAILED",e[e.JSON_TYPE_INVALID=-10031]="JSON_TYPE_INVALID",e[e.JSON_KEY_INVALID=-10032]="JSON_KEY_INVALID",e[e.JSON_VALUE_INVALID=-10033]="JSON_VALUE_INVALID",e[e.JSON_NAME_KEY_MISSING=-10034]="JSON_NAME_KEY_MISSING",e[e.JSON_NAME_VALUE_DUPLICATED=-10035]="JSON_NAME_VALUE_DUPLICATED",e[e.TEMPLATE_NAME_INVALID=-10036]="TEMPLATE_NAME_INVALID",e[e.PARAMETER_VALUE_INVALID=-10038]="PARAMETER_VALUE_INVALID",e[e.SET_MODE_ARGUMENT_ERROR=-10051]="SET_MODE_ARGUMENT_ERROR",e[e.GET_MODE_ARGUMENT_ERROR=-10055]="GET_MODE_ARGUMENT_ERROR",e[e.CHARACTER_MODEL_FILE_NOT_FOUND=-10100]="CHARACTER_MODEL_FILE_NOT_FOUND"}(R||(R={})),function(e){e[e.LST_MANUAL_SPECIFICATION=1]="LST_MANUAL_SPECIFICATION",e[e.LST_PREDETECTED_REGION=2]="LST_PREDETECTED_REGION",e[e.LST_BARCODE=4]="LST_BARCODE"}(p||(p={}));class y{constructor(){this._instanceID=void 0,this._ifSaveOriginalImageInACanvas=!1,this.oriCanvas=null,this.oriCanvasData=null,this.canvas=null,this._region=null,this._timeStartRecognize=null,this._timeEnterInnerDLR=null,this.recognizeRecords={},this.drawRegionsultRecords={},this.bDestroyed=!1,this._setWarnnedEx=new Set,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this.captureAndRecognizeInParallel=!0,this._cvsDrawArea=null,this._divScanArea=null,this._divScanLight=null,this._selCam=null,this._selRsl=null,this._selMinLtr=null,this._optGotMinLtr=null,this._btnClose=null,this._minLetter=0,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.beepSound=new e({src:["data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}}),this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.highlightFillStyle="rgba(254,180,32,0.3)",this.highlightStrokeStyle="rgba(254,180,32,0.9)",this.highlightLineWidth=1,this.beingLazyDrawRegionsults=!1,this._vinResultArray=[],this.currentSettingsTemplate="cppdefault",this._dce=null,this.imgSource=null,this._maxCvsSideLength="iPhone"==y.browserInfo.OS||"Android"==y.browserInfo.OS||"HarmonyOS"==a.OS?2048:4096,this.presetVideoTemplateRegion={regionLeft:0,regionRight:100,regionTop:40,regionBottom:60,regionMeasuredByPercentage:!0},this._onCameraSelChange=()=>{},this._onResolutionSelChange=()=>{},this._onMinLetterSelChange=async e=>{let t=e.target.value;if("got"===t)return;t=JSON.parse(t);let s=JSON.parse(await this.outputRuntimeSettingsToString());s.LabelRecognizerParameterArray[0].LineStringLengthRange=[t,999],s.TextAreaArray[0].LineStringLengthRange=[t,999],await this.updateRuntimeSettingsFromString(s)},this._onCloseBtnClick=()=>{},this._tempSolutionStatus="closed"}static getVersion(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`license`"+d);s._license=t})(y,e)}static initLicense(e){if("unload"!=this._loadWasmStatus)throw new Error("`license` is not allowed to change after `createInstance` or `loadWasm` is called.");y._license=e}static set sessionPassword(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`sessionPassword`"+d);s._sessionPassword=t})(y,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:o,worker:l,getUserMedia:c,camera:await h(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");y._engineResourcePath=(e=>{if(null==e&&(e="./"),!t){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`licenseServer`"+d);s._licenseServer=f(t)})(y,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+d);s._deviceFriendlyName=t||""})(y,e)}static isImageSource(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}static isDSImage(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}static isDCEFrame(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&("colorMode"in e&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e}get region(){return this._region}static isWasmLoaded(){return"loadSuccess"==this._loadWasmStatus}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static recalculateResultLocation(e,t,s,r,i,n,a){if(e.length>0&&e[0].lineResults.length>0)for(let o of e)for(let e of o.lineResults){let o=e.location.points,l=n/r,c=a/i;o[0].x=o[0].x/l+t,o[1].x=o[1].x/l+t,o[2].x=o[2].x/l+t,o[3].x=o[3].x/l+t,o[0].y=o[0].y/c+s,o[1].y=o[1].y/c+s,o[2].y=o[2].y/c+s,o[3].y=o[3].y/c+s}}static get defaultUIElementURL(){var e;return null===(e=this._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",y.engineResourcePath)}static set defaultUIElementURL(e){this._defaultUIElementURL=e}_updateMinLtrSel(e){if(this._minLetter=e,this._optGotMinLtr){const t=e?`${e}+ letters`:"any letter";this._optGotMinLtr.innerText=t,this._selMinLtr&&this._optGotMinLtr.parentNode==this._selMinLtr&&(this._selMinLtr.value="got")}}get soundSource(){return this._soundSource}set soundSource(t){this._soundSource=t,this.beepSound=new e({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}isPresetRegion(e){return!!e&&(0===e.regionLeft&&100===e.regionRight&&40===e.regionTop&&60===e.regionBottom&&!0===e.regionMeasuredByPercentage)}async _registerDCEControler(){if(!this.dce)return;y._onLog&&y._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength);try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const s=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{s?s===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dlr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else s||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{let t=await this._recognize_DCEFrame(e,{bCopyData:!1}),s=null;if(t&&t.length){const{sx:r,sy:i,width:n,height:a,_sWidth:o,_sHeight:l}=e;s=t.map((e=>({lineResults:e.lineResults.map((e=>({location:JSON.parse(JSON.stringify(e.location))})))}))),y.recalculateResultLocation(s,r,i,o,l,n,a)}this._drawResults(s),await this.clearMapDecodeRecord();for(let e of t)delete e.bUnduplicated;if(this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)for(let t of e.lineResults)this.onUniqueRead(t.text,this._cloneDecodeResults(t));if(this.onMRZRead&&this.dce.isOpen()&&!this._bPauseScan){if(["passportMRZ","visaMRZ","MRZ"].includes(this.currentSettingsTemplate)){let e=this._cloneDecodeResults(t);for(let t of e){let e="",s=[];t.lineResults.length>=2&&(t.lineResults[t.lineResults.length-1].text.length>30&&t.lineResults.length>=2?(s.push(t.lineResults[t.lineResults.length-2]),s.push(t.lineResults[t.lineResults.length-1])):t.lineResults[t.lineResults.length-1].text.length<=30&&t.lineResults.length>=3&&(s.push(t.lineResults[t.lineResults.length-3]),s.push(t.lineResults[t.lineResults.length-2]),s.push(t.lineResults[t.lineResults.length-1])));for(let t of s)e.length>0&&(e+="\n"),e+=t.text;e.length>0&&this.onMRZRead(e,s)}}}if(this.onVINRead&&this.dce.isOpen()&&!this._bPauseScan){if(["VIN","VIN_NA"].includes(this.currentSettingsTemplate)){let e=this._cloneDecodeResults(t);if(e.length){let s="";for(let r of e)for(let e of r.lineResults){if(18===e.characterResults.length){e.characterResults[0].characterHConfidence>e.characterResults[17].characterHConfidence?e.characterResults.pop():e.characterResults.shift()}else if(19===e.characterResults.length){let t=e.characterResults[0].characterHConfidence+e.characterResults[1].characterHConfidence,s=e.characterResults[17].characterHConfidence+e.characterResults[18].characterHConfidence,r=e.characterResults[0].characterHConfidence+e.characterResults[18].characterHConfidence,i=Math.min(t,s,r);i===t?e.characterResults.splice(0,2):i===s?e.characterResults.splice(17,2):i===r&&(e.characterResults.pop(),e.characterResults.shift())}for(let t of e.characterResults)s+=t.characterH;this.onVINRead(s,t[0].lineResults[0])}}}}},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(y._onLog&&y._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this._dlrDrawingLayer=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this.imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this.imgSource=null;else{if(!y.isImageSource(e))throw new Error("Invalid value.");this._logoutDCEControler(),this.imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:s,sp:r,rmk:i}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,s,r=t._license||"",i=JSON.parse(JSON.stringify(t._licenseServer)),n=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t=r.substring(4);try{t=atob(t)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}const s=JSON.parse(t);if(r=s.handshakeCode?s.handshakeCode:s.organizationID?s.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===i.length){let e=[];s.mainServerURL&&(e[0]=s.mainServerURL),s.standbyServerURL&&(e[1]=s.standbyServerURL),i=f(e)}!n&&s.sessionPassword&&(n=s.sessionPassword),e=s.remark}("200001"===r||r.startsWith("200001-"))&&(i&&i.length||(r="")),r||(a=1)}if(a&&(globalThis.crypto||(s="Please upgrade your browser to support online key."),globalThis.crypto.subtle||(s="Require https to use online key in this browser.")),s){if(1!==a)throw new Error(s);a=0,console.warn(s),t._lastErrorCode=-1,t._lastErrorString=s}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:i,sp:n,rmk:e}}throw new Error("Can't preprocess license again"+d)})(y);this._pLoad.task=async(n,o)=>{let l=y.engineResourcePath+y._workerName;y.engineResourcePath.startsWith(location.origin)||(l=await fetch(l).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),y._dlrWorker=new Worker(l),y._dlrWorker.onerror=e=>{let t=new Error(e.message);o(t)},y._dlrWorker.onmessage=async t=>{let s=t.data?t.data:t;switch(s.type){case"log":y._onLog&&y._onLog(s.message);break;case"load":{s.message&&(s.message=s.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-label-recognizer/#javascript)"));let t,r=!1;1===e&&(r=!0),s.success?(y._dlrWorker.onerror=null,y._version=s.version+"(JS "+y._jsVersion+"."+y._jsEditVersion+")",y._onLog&&y._onLog("load dlr worker success"),s.message&&console.warn(s.message)):(t=new Error(s.message),t.stack=s.stack+"\n"+t.stack,r||111==s.ltsErrorCode&&-1!=s.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&y.showDialog(s.success?"warn":"error",s.message),s.success?n():o(t);break}case"task":{let e=s.id,t=s.body;try{y._taskCallbackMap.get(e)(t),y._taskCallbackMap.delete(e)}catch(t){throw y._taskCallbackMap.delete(e),t}break}case"event":"resourcesLoadStarted"===s.body.type?y.onResourcesLoadStarted&&setTimeout((()=>y.onResourcesLoadStarted(s.body.resourcesPath)),0):"resourcesLoadProgress"===s.body.type?y.onResourcesLoadProgress&&setTimeout((()=>y.onResourcesLoadProgress(s.body.resourcesPath,{loaded:s.body.loaded,total:s.body.total})),0):"resourcesLoaded"===s.body.type&&y.onResourcesLoaded&&setTimeout((()=>y.onResourcesLoaded(s.body.resourcesPath)),0);break;default:y._onLog&&y._onLog(t)}},y._dlrWorker.postMessage({type:"loadWasm",engineResourcePath:y.engineResourcePath,bd:y._bWasmDebug,v:y._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,fn:y.deviceFriendlyName,ls:s,sp:r,rmk:i})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,s)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let i=await r.text();if(!i.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let n=document.createElement("div");n.innerHTML=i;let a=[];for(let e=0;e<n.childElementCount;++e){let t=n.children[e];t instanceof HTMLStyleElement&&(a.push(t),document.head.append(t))}let o=1==n.childElementCount?n.children[0]:n;o.remove();let l,c,h,u,d,g=[o],_=o.children;for(let e of _)g.push(e);for(let e=0;e<g.length;++e)for(let t of g[e].children)g.push(t);for(let e of g)if(!l&&e.classList.contains("dls-license-mask"))l=e,e.addEventListener("click",(t=>{if(e==t.target){o.remove();for(let e of a)e.remove()}}));else if(!c&&e.classList.contains("dls-license-icon-close"))c=e,e.addEventListener("click",(()=>{o.remove();for(let e of a)e.remove()}));else if(!h&&e.classList.contains("dls-license-icon-error"))h=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=s;for(;t;){let s=t.indexOf("["),r=t.indexOf("]",s),i=t.indexOf("(",r),n=t.indexOf(")",i);if(-1==s||-1==r||-1==i||-1==n){e.appendChild(new Text(t));break}s>0&&e.appendChild(new Text(t.substring(0,s)));let a=document.createElement("a"),o=t.substring(s+1,r);a.innerText=o;let l=t.substring(i+1,n);a.setAttribute("href",l),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(n+1)}}document.body.appendChild(o)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(){return await this.loadWasm(),await new Promise(((e,t)=>{let s=this._nextTaskID++;this._taskCallbackMap.set(s,(s=>{if(s.success)return e(s.instanceID);{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),this._dlrWorker.postMessage({type:"createInstance",id:s,bScanner:!1})}))}static async createInstance(e){let t=new y;return t._instanceID=await this.createInstanceInWorker(),e&&e.runtimeSettings&&t.updateRuntimeSettingsFromString(e.runtimeSettings),t}async recognize(e,t){let s;return y._onLog&&y._onLog("recognize(source: any, modelName?: string)"),y._onLog&&(this._timeStartRecognize=Date.now()),t=t||{},e instanceof Blob?s=await this._recognize_Blob(e,t):e instanceof ArrayBuffer?s=await this._recognize_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._recognize_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?s=await this._recognize_Image(e,t):e instanceof HTMLCanvasElement?s=await this._recognize_Canvas(e,t):e instanceof HTMLVideoElement?s=await this._recognize_Video(e,t):"string"==typeof e?s="data:image/"==e.substring(0,11)?await this._recognize_Base64(e,t):await this._recognize_Url(e,t):y.isDCEFrame(e)?(t.bCopyData=!0,s=await this._recognize_DCEFrame(e,t)):y.isDSImage(e)?(t.bCopyData=!0,s=await this._recognize_DSImage(e,t)):s=await Promise.reject(TypeError("'_recognize(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'string(base64 with image mime)', 'string(url)' or 'object(dceFrame)'.")),"MRZ"===this.currentSettingsTemplate||"passportMRZ"===this.currentSettingsTemplate||"visaMRZ"===this.currentSettingsTemplate?this._filterMrzResults(s):("VIN"!==this.currentSettingsTemplate&&"VIN_NA"!==this.currentSettingsTemplate||this._filterVinResults(s),s)}async recognizeBase64String(e,t){let s={};t&&(s.modelName=t);let r=this._recognize_Base64(e,s);return"MRZ"===this.currentSettingsTemplate||"passportMRZ"===this.currentSettingsTemplate||"visaMRZ"===this.currentSettingsTemplate?this._filterMrzResults(r):("VIN"!==this.currentSettingsTemplate&&"VIN_NA"!==this.currentSettingsTemplate||this._filterVinResults(r),r)}async recognizeUrl(e,t){let s={};t&&(s.modelName=t);let r=this._recognize_Url(e,s);return"MRZ"===this.currentSettingsTemplate||"passportMRZ"===this.currentSettingsTemplate||"visaMRZ"===this.currentSettingsTemplate?this._filterMrzResults(r):("VIN"!==this.currentSettingsTemplate&&"VIN_NA"!==this.currentSettingsTemplate||this._filterVinResults(r),r)}async _recognizeBuffer_Uint8Array(e,t,s,r,i,n){return await new Promise(((a,o)=>{let l=y._nextTaskID++;y._taskCallbackMap.set(l,(e=>{if(e.success){let t,s=y._onLog?Date.now():0;this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn);const s=e=>!!e&&("VIN_NA"===this.currentSettingsTemplate?this._checkValidVIN(e):"passportMRZ"===this.currentSettingsTemplate?44==e.length&&(/[0-9]/.test(e)?this._checkValidMRP(e):null):"visaMRZ"===this.currentSettingsTemplate?(44==e.length||36==e.length)&&(/[0-9]/.test(e)?this._checkValidMRV(e):null):null);for(let e of t)for(let t of e.lineResults)t.isCheckDigitMatched=s(t.text)}catch(e){return o(e)}if(y._onLog){let e=Date.now();y._onLog("time get result: "+s),y._onLog("Handle image cost: "+(this._timeEnterInnerDLR-this._timeStartRecognize)),y._onLog("worker recognize image cost: "+(s-this._timeEnterInnerDLR)),y._onLog("worker handle results: "+(e-s)),y._onLog("Total recognize image cost: "+(e-this._timeStartRecognize))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),y._onLog&&(this._timeEnterInnerDLR=Date.now()),y._onLog&&y._onLog("Send buffer to worker:"+this._timeEnterInnerDLR),y._dlrWorker.postMessage({type:"recognizeByBuffer",id:l,instanceID:this._instanceID,body:{config:n,imageData:{bytes:e,length:r*s,width:t,height:s,stride:r,format:i}}},[e.buffer])}))}async _recognizeBuffer_Blob(e,t,s,r,i,n){y._onLog&&y._onLog("_recognizeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,s)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{s(r.error)}}));return await this._recognizeBuffer_Uint8Array(new Uint8Array(a),t,s,r,i,n)}async recognizeBuffer(e,t,s,r,i,n){let a;return y._onLog&&y._onLog("recognizeBuffer(buffer,width,height,stride,format)"),y._onLog&&(this._timeStartRecognize=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._recognizeBuffer_Uint8Array(e,t,s,r,i,n):e instanceof ArrayBuffer?a=await this._recognizeBuffer_Uint8Array(new Uint8Array(e),t,s,r,i,n):e instanceof Blob&&(a=await this._recognizeBuffer_Blob(e,t,s,r,i,n)),"MRZ"===this.currentSettingsTemplate||"passportMRZ"===this.currentSettingsTemplate||"visaMRZ"===this.currentSettingsTemplate?this._filterMrzResults(a):("VIN"!==this.currentSettingsTemplate&&"VIN_NA"!==this.currentSettingsTemplate||this._filterVinResults(a),a)}_filterVinResults(e){let t="";if(e.length)for(let s of e)for(let e of s.lineResults){if(18===e.characterResults.length){e.characterResults[0].characterHConfidence>e.characterResults[17].characterHConfidence?e.characterResults.pop():e.characterResults.shift()}else if(19===e.characterResults.length){let t=e.characterResults[0].characterHConfidence+e.characterResults[1].characterHConfidence,s=e.characterResults[17].characterHConfidence+e.characterResults[18].characterHConfidence,r=e.characterResults[0].characterHConfidence+e.characterResults[18].characterHConfidence,i=Math.min(t,s,r);i===t?e.characterResults.splice(0,2):i===s?e.characterResults.splice(17,2):i===r&&(e.characterResults.pop(),e.characterResults.shift())}for(let s of e.characterResults)t+=s.characterH;e.text=t}}_filterMrzResults(e){let t=[];if(0===e.length)return[];for(let s=0;s<e.length;s++){if(t.push(JSON.parse(JSON.stringify(e[s]))),t[s].lineResults=[],e[s].lineResults.length>=2){if(e[s].lineResults[e[s].lineResults.length-1].text.length>30&&e[s].lineResults.length>=2){for(let r=e[s].lineResults.length-2;r<e[s].lineResults.length;r++)t[s].lineResults.push(e[s].lineResults[r]);return t}if(e[s].lineResults[e[s].lineResults.length-1].text.length<=30&&e[s].lineResults.length>=3){for(let r=e[s].lineResults.length-3;r<e[s].lineResults.length;r++)t[s].lineResults.push(e[s].lineResults[r]);return t}return[]}return[]}}async _recognizeFileInMemory_Uint8Array(e,t){return await new Promise(((s,r)=>{let i=y._nextTaskID++;y._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return r(e)}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,r(t)}})),y._dlrWorker.postMessage({type:"recognizeFileInMemory",id:i,instanceID:this._instanceID,body:{config:t,bytes:e}})}))}async getRuntimeSettings(){return await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success){let t=JSON.parse(s.results);return e(t)}{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"getRuntimeSettings",id:s,instanceID:this._instanceID})}))}static isRegionNormalPreset(e){return p.LST_MANUAL_SPECIFICATION==e.localizationSourceType&&1==e.regionMeasuredByPercentage&&JSON.stringify([{x:0,y:100},{x:100,y:0},{x:100,y:100},{x:0,y:100}])===JSON.stringify(e.location.points)}async updateRuntimeSettings(e){let t;if("string"==typeof e){if(!(e=e.trim()).startsWith("{"))return void this.updateRuntimeSettingsFromString(e);t=JSON.parse(e)}else{if("object"!=typeof e)throw TypeError("'UpdateRuntimeSettings(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");t=JSON.parse(JSON.stringify(e))}const s=t.referenceRegion;y.isRegionNormalPreset(s)?this.region=null:this.region=s,this._updateMinLtrSel(0),await new Promise(((e,s)=>{let r=y._nextTaskID++;y._taskCallbackMap.set(r,(t=>{if(t.success){try{this._handleRetJsonString(t.updateReturn)}catch(e){s(e)}return e()}{let e=new Error(t.message);return e.stack=t.stack+"\n"+e.stack,s(e)}})),y._dlrWorker.postMessage({type:"updateRuntimeSettings",id:r,instanceID:this._instanceID,body:{settings:JSON.stringify(t)}})}))}async resetRuntimeSettings(){return this.region=null,this._updateMinLtrSel(0),await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"resetRuntimeSettings",id:s,instanceID:this._instanceID})}))}async updateRuntimeSettingsFromString(e){let t=0;if("string"==typeof e)if((e=e.trim()).startsWith("{"))e=JSON.parse(e),this.currentSettingsTemplate=null;else{if(e.length>50)throw new Error("Error: preset longer than 50 letters.");const s=e.toLowerCase().split("-");if(s.length>2)throw new Error(`Error: '${e}' is not supported.`);if(s.includes("numberletter"))t=3,this.currentSettingsTemplate="numberLetter";else if(s.includes("numberuppercase"))t=3,this.currentSettingsTemplate="numberUppercase";else if(s.includes("number"))t=3,this.currentSettingsTemplate="number";else if(s.includes("letter"))t=3,this.currentSettingsTemplate="letter";else if(s.includes("passportmrz"))t=44,this.currentSettingsTemplate="passportMRZ";else if(s.includes("visamrz"))t=36,this.currentSettingsTemplate="visaMRZ";else if(s.includes("mrz"))t=30,this.currentSettingsTemplate="MRZ";else if(s.includes("vin_na"))t=17,this.currentSettingsTemplate="VIN_NA";else if(s.includes("vin"))t=17,this.currentSettingsTemplate="VIN";else{if(!s.includes("cppdefault"))throw new Error(`Error: '${e}' is not supported.`);this.currentSettingsTemplate="cppdefault"}if(s.includes("video")){if(!this.dce)throw new Error("'CameraEnhancer' instance is required through 'setImageSource()' when using the 'video' prefix template.");this.region=null,this.dce.setScanRegion(this.presetVideoTemplateRegion)}else this.region=null,this.dce&&this.isPresetRegion(this.dce.getScanRegion())&&this.dce.setScanRegion(null)}else{if("object"!=typeof e)throw TypeError("'updateRuntimeSettingsFromString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");this.currentSettingsTemplate=null}if("object"==typeof e){const s=e.ReferenceRegionArray[0].Localization,r=s.FirstPoint?{localizationSourceType:p[s.SourceType],location:{points:[{x:s.FirstPoint[0],y:s.FirstPoint[1]},{x:s.SecondPoint[0],y:s.SecondPoint[1]},{x:s.ThirdPoint[0],y:s.ThirdPoint[1]},{x:s.FourthPoint[0],y:s.FourthPoint[1]}]},regionMeasuredByPercentage:s.MeasuredByPercentage}:null;r&&y.isRegionNormalPreset(r)?this.region=null:this.region=r;const i=e.LabelRecognizerParameterArray[0].LineStringLengthRange;t=i?i[0]:0}return this._updateMinLtrSel(t),await new Promise(((t,s)=>{let r=y._nextTaskID++;y._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(e){s(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),y._dlrWorker.postMessage({type:"updateRuntimeSettingsFromString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async outputRuntimeSettingsToString(){return await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success)return e(s.results);{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"outputSettingsToString",id:s,instanceID:this._instanceID})}))}async updateReferenceRegionFromBarcodeResults(e){return await new Promise(((t,s)=>{let r=y._nextTaskID++;y._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),y._dlrWorker.postMessage({type:"updateReferenceRegionFromBarcodeResults",id:r,instanceID:this._instanceID,body:{dbrTextResults:e}})}))}static async appendCaffeModelBuffer(e,t){return await new Promise(((s,r)=>{let i=y._nextTaskID++;y._taskCallbackMap.set(i,(e=>{if(e.success){try{return s()}catch(e){r(e)}return s()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,r(t)}})),y._dlrWorker.postMessage({type:"appendCaffeModelBuffer",id:i,body:{name:e,folderUrl:t}})}))}static async eraseCaffeModelByName(e){return await new Promise(((t,s)=>{let r=y._nextTaskID++;y._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),y._dlrWorker.postMessage({type:"eraseCaffeModelByName",id:r,body:{name:e}})}))}static async eraseAllCaffeModels(){return await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"eraseAllCaffeModels",id:s})}))}async _recognize_Blob(e,t){y._onLog&&y._onLog("_recognize_Blob(blob: Blob)");let s=null,r=null;if("undefined"!=typeof createImageBitmap)try{s=await createImageBitmap(e)}catch(e){}s||(r=await function(e){return new Promise(((t,s)=>{let r=URL.createObjectURL(e),i=new Image;i.dlrObjUrl=r,i.src=r,i.onload=()=>{t(i)},i.onerror=e=>{s(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let i=await this._recognize_Image(s||r,t);return s&&s.close(),i}async _recognize_ArrayBuffer(e,t){return await this._recognize_Blob(new Blob([e]),t)}async _recognize_Uint8Array(e,t){return await this._recognize_Blob(new Blob([e]),t)}async _recognize_Image(e,t){y._onLog&&y._onLog("_recognize_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let s,r,i=e instanceof HTMLImageElement?e.naturalWidth:e.width,n=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(i,n);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;s=Math.round(i*e),r=Math.round(n*e)}else s=i,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const o=this.canvas;o.width===s&&o.height===r||(o.width=s,o.height=r),o.ctx2d||(o.ctx2d=o.getContext("2d"));return o.ctx2d.drawImage(e,0,0,i,n,0,0,s,r),e.dlrObjUrl&&URL.revokeObjectURL(e.dlrObjUrl),await this._recognize_Canvas(o,t)}async _recognize_Canvas(e,t){if(y._onLog&&y._onLog("_recognize_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let s=(e.ctx2d||e.getContext("2d")).getImageData(0,0,e.width,e.height).data;return await this._recognizeBuffer_Uint8Array(s,e.width,e.height,4*e.width,m.IPF_ABGR_8888,t)}async _recognize_Video(e,t){if(y._onLog&&y._onLog("_recognize_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_recognize_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let s,r,i=e.videoWidth,n=e.videoHeight,a=Math.max(i,n);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;s=Math.round(i*e),r=Math.round(n*e)}else s=i,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const o=this.canvas;o.width===s&&o.height===r||(o.width=s,o.height=r),o.ctx2d||(o.ctx2d=o.getContext("2d"));return o.ctx2d.drawImage(e,0,0,i,n,0,0,s,r),await this._recognize_Canvas(o,t)}async _recognize_DCEFrame(e,t){if(y._onLog&&y._onLog("_recognize_DCEFrame(dceFrame)"),!y.isDCEFrame(e))return[];let s=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:i,colorMode:n,timeStamp:a}=e;let o;o=t&&t.bCopyData?new Uint8Array(e.data):e.data;let l=null;if(t?(l=JSON.parse(JSON.stringify(t)),l.timeStamp=a):l={timeStamp:a},"grey"===n)s=await this._recognizeBuffer_Uint8Array(o,r,i,r,m.IPF_GRAYSCALED,l);else if("rgba"===n)s=await this._recognizeBuffer_Uint8Array(o,r,i,4*r,m.IPF_ABGR_8888,l);else{if("bgra"!==n)throw new Error(`Color mode '${n}' is not supported to recognize.`);s=await this._recognizeBuffer_Uint8Array(o,r,i,4*r,m.IPF_ARGB_8888,l)}return s}async _recognize_DSImage(e,t){if(y._onLog&&y._onLog("_recognize_DSImage(dsImage)"),!y.isDSImage(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e/4],t[e+1]=this.data[e/4],t[e+2]=this.data[e/4],t[e+3]=255;break;case"rgb":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e],t[e+1]=this.data[e+1],t[e+2]=this.data[e+2],t[e+3]=255;break;case"bgr":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e],t[e+1]=this.data[e+1],t[e+2]=this.data[e+2],t[e+3]=255;break;case"rgba":case"bgra":t=new Uint8ClampedArray(this.data);break;default:throw new Error("The content of 2D Canvas is currently limited to the sRGB color space.")}const s=new ImageData(t,this.width,this.height);return e.getContext("2d").putImageData(s,0,0),e}});const{width:s,height:r}=e;let i,n,a,o=e.pixelFormat.toLowerCase();switch(i=t&&t.bCopyData?new Uint8Array(e.data):e.data,o){case"grey":a=m.IPF_GRAYSCALED,n=s;break;case"rgb":a=m.IPF_BGR_888,n=3*s;break;case"bgr":a=m.IPF_RGB_888,n=3*s;break;case"rgba":a=m.IPF_ABGR_8888,n=4*s;break;case"bgra":a=m.IPF_ARGB_8888,n=4*s;break;default:throw new Error("The pixel format is not supported to recognize.")}return await this._recognizeBuffer_Uint8Array(i,s,r,n,a,t)}async _recognize_Base64(e,t){if(y._onLog&&y._onLog("_recognize_Base64(base64Str)"),"string"!=typeof e&&"object"!=typeof e)return Promise.reject("'_recognize_Base64(base64Str, config)': Type of 'base64Str' should be 'string'.");"data:image/"==e.substring(0,11)&&(e=e.substring(e.indexOf(",")+1));{let s=atob(e),r=s.length,i=new Uint8Array(r);for(;r--;)i[r]=s.charCodeAt(r);return await this._recognize_Blob(new Blob([i]),t)}}async _recognize_Url(e,t){if(y._onLog&&y._onLog("_recognize_Url(url)"),"string"!=typeof e&&"object"!=typeof e)throw TypeError("'_recognize_Url(url, config)': Type of 'url' should be 'string'.");{let s=await new Promise(((t,s)=>{let r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{s(new Error("Network Error: "+r.statusText))}}));return await this._recognize_Blob(s,t)}}async _recognize_FilePath(e,t){throw y._onLog&&y._onLog("_recognize_FilePath(path)"),Error("'_recognize_FilePath(path, config)': The method is only supported in node environment.")}static LabelRecognizerException(e,t){let s,r=R.UNKNOWN;return"number"==typeof e?(r=e,s=new Error(t)):s=new Error(e),s.code=r,s}_handleRetJsonString(e){let t=R;if(e.results){const t=this.drawRegionsultRecords,s={};for(let r=0;r<e.results.length;r++){let i=e.results[r];if(null!=i.exception){this._setWarnnedEx.has(i.exception)||(this._setWarnnedEx.add(i.exception),console.warn(i.exception));let e={};i.exception.split(";").forEach((t=>{let s=t.indexOf(":");e[t.substring(0,s)]=t.substring(s+1)})),i.exception=e}for(let e of i.lineResults){const r=e.text;if(s[r]=1,e.bUnduplicated){(t[r]=t[r]||[]).push(e)}else t[r]&&(t[r]=[e])}}if(e.records){const r=this.recognizeRecords=e.records;for(let e in t)r[e]||delete t[e];for(let e in t)s[e]||(t[e]=[])}else this.recognizeRecords={},this.drawRegionsultRecords={};return this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!this._setWarnnedEx.has(e.description)&&(this._setWarnnedEx.add(e.description),e.exception==R.LICENSE_INVALID||e.exception==R.LICENSE_EXPIRED?console.error(e.description):console.warn(e.description)),e.results}if(e.exception==t.OK)return e.data;throw y.LabelRecognizerException(e.exception,e.description)}async setModeArgument(e,t,s,r){return await new Promise(((i,n)=>{let a=y._nextTaskID++;y._taskCallbackMap.set(a,(e=>{if(e.success){try{this._handleRetJsonString(e.setReturn)}catch(e){return n(e)}return i()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,n(t)}})),y._dlrWorker.postMessage({type:"setModeArgument",id:a,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:s,argumentValue:r}})}))}async getModeArgument(e,t,s){return await new Promise(((r,i)=>{let n=y._nextTaskID++;y._taskCallbackMap.set(n,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.getReturn)}catch(e){return i(e)}return r(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,i(t)}})),y._dlrWorker.postMessage({type:"getModeArgument",id:n,instanceID:this._instanceID,body:{modeName:e,index:t,argumentName:s}})}))}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"clearMapDecodeRecord",id:s,instanceID:this._instanceID})}))}_bindUI(){this.dce&&(this._selMinLtr=this.dce._selMinLtr,this._optGotMinLtr=this.dce._optGotMinLtr,this.dce.singleFrameMode||this._selMinLtr&&this._selMinLtr.addEventListener("change",this._onMinLetterSelChange),this._updateMinLtrSel(this._minLetter))}_unbindUI(){this._selMinLtr&&this._selMinLtr.removeEventListener("change",this._onMinLetterSelChange),this._selMinLtr=null,this._optGotMinLtr=null}async getScanSettings(){return await new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success){let t=s.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndRecognizeInParallel=this.captureAndRecognizeInParallel,e(t)}{let e=new Error(s.message);return e.stack+="\n"+s.stack,t(e)}})),y._dlrWorker.postMessage({type:"getScanSettings",id:s,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));return t.hasOwnProperty("intervalTime")&&(t.intervalTime<0&&(t.intervalTime=0),this.intervalTime=t.intervalTime,delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndRecognizeInParallel")&&(this.captureAndRecognizeInParallel=t.captureAndRecognizeInParallel,delete t.captureAndRecognizeInParallel),await new Promise(((t,s)=>{let r=y._nextTaskID++;y._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack+="\n"+e.stack,s(t)}})),y._dlrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:e}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let s of e)t.push(this._cloneDecodeResults(s));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this.imgSource||this._bPauseScan)return y._onLog&&y._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));y._onLog&&y._onLog("======= once read ======="),y._onLog&&(this._timeStartRecognize=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this.imgSource&&(t=await this.imgSource.getImage(),!y.isDSImage(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let s=[];if(e){s=await this._recognize_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(s&&s.length){const{sx:r,sy:i,width:n,height:a,_sWidth:o,_sHeight:l}=e;t=s.map((e=>({lineResults:e.lineResults.map((e=>({location:JSON.parse(JSON.stringify(e.location))})))}))),y.recalculateResultLocation(t,r,i,o,l,n,a)}this._drawResults(t)}else t&&(s=await this._recognize_DSImage(t,{bScanner:!0,bCopyData:!1}));return s})().then((e=>{if(y._onLog&&y._onLog(e),this.dce&&this.captureAndRecognizeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const s=()=>{let s=0;if(t&&t.length){let r=Math.min(...e),i=Math.max(...t);r&&i&&(s=r-i)}else s=0;return s>0?s:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=s()+ +this.intervalTime}if((this.dce&&this.dce.isOpen()||this.imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead)t=!0;else if("unique"===this.bPlaySoundOnSuccessfulRead)for(let s of e)for(let e of s.lineResults)if(e.bUnduplicated){t=!0;break}t&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead)t=!0;else if("unique"===this.bVibrateOnSuccessfulRead)for(let s of e)for(let e of s.lineResults)if(e.bUnduplicated){t=!0;break}if(t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){let t=this._cloneDecodeResults(e);for(let e of t)for(let t of e.lineResults)t.bUnduplicated&&delete e.bUnduplicated;this.onImageRead(t)}if(this.onUniqueRead)for(let t of e)for(let e of t.lineResults)e.bUnduplicated&&this.onUniqueRead(e.text,this._cloneDecodeResults(e));if(this.onMRZRead){if(["passportMRZ","visaMRZ","MRZ"].includes(this.currentSettingsTemplate)){let t=this._cloneDecodeResults(e);for(let e of t){let t="",s=[];e.lineResults.length>=2&&(e.lineResults[e.lineResults.length-1].text.length>30&&e.lineResults.length>=2?(s.push(e.lineResults[e.lineResults.length-2]),s.push(e.lineResults[e.lineResults.length-1])):e.lineResults[e.lineResults.length-1].text.length<=30&&e.lineResults.length>=3&&(s.push(e.lineResults[e.lineResults.length-3]),s.push(e.lineResults[e.lineResults.length-2]),s.push(e.lineResults[e.lineResults.length-1])));for(let e of s)t.length>0&&(t+="\n"),t+=e.text;t.length>0&&this.onMRZRead(t,s)}}}if(this.onVINRead){if(["VIN","VIN_NA"].includes(this.currentSettingsTemplate)){let t=this._cloneDecodeResults(e);if(t.length){let s=0,r=!1;this._vinResultArrayTimeoutId&&clearTimeout(this._vinResultArrayTimeoutId);let i="";for(let e of t)for(let t of e.lineResults){if(18===t.characterResults.length){let e=t.characterResults[9].location.points[0].x-t.characterResults[8].location.points[1].x;e<2&&(e=2);let s=t.characterResults[1].location.points[0].x-t.characterResults[0].location.points[1].x,r=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,i=2===e?3:e;if(s-e>=i&&r-e<i)t.characterResults.shift();else if(r-e>=i&&s-e<i)t.characterResults.pop();else{t.characterResults[0].characterHConfidence>t.characterResults[17].characterHConfidence?t.characterResults.pop():t.characterResults.shift()}}else if(19===t.characterResults.length){let e=t.characterResults[10].location.points[0].x-t.characterResults[9].location.points[1].x;e<2&&(e=2);let s,r,i=t.characterResults[2].location.points[0].x-t.characterResults[1].location.points[1].x,n=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,a=2===e?3:e,o=!1,l=!1;if("1"===t.characterResults[1].characterH||"1"===t.characterResults[2].characterH||"1"===t.characterResults[16].characterH||"1"===t.characterResults[17].characterH){for(let e=9;e<t.characterResults.length;e++)if("1"!==t.characterResults[e].characterH){r=t.characterResults[e].location.points[1].x-t.characterResults[e].location.points[0].x;break}"1"===t.characterResults[1].characterH&&(s=r-(t.characterResults[1].location.points[1].x-t.characterResults[1].location.points[0].x)+3,o=!0),"1"===t.characterResults[2].characterH&&(s=r-(t.characterResults[2].location.points[1].x-t.characterResults[2].location.points[0].x)+3,o=!0),"1"===t.characterResults[16].characterH&&(s=r-(t.characterResults[16].location.points[1].x-t.characterResults[16].location.points[0].x)+3,l=!0),"1"===t.characterResults[17].characterH&&(s=r-(t.characterResults[17].location.points[1].x-t.characterResults[17].location.points[0].x)+3,l=!0)}if(i-e>=(o?s:a))t.characterResults.splice(0,2);else if(n-e>=(l?s:a))t.characterResults.splice(17,2);else{let e=t.characterResults[0].characterHConfidence+t.characterResults[1].characterHConfidence,s=t.characterResults[17].characterHConfidence+t.characterResults[18].characterHConfidence,r=t.characterResults[0].characterHConfidence+t.characterResults[18].characterHConfidence,i=Math.min(e,s,r);i===e?t.characterResults.splice(0,2):i===s?t.characterResults.splice(17,2):i===r&&(t.characterResults.pop(),t.characterResults.shift())}}for(let e of t.characterResults)i+=e.characterH}if(5===this._vinResultArray.length&&this._vinResultArray.shift(),this._vinResultArray.push(i),this._vinResultArray.length>=2)for(let t=0;t<this._vinResultArray.length;t++){for(let i=0;i<this._vinResultArray.length;i++)if(this._vinResultArray[t]===this._vinResultArray[i]&&(s++,2===s)){this.onVINRead(this._vinResultArray[t],e[0].lineResults[0]),r=!0;break}if(s=0,r)break}}else this._vinResultArrayTimeoutId=setTimeout((()=>{this._vinResultArray.shift()}),1e3)}}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),y._onLog&&y._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndRecognizeInParallel){if(this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,s=this.array_getFrameTimeCost;for(;s.length>=5;)s.shift();s.push(t)};t(e)}else this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e){if(!this.dce||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dlrDrawingLayer){if(!this.dce.isOpen())return;this._dlrDrawingLayer=this.dce.getDrawingLayer(2)}const t=this._dlrDrawingLayer;e||(e=[]);let s=this._arrPolygons,r=0;for(let i of e)for(let e of i.lineResults){let i,n=e.location.points;s[r]?(i=s[r],t.hasDrawingItem(i)||t.addDrawingItem(i),i.set("vertices",[{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}])):(i=new this._drawingItemNamespace.DT_Polygon([{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}]),t.addDrawingItem(i),s[r]=i),r++}for(let e=r;e<s.length;e++)t.removeDrawingItem(s[e]);t.renderAll()}_checkValidVIN(e){if(!e||17!=e.length)return!1;const t=(e=>{const t=new Map([["A",1],["B",2],["C",3],["D",4],["E",5],["F",6],["G",7],["H",8],["J",1],["K",2],["L",3],["M",4],["N",5],["P",7],["R",9],["S",2],["T",3],["U",4],["V",5],["W",6],["X",7],["Y",8],["Z",9],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9]]),s=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];let r=0;for(let i=0;i<e.length;i++){let n=t.get(e[i]);n&&(r+=n*s[i])}return r%11})(e);return t.toString()===e[8]}_checkValidMRP(e){if(!e||44!=e.length)return!1;const t=(e,t,s)=>{const r=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),i=[7,3,1];let n=0;for(let a=t,o=0;a<=s;a++){let t=r.get(e[a]);t&&(n+=t*i[o%3]),o++}return n%10},s=e.slice(0,10)+e.slice(13,20)+e.slice(21,43),r=t(e,0,8).toString(),i=t(e,13,18).toString(),n=t(e,21,26).toString(),a=t(e,28,41).toString(),o=t(s,0,s.length).toString();return r===e[9]&&i===e[19]&&n===e[27]&&a===e[42]&&o===e[43]}_checkValidMRV(e){if(!e||44!=e.length&&36!=e.length)return!1;const t=(e,t,s)=>{const r=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),i=[7,3,1];let n=0;for(let a=t,o=0;a<=s;a++){let t=r.get(e[a]);t&&(n+=t*i[o%3]),o++}return n%10},s=t(e,0,8).toString(),r=t(e,13,18).toString(),i=t(e,21,26).toString();return s===e[9]&&r===e[19]&&i===e[27]}async startScanning(e){if(!this.dce&&!this.imgSource)throw new Error("'imageSource' is not set. call 'setImageSource()' before 'startScanning()'.");if("closed"!=this._tempSolutionStatus)return;if(this._tempSolutionStatus="opening","opening"!=this._tempSolutionStatus)return;let t=null;return this.dce&&(this.dce.isOpen()?(e&&this.dce.appendAndShowUI(),t=JSON.parse(JSON.stringify(this.dce.playCallbackInfo))):t=await this.dce.open(e),this._bindUI(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"close"}),this._dceControler.clearUserDisiredValue({property:"ifShowScanRegionLaser"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())),"opening"==this._tempSolutionStatus?(this._bPauseScan=!1,this.dce&&this.dce.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._tempSolutionStatus="opened",t):void 0}stopScanning(e){this.dce&&(this._drawResults(null),this._unbindUI(),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",e))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._tempSolutionStatus="closed"}pauseScanning(e){if(e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.clearUserDisiredValue({property:"ifShowScanRegionLaser"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(!this.bDestroyed)return y._onLog&&y._onLog("destroy()"),this.bDestroyed=!0,(this.dce||"opening"===this._tempSolutionStatus)&&this.stopScanning(),this.setImageSource(null),new Promise(((e,t)=>{let s=y._nextTaskID++;y._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),y._dlrWorker.postMessage({type:"destroy",id:s,instanceID:this._instanceID})}))}}y._jsVersion="2.2.11",y._jsEditVersion="20220808",y._version="loading...(JS "+y._jsVersion+"."+y._jsEditVersion+")",y._license=g,y._sessionPassword=_,y.browserInfo=a,y._pLoad=new class extends Promise{constructor(e){let t,s;super(((e,r)=>{t=e,s=r})),this._s="pending",this.resolve=e=>{this.isPending&&(A(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",s(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,A(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const s=await t;e===this._task&&this.resolve(s)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}},y._workerName=`dlr-${y._jsVersion}.browser.worker.js`,y._engineResourcePath=u,y._licenseServer=[],y._deviceFriendlyName="",y._isShowRelRecognizeTimeInResults=!1,y._bWasmDebug=!1,y._bNeverShowDialog=!1,y._nextTaskID=0,y._taskCallbackMap=new Map,y._loadWasmStatus="unload",y._loadWasmCallbackArr=[],y.onResourcesLoadStarted=null,y.onResourcesLoadProgress=null,y.onResourcesLoaded=null,y._lastErrorCode=0,y._lastErrorString="",y._defaultUIElementURL="@engineResourcePath/dlr.ui.html",y._loadWasmErr=null,function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_AUTO=4]="GTM_AUTO",e[e.GTM_REV=2147483648]="GTM_REV",e[e.GTM_SKIP=0]="GTM_SKIP"}(S||(S={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_REV=2147483648]="RPM_REV",e[e.RPM_SKIP=0]="RPM_SKIP"}(w||(w={}));export{R as EnumDLRErrorCode,S as EnumDLRGrayscaleTransformationMode,m as EnumDLRImagePixelFormat,w as EnumDLRRegionPredetectionMode,y as LabelRecognizer};
import{Howl as e}from"dm-howler";const t="undefined"==typeof self;let s,r,i,n,a;if("undefined"!=typeof navigator&&(s=navigator,r=s.userAgent,i=s.platform,n=s.mediaDevices),!t){const e={Edge:{search:"Edg",verSearch:"Edg"},OPR:null,Chrome:null,Safari:{str:s.vendor,search:"Apple",verSearch:["Version","iPhone OS","CPU OS"]},Firefox:null,Explorer:{search:"MSIE",verSearch:"MSIE"}},t={HarmonyOS:null,Android:null,iPhone:null,iPad:null,Windows:{str:i,search:"Win"},Mac:{str:i},Linux:{str:i}};let n="unknownBrowser",o=0,l="unknownOS";for(let t in e){const s=e[t]||{};let i=s.str||r,a=s.search||t,l=s.verStr||r,c=s.verSearch||t;if(c instanceof Array||(c=[c]),-1!=i.indexOf(a)){n=t;for(let e of c){let t=l.indexOf(e);if(-1!=t){o=parseFloat(l.substring(t+e.length+1));break}}break}}for(let e in t){const s=t[e]||{};let i=s.str||r,n=s.search||e;if(-1!=i.indexOf(n)){l=e;break}}"Linux"==l&&-1!=r.indexOf("Windows NT")&&(l="HarmonyOS"),a={browser:n,version:o,OS:l}}t&&(a={browser:"ssr",version:0,OS:"ssr"});const o="undefined"!=typeof WebAssembly&&r&&!(/Safari/.test(r)&&!/Chrome/.test(r)&&/\(.+\s11_2_([2-6]).*\)/.test(r)),l=!("undefined"==typeof Worker),c=!(!n||!n.getUserMedia),h=async()=>{let e=!1;if(c)try{(await n.getUserMedia({video:!0})).getTracks().forEach((e=>{e.stop()})),e=!0}catch(e){}return e};"Chrome"===a.browser&&a.version>66||"Safari"===a.browser&&a.version>13||"OPR"===a.browser&&a.version>43||"Edge"===a.browser&&a.version;const u=(()=>{if(!t&&document.currentScript){let e=document.currentScript.src,t=e.indexOf("?");if(-1!=t)e=e.substring(0,t);else{let t=e.indexOf("#");-1!=t&&(e=e.substring(0,t))}return e.substring(0,e.lastIndexOf("/")+1)}return"./"})(),d=" is not allowed to change after `createInstance` or `loadWasm` is called.",g=!t&&document.currentScript&&(document.currentScript.getAttribute("data-license")||document.currentScript.getAttribute("data-productKeys")||document.currentScript.getAttribute("data-licenseKey")||document.currentScript.getAttribute("data-handshakeCode")||document.currentScript.getAttribute("data-organizationID"))||"",_=!t&&document.currentScript&&document.currentScript.getAttribute("data-sessionPassword")||"",f=e=>{if(null==e)e=[];else{e=e instanceof Array?[...e]:[e];for(let s=0;s<e.length;++s){if(!t){let t=document.createElement("a");t.href=e[s],e[s]=t.href}e[s].endsWith("/")||(e[s]+="/")}}return e},R=e=>e&&"object"==typeof e&&"function"==typeof e.then;class m extends Promise{constructor(e){let t,s;super(((e,r)=>{t=e,s=r})),this._s="pending",this.resolve=e=>{this.isPending&&(R(e)?this.task=e:(this._s="fulfilled",t(e)))},this.reject=e=>{this.isPending&&(this._s="rejected",s(e))},this.task=e}get status(){return this._s}get isPending(){return"pending"===this._s}get isFulfilled(){return"fulfilled"===this._s}get isRejected(){return"rejected"===this._s}get task(){return this._task}set task(e){let t;this._task=e,R(e)?t=e:"function"==typeof e&&(t=new Promise(e)),t&&(async()=>{try{const s=await t;e===this._task&&this.resolve(s)}catch(t){e===this._task&&this.reject(t)}})()}get isEmpty(){return null==this._task}}var p,S,A,w,y;function I(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&"getImage"in e}function L(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("width"in e&&("height"in e&&"pixelFormat"in e)))}function E(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("data"in e&&("region"in e&&("sx"in e&&("sy"in e&&("width"in e&&("height"in e&&("colorMode"in e&&("timeSpent"in e&&("timeStamp"in e&&("isCropped"in e&&("toCanvas"in e&&("_sWidth"in e&&("_sHeight"in e&&"_bUseWebGL"in e)))))))))))))}!function(e){e[e.IPF_BINARY=0]="IPF_BINARY",e[e.IPF_BINARYINVERTED=1]="IPF_BINARYINVERTED",e[e.IPF_GRAYSCALED=2]="IPF_GRAYSCALED",e[e.IPF_NV21=3]="IPF_NV21",e[e.IPF_RGB_565=4]="IPF_RGB_565",e[e.IPF_RGB_555=5]="IPF_RGB_555",e[e.IPF_RGB_888=6]="IPF_RGB_888",e[e.IPF_ARGB_8888=7]="IPF_ARGB_8888",e[e.IPF_RGB_161616=8]="IPF_RGB_161616",e[e.IPF_ARGB_16161616=9]="IPF_ARGB_16161616",e[e.IPF_ABGR_8888=10]="IPF_ABGR_8888",e[e.IPF_ABGR_16161616=11]="IPF_ABGR_16161616",e[e.IPF_BGR_888=12]="IPF_BGR_888"}(p||(p={})),function(e){e[e.OK=0]="OK",e[e.UNKNOWN=-1e4]="UNKNOWN",e[e.NO_MEMORY=-10001]="NO_MEMORY",e[e.NULL_POINTER=-10002]="NULL_POINTER",e[e.LICENSE_INVALID=-10003]="LICENSE_INVALID",e[e.LICENSE_EXPIRED=-10004]="LICENSE_EXPIRED",e[e.FILE_NOT_FOUND=-10005]="FILE_NOT_FOUND",e[e.FILETYPE_NOT_SUPPORTED=-10006]="FILETYPE_NOT_SUPPORTED",e[e.BPP_NOT_SUPPORTED=-10007]="BPP_NOT_SUPPORTED",e[e.IMAGE_READ_FAILED=-10012]="IMAGE_READ_FAILED",e[e.TIFF_READ_FAILED=-10013]="TIFF_READ_FAILED",e[e.PDF_READ_FAILED=-10021]="PDF_READ_FAILED",e[e.PDF_DLL_MISSING=-10022]="PDF_DLL_MISSING",e[e.RECOGNITION_TIMEOUT=-10026]="RECOGNITION_TIMEOUT",e[e.JSON_PARSE_FAILED=-10030]="JSON_PARSE_FAILED",e[e.JSON_TYPE_INVALID=-10031]="JSON_TYPE_INVALID",e[e.JSON_KEY_INVALID=-10032]="JSON_KEY_INVALID",e[e.JSON_VALUE_INVALID=-10033]="JSON_VALUE_INVALID",e[e.JSON_NAME_KEY_MISSING=-10034]="JSON_NAME_KEY_MISSING",e[e.JSON_NAME_VALUE_DUPLICATED=-10035]="JSON_NAME_VALUE_DUPLICATED",e[e.TEMPLATE_NAME_INVALID=-10036]="TEMPLATE_NAME_INVALID",e[e.PARAMETER_VALUE_INVALID=-10038]="PARAMETER_VALUE_INVALID",e[e.SET_MODE_ARGUMENT_ERROR=-10051]="SET_MODE_ARGUMENT_ERROR",e[e.GET_MODE_ARGUMENT_ERROR=-10055]="GET_MODE_ARGUMENT_ERROR",e[e.CHARACTER_MODEL_FILE_NOT_FOUND=-10100]="CHARACTER_MODEL_FILE_NOT_FOUND"}(S||(S={})),function(e){e[e.LST_MANUAL_SPECIFICATION=1]="LST_MANUAL_SPECIFICATION",e[e.LST_PREDETECTED_REGION=2]="LST_PREDETECTED_REGION",e[e.LST_BARCODE=4]="LST_BARCODE"}(A||(A={}));class b{constructor(){this._instanceID=void 0,this.oriCanvas=null,this.oriCanvasData=null,this._ifSaveOriginalImageInACanvas=!1,this.canvas=null,this._region=null,this._timeStartRecognize=null,this._timeEnterInnerDLR=null,this.recognizeRecords={},this.drawRegionsultRecords={},this.bDestroyed=!1,this._setWarnnedEx=new Set,this._lastErrorCode=0,this._lastErrorString="",this._lastInnerDecodeDuration=0,this.intervalTime=0,this._intervalGetVideoFrame=0,this._idCardUpperLine="",this.array_getFrameTimeCost=[],this.array_decodeFrameTimeCost=[],this._arrPolygons=[],this._bPauseScan=!1,this._intervalDetectVideoPause=1e3,this.captureAndRecognizeInParallel=!0,this._selMinLtr=null,this._optGotMinLtr=null,this._minLetter=0,this._soundSource="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",this.beepSound=new e({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}}),this.bPlaySoundOnSuccessfulRead=!1,this.bVibrateOnSuccessfulRead=!1,this.vibrateDuration=300,this.highlightFillStyle="rgba(254,180,32,0.3)",this.highlightStrokeStyle="rgba(254,180,32,0.9)",this._vinResultArray=[],this.currentSettingsTemplate="cppdefault",this._dce=null,this.imgSource=null,this._maxCvsSideLength=["iPhone","Android","HarmonyOS"].includes(b.browserInfo.OS)?2048:4096,this.presetVideoTemplateRegion={regionLeft:0,regionRight:100,regionTop:40,regionBottom:60,regionMeasuredByPercentage:!0},this._onMinLetterSelChange=async e=>{let t=e.target.value;if("got"===t)return;t=JSON.parse(t);let s=JSON.parse(await this.outputRuntimeSettingsToString());s.LabelRecognizerParameterArray[0].LineStringLengthRange=[t,999],s.TextAreaArray[0].LineStringLengthRange=[t,999],await this.updateRuntimeSettingsFromString(s)},this._promiseStartScan=null}static getVersion(){return this._version}static get license(){return this._license}static set license(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`license`"+d);s._license=t})(b,e)}static initLicense(e){b.license=e}static set sessionPassword(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`sessionPassword`"+d);s._sessionPassword=t})(b,e)}static get sessionPassword(){return this._sessionPassword}static async detectEnvironment(){return await(async()=>({wasm:o,worker:l,getUserMedia:c,camera:await h(),browser:a.browser,version:a.version,OS:a.OS}))()}static get engineResourcePath(){return this._engineResourcePath}static set engineResourcePath(e){if(!this._pLoad.isEmpty)throw new Error("`engineResourcePath` is not allowed to change after `createInstance` or `loadWasm` is called.");b._engineResourcePath=(e=>{if(null==e&&(e="./"),!t){let t=document.createElement("a");t.href=e,e=t.href}return e.endsWith("/")||(e+="/"),e})(e)}static get licenseServer(){return this._licenseServer}static set licenseServer(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`licenseServer`"+d);s._licenseServer=f(t)})(b,e)}static get deviceFriendlyName(){return this._deviceFriendlyName}static set deviceFriendlyName(e){((e,t)=>{const s=e;if(!s._pLoad.isEmpty)throw new Error("`deviceFriendlyName`"+d);s._deviceFriendlyName=t||""})(b,e)}get ifSaveOriginalImageInACanvas(){return this._ifSaveOriginalImageInACanvas}set ifSaveOriginalImageInACanvas(e){this._ifSaveOriginalImageInACanvas=e}getOriginalImageInACanvas(){return!this.oriCanvas&&this.oriCanvasData?this.oriCanvasData.toCanvas():this.oriCanvas}set region(e){this._region=e}get region(){return this._region}static isWasmLoaded(){return this._pLoad.isFulfilled}isContextDestroyed(){return this.bDestroyed}static get lastErrorCode(){return this._lastErrorCode}static get lastErrorString(){return this._lastErrorString}get lastErrorCode(){return this._lastErrorCode}get lastErrorString(){return this._lastErrorString}static recalculateResultLocation(e,t,s,r,i,n,a){if(e.length>0&&e[0].lineResults.length>0)for(let o of e)for(let e of o.lineResults){let o=e.location.points,l=n/r,c=a/i;o[0].x=o[0].x/l+t,o[1].x=o[1].x/l+t,o[2].x=o[2].x/l+t,o[3].x=o[3].x/l+t,o[0].y=o[0].y/c+s,o[1].y=o[1].y/c+s,o[2].y=o[2].y/c+s,o[3].y=o[3].y/c+s}}static get defaultUIElementURL(){var e;return null===(e=this._defaultUIElementURL)||void 0===e?void 0:e.replace("@engineResourcePath/",b.engineResourcePath)}static set defaultUIElementURL(e){this._defaultUIElementURL=e}_updateMinLtrSel(e){if(this._minLetter=e,this._optGotMinLtr){const t=e?`${e}+ letters`:"any letter";this._optGotMinLtr.innerText=t,this._selMinLtr&&this._optGotMinLtr.parentNode==this._selMinLtr&&(this._selMinLtr.value="got")}}get soundSource(){return this._soundSource}set soundSource(t){this._soundSource=t,this.beepSound=new e({src:[this._soundSource],onplayerror:(e,t)=>{console.warn(`Sound '${e}' playback failure: ${t}`)}})}get whenToPlaySoundforSuccessfulRead(){return!0===this.bPlaySoundOnSuccessfulRead?"frame":this.bPlaySoundOnSuccessfulRead?this.bPlaySoundOnSuccessfulRead:"never"}set whenToPlaySoundforSuccessfulRead(e){this.bPlaySoundOnSuccessfulRead="never"!==e&&e}get whenToVibrateforSuccessfulRead(){return!0===this.bVibrateOnSuccessfulRead?"frame":this.bVibrateOnSuccessfulRead?this.bVibrateOnSuccessfulRead:"never"}set whenToVibrateforSuccessfulRead(e){this.bVibrateOnSuccessfulRead="never"!==e&&e}set dce(e){this._dce=e}get dce(){return!this._dce||this._dce.isDisposed?null:this._dce}set maxCvsSideLength(e){this._maxCvsSideLength=e,this._dceControler&&this._dceControler.setDisiredValue(this,"maxCvsSideLength",e)}get maxCvsSideLength(){return this._maxCvsSideLength}async _registerDCEControler(){if(!this.dce)return;b._onLog&&b._onLog("_registerDCEControler()");const e=this.dce;this._dceControler=e._createControler();const t=this._dceControler;t.register(this),t.setDisiredValue(this,"refreshInterval",200),t.setDisiredValue(this,"maxCvsSideLength",this._maxCvsSideLength);try{ResizeObserver}catch(e){"ReferenceError"===e.name&&window&&(window.ResizeObserver=void 0)}const s=e.getUIElement(),r=this.dce.constructor;if("@engineResourcePath/dce.ui.html"===r._defaultUIElementURL)try{s?s===t._innerSetUI&&(await e.setUIElement(`${r.engineResourcePath}dce.ui.html`),t._innerSetUI=e.getUIElement()):(await e.setUIElement(`${r.engineResourcePath}dlr.ui.html`),t._innerSetUI=e.getUIElement())}catch(t){await e.setUIElement(r.defaultUIElementURL)}else s||await e.setUIElement(r.defaultUIElementURL);this.callbackCameraChange=()=>{this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackResolutionChange=()=>{this._drawResults(null),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0},this.callbackCameraClose=()=>{this.stopScanning(!0),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._bPauseScan=!1},this.callbackSingleFrameAcquired=async e=>{let t=await this._recognize_DCEFrame(e,{bCopyData:!1}),s=null;if(t&&t.length){const{sx:r,sy:i,width:n,height:a,_sWidth:o,_sHeight:l}=e;s=t.map((e=>({lineResults:e.lineResults.map((e=>({location:JSON.parse(JSON.stringify(e.location))})))}))),b.recalculateResultLocation(s,r,i,o,l,n,a)}this._drawResults(s),await this.clearMapDecodeRecord();for(let e of t)delete e.bUnduplicated;if(this.onImageRead&&this.dce.isOpen()&&!this._bPauseScan){let e=this._cloneDecodeResults(t);this.onImageRead(e)}if(this.onUniqueRead&&this.dce.isOpen()&&!this._bPauseScan)for(let e of t)for(let t of e.lineResults)this.onUniqueRead(t.text,this._cloneDecodeResults(t));if(this.onMRZRead&&this.dce.isOpen()&&!this._bPauseScan){if(["MRZ","passportMRZ","visaMRZ","idcardMRZ"].includes(this.currentSettingsTemplate)){let e=this._cloneDecodeResults(t);this._filterVideoModeMrzResult(e)}}if(this.onVINRead&&this.dce.isOpen()&&!this._bPauseScan){if(["VIN","VIN_NA"].includes(this.currentSettingsTemplate)){let e=this._cloneDecodeResults(t);if(e.length){let s="";for(let r of e)for(let e of r.lineResults){if(18===e.characterResults.length){e.characterResults[0].characterHConfidence>e.characterResults[17].characterHConfidence?e.characterResults.pop():e.characterResults.shift()}else if(19===e.characterResults.length){let t=e.characterResults[0].characterHConfidence+e.characterResults[1].characterHConfidence,s=e.characterResults[17].characterHConfidence+e.characterResults[18].characterHConfidence,r=e.characterResults[0].characterHConfidence+e.characterResults[18].characterHConfidence,i=Math.min(t,s,r);i===t?e.characterResults.splice(0,2):i===s?e.characterResults.splice(17,2):i===r&&(e.characterResults.pop(),e.characterResults.shift())}for(let t of e.characterResults)s+=t.characterH;this.onVINRead(s,t[0].lineResults[0])}}}}},e.on("cameraChange",this.callbackCameraChange),e.on("resolutionChange",this.callbackResolutionChange),e.on("cameraClose",this.callbackCameraClose),e.on("singleFrameAcquired",this.callbackSingleFrameAcquired)}_logoutDCEControler(){this.dce&&this._dceControler&&(b._onLog&&b._onLog("_logoutDCEControler()"),this._dceControler.logout(this),this.dce.off("cameraChange",this.callbackCameraChange),this.dce.off("resolutionChange",this.callbackResolutionChange),this.dce.off("cameraClose",this.callbackCameraClose),this.dce.off("singleFrameAcquired",this.callbackSingleFrameAcquired),this._dceControler=null,this._dlrDrawingLayer=null,this.dce=null)}async setImageSource(e,t){if(null==e)return this.imgSource=null,this._logoutDCEControler(),void(this._drawingItemNamespace=null);if(e&&e.isCameraEnhancer)this.dce=e,await this._registerDCEControler(),this.imgSource=null;else{if(!I(e))throw new Error("Invalid value.");this._logoutDCEControler(),this.imgSource=e}t&&t.resultsHighlightBaseShapes&&(this._drawingItemNamespace=t.resultsHighlightBaseShapes)}static async loadWasm(){if(this._pLoad.isEmpty){let{lt:e,l:t,ls:s,sp:r,rmk:i}=(e=>{const t=e;if(t._pLoad.isEmpty){let e,s,r=t._license||"",i=JSON.parse(JSON.stringify(t._licenseServer)),n=t._sessionPassword,a=0;if(r.startsWith("t")||r.startsWith("f"))a=0;else if(0===r.length||r.startsWith("P")||r.startsWith("L")||r.startsWith("Y")||r.startsWith("A"))a=1;else{a=2;const t=r.indexOf(":");if(-1!=t&&(r=r.substring(t+1)),r.startsWith("DLS2")){let t;try{let e=r.substring(4);e=atob(e),t=JSON.parse(e)}catch(e){throw new Error("Format Error: The license string you specified is invalid, please check to make sure it is correct.")}if(r=t.handshakeCode?t.handshakeCode:t.organizationID?t.organizationID:"","number"==typeof r&&(r=JSON.stringify(r)),0===i.length){let e=[];t.mainServerURL&&(e[0]=t.mainServerURL),t.standbyServerURL&&(e[1]=t.standbyServerURL),i=f(e)}!n&&t.sessionPassword&&(n=t.sessionPassword),e=t.remark}("200001"===r||r.startsWith("200001-"))&&(i&&i.length||(r="")),r||(a=1)}if(a&&(globalThis.crypto||(s="Please upgrade your browser to support online key."),globalThis.crypto.subtle||(s="Require https to use online key in this browser.")),s){if(1!==a)throw new Error(s);a=0,console.warn(s),t._lastErrorCode=-1,t._lastErrorString=s}return 1===a&&(r="",console.warn("Applying for a public trial license ...")),{lt:a,l:r,ls:i,sp:n,rmk:e}}throw new Error("Can't preprocess license again"+d)})(b);this._pLoad.task=async(n,o)=>{let l=b.engineResourcePath+b._workerName;b.engineResourcePath.startsWith(location.origin)||(l=await fetch(l).then((e=>e.blob())).then((e=>URL.createObjectURL(e)))),b._dlrWorker=new Worker(l),b._dlrWorker.onerror=e=>{let t=new Error(e.message);o(t)},b._dlrWorker.onmessage=async t=>{let s=t.data?t.data:t;switch(s.type){case"log":b._onLog&&b._onLog(s.message);break;case"load":{s.message&&(s.message=s.message.replace("(https://www.dynamsoft.com/purchase-center/)","(https://www.dynamsoft.com/store/dynamsoft-label-recognizer/#javascript)"));let t,r=!1;1===e&&(r=!0),s.success?(b._dlrWorker.onerror=null,b._version=s.version+"(JS "+b._jsVersion+"."+b._jsEditVersion+")",b._onLog&&b._onLog("load dlr worker success"),s.message&&console.warn(s.message)):(t=new Error(s.message),t.stack=s.stack+"\n"+t.stack,r||111==s.ltsErrorCode&&-1!=s.message.toLowerCase().indexOf("trial license")&&(r=!0)),r&&b.showDialog(s.success?"warn":"error",s.message),s.success?n():o(t);break}case"task":{let e=s.id,t=s.body;try{b._taskCallbackMap.get(e)(t),b._taskCallbackMap.delete(e)}catch(t){throw b._taskCallbackMap.delete(e),t}break}case"event":"resourcesLoadStarted"===s.body.type?b.onResourcesLoadStarted&&setTimeout((()=>b.onResourcesLoadStarted(s.body.resourcesPath)),0):"resourcesLoadProgress"===s.body.type?b.onResourcesLoadProgress&&setTimeout((()=>b.onResourcesLoadProgress(s.body.resourcesPath,{loaded:s.body.loaded,total:s.body.total})),0):"resourcesLoaded"===s.body.type&&b.onResourcesLoaded&&setTimeout((()=>b.onResourcesLoaded(s.body.resourcesPath)),0);break;default:b._onLog&&b._onLog(t)}},b._dlrWorker.postMessage({type:"loadWasm",engineResourcePath:b.engineResourcePath,bd:b._bWasmDebug,v:b._jsVersion,brtk:!!e,bptk:1===e,l:t,dm:location.origin.startsWith("http")?location.origin:"https://localhost",os:a,fn:b.deviceFriendlyName,ls:s,sp:r,rmk:i})}}await this._pLoad}static async showDialog(e,t){await(async(e,t,s)=>{if(!e._bNeverShowDialog)try{let r=await fetch(e.engineResourcePath+"dls.license.dialog.html");if(!r.ok)throw Error("Get license dialog fail. Network Error: "+r.statusText);let i=await r.text();if(!i.trim().startsWith("<"))throw Error("Get license dialog fail. Can't get valid HTMLElement.");let n=document.createElement("div");n.innerHTML=i;let a=[];for(let e=0;e<n.childElementCount;++e){let t=n.children[e];t instanceof HTMLStyleElement&&(a.push(t),document.head.append(t))}let o=1==n.childElementCount?n.children[0]:n;o.remove();let l,c,h,u,d,g=[o],_=o.children;for(let e of _)g.push(e);for(let e=0;e<g.length;++e)for(let t of g[e].children)g.push(t);for(let e of g)if(!l&&e.classList.contains("dls-license-mask"))l=e,e.addEventListener("click",(t=>{if(e==t.target){o.remove();for(let e of a)e.remove()}}));else if(!c&&e.classList.contains("dls-license-icon-close"))c=e,e.addEventListener("click",(()=>{o.remove();for(let e of a)e.remove()}));else if(!h&&e.classList.contains("dls-license-icon-error"))h=e,"error"!=t&&e.remove();else if(!u&&e.classList.contains("dls-license-icon-warn"))u=e,"warn"!=t&&e.remove();else if(!d&&e.classList.contains("dls-license-msg-content")){d=e;let t=s;for(;t;){let s=t.indexOf("["),r=t.indexOf("]",s),i=t.indexOf("(",r),n=t.indexOf(")",i);if(-1==s||-1==r||-1==i||-1==n){e.appendChild(new Text(t));break}s>0&&e.appendChild(new Text(t.substring(0,s)));let a=document.createElement("a"),o=t.substring(s+1,r);a.innerText=o;let l=t.substring(i+1,n);a.setAttribute("href",l),a.setAttribute("target","_blank"),e.appendChild(a),t=t.substring(n+1)}}document.body.appendChild(o)}catch(t){e._onLog&&e._onLog(t.message||t)}})(this,e,t)}static async createInstanceInWorker(){return await this.loadWasm(),await new Promise(((e,t)=>{let s=this._nextTaskID++;this._taskCallbackMap.set(s,(s=>{if(s.success)return e(s.instanceID);{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),this._dlrWorker.postMessage({type:"createInstance",id:s,bScanner:!1})}))}static async createInstance(e){let t=new b;return t._instanceID=await this.createInstanceInWorker(),e&&e.runtimeSettings&&t.updateRuntimeSettingsFromString(e.runtimeSettings),t}async recognize(e,t){let s;return b._onLog&&b._onLog("recognize(source: any, modelName?: string)"),b._onLog&&(this._timeStartRecognize=Date.now()),t=t||{},e instanceof Blob?s=await this._recognize_Blob(e,t):e instanceof ArrayBuffer?s=await this._recognize_ArrayBuffer(e,t):e instanceof Uint8Array||e instanceof Uint8ClampedArray?s=await this._recognize_Uint8Array(e,t):e instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?s=await this._recognize_Image(e,t):e instanceof HTMLCanvasElement?s=await this._recognize_Canvas(e,t):e instanceof HTMLVideoElement?s=await this._recognize_Video(e,t):"string"==typeof e?s="data:image/"==e.substring(0,11)?await this._recognize_Base64(e,t):await this._recognize_Url(e,t):E(e)?(t.bCopyData=!0,s=await this._recognize_DCEFrame(e,t)):L(e)?(t.bCopyData=!0,s=await this._recognize_DSImage(e,t)):s=await Promise.reject(TypeError("'_recognize(source, config)': Type of 'source' should be 'Blob', 'ArrayBuffer', 'Uint8Array', 'HTMLImageElement', 'HTMLCanvasElement', 'HTMLVideoElement', 'string(base64 with image mime)', 'string(url)' or 'object(dceFrame)'.")),this._filterResult(s)||s}async recognizeBase64String(e,t){let s={};t&&(s.modelName=t);let r=await this._recognize_Base64(e,s);return this._filterResult(r)||r}async recognizeUrl(e,t){let s={};t&&(s.modelName=t);let r=await this._recognize_Url(e,s);return this._filterResult(r)||r}async recognizeBuffer(e,t,s,r,i,n){let a;return b._onLog&&b._onLog("recognizeBuffer(buffer,width,height,stride,format)"),b._onLog&&(this._timeStartRecognize=Date.now()),e instanceof Uint8Array||e instanceof Uint8ClampedArray?a=await this._recognizeBuffer_Uint8Array(e,t,s,r,i,n):e instanceof ArrayBuffer?a=await this._recognizeBuffer_Uint8Array(new Uint8Array(e),t,s,r,i,n):e instanceof Blob&&(a=await this._recognizeBuffer_Blob(e,t,s,r,i,n)),this._filterResult(a)||a}_filterResult(e){if(!e.length)return e;if(["MRZ","passportMRZ","visaMRZ","idcardMRZ"].includes(this.currentSettingsTemplate)){const t=this._filterMrzResult(e);return t.length&&this._verifyCheckDigit(t[0].lineResults),t}["VIN","VIN_NA"].includes(this.currentSettingsTemplate)&&(this._filterVinResult(e),e.length&&this._verifyCheckDigit(e[0].lineResults))}_filterMrzResult(e){let t=[];if(0===e.length)return[];for(let s=0;s<e.length;s++){if(t.push(JSON.parse(JSON.stringify(e[s]))),t[s].lineResults=[],e[s].lineResults.length>=2){if(e[s].lineResults[e[s].lineResults.length-1].text.length>30&&e[s].lineResults.length>=2){for(let r=e[s].lineResults.length-2;r<e[s].lineResults.length;r++)t[s].lineResults.push(e[s].lineResults[r]);return t}if(e[s].lineResults[e[s].lineResults.length-1].text.length<=30&&e[s].lineResults.length>=3){for(let r=e[s].lineResults.length-3;r<e[s].lineResults.length;r++)t[s].lineResults.push(e[s].lineResults[r]);return t}return[]}return[]}}_filterVinResult(e){let t="";if(e.length)for(let s of e)for(let e of s.lineResults){if(18===e.characterResults.length){e.characterResults[0].characterHConfidence>e.characterResults[17].characterHConfidence?e.characterResults.pop():e.characterResults.shift()}else if(19===e.characterResults.length){let t=e.characterResults[0].characterHConfidence+e.characterResults[1].characterHConfidence,s=e.characterResults[17].characterHConfidence+e.characterResults[18].characterHConfidence,r=e.characterResults[0].characterHConfidence+e.characterResults[18].characterHConfidence,i=Math.min(t,s,r);i===t?e.characterResults.splice(0,2):i===s?e.characterResults.splice(17,2):i===r&&(e.characterResults.pop(),e.characterResults.shift())}for(let s of e.characterResults)t+=s.characterH;e.text=t}}_verifyCheckDigit(e){const t=this._getMrzType(e);e.length>=3&&["MRZ","idcardMRZ"].includes(this.currentSettingsTemplate)&&(this._idCardUpperLine=e[0].text);const s=e=>!!e&&(["MRZ","passportMRZ"].includes(this.currentSettingsTemplate)&&"passport"===t?/[0-9]/.test(e)?this._checkValidMRP(e):null:["MRZ","idcardMRZ"].includes(this.currentSettingsTemplate)&&"idcard"===t?/[0-9]/.test(e)?this._checkValidIDCard(e,this._idCardUpperLine):null:["MRZ","visaMRZ"].includes(this.currentSettingsTemplate)&&"visa"===t?/[0-9]/.test(e)?this._checkValidMRV(e):null:!!["VIN","VIN_NA"].includes(this.currentSettingsTemplate)&&this._checkValidVIN(e));for(let t of e)t.isCheckDigitMatched=s(t.text)}_getMrzType(e){const t=e[0].text.length,s=e.length,r=e[0].text[0],i=["A","C","I"].includes(r);return 44===t&&2===s&&"P"===r?"passport":44===t&&2===s&&"V"===r||36===t&&2===s&&"V"===r?"visa":36===t&&2===s&&i||30===t&&3===s&&i?"idcard":null}async _recognizeBuffer_Uint8Array(e,t,s,r,i,n){return await new Promise(((a,o)=>{let l=b._nextTaskID++;b._taskCallbackMap.set(l,(e=>{if(e.success){let t,s=b._onLog?Date.now():0;this._lastInnerDecodeDuration=e.duration;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return o(e)}if(b._onLog){let e=Date.now();b._onLog("DLR getting message from worker timestamp: "+s),b._onLog("From DLR starting recognizing to entering worker costs: "+(this._timeEnterInnerDLR-this._timeStartRecognize)),b._onLog("From DLR entering worker to returning message from worker costs: "+(s-this._timeEnterInnerDLR)),b._onLog("Handling results from DBR worker costs: "+(e-s)),b._onLog("Total recognize image costs: "+(e-this._timeStartRecognize))}return a(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,o(t)}})),b._onLog&&(this._timeEnterInnerDLR=Date.now()),b._onLog&&b._onLog("Sending buffer to worker timestamp:"+this._timeEnterInnerDLR),b._dlrWorker.postMessage({type:"recognizeByBuffer",id:l,instanceID:this._instanceID,body:{config:n,imageData:{bytes:e,length:r*s,width:t,height:s,stride:r,format:i}}},[e.buffer]),b._onLog&&n&&n.timeStamp&&b._onLog("Delay of recognizing image: "+(this._timeEnterInnerDLR-n.timeStamp))}))}async _recognizeBuffer_Blob(e,t,s,r,i,n){b._onLog&&b._onLog("_recognizeBuffer_Blob(buffer,width,height,stride,format)");const a=e.arrayBuffer?await e.arrayBuffer():await new Promise(((t,s)=>{let r=new FileReader;r.readAsArrayBuffer(e),r.onload=()=>{t(r.result)},r.onerror=()=>{s(r.error)}}));return await this._recognizeBuffer_Uint8Array(new Uint8Array(a),t,s,r,i,n)}async _recognizeFileInMemory_Uint8Array(e,t){return await new Promise(((s,r)=>{let i=b._nextTaskID++;b._taskCallbackMap.set(i,(e=>{if(e.success){let t;try{t=this._handleRetJsonString(e.decodeReturn)}catch(e){return r(e)}return s(t)}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,r(t)}})),b._dlrWorker.postMessage({type:"recognizeFileInMemory",id:i,instanceID:this._instanceID,body:{config:t,bytes:e}})}))}async _recognize_Blob(e,t){b._onLog&&b._onLog("_recognize_Blob(blob: Blob)");let s=null,r=null;if("undefined"!=typeof createImageBitmap)try{s=await createImageBitmap(e)}catch(e){}s||(r=await function(e){return new Promise(((t,s)=>{let r=URL.createObjectURL(e),i=new Image;i.dlrObjUrl=r,i.src=r,i.onload=()=>{URL.revokeObjectURL(r),t(i)},i.onerror=e=>{s(new Error("Can't convert blob to image : "+(e instanceof Event?e.type:e)))}}))}(e));let i=await this._recognize_Image(s||r,t);return s&&s.close(),i}async _recognize_ArrayBuffer(e,t){return await this._recognize_Blob(new Blob([e]),t)}async _recognize_Uint8Array(e,t){return await this._recognize_Blob(new Blob([e]),t)}async _recognize_Image(e,t){b._onLog&&b._onLog("_recognize_Image(image: HTMLImageElement|ImageBitmap)"),t=t||{};let s,r,i=e instanceof HTMLImageElement?e.naturalWidth:e.width,n=e instanceof HTMLImageElement?e.naturalHeight:e.height,a=Math.max(i,n);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;s=Math.round(i*e),r=Math.round(n*e)}else s=i,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const o=this.canvas;o.width===s&&o.height===r||(o.width=s,o.height=r),o.ctx2d||(o.ctx2d=o.getContext("2d",{willReadFrequently:!0}));return o.ctx2d.drawImage(e,0,0,i,n,0,0,s,r),e.dlrObjUrl&&URL.revokeObjectURL(e.dlrObjUrl),await this._recognize_Canvas(o,t)}async _recognize_Canvas(e,t){if(b._onLog&&b._onLog("_recognize_Canvas(canvas:HTMLCanvasElement)"),e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";if(0===e.width||0===e.height)throw Error("The width or height of the 'canvas' is 0.");this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=e,this.oriCanvasData=null);let s=(e.ctx2d||e.getContext("2d")).getImageData(0,0,e.width,e.height).data;return await this._recognizeBuffer_Uint8Array(s,e.width,e.height,4*e.width,p.IPF_ABGR_8888,t)}async _recognize_Video(e,t){if(b._onLog&&b._onLog("_recognize_Video(video)"),!(e instanceof HTMLVideoElement))throw TypeError("'_recognize_Video(video [, config] )': Type of 'video' should be 'HTMLVideoElement'.");if(e.crossOrigin&&"anonymous"!=e.crossOrigin)throw"cors";t=t||{};let s,r,i=e.videoWidth,n=e.videoHeight,a=Math.max(i,n);if(a>this._maxCvsSideLength){let e=this._maxCvsSideLength/a;s=Math.round(i*e),r=Math.round(n*e)}else s=i,r=n;this.canvas||(this.canvas=document.createElement("canvas"));const o=this.canvas;o.width===s&&o.height===r||(o.width=s,o.height=r),o.ctx2d||(o.ctx2d=o.getContext("2d"));return o.ctx2d.drawImage(e,0,0,i,n,0,0,s,r),await this._recognize_Canvas(o,t)}async _recognize_DCEFrame(e,t){if(b._onLog&&b._onLog("_recognize_DCEFrame(dceFrame)"),!E(e))return[];let s=[];this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,colorMode:e.colorMode,data:new Uint8Array(e.data),toCanvas:e.toCanvas});const{width:r,height:i,colorMode:n,timeStamp:a}=e;let o;o=t&&t.bCopyData?new Uint8Array(e.data):e.data;let l=null;if(t?(l=JSON.parse(JSON.stringify(t)),l.timeStamp=a):l={timeStamp:a},"grey"===n)s=await this._recognizeBuffer_Uint8Array(o,r,i,r,p.IPF_GRAYSCALED,l);else if("rgba"===n)s=await this._recognizeBuffer_Uint8Array(o,r,i,4*r,p.IPF_ABGR_8888,l);else{if("bgra"!==n)throw new Error(`Color mode '${n}' is not supported to recognize.`);s=await this._recognizeBuffer_Uint8Array(o,r,i,4*r,p.IPF_ARGB_8888,l)}return s}async _recognize_DSImage(e,t){if(b._onLog&&b._onLog("_recognize_DSImage(dsImage)"),!L(e))return null;this.ifSaveOriginalImageInACanvas&&(this.oriCanvas=null,this.oriCanvasData={width:e.width,height:e.height,pixelFormat:e.pixelFormat.toLowerCase(),data:new Uint8Array(e.data),toCanvas:function(){const e=document.createElement("canvas");let t;switch(e.width=this.width,e.height=this.height,this.pixelFormat){case"grey":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e/4],t[e+1]=this.data[e/4],t[e+2]=this.data[e/4],t[e+3]=255;break;case"rgb":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e],t[e+1]=this.data[e+1],t[e+2]=this.data[e+2],t[e+3]=255;break;case"bgr":t=new Uint8ClampedArray(this.width*this.height*4);for(let e=0;e<t.length;e+=4)t[e]=this.data[e],t[e+1]=this.data[e+1],t[e+2]=this.data[e+2],t[e+3]=255;break;case"rgba":case"bgra":t=new Uint8ClampedArray(this.data);break;default:throw new Error("The content of 2D Canvas is currently limited to the sRGB color space.")}const s=new ImageData(t,this.width,this.height);return e.getContext("2d").putImageData(s,0,0),e}});const{width:s,height:r}=e;let i,n,a,o=e.pixelFormat.toLowerCase();switch(i=t&&t.bCopyData?new Uint8Array(e.data):e.data,o){case"grey":a=p.IPF_GRAYSCALED,n=s;break;case"rgb":a=p.IPF_BGR_888,n=3*s;break;case"bgr":a=p.IPF_RGB_888,n=3*s;break;case"rgba":a=p.IPF_ABGR_8888,n=4*s;break;case"bgra":a=p.IPF_ARGB_8888,n=4*s;break;default:throw new Error("The pixel format is not supported to recognize.")}return await this._recognizeBuffer_Uint8Array(i,s,r,n,a,t)}async _recognize_Base64(e,t){if(b._onLog&&b._onLog("_recognize_Base64(base64Str)"),"string"!=typeof e&&"object"!=typeof e)return Promise.reject("'_recognize_Base64(base64Str, config)': Type of 'base64Str' should be 'string'.");"data:image/"==e.substring(0,11)&&(e=e.substring(e.indexOf(",")+1));{let s=atob(e),r=s.length,i=new Uint8Array(r);for(;r--;)i[r]=s.charCodeAt(r);return await this._recognize_Blob(new Blob([i]),t)}}async _recognize_Url(e,t){if(b._onLog&&b._onLog("_recognize_Url(url)"),"string"!=typeof e&&"object"!=typeof e)throw TypeError("'_recognize_Url(url, config)': Type of 'url' should be 'string'.");{const s=await new Promise(((t,s)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.send(),r.onloadend=async()=>{t(r.response)},r.onerror=()=>{s(new Error("Network Error: "+r.statusText))}}));return await this._recognize_Blob(s,t)}}async _recognize_FilePath(e,t){throw b._onLog&&b._onLog("_recognize_FilePath(path)"),Error("'_recognize_FilePath(path, config)': The method is only supported in node environment.")}async resetRuntimeSettings(){return this.region=null,this._updateMinLtrSel(0),await new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),b._dlrWorker.postMessage({type:"resetRuntimeSettings",id:s,instanceID:this._instanceID})}))}async updateRuntimeSettingsFromString(e,t=!1){let s=0;if("string"==typeof e)if((e=e.trim()).startsWith("{"))e=JSON.parse(e),t||(this.currentSettingsTemplate=null);else{if(e.length>50)throw new Error("Error: preset longer than 50 letters.");const t=e.toLowerCase().split("-");if(t.length>2)throw new Error(`Error: '${e}' is not supported.`);if(t.includes("numberletter"))s=3,this.currentSettingsTemplate="numberLetter";else if(t.includes("numberuppercase"))s=3,this.currentSettingsTemplate="numberUppercase";else if(t.includes("number"))s=3,this.currentSettingsTemplate="number";else if(t.includes("letter"))s=3,this.currentSettingsTemplate="letter";else if(t.includes("passportmrz"))s=44,this.currentSettingsTemplate="passportMRZ";else if(t.includes("visamrz"))s=36,this.currentSettingsTemplate="visaMRZ";else if(t.includes("idcardmrz"))s=30,this.currentSettingsTemplate="idcardMRZ";else if(t.includes("mrz"))s=30,this.currentSettingsTemplate="MRZ";else if(t.includes("vin_na"))s=17,this.currentSettingsTemplate="VIN_NA";else if(t.includes("vin"))s=17,this.currentSettingsTemplate="VIN";else{if(!t.includes("cppdefault"))throw new Error(`Error: '${e}' is not supported.`);this.currentSettingsTemplate="cppdefault"}if(t.includes("video")){if(!this.dce)throw new Error("'CameraEnhancer' instance is required through 'setImageSource()' when using the 'video' prefix template.");this.region=null,this.dce.setScanRegion(this.presetVideoTemplateRegion)}else this.region=null,this.dce&&((r=this.dce.getScanRegion())&&0===r.regionLeft&&100===r.regionRight&&40===r.regionTop&&60===r.regionBottom&&!0===r.regionMeasuredByPercentage)&&this.dce.setScanRegion(null)}else{if("object"!=typeof e)throw TypeError("'updateRuntimeSettingsFromString(settings)': Type of 'settings' should be 'string' or 'PlainObject'.");t||(this.currentSettingsTemplate=null)}var r;if("object"==typeof e){const t=e.ReferenceRegionArray[0].Localization,r=t.FirstPoint?{localizationSourceType:A[t.SourceType],location:{points:[{x:t.FirstPoint[0],y:t.FirstPoint[1]},{x:t.SecondPoint[0],y:t.SecondPoint[1]},{x:t.ThirdPoint[0],y:t.ThirdPoint[1]},{x:t.FourthPoint[0],y:t.FourthPoint[1]}]},regionMeasuredByPercentage:t.MeasuredByPercentage}:null;r&&function(e){return A.LST_MANUAL_SPECIFICATION==e.localizationSourceType&&1==e.regionMeasuredByPercentage&&JSON.stringify([{x:0,y:100},{x:100,y:0},{x:100,y:100},{x:0,y:100}])===JSON.stringify(e.location.points)}(r)?this.region=null:this.region=r;const i=e.LabelRecognizerParameterArray[0].LineStringLengthRange;s=i?i[0]:0}return this._updateMinLtrSel(s),await new Promise(((t,s)=>{let r=b._nextTaskID++;b._taskCallbackMap.set(r,(e=>{if(e.success){try{this._handleRetJsonString(e.updateReturn)}catch(e){s(e)}return t()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),b._dlrWorker.postMessage({type:"updateRuntimeSettingsFromString",id:r,instanceID:this._instanceID,body:{settings:e}})}))}async outputRuntimeSettingsToString(){return await new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success)return e(s.results);{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),b._dlrWorker.postMessage({type:"outputSettingsToString",id:s,instanceID:this._instanceID})}))}async updateReferenceRegionFromBarcodeResults(e){return await new Promise(((t,s)=>{let r=b._nextTaskID++;b._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),b._dlrWorker.postMessage({type:"updateReferenceRegionFromBarcodeResults",id:r,instanceID:this._instanceID,body:{dbrTextResults:e}})}))}static async appendCaffeModelBuffer(e,t){return await new Promise(((s,r)=>{let i=b._nextTaskID++;b._taskCallbackMap.set(i,(e=>{if(e.success){try{return s()}catch(e){r(e)}return s()}{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,r(t)}})),b._dlrWorker.postMessage({type:"appendCaffeModelBuffer",id:i,body:{name:e,folderUrl:t}})}))}static async eraseCaffeModelByName(e){return await new Promise(((t,s)=>{let r=b._nextTaskID++;b._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack=e.stack+"\n"+t.stack,s(t)}})),b._dlrWorker.postMessage({type:"eraseCaffeModelByName",id:r,body:{name:e}})}))}static async eraseAllCaffeModels(){return await new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),b._dlrWorker.postMessage({type:"eraseAllCaffeModels",id:s})}))}static LabelRecognizerException(e,t){let s,r=S.UNKNOWN;return"number"==typeof e?(r=e,s=new Error(t)):s=new Error(e),s.code=r,s}_handleRetJsonString(e){let t=S;if(e.results){const t=this.drawRegionsultRecords,s={};for(let r=0;r<e.results.length;r++){let i=e.results[r];if(null!=i.exception){this._setWarnnedEx.has(i.exception)||(this._setWarnnedEx.add(i.exception),console.warn(i.exception));let e={};i.exception.split(";").forEach((t=>{let s=t.indexOf(":");e[t.substring(0,s)]=t.substring(s+1)})),i.exception=e}for(let e of i.lineResults){const r=e.text;if(s[r]=1,e.bUnduplicated){(t[r]=t[r]||[]).push(e)}else t[r]&&(t[r]=[e])}}if(e.records){const r=this.recognizeRecords=e.records;for(let e in t)r[e]||delete t[e];for(let e in t)s[e]||(t[e]=[])}else this.recognizeRecords={},this.drawRegionsultRecords={};return this._lastErrorCode=e.exception,this._lastErrorString=e.description,e.exception&&!this._setWarnnedEx.has(e.description)&&(this._setWarnnedEx.add(e.description),e.exception==S.LICENSE_INVALID||e.exception==S.LICENSE_EXPIRED?console.error(e.description):console.warn(e.description)),e.results}if(e.exception==t.OK)return e.data;throw b.LabelRecognizerException(e.exception,e.description)}async clearMapDecodeRecord(){return await new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),b._dlrWorker.postMessage({type:"clearMapDecodeRecord",id:s,instanceID:this._instanceID})}))}_bindUI(){this.dce&&(this._selMinLtr=this.dce._selMinLtr,this._optGotMinLtr=this.dce._optGotMinLtr,this.dce.singleFrameMode||this._selMinLtr&&this._selMinLtr.addEventListener("change",this._onMinLetterSelChange),this._updateMinLtrSel(this._minLetter))}_unbindUI(){this._selMinLtr&&this._selMinLtr.removeEventListener("change",this._onMinLetterSelChange),this._selMinLtr=null,this._optGotMinLtr=null}async getScanSettings(){return await new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success){let t=s.results;return t.intervalTime=this.intervalTime,t.whenToPlaySoundforSuccessfulRead=this.whenToPlaySoundforSuccessfulRead,t.soundOnSuccessfullRead=this.soundSource,t.whenToVibrateforSuccessfulRead=this.whenToVibrateforSuccessfulRead,t.vibrateDuration=this.vibrateDuration,t.captureAndRecognizeInParallel=this.captureAndRecognizeInParallel,e(t)}{let e=new Error(s.message);return e.stack+="\n"+s.stack,t(e)}})),b._dlrWorker.postMessage({type:"getScanSettings",id:s,instanceID:this._instanceID})}))}async updateScanSettings(e){if(!e)return;const t=JSON.parse(JSON.stringify(e));return t.hasOwnProperty("intervalTime")&&(t.intervalTime<0&&(t.intervalTime=0),this.intervalTime=t.intervalTime,delete t.intervalTime),t.hasOwnProperty("whenToPlaySoundforSuccessfulRead")&&(this.whenToPlaySoundforSuccessfulRead=t.whenToPlaySoundforSuccessfulRead,delete t.whenToPlaySoundforSuccessfulRead),t.hasOwnProperty("soundOnSuccessfullRead")&&(this.soundSource=t.soundOnSuccessfullRead,delete t.soundOnSuccessfullRead),t.hasOwnProperty("whenToVibrateforSuccessfulRead")&&(this.whenToVibrateforSuccessfulRead=t.whenToVibrateforSuccessfulRead,delete t.whenToVibrateforSuccessfulRead),t.hasOwnProperty("vibrateDuration")&&(this.vibrateDuration=t.vibrateDuration,delete t.vibrateDuration),t.hasOwnProperty("captureAndRecognizeInParallel")&&(this.captureAndRecognizeInParallel=t.captureAndRecognizeInParallel,delete t.captureAndRecognizeInParallel),await new Promise(((t,s)=>{let r=b._nextTaskID++;b._taskCallbackMap.set(r,(e=>{if(e.success)return t();{let t=new Error(e.message);return t.stack+="\n"+e.stack,s(t)}})),b._dlrWorker.postMessage({type:"updateScanSettings",id:r,instanceID:this._instanceID,body:{settings:e}})}))}_cloneDecodeResults(e){if(e instanceof Array){let t=[];for(let s of e)t.push(this._cloneDecodeResults(s));return t}{let t=e;return JSON.parse(JSON.stringify(t,((e,t)=>"oriVideoCanvas"==e||"searchRegionCanvas"==e?void 0:t)))}}async _loopReadVideo(){if(this.bDestroyed)return this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),void this._drawResults(null);if(this.dce&&!this.dce.isOpen())return this._drawResults(null),void await this.clearMapDecodeRecord();if(!this.dce&&!this.imgSource||this._bPauseScan)return b._onLog&&b._onLog("Scan is paused, or imageSource is not set. Ask in 1s."),await this.clearMapDecodeRecord(),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this._intervalDetectVideoPause));b._onLog&&b._onLog("======= once read ======="),b._onLog&&(this._timeStartRecognize=Date.now());let e=null,t=null;if(this.dce)e=this._getVideoFrame();else if(this.imgSource&&(t=await this.imgSource.getImage(),!L(t)))throw new Error("Invalid DSImage.");if(!e&&!t)return b._onLog&&b._onLog("Get invalid frame."),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),void(this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),0));(async()=>{let s=[];if(e){s=await this._recognize_DCEFrame(e,{bScanner:!0,bCopyData:!1});let t=null;if(s&&s.length){const{sx:r,sy:i,width:n,height:a,_sWidth:o,_sHeight:l}=e;t=s.map((e=>({lineResults:e.lineResults.map((e=>({location:JSON.parse(JSON.stringify(e.location))})))}))),b.recalculateResultLocation(t,r,i,o,l,n,a)}this._drawResults(t)}else t&&(s=await this._recognize_DSImage(t,{bScanner:!0,bCopyData:!1}));return s})().then((e=>{if(b._onLog&&b._onLog(e),this.dce&&this.captureAndRecognizeInParallel){let e=this.array_decodeFrameTimeCost,t=this.array_getFrameTimeCost;const s=()=>{let s=0;if(t&&t.length){let r=Math.min(...e),i=Math.max(...t);r&&i&&(s=r-i)}else s=0;return s>0?s:0};(()=>{for(;e.length>=5;)e.shift();e.push(this._lastInnerDecodeDuration)})(),this._intervalGetVideoFrame=s()+ +this.intervalTime}if((this.dce&&this.dce.isOpen()||this.imgSource)&&!this._bPauseScan){if(this.bPlaySoundOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bPlaySoundOnSuccessfulRead||"frame"===this.bPlaySoundOnSuccessfulRead)t=!0;else if("unique"===this.bPlaySoundOnSuccessfulRead)for(let s of e)for(let e of s.lineResults)if(e.bUnduplicated){t=!0;break}t&&(this.beepSound.stop(),this.beepSound.play())}if(navigator.vibrate&&this.bVibrateOnSuccessfulRead&&e.length){let t=!1;if(!0===this.bVibrateOnSuccessfulRead||"frame"===this.bVibrateOnSuccessfulRead)t=!0;else if("unique"===this.bVibrateOnSuccessfulRead)for(let s of e)for(let e of s.lineResults)if(e.bUnduplicated){t=!0;break}if(t)try{navigator.vibrate(this.vibrateDuration)}catch(e){console.warn("Vibration not allowed. User interaction required: "+(e.message||e))}}if(this.onImageRead){let t=this._cloneDecodeResults(e);for(let e of t)for(let t of e.lineResults)t.bUnduplicated&&delete e.bUnduplicated;this.onImageRead(t)}if(this.onUniqueRead)for(let t of e)for(let e of t.lineResults)e.bUnduplicated&&this.onUniqueRead(e.text,this._cloneDecodeResults(e));if(this.onMRZRead){if(["MRZ","passportMRZ","visaMRZ","idcardMRZ"].includes(this.currentSettingsTemplate)){let t=this._cloneDecodeResults(e);this._filterVideoModeMrzResult(t)}}if(this.onVINRead){if(["VIN","VIN_NA"].includes(this.currentSettingsTemplate)){let t=this._cloneDecodeResults(e);if(t.length){let s=0,r=!1;this._vinResultArrayTimeoutId&&clearTimeout(this._vinResultArrayTimeoutId);let i="";for(let e of t)for(let t of e.lineResults){if(18===t.characterResults.length){let e=t.characterResults[9].location.points[0].x-t.characterResults[8].location.points[1].x;e<2&&(e=2);let s=t.characterResults[1].location.points[0].x-t.characterResults[0].location.points[1].x,r=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,i=2===e?3:e;if(s-e>=i&&r-e<i)t.characterResults.shift();else if(r-e>=i&&s-e<i)t.characterResults.pop();else{t.characterResults[0].characterHConfidence>t.characterResults[17].characterHConfidence?t.characterResults.pop():t.characterResults.shift()}}else if(19===t.characterResults.length){let e=t.characterResults[10].location.points[0].x-t.characterResults[9].location.points[1].x;e<2&&(e=2);let s,r,i,n=t.characterResults[1].location.points[0].x-t.characterResults[0].location.points[1].x,a=t.characterResults[18].location.points[0].x-t.characterResults[17].location.points[1].x,o=t.characterResults[2].location.points[0].x-t.characterResults[1].location.points[1].x,l=t.characterResults[17].location.points[0].x-t.characterResults[16].location.points[1].x,c=2===e?3:e;if("1"===t.characterResults[1].characterH||"1"===t.characterResults[2].characterH||"1"===t.characterResults[16].characterH||"1"===t.characterResults[17].characterH){for(let e=9;e<t.characterResults.length;e++)if("1"!==t.characterResults[e].characterH){i=t.characterResults[e].location.points[1].x-t.characterResults[e].location.points[0].x;break}"1"===t.characterResults[1].characterH&&(s=i-(t.characterResults[1].location.points[1].x-t.characterResults[1].location.points[0].x)+3),"1"===t.characterResults[2].characterH&&(s=i-(t.characterResults[2].location.points[1].x-t.characterResults[2].location.points[0].x)+3),"1"===t.characterResults[16].characterH&&(r=i-(t.characterResults[16].location.points[1].x-t.characterResults[16].location.points[0].x)+3),"1"===t.characterResults[17].characterH&&(r=i-(t.characterResults[17].location.points[1].x-t.characterResults[17].location.points[0].x)+3)}if(o-e>=(s||c)&&l-e<(r||c))t.characterResults.splice(0,2);else if(l-e>=(r||c)&&o-e<(s||c))t.characterResults.splice(17,2);else if(n>e&&a>e)t.characterResults.pop(),t.characterResults.shift();else{let e=t.characterResults[0].characterHConfidence+t.characterResults[1].characterHConfidence,s=t.characterResults[17].characterHConfidence+t.characterResults[18].characterHConfidence,r=t.characterResults[0].characterHConfidence+t.characterResults[18].characterHConfidence,i=Math.min(e,s,r);i===e?t.characterResults.splice(0,2):i===s?t.characterResults.splice(17,2):i===r&&(t.characterResults.pop(),t.characterResults.shift())}}for(let e of t.characterResults)i+=e.characterH}if(5===this._vinResultArray.length&&this._vinResultArray.shift(),this._vinResultArray.push(i),this._vinResultArray.length>=2)for(let t=0;t<this._vinResultArray.length;t++){for(let i=0;i<this._vinResultArray.length;i++)if(this._vinResultArray[t]===this._vinResultArray[i]&&(s++,2===s)){this.onVINRead(this._vinResultArray[t],e[0].lineResults[0]),r=!0;break}if(s=0,r)break}}else this._vinResultArrayTimeoutId=setTimeout((()=>{this._vinResultArray.shift()}),500)}}}this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.intervalTime?this._loopReadVideoTimeoutId=setTimeout((()=>{this._loopReadVideo()}),this.intervalTime):this._loopReadVideo()})).catch((e=>{this.dce&&this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),b._onLog&&b._onLog(e.message||e),this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),Math.max(this.intervalTime,1e3)),"platform error"==e.message||console.warn(e.message)}))}_filterVideoModeMrzResult(e){for(let t of e){let e="",s=[];t.lineResults.length>=2&&(t.lineResults[t.lineResults.length-1].text.length>30&&t.lineResults.length>=2?(s.push(t.lineResults[t.lineResults.length-2]),s.push(t.lineResults[t.lineResults.length-1])):t.lineResults[t.lineResults.length-1].text.length<=30&&t.lineResults.length>=3&&(s.push(t.lineResults[t.lineResults.length-3]),s.push(t.lineResults[t.lineResults.length-2]),s.push(t.lineResults[t.lineResults.length-1])));for(let t of s)e.length>0&&(e+="\n"),e+=t.text;e.length>0&&(this._verifyCheckDigit(s),this.onMRZRead(e,s))}}_getVideoFrame(){if(!this.dce)return null;let e;if(this.captureAndRecognizeInParallel){if(b._onLog&&b._onLog("Get frame in parallel."),this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",this._intervalGetVideoFrame),!this.dce.numberOfFramesInBuffer)return this._dceControler&&this._dceControler.setDisiredValue(this,"loopInterval",0),null;e=this.dce.getFrameFromBuffer();const t=e=>{if(!e)return;let t=e.timeSpent,s=this.array_getFrameTimeCost;for(;s.length>=5;)s.shift();s.push(t)};t(e)}else b._onLog&&b._onLog("Get frame in serial."),this._dceControler&&this._dceControler.setDisiredAction(this,"stopFetchingLoop"),e=this.dce.getFrame();return e}_drawResults(e){if(!this.dce||this._bPauseScan||!this._drawingItemNamespace||!this._drawingItemNamespace.DT_Polygon)return;if(!this._dlrDrawingLayer){if(!this.dce.isOpen())return;this._dlrDrawingLayer=this.dce.getDrawingLayer(2)}const t=this._dlrDrawingLayer;e||(e=[]);let s=this._arrPolygons,r=0;for(let i of e)for(let e of i.lineResults){let i,n=e.location.points;s[r]?(i=s[r],t.hasDrawingItem(i)||t.addDrawingItem(i),i.set("vertices",[{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}])):(i=new this._drawingItemNamespace.DT_Polygon([{x:n[0].x,y:n[0].y},{x:n[1].x,y:n[1].y},{x:n[2].x,y:n[2].y},{x:n[3].x,y:n[3].y}]),t.addDrawingItem(i),s[r]=i),r++}for(let e=r;e<s.length;e++)t.removeDrawingItem(s[e]);t.renderAll()}_checkValidVIN(e){if(!e||17!=e.length)return!1;const t=(e=>{const t=new Map([["A",1],["B",2],["C",3],["D",4],["E",5],["F",6],["G",7],["H",8],["J",1],["K",2],["L",3],["M",4],["N",5],["P",7],["R",9],["S",2],["T",3],["U",4],["V",5],["W",6],["X",7],["Y",8],["Z",9],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9]]),s=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];let r=0;for(let i=0;i<e.length;i++){let n=t.get(e[i]);n&&(r+=n*s[i])}return r%11})(e);return t.toString()===e[8]}_checkValidMRP(e){if(!e||44!=e.length)return!1;const t=(e,t,s)=>{const r=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),i=[7,3,1];let n=0;for(let a=t,o=0;a<=s;a++){let t=r.get(e[a]);t&&(n+=t*i[o%3]),o++}return n%10},s=e.slice(0,10)+e.slice(13,20)+e.slice(21,43),r=t(e,0,8).toString(),i=t(e,13,18).toString(),n=t(e,21,26).toString(),a=t(e,28,41).toString(),o=t(s,0,s.length).toString();return r===e[9]&&i===e[19]&&n===e[27]&&a===e[42]&&o===e[43]}_checkValidMRV(e){if(!e||44!=e.length&&36!=e.length)return!1;const t=(e,t,s)=>{const r=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),i=[7,3,1];let n=0;for(let a=t,o=0;a<=s;a++){let t=r.get(e[a]);t&&(n+=t*i[o%3]),o++}return n%10},s=t(e,0,8).toString(),r=t(e,13,18).toString(),i=t(e,21,26).toString();return s===e[9]&&r===e[19]&&i===e[27]}_checkValidIDCard(e,t){if(!e||30!=e.length&&36!=e.length)return!1;const s=(e,t,s)=>{const r=new Map([["<",0],["0",0],["1",1],["2",2],["3",3],["4",4],["5",5],["6",6],["7",7],["8",8],["9",9],["A",10],["B",11],["C",12],["D",13],["E",14],["F",15],["G",16],["H",17],["I",18],["J",19],["K",20],["L",21],["M",22],["N",23],["O",24],["P",25],["Q",26],["R",27],["S",28],["T",29],["U",30],["V",31],["W",32],["X",33],["Y",34],["Z",35]]),i=[7,3,1];let n=0;for(let a=t,o=0;a<=s;a++){let t=r.get(e[a]);t&&(n+=t*i[o%3]),o++}return n%10};if(30===e.length){if(t&&e===t){return s(e,5,13).toString()===e[14]}if(t&&e!==t){const r=`${t.substring(5,30)}${e.substring(0,7)}${e.substring(8,15)}${e.substring(18,29)}`;return s(r,0,r.length-1).toString()===e[29]}}else if(36===e.length){const t=s(e,0,8).toString(),r=s(e,13,18).toString(),i=s(e,21,26).toString(),n=`${e.substring(0,10)}${e.substring(13,20)}${e.substring(21,28)}`,a=s(n,0,n.length-1).toString();return t===e[9]&&r===e[19]&&i===e[27]&&a===e[35]}}async startScanning(e){if(!this.dce&&!this.imgSource)throw new Error("'imageSource' is not set. call 'setImageSource()' before 'startScanning()'.");if(this._promiseStartScan&&this._promiseStartScan.isPending)return this._promiseStartScan;this._promiseStartScan=new m;let t=null;if(this.dce){if(this.dce.isOpen())e&&this.dce.appendAndShowUI(),t=JSON.parse(JSON.stringify(this.dce.playCallbackInfo));else if(t=await this.dce.open(e),!this._promiseStartScan)return null;this._bindUI(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"close"}),this._dceControler.clearUserDisiredValue({property:"ifShowScanRegionLaser"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}return this._bPauseScan=!1,this.dce&&this.dce.singleFrameMode||(this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this._loopReadVideoTimeoutId=setTimeout((()=>{this.dce&&(this.dce.startFetchingLoop(),this._dceControler&&this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"})),this._loopReadVideo()}),0)),this._promiseStartScan.resolve(t),t}stopScanning(e){this.dce&&(this._drawResults(null),this._unbindUI(),this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"close",[e]))),this._bPauseScan=!0,this._loopReadVideoTimeoutId&&clearTimeout(this._loopReadVideoTimeoutId),this.array_decodeFrameTimeCost.length=0,this.array_getFrameTimeCost.length=0,this._intervalGetVideoFrame=0,this._promiseStartScan=null}pauseScanning(e){if(e&&e.keepResultsHighlighted||this._drawResults(null),this._bPauseScan=!0,this._vinResultArray=[],this.dce){if(this.dce.singleFrameMode)throw new Error("'pauseScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this._dceControler&&(this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!1),this.dce.ifShowScanRegionLaser||this.dce.hideScanRegionLaser(),this._dceControler.setDisiredAction(this,"stopFetchingLoop"))}}resumeScanning(){if(this._bPauseScan=!1,this.dce){if(this.dce.singleFrameMode)throw new Error("'resumeScanning()' is unavailable when property 'singleFrameMode' of the 'CameraEnhancer' instance is true.");this.dce.startFetchingLoop(),this._dceControler&&(this._dceControler.clearUserDisiredAction({user:this,actionName:"stopFetchingLoop"}),this._dceControler.clearUserDisiredValue({property:"ifShowScanRegionLaser"}),this._dceControler.setDisiredValue(this,"ifShowScanRegionLaser",!0),this.dce.ifShowScanRegionLaser&&this.dce.showScanRegionLaser())}}destroyContext(){if(!this.bDestroyed)return b._onLog&&b._onLog("destroy()"),this.bDestroyed=!0,!this.dce&&this._promiseStartScan||this.stopScanning(!0),this.setImageSource(null),new Promise(((e,t)=>{let s=b._nextTaskID++;b._taskCallbackMap.set(s,(s=>{if(s.success)return e();{let e=new Error(s.message);return e.stack=s.stack+"\n"+e.stack,t(e)}})),b._dlrWorker.postMessage({type:"destroy",id:s,instanceID:this._instanceID})}))}}b._jsVersion="2.2.30",b._jsEditVersion="20230725",b._version="loading...(JS "+b._jsVersion+"."+b._jsEditVersion+")",b._license=g,b._sessionPassword=_,b.browserInfo=a,b._pLoad=new m,b._workerName=`dlr-${b._jsVersion}.browser.worker.js`,b._engineResourcePath=u,b._licenseServer=[],b._deviceFriendlyName="",b._bWasmDebug=!1,b._nextTaskID=0,b._taskCallbackMap=new Map,b.onResourcesLoadStarted=null,b.onResourcesLoadProgress=null,b.onResourcesLoaded=null,b._lastErrorCode=0,b._lastErrorString="",b._defaultUIElementURL="@engineResourcePath/dlr.ui.html",function(e){e[e.GTM_INVERTED=1]="GTM_INVERTED",e[e.GTM_ORIGINAL=2]="GTM_ORIGINAL",e[e.GTM_AUTO=4]="GTM_AUTO",e[e.GTM_REV=2147483648]="GTM_REV",e[e.GTM_SKIP=0]="GTM_SKIP"}(w||(w={})),function(e){e[e.RPM_AUTO=1]="RPM_AUTO",e[e.RPM_GENERAL=2]="RPM_GENERAL",e[e.RPM_GENERAL_RGB_CONTRAST=4]="RPM_GENERAL_RGB_CONTRAST",e[e.RPM_GENERAL_GRAY_CONTRAST=8]="RPM_GENERAL_GRAY_CONTRAST",e[e.RPM_GENERAL_HSV_CONTRAST=16]="RPM_GENERAL_HSV_CONTRAST",e[e.RPM_REV=2147483648]="RPM_REV",e[e.RPM_SKIP=0]="RPM_SKIP"}(y||(y={}));export{S as EnumDLRErrorCode,w as EnumDLRGrayscaleTransformationMode,p as EnumDLRImagePixelFormat,y as EnumDLRRegionPredetectionMode,b as LabelRecognizer,E as isDCEFrame,L as isDSImage,I as isImageSource};
/// <reference types="node" />
import { DLRResult } from "../interface/dlrresult";
import { DLRLineResult } from "../interface/dlrlineresult";
import { DLRRuntimeSettings } from "../interface/dlrruntimesettings";
import { EnumDLRImagePixelFormat } from "../enum/enumdlrimagepixelformat";

@@ -47,3 +46,3 @@ import { LabelRecognizerException } from "../interface/labelrecognizerexception";

* ```html
* <script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/dlr.js" data-license="LICENSE"></script>
* <script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/dlr.js" data-license="LICENSE"></script>
* ```

@@ -53,3 +52,3 @@ */

static set license(license: string);
static initLicense(keys: string): void;
static initLicense(license: string): void;
private static _sessionPassword;

@@ -87,3 +86,3 @@ /**

* ```js
* Dynamsoft.DLR.LabelRecognizer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/";
* Dynamsoft.DLR.LabelRecognizer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/";
* await Dynamsoft.DLR.LabelRecognizer.loadWasm();

@@ -106,4 +105,2 @@ * ```

/** @ignore */
static _isShowRelRecognizeTimeInResults: boolean;
/** @ignore */
static _onLog: (message: any) => void;

@@ -113,9 +110,5 @@ /** @ignore */

/** @ignore */
static _bNeverShowDialog: boolean;
/** @ignore */
static _dlrWorker: Worker;
private static _nextTaskID;
private static _taskCallbackMap;
private static _loadWasmStatus;
private static _loadWasmCallbackArr;
/**

@@ -147,11 +140,6 @@ * Fire when resources start loading.

/** @ignore */
static isImageSource(value: any): boolean;
/** @ignore */
static isDSImage(value: any): boolean;
/** @ignore */
static isDCEFrame(value: any): boolean;
/** @ignore */
_instanceID: number;
private oriCanvas?;
/** @ignore */
private _ifSaveOriginalImageInACanvas;
private oriCanvasData?;
/**

@@ -165,7 +153,5 @@ * Whether to save the original image into canvas.

*/
private _ifSaveOriginalImageInACanvas;
get ifSaveOriginalImageInACanvas(): boolean;
set ifSaveOriginalImageInACanvas(value: boolean);
private oriCanvas?;
/** @ignore */
private oriCanvasData?;
/**

@@ -191,6 +177,2 @@ * The original canvas.

/**
* @ignore A callback when wasm download success in browser environment.
*/
static _onWasmDownloaded: () => void;
/**
* Determine if the decoding module has been loaded successfully.

@@ -239,3 +221,3 @@ * @category Initialize and Destroy

* ```js
* Dynamsoft.DLR.LabelRecognizer.defaultUIElementURL = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/dlr.ui.html";
* Dynamsoft.DLR.LabelRecognizer.defaultUIElementURL = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/dlr.ui.html";
* let pScanner = null;

@@ -255,2 +237,3 @@ * (async()=>{

private _vinResultArrayTimeoutId;
private _idCardUpperLine;
/** @ignore */

@@ -266,17 +249,5 @@ private array_getFrameTimeCost;

/** @ignore */
_cvsDrawArea: HTMLCanvasElement;
/** @ignore */
_divScanArea: any;
/** @ignore */
_divScanLight: any;
/** @ignore */
_selCam: any;
/** @ignore */
_selRsl: any;
/** @ignore */
_selMinLtr: any;
/** @ignore */
_optGotMinLtr: any;
/** @ignore */
_btnClose: any;
private _minLetter;

@@ -367,7 +338,2 @@ private _updateMinLtrSel;

highlightStrokeStyle: string;
/**
* @category UI
*/
highlightLineWidth: number;
private beingLazyDrawRegionsults;
private _vinResultArray;

@@ -390,7 +356,5 @@ private currentSettingsTemplate;

private presetVideoTemplateRegion;
private isPresetRegion;
private _registerDCEControler;
private _logoutDCEControler;
setImageSource(imgSource: ImageSource | CameraEnhancer, options?: any): Promise<void>;
private static _loadWasmErr;
/**

@@ -410,8 +374,8 @@ * Manually load and compile the decoding module. Used for preloading to avoid taking too long for lazy loading.

/**
* Create a `LabelRecognizer` object.
* ```
* let recognizer = await Dynamsoft.DLR.LabelRecognizer.createInstance();
* ```
* @category Initialize and Destroy
*/
* Create a `LabelRecognizer` object.
* ```
* let recognizer = await Dynamsoft.DLR.LabelRecognizer.createInstance();
* ```
* @category Initialize and Destroy
*/
static createInstance(config?: any): Promise<LabelRecognizer>;

@@ -462,8 +426,3 @@ /**

/**
* Recognize from the memory buffer containing image pixels in defined format.
* @ignore
*/
_recognizeBuffer_Uint8Array(buffer: Uint8Array | Uint8ClampedArray, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<any>;
/**
*
* Recognize from raw buffer.
* @param buffer

@@ -475,7 +434,17 @@ * @param width

* @param config
* @category Recognize
*/
recognizeBuffer(buffer: Uint8Array | Uint8ClampedArray | ArrayBuffer | Blob | Buffer, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<DLRResult[]>;
private _filterResult;
private _filterMrzResult;
private _filterVinResult;
private _verifyCheckDigit;
private _getMrzType;
/**
* Recognize from the memory buffer containing image pixels in defined format.
* @ignore
*/
_recognizeBuffer_Blob(buffer: Blob, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<any>;
_recognizeBuffer_Uint8Array(buffer: Uint8Array | Uint8ClampedArray, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<DLRResult[]>;
/**
* Recognize from raw buffer.
*
* @param buffer

@@ -487,43 +456,45 @@ * @param width

* @param config
* @category Recognize
* @ignore
*/
recognizeBuffer(buffer: Uint8Array | Uint8ClampedArray | ArrayBuffer | Blob | Buffer, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<any>;
_recognizeBuffer_Blob(buffer: Blob, width: number, height: number, stride: number, format: EnumDLRImagePixelFormat, config?: any): Promise<DLRResult[]>;
/** @ignore */
_recognizeFileInMemory_Uint8Array(bytes: Uint8Array, config?: any): Promise<DLRResult[]>;
private _recognize_Blob;
/**
* Filter VIN code results by confidence
*
* @param arrayBuffer
* @param config
* @ignore
*/
_filterVinResults(results: any): void;
_filterMrzResults(results: any): any;
/** @ignore */
_recognizeFileInMemory_Uint8Array(bytes: Uint8Array, config?: any): Promise<any>;
private _recognize_ArrayBuffer;
/**
* Gets current settings and save it into a struct.
* ```js
* let settings = await recognizer.getRuntimeSettings();
* settings.referenceRegion.location.points = [{x: 0,y: 40},{x: 100,y: 40},{x: 100,y: 60},{x: 0,y: 60}];
* await recognizer.updateRuntimeSettings(settings);
* ```
* @see [updateRuntimeSettings]()
* @category Runtime Settings
*
* @param uint8Array
* @param config
* @ignore
*/
getRuntimeSettings(): Promise<DLRRuntimeSettings>;
private static isRegionNormalPreset;
private _recognize_Uint8Array;
/**
* Update runtime settings with a given struct, or a string of
* `numberLetter`, `number`, `letter`, `numberUppercase`, `cppdefault`, `VIN`, `VIN_NA`, `passportMRZ`, `visaMRZ`, `MRZ`
* `video-numberLetter`, `video-number`, `video-letter`, `video-numberUppercase`, `video-cppdefault`, `video-VIN`, `video-VIN_NA`, `video-passportMRZ`, `video-visaMRZ`, `video-MRZ`
* to use preset settings for LabelRecognizer.
* The default settings for LabelRecognizer is `cppdefault`.
* ```js
* let settings = await recognizer.getRuntimeSettings();
* settings.referenceRegion.location.points = [{x: 0,y: 40},{x: 100,y: 40},{x: 100,y: 60},{x: 0,y: 60}];
* await recognizer.updateRuntimeSettings(settings);
* ```
* ```js
* await scanner.updateRuntimeSettings('numberLetter');
* ```
* @category Runtime Settings
*
* @param image
* @param config
* @ignore
*/
updateRuntimeSettings(settings: DLRRuntimeSettings | string): Promise<void>;
private _recognize_Image;
private _recognize_Canvas;
/**
* recognize video is not multi call safe in an instance, we reuse many thing for speed, so make sure wait util one finish then call next
* @param video
* @param config
* @ignore
*/
_recognize_Video(video: HTMLVideoElement, config?: any): Promise<DLRResult[]>;
/**@ignore */
_recognize_DCEFrame(dceFrame: DCEFrame, config?: any): Promise<DLRResult[]>;
/**@ignore */
_recognize_DSImage(dsImage: DSImage, config?: any): Promise<DLRResult[]>;
private _recognize_Base64;
private _recognize_Url;
private _recognize_FilePath;
/**
* Resets all parameters to default values.

@@ -556,3 +527,3 @@ * ```js

*/
updateRuntimeSettingsFromString(settings: any): Promise<void>;
updateRuntimeSettingsFromString(settings: any, bKeepTemplate?: Boolean): Promise<void>;
/**

@@ -602,75 +573,9 @@ * Gets current settings and save it into a json.

static eraseAllCaffeModels(): Promise<void>;
private _recognize_Blob;
/**
*
* @param arrayBuffer
* @param config
* @ignore
*/
private _recognize_ArrayBuffer;
/**
*
* @param uint8Array
* @param config
* @ignore
*/
private _recognize_Uint8Array;
/**
*
* @param image
* @param config
* @ignore
*/
private _recognize_Image;
private _recognize_Canvas;
/**
* recognize video is not multi call safe in an instance, we reuse many thing for speed, so make sure wait util one finish then call next
* @param video
* @param config
* @ignore
*/
_recognize_Video(video: HTMLVideoElement, config?: any): Promise<DLRResult[]>;
/**@ignore */
_recognize_DCEFrame(dceFrame: DCEFrame, config?: any): Promise<DLRResult[]>;
/**@ignore */
_recognize_DSImage(dsImage: DSImage, config?: any): Promise<DLRResult[]>;
private _recognize_Base64;
private _recognize_Url;
private _recognize_FilePath;
/** @ignore */
static LabelRecognizerException(ag0: any, ag1: any): LabelRecognizerException;
private _handleRetJsonString;
/**
* Sets the optional argument for a specified mode in Modes parameters.
* ```js
* await recognizer.setModeArgument("BinarizationModes", 0, "EnableFillBinaryVacancy", "1");
* ```
* @param modeName
* @param index
* @param argumentName
* @param argumentValue
* @category Runtime Settings
*/
setModeArgument(modeName: string, index: number, argumentName: string, argumentValue: string): Promise<void>;
/**
* Gets the optional argument for a specified mode in Modes parameters.
* ```js
* let argumentValue = await recognizer.getModeArgument("BinarizationModes", 0, "EnableFillBinaryVacancy");
* ```
* @param modeName
* @param index
* @param argumentName
* @category Runtime Settings
*/
getModeArgument(modeName: string, index: number, argumentName: string): Promise<string>;
private clearMapDecodeRecord;
/** @ignore */
_onCameraSelChange: () => void;
/** @ignore */
_onResolutionSelChange: () => void;
/** @ignore */
_onMinLetterSelChange: (ev: Event) => Promise<void>;
/** @ignore */
_onCloseBtnClick: () => void;
/** @ignore */
_bindUI(): void;

@@ -732,2 +637,3 @@ /** @ignore */

private _loopReadVideo;
private _filterVideoModeMrzResult;
/**

@@ -756,4 +662,16 @@ * start dce fetching frame loop, and get frame from frame queue

private _checkValidMRV;
private _tempSolutionStatus;
/**
* check if the two row or third row of id card mrz code is valid.
* check digit only exits in two row or third row in id card mrz.
* @ignore
*/
private _checkValidIDCard;
/**
* _promiseStartScan.status == "pending"; // camera is openning.
* _promiseStartScan.status == "fulfilled"; // camera is opened.
* _promiseStartScan == null; // camera is closed.
* @ignore
*/
private _promiseStartScan;
/**
* Bind UI, open the camera, start recognizing.

@@ -760,0 +678,0 @@ * ```js

@@ -11,3 +11,4 @@ import LabelRecognizer from "./class/labelrecognizer";

import { DSImage } from "./interface/dsimage";
export { LabelRecognizer, EnumDLRErrorCode, EnumDLRGrayscaleTransformationMode, EnumDLRImagePixelFormat, EnumDLRRegionPredetectionMode, ScanSettings, DLRResult, DLRLineResult, ImageSource, DSImage };
import { isImageSource, isDSImage, isDCEFrame } from "./utils";
export { LabelRecognizer, EnumDLRErrorCode, EnumDLRGrayscaleTransformationMode, EnumDLRImagePixelFormat, EnumDLRRegionPredetectionMode, ScanSettings, DLRResult, DLRLineResult, ImageSource, DSImage, isImageSource, isDSImage, isDCEFrame };
//# sourceMappingURL=dlr.d.ts.map

@@ -905,2 +905,4 @@ Legal Notices:

===================================================================================
===================================================================================
howler

@@ -914,2 +916,74 @@

===================================================================================
showdown
MIT License
Copyright (c) 2018,2021 ShowdownJS
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
===================================================================================
===================================================================================
highlight.js
BSD 3-Clause License
Copyright (c) 2006, Ivan Sagalaev.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
===================================================================================
===================================================================================
markdown-to-html-github-style(https://github.com/KrauseFx/markdown-to-html-github-style)
MIT License
Copyright (c) 2019 Felix Krause
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
===================================================================================
===================================================================================
localForage

@@ -916,0 +990,0 @@

{
"name": "dynamsoft-label-recognizer",
"version": "2.2.11",
"version": "2.2.30-beta07242257",
"description": "Dynamsoft Label Recognizer (DLR) is an SDK designed to recognize meaningful zonal text or symbols in an image (Label). Common scenarios include price tags in supermarkets, inventory labels in warehouses, VIN codes on car windshields, driver licenses, passports, visas, ID cards, etc.",
"files": [
"/dist",
"/dist/*.js",
"/dist/*.mjs",
"/dist/*.html",
"/dist/*.wasm",
"/dist/**/*.d.ts",
"/dist/**/*.data",
"/Api Reference.url",

@@ -24,2 +29,5 @@ "/legal.txt",

},
"~~publishConfig": {
"registry": "http://npm.scannerproxy.com/"
},
"license": "SEE LICENSE IN LICENSE",

@@ -50,3 +58,4 @@ "repository": {

"build-dev": "rollup -c --environment BUILD:development",
"build": "rollup -c --environment BUILD:production"
"build": "rollup -c --environment BUILD:production",
"update:readme": "node ./updateReadme.js"
},

@@ -61,10 +70,11 @@ "devDependencies": {

"detect-browser-node-ssr": "^2.0.0",
"dlsjs": "http://npm.dynamsoftwebtwain.com/dlsjs/-/dlsjs-1.0.22.tgz",
"dm-browser-info": "http://npm.dynamsoftwebtwain.com/dm-browser-info/-/dm-browser-info-1.0.5.tgz",
"dm-curscript-path": "http://npm.dynamsoftwebtwain.com/dm-curscript-path/-/dm-curscript-path-1.0.3.tgz",
"dynamsoft-camera-enhancer": "3.0.1",
"dlsjs": "2.0.2",
"@scannerproxy/browser-info": "^1.0.7",
"@scannerproxy/curscript-path": "^1.0.3",
"fs-extra": "8.1.0",
"highlight.js": "^9.15.6",
"mutable-promise": "1.1.13",
"rollup": "2.58.0",
"rollup-plugin-terser": "7.0.2",
"showdown": "^1.9.0",
"tslib": "2.3.1",

@@ -75,4 +85,3 @@ "typescript": "4.3.5"

"node-fetch": "^2.6.1",
"node-localstorage": "^2.1.6",
"dynamsoft-camera-enhancer": "3.0.1"
"node-localstorage": "^2.1.6"
},

@@ -91,4 +100,5 @@ "peerDependenciesMeta": {

"dependencies": {
"dm-howler": "^2.2.4"
"dm-howler": "^2.2.4",
"dynamsoft-camera-enhancer": "3.2.0"
}
}
<!--The original doc is hosted here => https://github.com/dynamsoft-docs/label-recognition-docs/blob/master/programming/javascript/user-guide.md -->
# Dynamsoft Label Recognizer for Your Website

@@ -47,4 +46,4 @@

<title>MRZ Reading</title>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/dlr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.0.1/dist/dce.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/dlr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.2.0/dist/dce.js"></script>
</head>

@@ -104,3 +103,3 @@

<a target="_blank" href="https://jsfiddle.net/DynamsoftTeam/kc35htxd/" title="Run via JSFiddle">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/jsfiddle.svg" alt="Run via JSFiddle" width="20" height="20" style="width:20px;height:20px;">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.2.0/icons/jsfiddle.svg" alt="Run via JSFiddle" width="20" height="20" style="width:20px;height:20px;">
</a>

@@ -163,3 +162,3 @@ </p>

You can also try the official sample for MRZ reading ([test in Github](https://dynamsoft.github.io/label-recognizer-javascript-samples/2.use-case/2.mrz-read-and-parse/) or [check the code](https://github.com/Dynamsoft/label-recognizer-javascript-samples/tree/main/2.use-case/2.mrz-read-and-parse)). This sample also demonstrates how to parse the MRZ text into meaningful fields.
You can also try the official sample for MRZ reading ([test in Github](https://dynamsoft.github.io/label-recognizer-javascript-samples/use-case/mrz-read-and-parse/) or [check the code](https://github.com/Dynamsoft/label-recognizer-javascript-samples/tree/main/use-case/mrz-read-and-parse)). This sample also demonstrates how to parse the MRZ text into meaningful fields.

@@ -179,4 +178,4 @@ ## Building your own page

```html
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/dlr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.0.1/dist/dce.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/dlr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.2.0/dist/dce.js"></script>
```

@@ -187,4 +186,4 @@

```html
<script src="https://unpkg.com/dynamsoft-label-recognizer@2.2.11/dist/dlr.js"></script>
<script src="https://unpkg.com/dynamsoft-camera-enhancer@3.0.1/dist/dce.js"></script>
<script src="https://unpkg.com/dynamsoft-label-recognizer@2.2.30/dist/dlr.js"></script>
<script src="https://unpkg.com/dynamsoft-camera-enhancer@3.2.0/dist/dce.js"></script>
```

@@ -201,4 +200,4 @@

```cmd
yarn add dynamsoft-label-recognizer@2.2.11
yarn add dynamsoft-camera-enhancer@3.0.1
yarn add dynamsoft-label-recognizer@2.2.30
yarn add dynamsoft-camera-enhancer@3.2.0
```

@@ -209,4 +208,4 @@

```cmd
npm install dynamsoft-label-recognizer@2.2.11
npm install dynamsoft-camera-enhancer@3.0.1
npm install dynamsoft-label-recognizer@2.2.30
npm install dynamsoft-camera-enhancer@3.2.0
```

@@ -217,4 +216,4 @@

```html
<script src="/dlr-js-2.2.11/dist/dlr.js"></script>
<script src="/dlr-js-2.2.11/dce/dist/dce.js"></script>
<script src="/dlr-js-2.2.30/dist/dlr.js"></script>
<script src="/dlr-js-2.2.30/dce/dist/dce.js"></script>
```

@@ -256,4 +255,4 @@

// The following code uses the jsDelivr CDN, feel free to change it to your own location of these files.
Dynamsoft.DLR.LabelRecognizer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.11/dist/";
Dynamsoft.DCE.CameraEnhancer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.0.1/dist/";
Dynamsoft.DLR.LabelRecognizer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-label-recognizer@2.2.30/dist/";
Dynamsoft.DCE.CameraEnhancer.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.2.0/dist/";
```

@@ -313,3 +312,3 @@

In some cases, a different camera might be required instead of the default one. Also, a different resolution might work better. To change the camera or the resolution, we use the `CameraEnhancer` object. Learn more [here](https://www.dynamsoft.com/camera-enhancer/docs/programming/javascript/api-reference/camera-control.html?ver=3.0.1&utm_source=npm&product=dlr&package=js).
In some cases, a different camera might be required instead of the default one. Also, a different resolution might work better. To change the camera or the resolution, we use the `CameraEnhancer` object. Learn more [here](https://www.dynamsoft.com/camera-enhancer/docs/programming/javascript/api-reference/camera-control.html?ver=3.2.0&utm_source=npm&product=dlr&package=js).

@@ -463,3 +462,3 @@ ```javascript

You can check out the detailed documentation about the APIs of the SDK at
[https://www.dynamsoft.com/label-recognition/docs/programming/javascript/api-reference/?ver=2.2.11&utm_source=npm&product=dlr&package=js](https://www.dynamsoft.com/label-recognition/docs/programming/javascript/api-reference/?ver=2.2.11&utm_source=npm&product=dlr&package=js).
[https://www.dynamsoft.com/label-recognition/docs/programming/javascript/api-reference/?ver=2.2.30&utm_source=npm&product=dlr&package=js](https://www.dynamsoft.com/label-recognition/docs/programming/javascript/api-reference/?ver=2.2.30&utm_source=npm&product=dlr&package=js).

@@ -485,3 +484,3 @@ ## System Requirements

This API is only required for in-browser video streaming. If a browser does not support this API, the [Single Frame Mode](https://www.dynamsoft.com/barcode-reader/programming/javascript/api-reference/BarcodeScanner.html?ver=9.2.12&utm_source=npm#singleframemode) will be used automatically. If the API exists but doesn't work correctly, the Single Frame Mode can be used as an alternative way to access the camera.
This API is only required for in-browser video streaming.

@@ -511,3 +510,3 @@ * `getSettings`

Learn about what are included in each release at [https://www.dynamsoft.com/label-recognition/docs/programming/javascript/release-notes/?ver=latest](https://www.dynamsoft.com/label-recognition/docs/programming/javascript/release-notes/?ver=latest).
Learn about what are included in each release at [https://www.dynamsoft.com/label-recognition/docs/web/programming/javascript/release-notes/?ver=latest](https://www.dynamsoft.com/label-recognition/docs/web/programming/javascript/release-notes/?ver=latest).

@@ -514,0 +513,0 @@ ## Next Steps

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc