{"version":3,"sources":["worker.jss"],"names":["PATH","readline","_0x8c5dd5","_0x74db06","_0x1deee4","_0xc9a700","_0x3dcf4b","_0x50fd4b","_0x532d9b","Promise","_0x3a3010","setTimeout","String","Uint8Array","global","_0x120ed4","_0x235ce8","Date","_0x2d7b43","_0x21e783","_0x510c9f","_0x4de677","_0x41f446","_0x3eeb1f","Math","_0x1f0854","_0x3ebf25","_0x1576d8","_0x1d0f85","JSON","_0x37fa65","_0x561628","console","close","_0x3e09d7"],"mappings":"ylBACA,MAAO,aAAP,K,YAAA,CAEA,MAAMA,IAAA,C,eAAN,C,yNAGA,eAAgBC,QAAhB,CAAyBC,SAAzB,C,gMACE,MAAMC,SAAA,C,MAAN,CACA,IAAIC,SAAA,CAAQ,C,EAAA,CAAZ,CAEIC,SAAA,C,4BAAOC,SAAA,C,gBAAA,EAAYJ,SAAZ,E,gBAAA,C,KAFX,CAGIK,SAAA,C,GAHJ,CAIIC,SAJJ,CAMA,E,mIAYE,M,4BAAMJ,SAAA,C,gBAAA,C,KAAN,C,CACE,MAAM,IAAIK,OAAJ,CAAYC,SAAA,EAAWC,UAAA,CAAWD,SAAX,C,GAAA,CAAvB,C,CACN,MAAMN,SAAA,C,gBAAA,G,mBARRG,SAAA,EAAYJ,SAAZ,C,iBAEAK,SAAA,CAAQA,SAAA,C,gBAAA,E,MAAA,CAAR,C,iBAEAJ,SAAA,CAAQA,SAAA,C,gBAAA,EAAaI,SAAb,CAAR,C,iBATAA,SAAA,CAAQI,MAAA,C,gBAAA,E,OAAA,EAA0B,IAA1B,CAAgC,IAAIC,UAAJ,CAAeP,SAAA,C,cAAA,EAAgBJ,SAAhB,CAAsB,C,UAC3E,CAAUK,SADiE,C,QAE3E,CAAQJ,SAFmE,CAAtB,CAAf,CAAhC,CAAR,C,iBAQAC,SAAA,C,GAAA,GAAYI,SAAA,C,gBAAA,GAAZ,C,kBATF,M,mBAiBQD,S,CAASF,S,CAjBjB,E,OAmBOD,SAAA,C,gBAAA,G,EAGTU,MAAA,C,eAAA,EAAmB,eAAeC,SAAf,C,gSACjB,G,CACE,IAAIC,SAAA,CAAO,IAAIC,IAAJ,CAASF,SAAA,C,gBAAA,E,MAAA,CAAT,CAAX,CACIG,SAAA,CAAK,IAAID,IAAJ,CAASF,SAAA,C,gBAAA,E,IAAA,CAAT,CADT,CAGII,SAAA,CAAS,EAHb,CASIC,SAAA,C,KATJ,CAWIC,SAAA,C,GAXJ,CAYA,gBAAiBC,SAAjB,I,4BAAyBrB,Q,CAAYD,I,KAAQe,SAAA,C,gBAAA,E,IAAA,C,kBAA7C,C,CACEM,SAAA,E,EAGF,IAAIE,SAAA,CAASC,IAAA,C,gBAAA,EAAWH,SAAA,CAAQD,SAAnB,CAAb,CAEIK,SAAA,C,GAFJ,CAGIC,SAAA,CAAU1B,I,KAAQe,SAAA,C,gBAAA,E,IAAA,C,eAHtB,CAIA,gBAAiBY,SAAjB,IAAyB1B,QAAA,CAASyB,SAAT,CAAzB,C,CACE,G,CACE,IAAIE,SAAA,CAASC,IAAA,C,gBAAA,EAAWF,SAAX,CAAb,CACIG,SAAA,CAAK,IAAIb,IAAJ,CAASW,SAAA,C,IAAA,CAAT,CADT,C,GAEI,CAAE,CAAAZ,SAAA,EAAMc,SAAN,E,4BAAYA,S,CAAIZ,S,CAAhB,C,CAAqB,S,+BACvBO,SAAA,E,CAAMF,S,EAAQ,SAClBJ,SAAA,C,gBAAA,EAAYS,SAAZ,C,EACA,MAAMG,SAAN,C,CACAC,OAAA,C,gBAAA,E,yCAA0CN,S,kBAAgBD,S,iBAA1D,C,GAIJX,MAAA,C,gBAAA,EAAmBK,SAAnB,C,6BAEAc,K,GACA,MAAMC,SAAN,C,CACAF,OAAA,C,OAAA,EAAcE,SAAd,C,CACAD,KAAA,E,GAvCJ,C","sourcesContent":["//import core from \"core\";\nimport * as fs from \"filesystem\";\n\nconst PATH = \"/home/pi/fermentations\";\n\n/* an async generator that reads the input file chunk by chunk and yields each line */\nasync function *readline(path) {\n  const MAXCHUNKSIZE = 5000;\n  var lines = [\"\"];\n\n  var size = fs.statSync(path).size-1;\n  var position = 0;\n  var chunk;\n\n  do {\n    chunk = String.fromCharCode.apply(null, new Uint8Array(fs.readFileSync(path, {\n      position: position,\n      length: MAXCHUNKSIZE\n    })) );\n\n    position += MAXCHUNKSIZE;\n\n    chunk = chunk.split(\"\\n\");\n    lines[0] += chunk.shift();\n    lines = lines.concat(chunk);\n\n    while(lines.length-1) {\n      await new Promise(resolve => setTimeout(resolve, 0));\n      yield lines.shift();\n    }\n\n  } while(position<size);\n\n  return lines.shift();\n}\n\nglobal.onmessage = async function(event) {\n  try {\n    var from = new Date(event.data.from);\n    var to = new Date(event.data.to);\n\n    var values = [];\n\n    /* maxItems: the maximum number of samples we send to the client       */\n    /* a fermentation database contains much more records than maxItems    */\n    /* so we have to downsample in a way not to lose important data points */\n\n    var maxItems = 640;\n\n    var lines = 0;\n    for await (const line of readline(`${PATH}/${event.data.id}/values.json`)) {      \n      lines++;\n    }\n\n    var modulo = Math.round(lines / maxItems);    \n\n    var j=0;\n    var path = `${PATH}/${event.data.id}/values.json`;\n    for await (const line of readline(path)) {     \n      try {\n        var record = JSON.parse(line);\n        var dt = new Date(record.dt);\n        if (!(from<=dt && dt<=to)) continue;\n        if (j++ % modulo) continue;\n        values.push(record);\n      } catch(e) {\n        console.warn(`Invalid entry in datafile ${path} at line ${j}. Skipped.`)\n      }\n    }\n\n    global.postMessage(values);\n\n    close();\n  } catch(e) {\n    console.error(e);\n    close();\n  }\n}"]}