{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/client/search.js"],"names":["_","FileIndex","Search","getRoot","lively4url","replace","search","pattern","rootdirs","Error","root","result","fetch","headers","then","r","text","split","filter","ea","map","searchAndRename","dry","files","uniq","file","url","contents","newcontents","RegExp","lively","notify","putRequest","method","body","status"],"mappings":";;;;;;;AASOA,O;;AACAC,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEQ,YAAMC,MAAN,CAAa;;AAE1B,eAAOC,OAAP,GAAiB;AACf,iBAAOC,WAAWC,OAAX,CAAmB,SAAnB,EAA6B,EAA7B,CAAP;AACD;;AAED,qBAAaC,MAAb,CAAoBC,OAApB,EAA6BC,WAAW,cAAxC,EAA0D;AACxD,cAAI,CAACD,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,+BAAV,CAAN;AACd,cAAIC,OAAO,KAAKP,OAAL,EAAX;AACA,cAAIQ,SAAS,MAAMC,MAAMF,OAAO,eAAb,EAA8B;AAC/CG,qBAAU;AACL,+BAAiBN,OADZ;AAEL,0BAAYC,QAFP;AAGL,0BAAY;AAHP;AADqC,WAA9B,EAMhBM,IANgB,CAMXC,KAAKA,EAAEC,IAAF,EANM,CAAnB;AAOA,iBAAOL,OAAOM,KAAP,CAAa,IAAb,EAAmBC,MAAnB,CAA0BC,MAAMA,EAAhC,EAAoCC,GAApC,CAAyCD,MAAMA,GAAGF,KAAH,CAAS,GAAT,CAA/C,CAAP;AACD;;AAED,qBAAaI,eAAb,CAA6Bd,OAA7B,EAAsCF,OAAtC,EAA+CiB,GAA/C,EAAoD;AAClD,cAAI,CAACf,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,+BAAV,CAAN;AACd,cAAI,CAACJ,OAAL,EAAc,MAAM,IAAII,KAAJ,CAAU,+BAAV,CAAN;AACd,cAAIC,OAAO,KAAKP,OAAL,EAAX;;AAEA,cAAIoB,QAAQvB,EAAEwB,IAAF,CAAO,CAAC,MAAMtB,OAAOI,MAAP,CAAcC,OAAd,CAAP,EAA+Ba,GAA/B,CAAmCD,MAAMA,GAAG,CAAH,CAAzC,CAAP,CAAZ;;AAEA,eAAK,IAAIM,IAAT,IAAiBF,KAAjB,EAAwB;AACtB,gBAAIG,MAAMhB,OAAOe,IAAjB;AACA,gBAAIE,WAAW,MAAMf,MAAMc,GAAN,EAAWZ,IAAX,CAAgBK,MAAMA,GAAGH,IAAH,EAAtB,CAArB;AACA,gBAAIY,cAAcD,SAAStB,OAAT,CAAiB,IAAIwB,MAAJ,CAAWtB,OAAX,EAAoB,GAApB,CAAjB,EAA2CF,OAA3C,CAAlB;AACA,gBAAIiB,GAAJ,EAAS;AACPQ,qBAAOC,MAAP,CAAc,kBAAkBN,IAAhC;AACA;AACD;;AAED,gBAAIO,aAAa,MAAMpB,MAAMc,GAAN,EAAW;AAChCO,sBAAQ,KADwB;AAEhCC,oBAAMN;AAF0B,aAAX,CAAvB;AAIA,gBAAII,WAAWG,MAAX,IAAqB,GAAzB,EAA8B;AAC5BL,qBAAOC,MAAP,CAAc,yBAAyBN,IAAvC;AACD,aAFD,MAEO;AACLK,qBAAOC,MAAP,CAAc,kCAAkCN,IAAhD,EAAsDO,WAAWG,MAAjE;AACD;AACF;AACD,iBAAOZ,KAAP;AACD;AA9CyB;;yBAAPrB,M","file":"search.js","sourcesContent":["/*MD # Repository-wide Search\n\n```\nExamples:\n   Search.search(\"lively-ball\")\n   Search.searchAndRename(\"lively-ball\",\"lively-baaaaall\")\n``` \nMD*/\n\nimport _ from 'src/external/lodash/lodash.js' \nimport FileIndex from \"src/client/fileindex.js\"\n\nexport default class Search {\n  \n  static getRoot() {\n    return lively4url.replace(/[^\\/]*$/,\"\")\n  }\n  \n  static async search(pattern, rootdirs = \"lively4-jens\", ) {\n    if (!pattern) throw new Error(\"Argument missing: not pattern\")\n    var root = this.getRoot()\n    var result = await fetch(root + \"_search/files\", {\n      headers:  { \n           \"searchpattern\": pattern,\n           \"rootdirs\": rootdirs,\n           \"excludes\": \"node_modules,src/external,vendor/\",\n        }\n    }).then(r => r.text())\n    return result.split(\"\\n\").filter(ea => ea).map( ea => ea.split(\":\"))\n  }\n \n  static async searchAndRename(pattern, replace, dry) {\n    if (!pattern) throw new Error(\"Argument missing: not pattern\")\n    if (!replace) throw new Error(\"Argument missing: not replace\")\n    var root = this.getRoot()\n\n    var files = _.uniq((await Search.search(pattern)).map(ea => ea[0]))\n    \n    for (let file of files) {\n      var url = root + file\n      var contents = await fetch(url).then(ea => ea.text())\n      var newcontents = contents.replace(new RegExp(pattern, \"g\"), replace)\n      if (dry) {\n        lively.notify(\"would modify \" + file)\n        continue\n      }\n      \n      var putRequest = await fetch(url, {\n        method: \"PUT\",\n        body: newcontents\n      })\n      if (putRequest.status == 200) {\n        lively.notify(\"Replaced pattern in \" + file)\n      } else {\n        lively.notify(\"PROBLEM replacing pattern in \" + file, putRequest.status)\n      }  \n    }\n    return files\n  }\n}"]}