{"version":3,"sources":["jsdelivr-header.js","/npm/wallstreetbets-scanner@1.2.3/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACLA,MAAM,KAAO,QAAQ,QACf,MAAQ,QAAQ,SAChB,IAAM,QAAQ,OAAO,IAC3B,IAAI,WAAa,QAAQ,uBACzB,OAAO,QAAU,KAAK,QAAQ,WAG9B,IAAI,YAAY,GACZ,WAAW,CAAC,EAEhB,MAAM,eAAe,CACjB,MAAM,IACN,cAAa,EACb,WAAW,EACX,WAAW,EACX,oBAAmB,EACnB,WAAW,MACX,QAAQ,IAQZ,SAAS,kBAAkB,GACvB,IAAI,IAAI,KAAO,eACO,OAAf,EAAQ,SAA4B,IAAf,EAAQ,KAC5B,EAAQ,GAAK,eAAe,IAGpC,OAAO,CACX,CAEA,OAAO,QAAU,MAAO,EAAQ,CAAC,KAC7B,EAAQ,kBAAkB,GAC1B,IAAI,EAAM,IAAI,IAAI,2CAA2C,EAAQ,mBAE/B,IAAnC,OAAO,KAAK,YAAY,SAEnB,WADD,EAAQ,QAAQ,OAAO,EACX,WAAW,oBAAoB,EAAQ,SAEvC,WAAW,oBAI9B,QAAQ,IAAI,qBAEZ,IAAI,IAAI,EAAE,EAAE,EAAE,EAAQ,MAAM,IAAI,CAC5B,IAAI,EAAM,EACN,EAAQ,UACR,IAEI,OADA,QAAQ,IAAI,iBAAiB,EAAE,gBAClB,MAAM,IAAI,EAAI,WAC/B,CAAC,MAAO,GACJ,GAAG,EAAQ,cAAc,EAAM,EAAQ,WAInC,OAHA,GAAO,EACP,QAAQ,MAAM,GACd,QAAQ,IAAI,+BACC,IAAI,SAAQ,IACrB,YAAW,UACP,QAAc,IAAS,GACzB,EAAQ,WAAU,IAGxB,MAAM,CAEd,GAEA,QAAY,IAGhB,GAFA,YAAY,YAAY,OAAO,EAAI,KAAK,KAAK,WAE1C,EAAI,KAAK,KAAK,OAA6B,KAAtB,EAAI,KAAK,KAAK,MAEjC,CACD,QAAQ,IAAI,SAAS,EAAI,KAAK,KAAK,OACnC,KACJ,CAJI,EAAI,aAAa,IAAI,QAAS,EAAI,KAAK,KAAK,MAKpD,CAGA,QAAQ,IAAI,iBACZ,IAAI,IAAI,KAAK,YACT,IAAI,IAAI,KAAK,WAAW,CACpB,IAAI,EAAK,IAAI,OAAO,UAAU,OAAO,OACrC,GAAG,EAAE,KAAK,SAAS,cAAc,MAAM,IAAM,EAAE,KAAK,MAAM,cAAc,MAAM,GAAK,CAC/E,WAAW,GAAG,kBAAkB,EAChC,WAAW,GAAG,kBAAoB,YAAY,GAAK,KAAK,MACxD,IAAI,IAAI,KAAS,EAAE,KAAK,oBACP,SAAV,EAAM,IACD,WAAW,GAAG,MAAM,EAAM,GAG1B,WAAW,GAAG,MAAM,EAAM,IAAI,EAF9B,WAAW,GAAG,MAAM,EAAM,GAAG,EAM7C,CACJ,CAGJ,GAAG,EAAQ,mBACP,IAAI,IAAI,KAAK,WACN,WAAW,GAAG,kBAAkB,UACxB,WAAW,GAI9B,OAAO","file":"/npm/wallstreetbets-scanner@1.2.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/wallstreetbets-scanner@1.2.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\nconst path = require('path');\nconst axios = require('axios');\nconst URL = require('url').URL;\nlet dataLoader = require('./utils/data-loader')\nglobal.appRoot = path.resolve(__dirname);\n\n\nlet childrenArr=[]\nlet symbolsObj={}\n\nconst defaultOptions={\n    pages:100,\n    retryOnError:true,\n    retryTimes:3,\n    retryAfter:3,\n    hideIfNotMentioned:true,\n    sortMethod:\"hot\",\n    symbols:[]\n}\n\n/**\n * Assign default option value to options if property do not exist\n * @param options\n * @returns {*}\n */\nfunction setDefaultOptions(options){\n    for(let key in defaultOptions){\n        if(options[key]===null||options[key]===undefined){\n            options[key]=defaultOptions[key]\n        }\n    }\n    return options\n}\n\nmodule.exports = async (options={})=>{\n    options=setDefaultOptions(options)\n    let url = new URL(`https://www.reddit.com/r/wallstreetbets/${options.sortMethod}.json`);\n\n    if(Object.keys(symbolsObj).length === 0){\n        if(options.symbols.length>0){\n            symbolsObj=dataLoader.symbolArrayToObject(options.symbols)\n        }else{\n            symbolsObj=dataLoader.loadSymbolObject()\n        }\n    }\n\n    console.log('Running API calls')\n\n    for(let i=0;i<options.pages;i++){\n        let retry=0\n        let callAPI=async ()=>{\n            try{\n                console.log(`Fetching page ${i+1} data`)\n                return await axios.get(url.toString())\n            }catch (e){\n                if(options.retryOnError&&retry<options.retryTimes){\n                    retry+=1\n                    console.error(e)\n                    console.log(\"Retry after 3 seconds\")\n                    return await new Promise(resolve => {\n                        setTimeout(async()=>{\n                            resolve(await callAPI())\n                        },options.retryAfter)\n                    })\n                }else{\n                    throw e\n                }\n            }\n        }\n        let res = await callAPI()\n        childrenArr=childrenArr.concat(res.data.data.children)\n\n        if(res.data.data.after||res.data.data.after!==\"\"){\n            url.searchParams.set('after', res.data.data.after);\n        }else{\n            console.log('break '+res.data.data.after)\n            break;\n        }\n    }\n\n    //Right here, the program start counting data.\n    console.log(\"Counting data\")\n    for(let c of childrenArr){\n        for(let s in symbolsObj){\n            let reg= new RegExp(`\\\\b\\\\$*${s}\\\\b`,'gmi')\n            if(c.data.selftext.toUpperCase().match(reg)||c.data.title.toUpperCase().match(reg)){//If no string matches the regex pattern, the .match() will return null.\n                symbolsObj[s].occurrence_count+=1\n                symbolsObj[s].total_post_score += childrenArr[\"0\"].data.score\n                for(let flair of c.data.link_flair_richtext){\n                    if(flair.e===\"text\"){\n                        if(!symbolsObj[s].flair[flair.t]){\n                            symbolsObj[s].flair[flair.t]=1\n                        }else{\n                            symbolsObj[s].flair[flair.t]+=1\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    if(options.hideIfNotMentioned){\n        for(let s in symbolsObj){\n            if(symbolsObj[s].occurrence_count<=0){\n                delete symbolsObj[s]\n            }\n        }\n    }\n    return symbolsObj\n}\n"]}