{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-synctool/src/client/favorites.js"],"names":["focalStorage","removeMainDirectory","toFullURL","MAIN_DIRECTORY","lively4url","MATCH_MAIN_DIRECTORY","RegExp","STORAGE_KEY","url","URL","toString","fullURL","replace","Favorites","get","urls","getItem","fullURLs","map","set","relativeURLs","setItem","has","includes","add","newFullURL","Set","Array","from","remove","delete","toggle"],"mappings":";;;;;;AAAOA,kB;;;;;;;;;;;AAUEC,8D;;;;;;;;;;;;;AAJAC,oD;;;;;;;;;;;;;AANFF,uD;;;;;;;;;AAEP,YAAMG,iBAAiBC,aAAa,GAApC;;;;;;;AAAMD,yD;;;;;;;AACN,YAAME,uBAAuB,IAAIC,MAAJ,CAAW,MAAMH,cAAjB,EAAiC,GAAjC,CAA7B;;;;;;;AAAME,+D;;;;;;;AACN,YAAME,cAAc,gBAApB;;;;;;;;AAAMA,sD;;;;;;;AAEN,eAASL,SAAT,CAAmBM,GAAnB,EAAwB;AACtB,eAAO,IAAIC,GAAJ,CAAQD,GAAR,EAAaL,cAAb,EAA6BO,QAA7B,EAAP;AACD;;AAED,eAAST,mBAAT,CAA6BU,OAA7B,EAAsC;AACpC,eAAOA,QAAQC,OAAR,CAAgBP,oBAAhB,EAAsC,EAAtC,CAAP;AACD;;AAEc,YAAMQ,SAAN,CAAgB;AAC7B,qBAAaC,GAAb,GAAmB;AACjB,gBAAMC,OAAO,OAAMf,aAAagB,OAAb,CAAqBT,WAArB,CAAN,KAA2C,EAAxD;AACA,gBAAMU,WAAWF,KAAKG,GAAL,CAAShB,SAAT,CAAjB;AACA,iBAAOe,QAAP;AACD;;AAED,qBAAaE,GAAb,CAAiBF,QAAjB,EAA2B;AACzB,gBAAMG,eAAeH,SAASC,GAAT,CAAajB,mBAAb,CAArB;AACA,iBAAOD,aAAaqB,OAAb,CAAqBd,WAArB,EAAkCa,YAAlC,CAAP;AACD;;AAED,qBAAaE,GAAb,CAAiBX,OAAjB,EAA0B;AACxB,iBAAO,CAAC,MAAM,KAAKG,GAAL,EAAP,EAAmBS,QAAnB,CAA4BZ,OAA5B,CAAP;AACD;;AAED,qBAAaa,GAAb,CAAiBC,UAAjB,EAA6B;AAC3B,gBAAMR,WAAW,IAAIS,GAAJ,EAAQ,MAAM,KAAKZ,GAAL,EAAd,EAAjB;AACAG,mBAASO,GAAT,CAAaC,UAAb;AACA,iBAAO,KAAKN,GAAL,CAASQ,MAAMC,IAAN,CAAWX,QAAX,CAAT,CAAP;AACD;;AAED,qBAAaY,MAAb,CAAoBlB,OAApB,EAA6B;AAC3B,gBAAMM,WAAW,IAAIS,GAAJ,EAAQ,MAAM,KAAKZ,GAAL,EAAd,EAAjB;AACAG,mBAASa,MAAT,CAAgBnB,OAAhB;AACA,iBAAO,KAAKQ,GAAL,CAASQ,MAAMC,IAAN,CAAWX,QAAX,CAAT,CAAP;AACD;;AAED,qBAAac,MAAb,CAAoBpB,OAApB,EAA6B;AAC3B,cAAG,MAAM,KAAKW,GAAL,CAASX,OAAT,CAAT,EAA4B;AAC1B,kBAAM,KAAKkB,MAAL,CAAYlB,OAAZ,CAAN;AACD,WAFD,MAEO;AACL,kBAAM,KAAKa,GAAL,CAASb,OAAT,CAAN;AACD;AACF;AAlC4B;;yBAAVE,S;;;;;;;;6BAAAA,0C","file":"favorites.js","sourcesContent":["import focalStorage from \"src/external/focalStorage.js\"\n\nconst MAIN_DIRECTORY = lively4url + '/';\nconst MATCH_MAIN_DIRECTORY = new RegExp('^' + MAIN_DIRECTORY, 'i');\nconst STORAGE_KEY = 'favorite-files';\n\nfunction toFullURL(url) {\n  return new URL(url, MAIN_DIRECTORY).toString();\n}\n\nfunction removeMainDirectory(fullURL) {\n  return fullURL.replace(MATCH_MAIN_DIRECTORY, '');\n}\n\nexport default class Favorites {\n  static async get() {\n    const urls = await focalStorage.getItem(STORAGE_KEY) || [];\n    const fullURLs = urls.map(toFullURL);\n    return fullURLs;\n  }\n\n  static async set(fullURLs) {\n    const relativeURLs = fullURLs.map(removeMainDirectory);\n    return focalStorage.setItem(STORAGE_KEY, relativeURLs);\n  }\n  \n  static async has(fullURL) {\n    return (await this.get()).includes(fullURL);\n  }\n\n  static async add(newFullURL) {\n    const fullURLs = new Set(await this.get());\n    fullURLs.add(newFullURL)\n    return this.set(Array.from(fullURLs));\n  }\n\n  static async remove(fullURL) {\n    const fullURLs = new Set(await this.get());\n    fullURLs.delete(fullURL)\n    return this.set(Array.from(fullURLs));\n  }\n  \n  static async toggle(fullURL) {\n    if(await this.has(fullURL)) {\n      await this.remove(fullURL);\n    } else {\n      await this.add(fullURL);\n    }\n  }\n}\n"]}