1import{supabase as e}from"./supabase-client-2CObC91N.js";import{C as r}from"./curatedEchoBoards-BmmWNOwz.js";import{s as t}from"./boardPreviewPolicy-CiaGHKpD.js";const i=e=>t(e,4),o=(e,r)=>{const t=new Map;for(const a of e){if(!a.parent_folder_id)continue;const e=t.get(a.parent_folder_id)||[];e.push(a),t.set(a.parent_folder_id,e)}const i=new Set,o=[...t.get(r)||[]];for(;o.length>0;){const e=o.pop();e&&!i.has(e.id)&&(i.add(e.id),o.push(...t.get(e.id)||[]))}return i};async function a(){const t=Array.from(new Set(r.map(e=>e.ownerUsername))),a=r.filter(e=>"folder"!==e.kind),n=r.filter(e=>"folder"===e.kind),l=a.map(e=>e.slug),{data:d,error:s}=await e.from("profiles").select("id, username, avatar_url").in("username",t);if(s)throw s;const u=new Map((d||[]).map(e=>[String(e.username||""),{id:String(e.id||""),username:String(e.username||""),avatar_url:"string"==typeof e.avatar_url?e.avatar_url:null}])),_=Array.from(new Set(Array.from(u.values()).map(e=>e.id).filter(Boolean)));if(0===_.length)return[];const p=l.length>0?e.from("boards").select("id, name, slug, description, color, icon, user_id, is_mature, quality_score, memory_count, updated_at, published_at, is_public").in("user_id",_).in("slug",l).eq("is_public",!0):Promise.resolve({data:[],error:null}),[m,f]=await Promise.all([p,Promise.all(t.map(async r=>{if(n.every(e=>e.ownerUsername!==r))return[r,[]];const{data:t,error:i}=await e.rpc("get_public_board_folders",{p_username:r});return i?[r,[]]:[r,t||[]]}))]),{data:c,error:g}=m;if(g)throw g;const w=new Map(f),v=f.flatMap(([,e])=>e),{data:y,error:b}=n.length>0&&v.length>0?await e.from("boards").select("id, folder_id, user_id, updated_at, published_at").in("user_id",_).eq("is_public",!0):{data:[],error:null};if(b)throw b;const h=(y||[]).map(e=>({id:String(e.id||""),folder_id:"string"==typeof e.folder_id?e.folder_id:null,user_id:"string"==typeof e.user_id?e.user_id:null,updated_at:"string"==typeof e.updated_at?e.updated_at:null,published_at:"string"==typeof e.published_at?e.published_at:null})).filter(e=>e.id&&e.folder_id),S=(c||[]).map(e=>"string"==typeof(null==e?void 0:e.id)?e.id:null).filter(e=>Boolean(e)),[M,U]=await Promise.allSettled([S.length>0?e.rpc("get_board_counts_for_ids",{p_board_ids:S}):Promise.resolve({data:[],error:null}),S.length>0?e.rpc("get_curated_landing_board_previews",{p_board_ids:S,p_limit:4}):Promise.resolve({data:[],error:null})]),P="fulfilled"!==M.status||M.value.error?[]:M.value.data,A="fulfilled"!==U.status||U.value.error?[]:U.value.data,q=new Map((P||[]).map(e=>[String(e.board_id),{memory_count:Number(e.memory_count||0),follower_count:Number(e.follower_count||0),is_following:Boolean(e.is_following)}])),j=new Map((A||[]).map(e=>[String(e.board_id),i(e.preview_media)])),k=Array.from(new Set(h.map(e=>e.id))),B=k.length>0?await e.rpc("get_board_previews",{p_board_ids:k,p_limit:4}):{data:[],error:null},N=new Map((!B.error&&Array.isArray(B.data)?B.data:[]).map(e=>[String(e.board_id),i(e.preview_media)])),$=new Map((c||[]).map(e=>[String(e.slug||""),e]));return r.flatMap(e=>{if("folder"===e.kind){const r=u.get(e.ownerUsername),t=w.get(e.ownerUsername)||[],i=t.find(r=>{return i=t,o=r.id,((e,r)=>{if(!r)return[];const t=new Map(e.map(e=>[e.id,e])),i=[],o=new Set;let a=t.get(r);for(;a&&!o.has(a.id);)o.add(a.id),i.unshift(a),a=a.parent_folder_id?t.get(a.parent_folder_id):void 0;return i})(i,o).map(e=>e.name.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"folder").join("/")===e.slug;var i,o});if(!i)return[];const a=new Set([i.id,...Array.from(o(t,i.id))]),n=h.filter(e=>e.folder_id&&a.has(e.folder_id)).sort((e,r)=>{const t=new Date(e.published_at||e.updated_at||0).getTime();return new Date(r.published_at||r.updated_at||0).getTime()-t}),l=n.find(e=>(N.get(e.id)||[]).length>0)||n[0]||null;return[{id:`curated-folder-${e.ownerUsername}-${e.slug}`,curated_kind:"folder",folder_id:i.id,folder_private_path:`/boards/${e.slug.split("/").map(encodeURIComponent).join("/")}`,folder_preview_memory_id:i.preview_memory_id||null,folder_board_count:n.length,folder_preview_board:l?{id:l.id,preview_media:N.get(l.id)||[]}:null,name:String(i.name||e.name),slug:e.slug,description:e.description,color:"#ef4444",icon:"folder",owner_id:(null==r?void 0:r.id)||i.user_id,owner_username:(null==r?void 0:r.username)||e.ownerUsername,owner_avatar:(null==r?void 0:r.avatar_url)||null,is_following:!1,is_mature:!1,quality_score:0,memory_count:n.length,follower_count:0,preview_media:l&&N.get(l.id)||[],last_memory_at:(null==l?void 0:l.published_at)||(null==l?void 0:l.updated_at)||i.updated_at||i.created_at||void 0}]}const r=$.get(e.slug);
1if(!(null==r?void 0:r.id))return[];const t=u.get(e.ownerUsername),i=q.get(String(r.id));return[{curated_kind:"board",id:String(r.id),name:String(r.name||e.name),slug:"string"==typeof r.slug?r.slug:e.slug,description:"string"==typeof r.description?r.description:e.description,color:"string"==typeof r.color?r.color:"#ef4444",icon:"string"==typeof r.icon?r.icon:void 0,owner_id:"string"==typeof r.user_id?r.user_id:null==t?void 0:t.id,owner_username:(null==t?void 0:t.username)||e.ownerUsername,owner_avatar:(null==t?void 0:t.avatar_url)||null,is_following:(null==i?void 0:i.is_following)||!1,is_mature:Boolean(r.is_mature),quality_score:Number(r.quality_score||0),memory_count:(null==i?void 0:i.memory_count)??Math.max(0,Number(r.memory_count||0)),follower_count:(null==i?void 0:i.follower_count)||0,preview_media:j.get(String(r.id))||[],last_memory_at:r.published_at||r.updated_at||void 0}]})}export{a as loadCuratedEchoBoards,i as normalizeCuratedBoardPreviewMedia};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.