@letsscrapedata/scraper
Version:
Web scraper that scraping web pages by LetsScrapeData XML template
1 lines • 233 kB
JavaScript
"use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=null!=mod?__create(__getProtoOf(mod)):{},__copyProps(!isNodeMode&&mod&&mod.__esModule?target:__defProp(target,"default",{value:mod,enumerable:!0}),mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),src_exports={};__export(src_exports,{performOneTask:()=>performOneTask,scraper:()=>scraper,setScraperLogFun:()=>setScraperLogFun,updateScraperConfig:()=>updateScraperConfig}),module.exports=__toCommonJS(src_exports);var import_controller=require("@letsscrapedata/controller"),import_proxy=require("@letsscrapedata/proxy"),import_utils=require("@letsscrapedata/utils"),pkgLog=import_utils.log;function setScraperLogFun(logFun){return"function"==typeof logFun&&(pkgLog=logFun,(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),!0)}async function logdbg(...args){await pkgLog(import_utils.LogLevel.DBG,...args)}async function loginfo(...args){await pkgLog(import_utils.LogLevel.INF,...args)}async function logwarn(...args){await pkgLog(import_utils.LogLevel.WRN,...args)}async function logerr(...args){await pkgLog(import_utils.LogLevel.ERR,...args)}(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),(0,import_utils.setLogLevel)(import_utils.LogLevel.DBG);var import_utils11=require("@letsscrapedata/utils"),import_xml2js_lsd=__toESM(require("xml2js-lsd"),1),defaultSplitOfParases="[\r\n\t,]+",defaultSeperatorOfParas="::",newLineChar="\n",defaultElementCfg={template:{tid:void 0,version:void 0,commited:!1},attrs:{},attr:{name:void 0,value:void 0},paras:{},para:{paraname:void 0,name:"",desc:"",uitype:"",defval:"",listid:"0",listparas:"",min:"",max:"",pattern:"",alert:""},element:{loc:void 0,source:"default",absolute:!1},iframe:{srcprefix:"",loc:""},templstr:{templ:void 0},elecontent_attr:{type:void 0,attrname:void 0,attrname2:"",attrname3:"",attrname4:"",trim:!1,pattern:"",boolattr:!1,multieles:!0,join:newLineChar,line:!1,absolute:!1},elecontent_imgbase64:{type:void 0},elecontent_innerhtml:{type:void 0},elecontent_length:{type:void 0},elecontent_outerhtml:{type:void 0},elecontent_text:{type:void 0,trim:!0,multieles:!0,join:newLineChar,line:!1,top:!1},decodefontsvg:{outtype:"text"},decodefontttf:{fflocs:"",intype:"outerhtml",outtype:"text"},ocrcfg_api:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},ocrcfg_tesseract:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},actions:{},action_api:{type:void 0,method:"GET",url:void 0,encodeuri:!1,session:!1,headerssource:"headers",headers:"",referer:"",proxy:!0,timeout:"30000",context:"default",data:"",datatype:"object",form:!1,path:"",diskcache:!1,cache:!0,tabname:"none",varname:"",errname:"normal",valerrname:"ignore",pattern:"",flags:"",id:"0"},action_break:{type:void 0,id:"0"},action_captcha:{type:void 0,try:"1",errname:"captchafailed",debug:!1,id:"0"},action_click:{type:void 0,wait:"-1",gen:!0,cap:!0,clicktype:"click",try:"1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,navigate:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",downloadpath:"",filename:"",pathvarname:"",id:"0"},action_continue:{type:void 0,id:"0"},action_misc:{type:void 0,id:"0"},misc_delsyncdbdata:{type:void 0,tids:"",retention:"2592000",minretention:"86400"},misc_extractdata:{type:void 0,name:void 0,datatableids:"",method:"put",paras:!0,execdata:!0,subtasks:!0,credits:!0},misc_getstatedata:{type:void 0,cookies:"new",localstorage:"new",headers:"none",userdata:"none"},action_exit:{type:void 0,errname:void 0,id:"0"},action_extract:{type:void 0,tabname:"dat_0000000000009911",id:"0"},action_extract_array:{type:void 0,subtype:void 0,list:void 0,requrl:"",subkeys:"",keys:"",tabname:"dat_0000000000009921",varname:"",idxname:"",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_script:{type:void 0,subtype:void 0,desc:"",base64:!1,html:!1,isolated:!0,tabname:"dat_0000000000009931",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_table:{type:void 0,subtype:void 0,orientation:"horizontal",check:!0,tabname:"dat_0000000000009941",keyformat:"camel",colnames:"",maxloops:"0",errname:"cfginvalid",id:"0"},column_element:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",errname:"ignore",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_property:{type:void 0,subkeys:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_ocr:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_subtask:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_templstr:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},action_goto:{type:void 0,url:void 0,reuse:!1,wait:"-1",encodeuri:!1,gen:!0,cap:!0,popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",headers:"",referer:"",id:"0"},action_hover:{type:void 0,try:"1",gen:!1,cap:!1,wait:"-1",errname:"cfginvalid",id:"0"},action_ifelse:{type:void 0,id:"0"},condition_element:{type:void 0},condition_else:{type:void 0},condition_templstr:{type:void 0},action_input:{type:void 0,content:void 0,enter:!1,replace:!1,gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_intercept_clear:{type:void 0,subtype:void 0},action_intercept_set:{type:void 0,subtype:void 0},request_abort:{type:void 0,method:"all",url:"",resourcetype:"image",postdata:""},response_cache:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",contenttype:"text",cache:!0,tabname:"none",requestheaders:!1,responseheaders:!1},request_data:{type:void 0,subkeys:void 0,value:void 0,datatype:void 0},request_header:{type:void 0,name:void 0,value:void 0},response_save:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",basedir:"response",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",extname:"",validextnames:"",params:"",encoding:"",tabname:"none"},response_statuscode:{type:void 0,codes:void 0,errname:void 0},action_loopdowhile_element:{type:void 0,subtype:void 0,iswhile:!1,varname:"",maxloops:"0",click:!1,navigate:!0,gen:!0,cap:!0,errname:"cfginvalid",wait:"-1",id:"0"},action_loopdowhile_templstr:{type:void 0,subtype:void 0,iswhile:!1,varname:"",maxloops:"0",id:"0"},action_loopfor:{type:void 0,from:void 0,to:void 0,step:"1",roundtype:"ceil",varname:void 0,maxloops:"0",errname:"ignore",id:"0"},action_loopineles:{type:void 0,varname:"",maxloops:"0",start:"1",end:"0",step:"1",errname:"ignore",id:"0"},action_loopinstr:{type:void 0,list:void 0,split:defaultSplitOfParases,varname:void 0,maxloops:"0",trim:!0,errname:"ignore",id:"0"},action_scroll_by:{type:void 0,subtype:void 0,height:"100",unit:"windowpct",maxtimes:"1",interval:"800",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_intoview:{type:void 0,subtype:void 0,gen:!1,cap:!1,errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_to:{type:void 0,subtype:void 0,height:"100",unit:"bodypct",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_select:{type:void 0,selecttype:"value",selectval:"",gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},dbquery:{dbname:void 0,sql:void 0,sqlparas:"",parasplit:defaultSeperatorOfParas,join:newLineChar},action_setvar_dbquery:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_element:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",try:"1",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},file:{path:void 0,encoding:"utf8"},action_setvar_file:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",proxy:!0,errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_get:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_ocr:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_subtask:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_templstr:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},subtask:{tid:void 0,parasstr:void 0,idx:"",minlen:"1",errname:"cfginvalid",popuppage:!1},action_subtask:{type:void 0,subtasks:"",sameasparent:!1,id:"0"},action_wait_element:{type:void 0,subtype:void 0,timeout:"30000",state:"visible",errname:"ignore",wait:"-1",id:"0"},action_wait_navigation:{type:void 0,subtype:void 0,timeout:"30000",waituntil:"load",url:"",errname:"cfginvalid",wait:"-1",id:"0"},action_wait_sleep:{type:void 0,subtype:void 0,minms:"5000",maxms:"10000",errname:"ignore",wait:"-1",id:"0"},fonts:{},fontsvg:{exloc:"head link[rel='stylesheet']",inloc:"",csmaptype:"general",bsfilter:""},fontttf:{exloc:"head link[rel='stylesheet']",inloc:"",minuc:"57344",maxuc:"63744",startidx:"-1",fsfilter:"",fufilter:"",parsetype:"none"},fontselector:{name:void 0,fontfamily:void 0},fontfamily:{name:void 0,fontcodes:void 0,fontchars:void 0},fontcodes:{name:void 0,codes:void 0},fontchars:{name:void 0,chars:void 0},myfuns:{},myfun:{name:void 0,desc:"",base64:!1},captcha_amazon:{type:void 0},captcha_funcaptcha:{type:void 0},captcha_geetest:{type:void 0},captcha_keycaptcha:{type:void 0},captcha_mtcaptcha:{type:void 0},captcha_recaptcha:{type:void 0,minscore:"0.3"},captcha_turnstile:{type:void 0},image_element:{type:void 0},comment_element:{type:void 0,attr:"textContent"},input_element:{type:void 0,enter:!1},submit_element:{type:void 0},check_result:{type:void 0,attr:"",failedstr:""},captcha_text:{type:void 0,case:!1,lang:"en",math:!1,maxlen:"0",minlen:"0",question:!1,space:!1,texttype:"any"},captcha_coordinate:{type:void 0,lang:"en",maxclicks:"0",minclicks:"1"},transform:{defaultval:"",usevar:!1},fun_c_attr:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0},fun_c_data:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0},fun_c_html:{type:void 0,subtype:void 0,loc:void 0,idx:"0"},fun_c_length:{type:void 0,subtype:void 0,loc:void 0},fun_c_text:{type:void 0,subtype:void 0,loc:void 0,idx:"-9999"},fun_ceil:{type:void 0},fun_closingsubstr:{type:void 0,openchar:void 0,startstr:"",position:"0"},fun_compress:{type:void 0,method:"gzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",level:"",memlevel:"",strategy:"",sourceencoding:"utf8",targetencoding:"base64"},fun_concat:{type:void 0,str1:void 0,str2:"",str3:"",str4:"",str5:""},fun_convertencoding:{type:void 0,sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_decompress:{type:void 0,method:"gunzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_decode:{type:void 0,str1:"",val1:"",str2:"",val2:"",str3:"",val3:"",str4:"",val4:"",str5:"",val5:"",defaultval:""},fun_floor:{type:void 0},fun_hashcode:{type:void 0,hashmethod:"MD5"},fun_includes:{type:void 0,searchstr:void 0},fun_insert:{type:void 0,str:void 0},fun_itemstoobj:{type:void 0,split:defaultSplitOfParases,kvsplit:":",keytrim:!0,keynows:!1,valuetrim:!0,valuenows:!1},fun_jsonparse:{type:void 0,key1:"",key2:"",key3:"",key4:"",key5:"",key6:"",keys:!1,length:!1,srctype:"json"},fun_length:{type:void 0},fun_matchall:{type:void 0,pattern:void 0,flags:"g",itemvalue:"match[0]",filter:"",start:"0",end:"0",resulttype:"all",join:newLineChar},fun_max:{type:void 0,split:defaultSplitOfParases},fun_min:{type:void 0,split:defaultSplitOfParases},fun_numeq:{type:void 0,num:void 0},fun_numge:{type:void 0,num:void 0},fun_numgt:{type:void 0,num:void 0},fun_numle:{type:void 0,num:void 0},fun_numlt:{type:void 0,num:void 0},fun_notincludes:{type:void 0,searchstr:void 0},fun_padend:{type:void 0,targetlen:void 0,padstr:" "},fun_padstart:{type:void 0,targetlen:void 0,padstr:" "},fun_parsefloat:{type:void 0},fun_parseint:{type:void 0},fun_randomarryidxes:{type:void 0,join:newLineChar},fun_replace:{type:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_round:{type:void 0},fun_setcomplement:{type:void 0,array2:void 0,split1:defaultSplitOfParases,split2:defaultSplitOfParases,sorttype:"nosort",valtype:"number",limit:"0",join:newLineChar},fun_setdifference:{type:void 0,array2:void 0,split1:defaultSplitOfParases,split2:defaultSplitOfParases,sorttype:"nosort",valtype:"number",limit:"0",join:newLineChar},fun_setintersection:{type:void 0,array2:void 0,split1:defaultSplitOfParases,split2:defaultSplitOfParases,sorttype:"nosort",valtype:"number",limit:"0",join:newLineChar},fun_setunion:{type:void 0,array2:void 0,split1:defaultSplitOfParases,split2:defaultSplitOfParases,sorttype:"nosort",valtype:"number",limit:"0",join:newLineChar},fun_slice:{type:void 0,beginidx:void 0,endidx:""},fun_shuffle:{type:void 0,split:defaultSplitOfParases},fun_sort:{type:void 0,split:defaultSplitOfParases,valtype:"number",sorttype:"asc",join:newLineChar},fun_specialconvert:{type:void 0,method:void 0,para1:"",para2:"",para3:"",para4:"",para5:""},fun_split:{type:void 0,split:defaultSplitOfParases,limit:"0",filter:"",start:"0",end:"0",resulttype:"all",val:"",insertstr:"",join:newLineChar},fun_streq:{type:void 0,str:void 0},fun_substrafter:{type:void 0,substr:void 0,position:"0",last:!1,include:!1},fun_substrbefore:{type:void 0,substr:void 0,position:"0",last:!1,include:!1},fun_tobool:{type:void 0},fun_tolowercase:{type:void 0},fun_tonum:{type:void 0},fun_touppercase:{type:void 0},fun_trim:{type:void 0},fun_trimend:{type:void 0},fun_trimstart:{type:void 0},fun_uniq:{type:void 0,split:defaultSplitOfParases,join:newLineChar},fun_urldelparams:{type:void 0,param1:void 0,param2:"",param3:""},fun_urldecode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urlencode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urlget:{type:void 0,attrorpath:void 0,hashmethod:"MD5",hostnameparts:"0",params:"",param:"",extname:"",validextnames:"",title:""},fun_urlsetparams:{type:void 0,param1:void 0,val1:"",param2:"",val2:"",param3:"",val3:"",replace:!0},fun_myfun:{type:void 0,name:void 0,arg1:"",arg2:"",arg3:"",arg4:"",arg5:""},get_addedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_content:{type:void 0},get_cookies:{type:void 0,urls:"",domain:"",name:"",path:"",value:!1},get_datetime:{type:void 0,format:"yyyy-MM-ddThh:mm:ss"},get_execedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_file:{type:void 0,url:void 0,path:"",basedir:"files",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",params:"",extname:"",validextnames:"",pathvarname:"",proxy:!0,headers:"",referer:"",setvar:!1},httpbrowser:{name:void 0,minversion:"0",maxversion:"0",httpversion:"0"},httpdevice:{device:void 0},httpheader:{name:void 0,source:"value",value:void 0,delete:!1},httpos:{os:void 0},get_httpheaders:{type:void 0,headermethod:"genLatestWindowsChrome",origheaders:"",browserlist:"",httpversion:"0"},get_mhtml:{type:void 0,path:"",basedir:"mhtml",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",pathvarname:""},get_pdf:{type:void 0,path:"",basedir:"pdf",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",scale:"1",displayheaderfooter:!1,headertemplate:"",footertemplate:"",printbackground:!1,landscape:!1,pageranges:"",format:"Letter",width:"",height:"",top:"",right:"",bottom:"",left:"",screen:!1,onepage:!1,hmargin:"",setvar:!1,pathvarname:""},get_queuedcntwithparas:{type:void 0,tid:void 0,parasstr:void 0,operator:"eq"},get_queuedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_random:{type:void 0,min:void 0,max:void 0},get_response:{type:void 0,requrl:"",idx:"-1",length:!1},get_screenshot:{type:void 0,basedir:"screenshot",path:"",extname:"png",quality:"-1",fullpage:!1,x:"0",y:"0",width:"0",height:"0",omitbackground:!1,setvar:!1,pathvarname:""},get_special:{type:void 0,method:void 0,parasstr:""},get_title:{type:void 0,aspath:!1},get_window:{type:void 0,key1:void 0,key2:"",key3:"",key4:"",key5:"",key6:"",keys:!1,length:!1}},import_controller2=require("@letsscrapedata/controller"),appConfig={XML_ATTR_KEY:"$$",XML_CHAR_KEY:"_",XML_CHILDREN_KEY:"children",GEN_CREDITS_BITS:16,GEN_CREDITS_AND:65535,CHECK_DNS_DOMAIN:"example.com",CHECK_POPUP_PAGE_TIMEOUT1:35e3,CHECK_POPUP_PAGE_TIMEOUT2:5e3,RESERVED_PARA_NAMES:["authInfo","inParas","sysParas"],EVENT_TYPES:{lsdPageClose:import_controller2.LsdPageEvent.PAGE_CLOSE,lsdPagePopup:import_controller2.LsdPageEvent.PAGE_POPUP,lsdScraperPopup:"lsdScraperPopup",taskComplete:"taskComplete"},OPERATE_ACTIONS:["click","goto","hover","input","scroll","select","wait","captcha"],performOneTask:console.log,cfg:{exitWhenCompleted:!1,useParasstrInXmlIfNeeded:!1,loadUnfinishedTasks:!1,loadFailedTasksInterval:0,baseDir:"",baseDownloadDir:"",baseFileDir:"",templateDir:"",taskDir:"",exportsDir:"",inputFileDirPart:"LetsScrapeData",useStealthPlugin:!1,browserControllerType:"patchright",browserType:"chromium",lsdLaunchOptions:{headless:!1,geoip:!0},lsdConnectOptions:{browserUrl:""},browserConfigs:[],captcha:{clientKey:"",captchas:[]},maxConcurrency:1,readCode:"",templateParas:[],urlPrefix:"https://api.letsscrapedata.com/nologin",totalMaxConcurrency:10,minMiliseconds:2e3,moveDataWhenStart:!1,dataFileFormat:"jsonl",columnSeperator:"::"}},TaskParser=class _TaskParser{static#applyDefaultElementCfg(cfg,parentEleName){try{if(!cfg||!parentEleName)throw new Error(`##te Invalid paras, parentEleName ${parentEleName} in _applyDefaultElementCfg`);if("object"!=typeof cfg)return!0;const aKey=appConfig.XML_ATTR_KEY,cKey=appConfig.XML_CHILDREN_KEY;cfg[aKey]||(cfg[aKey]={});let defaultCfgName=parentEleName;cfg[aKey].type&&(defaultCfgName=defaultCfgName+"_"+cfg[aKey].type),cfg[aKey].subtype&&(defaultCfgName=defaultCfgName+"_"+cfg[aKey].subtype);const defaultEleCfg=defaultElementCfg[defaultCfgName];if(!defaultEleCfg)throw new Error(`##te No default Cfg for eleName ${defaultCfgName} in _applyDefaultElementCfg`);const eleJsonCfg=Object.assign({},defaultEleCfg);if(Object.keys(defaultEleCfg).forEach(attrName=>{let attrVal=cfg[aKey][attrName];if("boolean"==typeof eleJsonCfg[attrName])"true"===attrVal||""===attrVal?eleJsonCfg[attrName]=!0:"false"===attrVal&&(eleJsonCfg[attrName]=!1);else if(attrVal||""===attrVal)eleJsonCfg[attrName]=attrVal;else if(void 0===eleJsonCfg[attrName])throw new Error(`##te Attribute ${attrName} of Element ${defaultCfgName} is undefined`)}),cfg[aKey]=eleJsonCfg,!cfg[cKey])return!0;const childKeys=Array.from(Object.keys(cfg[cKey]));for(const childEleName of childKeys){const childs=cfg[cKey][childEleName];1===childs.length&&""===childs[0]?cfg[cKey][childEleName]=[]:childs.forEach(cfg2=>_TaskParser.#applyDefaultElementCfg(cfg2,childEleName))}return!0}catch(err){throw logerr(`##te Error parentEleName ${parentEleName} in _applyDefaultElementCfg`),new Error(err)}}static async convertXmlToJson(xmlStr,defaultCfgFlag=!0){try{const getTagName=function(name){const idx=name.indexOf("_");return idx>0?name.slice(0,idx):name},options={attrkey:appConfig.XML_ATTR_KEY,charkey:appConfig.XML_CHAR_KEY,childkey:appConfig.XML_CHILDREN_KEY,explicitChildren:!0,tagNameProcessors:[getTagName]},cKey=appConfig.XML_CHILDREN_KEY,root=await import_xml2js_lsd.default.parseStringPromise(xmlStr,options);if(!(root&&root.template&&root.template[cKey]&&Array.isArray(root.template[cKey].actions)))throw new Error(`##te Invalid XML config string: ${xmlStr}`);return defaultCfgFlag&&_TaskParser.#applyDefaultElementCfg(root.template,"template"),root.template}catch(err){throw logerr("##te Exeception in convertXmlToJson"),logerr(`##te xmlCfgStr: ${xmlStr}`),new Error(err)}}static getPartOfJsonCfg(jsonCfg,partName,optional=!1){try{const ret=jsonCfg[appConfig.XML_CHILDREN_KEY][partName][0];return ret||null}catch(err){if(optional)return null;throw logerr(`##te Exeception when try to get ${partName} in getPartOfJsonCfg`),new Error(err)}}static#getAttrCfgsFromJsonCfg(jsonCfg){try{const attrs=_TaskParser.getPartOfJsonCfg(jsonCfg,"attrs");return!Array.isArray(attrs?.children?.attr)||attrs.children.attr.length<=0?[]:attrs.children.attr.map(a=>a[appConfig.XML_ATTR_KEY])}catch(err){return logerr(err),[]}}static getParaCfgsFromJsonCfg(jsonCfg){try{const paras=_TaskParser.getPartOfJsonCfg(jsonCfg,"paras");return!Array.isArray(paras?.children?.para)||paras.children.para.length<=0?[]:paras.children.para.map(p=>p[appConfig.XML_ATTR_KEY])}catch(err){return logerr(err),[]}}static getMyfunCfgsFromJsonCfg(jsonCfg){try{const myfuns=_TaskParser.getPartOfJsonCfg(jsonCfg,"myfuns",!0);return!Array.isArray(myfuns?.children?.myfun)||myfuns.children.myfun.length<=0?[]:myfuns.children.myfun.map(p=>Object.assign({},p[appConfig.XML_ATTR_KEY],{script:p[appConfig.XML_CHAR_KEY]}))}catch(err){return logerr(err),[]}}static getAttrsInXml(jsonCfg){const attrConfigs=_TaskParser.#getAttrCfgsFromJsonCfg(jsonCfg),attrsInXml={};return attrConfigs.forEach(attrConfig=>attrsInXml[attrConfig.name]=attrConfig.value),attrsInXml}static#getAllActionsOfType(actions,actionType){const extracts=[],cKey=appConfig.XML_CHILDREN_KEY;for(const action of actions)if(action?.[appConfig.XML_ATTR_KEY]?.type===actionType)extracts.push(action);else if(action&&action[cKey]&&(action[cKey].action||action[cKey].condition)){_TaskParser.#getAllActionsOfType(action[cKey].action?action[cKey].action:action[cKey].condition,actionType).forEach(act=>{extracts.push(act)})}return extracts}static getCaptchTypes(jsonCfg){const cKey=appConfig.XML_CHILDREN_KEY,rootActions=jsonCfg[cKey].actions[0][cKey].action,captchaCfgs=_TaskParser.#getAllActionsOfType(rootActions,"captcha"),captchaTypes=[];for(const captchaCfg of captchaCfgs){const captchas=captchaCfg[appConfig.XML_CHILDREN_KEY]?.captcha;Array.isArray(captchas)&&captchas.forEach(cfg=>{const captchaType=cfg[appConfig.XML_ATTR_KEY].type;captchaType&&captchaTypes.push(captchaType)})}return captchaTypes}static getInParas(parasStr,paraCfgs=[],splitStr="::"){const inParas={},parts=parasStr.split("@@"),prefixes=["para","apara","rpara"];for(let idx=0;idx<3;idx++){let prefix=prefixes[idx],paraNum=paraCfgs.filter(p=>p.paraname.startsWith(prefix)).length;if(parts.length>idx&&parts[idx].length>0){let paras=parts.length>idx&&parts[idx].length>0?parts[idx].split(splitStr):[];for(let i=1;i<=paras.length;i++)inParas[`${prefix}${i}`]=paras[i-1];for(let i=paras.length+1;i<=paraNum;i++)inParas[`${prefix}${i}`]=""}}return inParas}},fs=__toESM(require("fs"),1),path=__toESM(require("path"),1),import_utils2=require("@letsscrapedata/utils"),TemplateManagerInScraper=class _TemplateManagerInScraper{static#templateMap=new Map;static#failedTempateIdSet=new Set;static#getReadCode(templateId){const cfg=appConfig.cfg.templateParas.find(tmc=>tmc.templateId===templateId);return cfg?.readCode?cfg.readCode:appConfig.cfg.readCode}static async#getTemplateFromLocal(templateId,xmlStr){try{if(!xmlStr){if(!appConfig.cfg.templateDir)return null;const filenames=await(0,import_utils2.filesInDir)(appConfig.cfg.templateDir,"general",`tid${templateId}_`,"xml");let filename=1===filenames.length?filenames[0]:`tid${templateId}.xml`;filename=path.join(appConfig.cfg.templateDir,filename),xmlStr=fs.readFileSync(filename,"utf8")}if(!xmlStr)return null;return{templateId:templateId,domainId:1,defaultElementSource:"browser",maxExecutionDuration:600,configDetail:xmlStr}}catch(err){return null}}static async#getTemplateFromServer(templateId,code){try{if(_TemplateManagerInScraper.#failedTempateIdSet.has(templateId))return null;let url=`${appConfig.cfg.urlPrefix}/template`;url=`${url}?tid=${templateId}&code=${code}`;const response=await fetch(url);if(200!==response.status)return 403===response.status?logwarn(`Failed to get template ${templateId}: No privilege`):logwarn(`Failed to get template ${templateId}, status: ${response.status}`),_TemplateManagerInScraper.#failedTempateIdSet.add(templateId),null;const json=await response.json();if(!json||0!==json.code||!json.data)return logwarn(`Failed to get template ${templateId}: ${json.message}`),null;if(json.data.templateId!==templateId)return logerr(`Different templateId ${templateId} / ${json.templateId}`),null;const{domainId:domainId=0,defaultElementSource:defaultElementSource,configDetail:configDetail="",maxExecutionDuration:maxExecutionDuration}=json.data;if(!configDetail)return logerr(`Invalid content in template ${templateId}`),null;return{templateId:templateId,domainId:domainId,defaultElementSource:defaultElementSource,maxExecutionDuration:maxExecutionDuration,configDetail:configDetail}}catch(err){return logdbg(err),null}}static async parseXmlTemplate(xmlStr){const jsonCfg=await TaskParser.convertXmlToJson(xmlStr),paraCfgs=TaskParser.getParaCfgsFromJsonCfg(jsonCfg),fontsConfig=TaskParser.getPartOfJsonCfg(jsonCfg,"fonts",!0),myfunCfgs=TaskParser.getMyfunCfgsFromJsonCfg(jsonCfg),actionConfigs=TaskParser.getPartOfJsonCfg(jsonCfg,"actions",!1),attrsInXml=TaskParser.getAttrsInXml(jsonCfg),captchaTypes=TaskParser.getCaptchTypes(jsonCfg),currentTime=(0,import_utils2.getCurrentUnixTime)(),myfunScripts={};myfunCfgs.forEach(myfunCfg=>{const{name:name,script:script,base64:base64}=myfunCfg;if(base64){const str=(0,import_utils2.decodeFromBase64)(script);"string"==typeof str&&str&&(myfunScripts[name]=str)}else myfunScripts[name]=script});return{actionConfigs:actionConfigs,paraCfgs:paraCfgs,fontsConfig:fontsConfig||null,myfunScripts:myfunScripts,attrsInXml:attrsInXml,captchaTypes:captchaTypes,lastUsedTime:currentTime,lastCheckTime:currentTime}}static async getTemplateConfig(templateId,xmlStr=""){if(!xmlStr){const cachedParsedTemplateExt=_TemplateManagerInScraper.#templateMap.get(templateId);if(cachedParsedTemplateExt)return cachedParsedTemplateExt}let template=await _TemplateManagerInScraper.#getTemplateFromLocal(templateId,xmlStr);if(!template){const code=_TemplateManagerInScraper.#getReadCode(templateId);template=await _TemplateManagerInScraper.#getTemplateFromServer(templateId,code)}if(!template){const message=`Cannot get template tid ${templateId}`;throw logwarn(message),new Error(message)}const parsedTemplate=await _TemplateManagerInScraper.parseXmlTemplate(template.configDetail),parsedTemplateExt=Object.assign({},parsedTemplate,{template:template});return _TemplateManagerInScraper.#templateMap.set(templateId,parsedTemplateExt),parsedTemplateExt}static clearTemplateConfig(templateId=0){return templateId>0?_TemplateManagerInScraper.#templateMap.delete(templateId):_TemplateManagerInScraper.#templateMap.clear(),!0}},import_node_events=__toESM(require("events"),1),import_node_events2=require("events"),fs6=__toESM(require("fs"),1),path5=__toESM(require("path"),1),import_got_scraping=require("got-scraping"),import_isolated_vm2=__toESM(require("isolated-vm"),1),import_utils9=require("@letsscrapedata/utils"),import_controller3=require("@letsscrapedata/controller"),uuid=__toESM(require("uuid"),1),SysParas=class{#taskContext;#templateId;#taskId;#version;constructor(taskContext,templateId,taskId,version){this.#taskContext=taskContext,this.#templateId=templateId,this.#taskId=taskId,this.#version=version}get version(){return this.#version}get templateId(){return this.#templateId}get taskId(){return this.#taskId}get url(){try{return this.#taskContext?.page?this.#taskContext.page.url():""}catch{return""}}get hasPopupPage(){return this.#taskContext?.popupPage?"1":"0"}get subtaskNum(){const subtasks=this.#taskContext?.subtasks;return Array.isArray(subtasks)?String(subtasks.length):"0"}get datatableNum(){const execData=this.#taskContext?.execData;return execData&&"object"==typeof execData?String(Object.keys(execData).length):"0"}get responses(){try{const responses=this.#taskContext?.responses;return Array.isArray(responses)?JSON.stringify(responses):""}catch(err){return""}}get currentDate(){return(new Date).toISOString().slice(0,10)}get currentDateTime(){return(new Date).toISOString().slice(0,19)}get currentIsoTime(){return(new Date).toISOString()}get currentLocalTime(){const date=new Date;return`${date.getFullYear()}-${String(date.getMonth()+1).padStart(2,"0")}-${String(date.getDate()).padStart(2,"0")} ${String(date.getHours()).padStart(2,"0")}:${String(date.getMinutes()).padStart(2,"0")}:${String(date.getSeconds()).padStart(2,"0")}`}get currentUtcTime(){return(new Date).toISOString().slice(0,19).replace("T"," ")}get currentTime(){return(new Date).toISOString().slice(11,19)}get currentUnixMs(){return String(Date.now())}get currentUnixSec(){return String(Math.floor(Date.now()/1e3))}get random10(){return String(Math.floor(10*Math.random()))}get random100(){return String(Math.floor(100*Math.random()))}get random1000(){return String(Math.floor(1e3*Math.random()))}get random10000(){return String(Math.floor(1e4*Math.random()))}get uuidv1(){return uuid.v1()}get uuidv4(){return uuid.v4()}},iconv=__toESM(require("iconv-lite"),1),zlib=__toESM(require("zlib"),1),cheerio=__toESM(require("cheerio"),1),import_isolated_vm=__toESM(require("isolated-vm"),1),import_utils3=require("@letsscrapedata/utils"),LsdString=class _LsdString{static specialConvertFunObj={};static setSpecialConvertFunObj(specialConvertFunObj){return _LsdString.specialConvertFunObj=specialConvertFunObj,!0}static transformStrSync(origStr,funCfgs,defaultVal){let str=origStr;try{if("string"!=typeof origStr||!Array.isArray(funCfgs))throw new Error("Invalid paras in transformStr");for(const funCfg of funCfgs){if("object"!=typeof funCfg)throw new Error("Invalid funCfg in transformStr");const functionName="c"===funCfg.type?`${funCfg.type}_${funCfg.subtype}`:funCfg.type;let fun=_LsdString._funPerformers[functionName];fun&&"function"==typeof fun?str=fun(str,funCfg):logerr(`Invalid funName ${funCfg.type} in transformStr`)}}catch(err){loginfo(err)}return str||defaultVal}static async transformStr(origStr,funCfgs,defaultVal,myfunScripts){let str=origStr;try{if("string"!=typeof origStr||!Array.isArray(funCfgs))throw new Error("Invalid paras in transformStr");for(const funCfg of funCfgs){if("object"!=typeof funCfg)throw new Error("Invalid funCfg in transformStr");const functionName="c"===funCfg.type?`${funCfg.type}_${funCfg.subtype}`:funCfg.type;if("myfun"!==functionName){let fun=_LsdString._funPerformers[functionName];if(!fun||"function"!=typeof fun){logerr(`Invalid funName ${funCfg.type} in transformStr`);continue}str=fun(str,funCfg)}else str=await _LsdString.#myfun(str,funCfg,myfunScripts)}}catch(err){loginfo(err)}return str||defaultVal}static#getStdFunScriptFun=null;static setGetStdFunScript(fun){return _LsdString.#getStdFunScriptFun=fun,!0}static async#getScriptOfMyfun(name,myfunScripts){if("string"==typeof name&&name){if(myfunScripts?.[name])return myfunScripts[name];if(name.startsWith("std")&&_LsdString.#getStdFunScriptFun){const script=await _LsdString.#getStdFunScriptFun(name);if(script)return script}}return""}static async#myfun(str,funCfg,myFunScripts){const{name:name,arg1:arg1,arg2:arg2,arg3:arg3,arg4:arg4,arg5:arg5}=funCfg;try{const script=await _LsdString.#getScriptOfMyfun(name,myFunScripts);if(!script)return"";const inData={origStr:str,arg1:arg1,arg2:arg2,arg3:arg3,arg4:arg4,arg5:arg5},isolate=new import_isolated_vm.default.Isolate,context=isolate.createContextSync(),externalCopy=new import_isolated_vm.default.ExternalCopy(inData);context.global.setSync("inData",externalCopy.copyInto());const content=isolate.compileScriptSync(script).runSync(context);return"string"!=typeof content&&logwarn("Please check the script of myfun is correct."),"string"==typeof content?content:""}catch(err){return logwarn(err.message),""}}static __getElementBySelector($,loc,idx=0){try{const eles="root"===loc?$.root():$(loc);return eles.length<=0||-9999===idx?eles:eles.eq(idx)}catch(err){return logerr("##te cheerio invalid $ or loc"),null}}static __cheerioOptions={xmlMode:!0,decodeEntities:!1};static _c_attr(origStr,funCfg){try{const{loc:loc,idx:idx,attrname:attrname}=funCfg,idxInt=parseInt(idx),$=cheerio.load(origStr,_LsdString.__cheerioOptions);return _LsdString.__getElementBySelector($,loc,idxInt).attr(attrname)}catch(err){return logerr(`##tmp cheerio c_attr err: ${err}`),""}}static _c_data(origStr,funCfg){try{const{loc:loc,idx:idx,attrname:attrname}=funCfg,idxInt=parseInt(idx),$=cheerio.load(origStr,_LsdString.__cheerioOptions);return _LsdString.__getElementBySelector($,loc,idxInt).data(attrname)}catch(err){return logerr(`##tmp cheerio c_data err: ${err}`),""}}static _c_html(origStr,funCfg){try{const{loc:loc,idx:idx}=funCfg,idxInt=parseInt(idx),$=cheerio.load(origStr,_LsdString.__cheerioOptions);return _LsdString.__getElementBySelector($,loc,idxInt).html()}catch(err){return logerr(`##tmp cheerio c_html err: ${err}`),""}}static _c_length(origStr,funCfg){try{const{loc:loc}=funCfg,idxInt=-9999,$=cheerio.load(origStr,_LsdString.__cheerioOptions),$$=_LsdString.__getElementBySelector($,loc,idxInt);return String($$.length)}catch(err){return logerr(`##tmp cheerio c_length err: ${err}`),"0"}}static _c_text(origStr,funCfg){try{const{loc:loc,idx:idx}=funCfg,idxInt=parseInt(idx),$=cheerio.load(origStr,_LsdString.__cheerioOptions);return _LsdString.__getElementBySelector($,loc,idxInt).text()}catch(err){return logerr(`##tmp cheerio c_text err: ${err}`),""}}static _ceil(origStr){return String(Math.ceil(Number(origStr)))}static _closingsubstr(origStr,funCfg){const{openchar:openchar,startstr:startstr,position:position}=funCfg;if("string"!=typeof origStr||"string"!=typeof openchar||!["{","[","(","lt"].includes(openchar)||"string"!=typeof startstr||"number"!=typeof parseInt(position)||parseInt(position)<0)return"";const openChar="lt"===openchar?"<":openchar,closingChar={"{":"}","[":"]","(":")","<":">"}[openChar];let openBracketCount=1,startPos=-1;if(startstr){if(startPos=origStr.indexOf(startstr),startPos<0)return""}else startPos=parseInt(position);const startIdx=origStr.indexOf(openChar,startPos);if(startIdx<0)return-1;let idx=startIdx+1;for(;idx<origStr.length;idx++){let char=origStr[idx];if(char===openChar)openBracketCount++;else if(char===closingChar&&(openBracketCount--,0===openBracketCount))break}const endIdx=idx<=origStr.length?idx+1:-1;return endIdx>startIdx?origStr.substring(startIdx,endIdx):""}static __getCompressOptions(funCfg,compressFlag){return funCfg||compressFlag?void 0:{}}static _compress(origStr,funCfg){try{const{method:method,sourceencoding:sourceencoding,targetencoding:targetencoding,start:start,end:end}=funCfg,options=_LsdString.__getCompressOptions(funCfg,!0),origBuffer=Buffer.from(origStr,sourceencoding);let compressedBuffer=null;return"gzip"===method?compressedBuffer=zlib.gzipSync(origBuffer,options):"deflate"===method?compressedBuffer=zlib.deflateSync(origBuffer,options):"deflateraw"===method?compressedBuffer=zlib.deflateRawSync(origBuffer,options):"brotli"===method&&(compressedBuffer=zlib.brotliCompressSync(origBuffer,options)),compressedBuffer?_LsdString.__convertBufferToString(compressedBuffer,targetencoding,start,end):""}catch(err){return""}}static _decompress(origStr,funCfg){try{const{method:method,sourceencoding:sourceencoding,targetencoding:targetencoding,start:start,end:end}=funCfg,options=_LsdString.__getCompressOptions(funCfg,!1),origBuffer=Buffer.from(origStr,sourceencoding);let decompressedBuffer=Buffer.from(origStr,sourceencoding);return"gunzip"===method?decompressedBuffer=zlib.gunzipSync(origBuffer,options):"inflate"===method?decompressedBuffer=zlib.inflateSync(origBuffer,options):"inflateraw"===method?decompressedBuffer=zlib.inflateRawSync(origBuffer,options):"unzip"===method?decompressedBuffer=zlib.unzipSync(origBuffer,options):"brotli"===method&&(decompressedBuffer=zlib.brotliDecompressSync(origBuffer,options)),decompressedBuffer?_LsdString.__convertBufferToString(decompressedBuffer,targetencoding,start,end):""}catch(err){return""}}static _concat(origStr,funCfg){let str=origStr;const{str1:str1,str2:str2,str3:str3,str4:str4,str5:str5}=funCfg;return[str1,str2,str3,str4,str5].forEach(item=>{"string"==typeof item&&(str=str.concat(item))}),str}static _specialconvert(origStr,funCfg){let str=origStr;try{const{method:method}=funCfg;return"function"==typeof _LsdString.specialConvertFunObj[method]&&(str=_LsdString.specialConvertFunObj[method](origStr,funCfg)),str}catch(err){return str}}static _decode(origStr,funCfg){const{str1:str1,val1:val1,str2:str2,val2:val2,str3:str3,val3:val3,str4:str4,val4:val4,str5:str5,val5:val5,defaultval:defaultval}=funCfg;try{return origStr===str1?val1:origStr===str2?val2:origStr===str3?val3:origStr===str4?val4:origStr===str5?val5:defaultval}catch(err){return""}}static __convertBufferToString(buffer,encoding,startStr,endStr){const start=startStr?Number(startStr):0,end=endStr?Number(endStr):0;return buffer instanceof Buffer?end>0?buffer.toString(encoding,start,end):start>0?buffer.toString(encoding,start):buffer.toString(encoding):""}static _convertencoding(origStr,funCfg){const{sourceencoding:sourceencoding,targetencoding:targetencoding,start:start,end:end}=funCfg;try{const buffer=Buffer.from(origStr,sourceencoding);return _LsdString.__convertBufferToString(buffer,targetencoding,start,end)}catch(err){return""}}static _floor(origStr){return String(Math.floor(Number(origStr)))}static _hashcode(origStr,funCfg){const{hashmethod:hashmethod}=funCfg;return import_utils3.LsdUrl.getHashCode(origStr,hashmethod)}static _includes(origStr,funCfg){const{searchstr:searchstr}=funCfg;if("string"!=typeof searchstr)throw new Error("Invalid searchstr in _contains");return String(Number(origStr.includes(searchstr)))}static _insert(origStr,funCfg){const{str:str}=funCfg;if("string"!=typeof str)throw new Error("Invalid str in _insert");return str+origStr}static _itemstoobj(origStr,funCfg){const{split:itemSplit,kvsplit:kvSplit,keytrim:keyTrimFlag,keynows:keyNowsFlag,valuetrim:valueTrimFlag,valuenows:valueNowsFlag}=funCfg;if(!itemSplit||!kvSplit)return"{}";try{let retObj={};const items=origStr.split(new RegExp(itemSplit)),reKvSplit=new RegExp(kvSplit);for(const item of items){const kv=item.split(reKvSplit);if(2!==kv.length)continue;let keyStr=keyTrimFlag?kv[0].trim():kv[0];keyNowsFlag&&(keyStr=keyStr.split("").filter(i=>i.trim()).join(""));let valueStr=valueTrimFlag?kv[1].trim():kv[1];valueNowsFlag&&(valueStr=valueStr.split("").filter(i=>i.trim()).join("")),keyStr&&(retObj[keyStr]=valueStr)}return JSON.stringify(retObj)}catch(err){return"{}"}}static _jsonparse(origStr,funCfg){const{key1:key1,key2:key2,key3:key3,key4:key4,key5:key5,key6:key6,keys:keys,length:length,srctype:srctype}=funCfg;let retObj=null;try{if("script"===srctype)return"";if(retObj=JSON.parse(origStr),"object"!=typeof retObj||!retObj)return""}catch(err){return""}return retObj=(0,import_utils3.getMemberOfObject)(retObj,key1,key2,key3,key4,key5,key6),null==retObj?"":"string"==typeof retObj?retObj:"number"==typeof retObj?String(retObj):(keys&&(retObj=Array.from(Object.keys(retObj))),length&&Array.isArray(retObj)?String(retObj.length):JSON.stringify(retObj))}static _length(origStr){return String(origStr.length)}static _matchall(origStr,funCfg){try{const{pattern:pattern,flags:flags,itemvalue:itemvalue,filter:filter,start:start,end:end,resulttype:resulttype,join:join9}=funCfg,re=new RegExp(pattern,flags),matches=origStr.matchAll(re);if("boolean"===resulttype)return matches?"1":"0";if(!matches)return"";let strArray=[];for(const match of matches)if("match[0]"===itemvalue)strArray.push(match[0]);else{let item=itemvalue;for(let i=0;i<match.length;i++)item=item.replaceAll(`match[${i}]`,match[i]);match.index>=0&&(item=item.replaceAll("match.index",String(match.index))),strArray.push(item)}if(filter){const reFilter=new RegExp(filter);strArray=strArray.filter(item=>item.match(reFilter))}const startInt=parseInt(start),endInt=parseInt(end);return 0===startInt&&0===endInt||(strArray=0===endInt?strArray.slice(startInt):strArray.slice(startInt,endInt)),"all"===resulttype?strArray.join(join9):"length"===resulttype?String(strArray.length):""}catch(err){return loginfo(err),""}}static _max(origStr,funCfg){try{const{split:split}=funCfg,nums=origStr.split(new RegExp(split)).filter(item=>item.trim()).map(item=>Number(item));return nums.length>0?String(nums.sort((a,b)=>a-b).pop()):""}catch(err){return loginfo(err),""}}static _min(origStr,funCfg){try{const{split:split}=funCfg,nums=origStr.split(new RegExp(split)).filter(item=>item.trim()).map(item=>Number(item));return nums.length>0?String(nums.sort((a,b)=>a-b)[0]):""}catch(err){return loginfo(err),""}}static _numeq(origStr,funCfg){const{num:num}=funCfg;return"string"!=typeof origStr||"string"!=typeof num?"0":origStr.trim().match(/^\d+$/)&&num.trim().match(/^\d+$/)&&Number(origStr)===Number(num)?"1":"0"}static _numge(origStr,funCfg){const{num:num}=funCfg;return"string"!=typeof origStr||"string"!=typeof num?"0":origStr.trim().match(/^\d+$/)&&num.trim().match(/^\d+$/)&&Number(origStr)>=Number(num)?"1":"0"}static _numgt(origStr,funCfg){const{num:num}=funCfg;return"string"!=typeof origStr||"string"!=typeof num?"0":origStr.trim().match(/^\d+$/)&&num.trim().match(/^\d+$/)&&Number(origStr)>Number(num)?"1":"0"}static _numle(origStr,funCfg){const{num:num}=funCfg;return"string"!=typeof origStr||"string"!=typeof num?"0":origStr.trim().match(/^\d+$/)&&num.trim().match(/^\d+$/)&&Number(origStr)<=Number(num)?"1":"0"}static _numlt(origStr,funCfg){const{num:num}=funCfg;return"string"!=typeof origStr||"string"!=typeof num?"0":origStr.trim().match(/^\d+$/)&&num.trim().match(/^\d+$/)&&Number(origStr)<Number(num)?"1":"0"}static _notincludes(origStr,funCfg){const{searchstr:searchstr}=funCfg;if("string"!=typeof searchstr)throw new Error("Invalid str in _notcontains");return String(Number(!origStr.includes(searchstr)))}static _padEnd(origStr,funCfg){const{targetlen:targetlen,padstr:padstr}=funCfg,targetLen=parseInt(targetlen),padStr="string"==typeof padstr&&padstr.length>0?padstr:" ";return origStr.padEnd(targetLen,padStr)}static _padStart(origStr,funCfg){const{targetlen:targetlen,padstr:padstr}=funCfg,targetLen=parseInt(targetlen),padStr="string"==typeof padstr&&padstr.length>0?padstr:" ";return origStr.padStart(targetLen,padStr)}static _parseFloat(origStr){return String(parseFloat(origStr))}static _parseInt(origStr){return String(parseInt(origStr))}static _randomarryidxes(origStr,funCfg){const{join:join9}=funCfg;try{const length=parseInt(origStr);return[...Array(length).keys()].sort(()=>Math.random()-.5).join(join9)}catch(err){return""}}static _replace(origStr,funCfg){const{substr:substr,newstr:newstr,regexp:regexp,flags:flags}=funCfg;try{const regexpFlag=regexp;if("string"!=typeof substr)throw new Error("Invalid substr in _replace");if("string"!=typeof newstr)throw new Error("Invalid newstr in _replace");return regexpFlag?origStr.replace(RegExp(substr,flags),newstr):origStr.replace(substr,newstr)}catch(err){return origStr}}static _round(origStr){return String(Math.round(Number(origStr)))}static __sort(origArr,valtype,sorttype){let retArr;return retArr="string"===valtype?"asc"===sorttype?origArr.sort((a,b)=>a.localeCompare(b)):origArr.sort((a,b)=>b.localeCompare(a)):"asc"===sorttype?origArr.sort((a,b)=>parseFloat(a)-parseFloat(b)):origArr.sort((a,b)=>parseFloat(b)-parseFloat(a)),retArr}static _setcomplement(origStr,funCfg){const{array2:array2,split1:split1,split2:split2,sorttype:sorttype,valtype:valtype,limit:limit,join:join9}=funCfg;let reSplit1,reSplit2;try{reSplit1=new RegExp(split1),reSplit2=new RegExp(split2)}catch(err){throw new Error(`Invalid regexp split1: ${split1}, split2: ${split2} in _setcomplement`)}try{const limitInt=parseInt(limit);if(!["nosort","asc","desc"].includes(sorttype)||!["string","number"].includes(valtype)||limitInt<0||"string"!=typeof array2||"string"!=typeof join9)throw new Error(`Invalid limit: ${limit}, sorttype: ${sorttype}, or array2 in _setcomplement`);const strArr1=origStr.split(reSplit1),strArr2=array2.split(reSplit2);let resArr=(0,import_utils3.getComplementOfTwoArray)(strArr1,strArr2);return["asc","desc"].includes(sorttype)&&(resArr=_LsdString.__sort(resArr,valtype,sorttype)),limitInt>0?resArr.slice(0,limitInt).join(join9):resArr.join(join9)}catch(err){return loginfo(err),origStr}}static _setdifference(origStr,funCfg){const{array2:array2,split1:split1,split2:split2,sorttype:sorttype,valtype:valtype,limit:limit,join:join9}=funCfg;let reSplit1,reSplit2;try{reSplit1=new RegExp(split1),reSplit2=new RegExp(split2)}catch(err){throw new Error(`Invalid regexp split1: ${split1}, split2: ${split2} in _setcomplement`)}try{const limitInt=parseInt(limit);if(!["nosort","asc","desc"].includes(sorttype)||!["string","number"].includes(valtype)||limitInt<0||"string"!=typeof array2||"string"!=typeof join9)throw new Error(`Invalid limit: ${limit}, sorttype: ${sorttype}, or array2 in _setcomplement`);const strArr1=origStr.split(reSplit1),strArr2=array2.split(reSplit2);let resArr=(0,import_utils3.getDifferenceOfTwoArray)(strArr1,strArr2);return["asc","desc"].includes(sorttype)&&(resArr=_LsdString.__sort(resArr,valtype,sorttype)),limitInt>0?resArr.slice(0,limitInt).join(join9):resArr.join(join9)}catch(err){return loginfo(err),origStr}}static _setintersection(origStr,funCfg){const{array2:array2,split1:split1,split2:split2,sorttype:sorttype,valtype:valtype,limit:limit,join:join9}=funCfg;let reSplit1,reSplit2;try{reSplit1=new RegExp(split1),reSplit2=new RegExp(split2)}catch(err){throw new Error(`Invalid regexp split1: ${split1}, split2: ${split2} in _setcomplement`)}try{const limitInt=parseInt(limit);if(!["nosort","asc","desc"].includes(sorttype)||!["string","number"].includes(valtype)||limitInt<0||"string"!=typeof array2||"string"!=typeof join9)throw new Error(`Invalid limit: ${limit}, sorttype: ${sorttype}, or array2 in _setcomplement`);const strArr1=origStr.split(reSplit1),strArr2=array2.split(reSplit2);let resArr=(0,import_utils3.getIntersectionOfTwoArray)(strArr1,strArr2);return["asc","desc"].includes(sorttype)&&(resArr=_LsdString.__sort(resArr,valtype,sorttype)),limitInt>0?resArr.slice(0,limitInt).join(join9):resArr.join(join9)}catch(err){return loginfo(err),origStr}}static _setunion(origStr,funCfg){const{array2:array2,split1:split1,split2:split2,sorttype:sorttype,valtype:valtype,limit:limit,join:join9}=funCfg;let reSplit1,reSplit2;try{reSplit1=new RegExp(split1),reSplit2=new RegExp(split2)}catch(err){throw new Error(`Invalid regexp split1: ${split1}, split2: ${split2} in _setcomplement`)}try{const limitInt=parseInt(limit);if(!["nosort","asc","desc"].includes(sorttype)||!["string","number"].includes(valtype)||limitInt<0||"string"!=typeof array2||"string"!=typeof join9)throw new Error(`Invalid limit: ${limit}, sorttype: ${sorttype}, or array2 in _setcomplement`);const strArr1=origStr.split(reSplit1),strArr2=array2.split(reSplit2);let resArr=(0,import_utils3.getUnionOfTwoArray)(strArr1,strArr2);return["asc","desc"].includes(sorttype)&&(resArr=_LsdString.__sort(resArr,valtype,sorttype)),limitInt>0?resArr.slice(0,limitInt).join(join9):resArr.join(join9)}catch(err){return loginfo(err),origStr}}static _shuffle(origStr,funCfg){try{const{split:split}=funCfg;if("string"!=typeof split)throw new Error("Invalid split in _shuffle");const splitArr=origStr.split(new RegExp(split));return!Array.isArray(splitArr)||splitArr.length<=1?origStr:splitArr.sort(()=>Math.random()-.5).join(split)}catch(err){return loginfo(err),origStr}}static _slice(origStr,funCfg){const{beginidx:beginidx,endidx:endidx}=funCfg,beginIdx=parseInt(beginidx),endIdx="string"==typeof endidx&&endidx.length>0?parseInt(endidx):void 0;return origStr.slice(beginIdx,endIdx)}static _sort(origStr,funCfg){try{const{split:split,valtype:valtype,sorttype:sorttype,join:join9}=funCfg;if("string"!=typeof split||!["string","number"].includes(valtype)||!["asc","desc"].includes(sorttype))throw new Error("Invalid split or valtype in _sort");const splitArr=origStr.split(new RegExp(split));return!Array.isArray(splitArr)||splitArr.length<=1?origStr:"string"===valtype?"asc"===sorttype?splitArr.sort((a,b)=>a.localeCompare(b)).join(join9):splitArr.sort((a,b)=>b.localeCompare(a)).join(join9):"asc"===sorttype?splitArr.sort((a,b)=>parseFloat(a)-parseFloat(b)).join(join9):splitArr.sort((a,b)=>parseFloat(b)-parseFloat(a)).join(join9)}catch(err){return loginfo(err),""}}static _split(origStr,funCfg){try{const{split:split,limit:limit,filter:filter,start:start,end:end,resulttype:resulttype,val:val,insertstr:insertstr,join:join9}=funCfg;if("string"!=typeof split)throw new Error("Invalid split in _split");const reSplit=new RegExp(split),limitInt=parseInt(limit);let strArray=limitInt>0?origStr.split(reSplit,limitInt):origStr.split(reSplit);if(!Array.isArray(strArray))return"";if(filter){const reFilter=new RegExp(filter);str