import{o as e}from"./chunk-jRWAZmH_.js";import{n as t,t as n}from"./jsx-runtime-CEixWuwE.js";import{$ as r,Nn as i,Ot as a,Pn as o,_ as s}from"./axios-GfLWCH1-.js";import{c}from"./ctiAxios-uIjEIJkB.js";import{x as l}from"./notification-DWCxP4WF.js";import{t as u}from"./button-DFsG8yVP.js";import{t as d}from"./table-B9r972uM.js";import{t as f}from"./tooltip-BrjXarTG.js";import{t as p}from"./progress-C5oDb3ja.js";import{c as m,n as h,u as g}from"./chunk-4N6VE7H7-BhgXlIGA.js";import{a as _,i as v,l as y,r as b}from"./perQueryPersister-CUVw0SOo.js";import{c as x,t as S,u as C}from"./view.keys-eYak-JRg.js";import{H as w,I as ee,bt as T,dt as E,ft as D,mt as te,s as ne}from"./index-BXgKcVQP.js";import{n as re}from"./logs.queries-DrNd_GFf.js";var ie={icon:{tag:`svg`,attrs:{viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z`}}]},name:`database`,theme:`outlined`};o();var O=e(t()),ae=O.forwardRef(function(e,t){return O.createElement(a,i(i({},e),{},{ref:t,icon:ie}))}),k={icon:{tag:`svg`,attrs:{viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM496 208H312c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM312 544h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H312c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm328 244a40 40 0 1080 0 40 40 0 10-80 0z`}}]},name:`hdd`,theme:`outlined`};o();var A=O.forwardRef(function(e,t){return O.createElement(a,i(i({},e),{},{ref:t,icon:k}))}),j={icon:{tag:`svg`,attrs:{viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M464 720a48 48 0 1096 0 48 48 0 10-96 0zm16-304v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8zm475.7 440l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zm-783.5-27.9L512 239.9l339.8 588.2H172.2z`}}]},name:`warning`,theme:`outlined`};o();var M=O.forwardRef(function(e,t){return O.createElement(a,i(i({},e),{},{ref:t,icon:j}))}),N=async()=>{let e=(await l.keys()).filter(e=>e.startsWith(`${b}-`));return(await Promise.all(e.map(async e=>({storageKey:e,queryHash:e.slice(b.length+1),queryKey:_(e),deflatedBytes:(await l.getItem(e))?.byteLength??0})))).sort((e,t)=>t.deflatedBytes-e.deflatedBytes)},oe=async e=>{let t=await l.getItem(e);if(!t)return{storageKey:e,status:`absente`};try{let n=v(t);return{storageKey:e,status:n.state?.status??`—`,dataUpdatedAt:n.state?.dataUpdatedAt?new Date(n.state.dataUpdatedAt).toLocaleString():`—`,buster:n.buster??`—`,data:n.state?.data}}catch{return{storageKey:e,status:`illisible`}}},P=n(),F=e=>e>=1024*1024?`${(e/(1024*1024)).toFixed(2)} Mo`:`${(e/1024).toFixed(1)} Ko`,I=2e4,L=e=>e!=null&&s(e,S.runs()),R=e=>{let t=JSON.stringify(e,null,2)??`—`;return t.length<=I?t:`${t.slice(0,I)}\n\n… tronqué à ${I} caractères sur ${t.length}.`},se=()=>{let[e,t]=(0,O.useState)([]),[n,r]=(0,O.useState)(null),[i,a]=(0,O.useState)([]),o=(0,O.useRef)(null);(0,O.useEffect)(()=>{let e=async()=>{t(await N()),a(C())};e();let n=c.getQueryCache().subscribe(()=>{clearTimeout(o.current),o.current=setTimeout(e,1500)});return()=>{n(),clearTimeout(o.current)}},[]);let s=async e=>{if(r(e?{storageKey:e}:null),!e)return;let t=await oe(e);r(n=>n?.storageKey===e?t:n)},l=Date.now(),u=new Set(e.map(e=>e.queryHash)),d=new Set(i.map(e=>e.queryHash)),p=e=>!x(e,l)&&!u.has(e.queryHash),m=e.filter(e=>L(e.queryKey)&&!d.has(e.queryHash)).length,h=i.filter(p).length;return(0,P.jsxs)(`div`,{className:`debug-panel debug-cache`,children:[(m>0||h>0)&&(0,P.jsx)(T,{type:`warning`,showIcon:!0,style:{marginBottom:16},message:`Invariant args ⟺ disque rompu`,description:(0,P.jsxs)(P.Fragment,{children:[h>0&&(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`strong`,{children:[h,` args orphelin(s)`]}),` — args conservés sans entrée disque : la vue se ré-exécute automatiquement au F5 au lieu de rouvrir le drawer de filtres.`]}),m>0&&(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`strong`,{children:[m,` RUN non restaurable(s)`]}),` — présents sur disque sans leurs args : la query reste disabled au F5, le cache ne sert pas et la vue repart sur le drawer.`]}),(0,P.jsx)(`div`,{style:{fontSize:12,color:`#888`},children:`Les args périmés sont exclus du compte : ils ne sont élagués qu'au chargement, leur blob part plus tôt, et c'est normal. Reste transitoire aussi un écart d'une seconde après une exécution, le temps que le persister écrive (throttle).`})]})}),(0,P.jsx)(`h3`,{children:`Entrées disque (IndexedDB, une par query)`}),e.length===0?(0,P.jsx)(`p`,{children:`Aucune entrée persistée sur ce poste.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{children:[e.length,` entrée(s) ·`,` `,F(e.reduce((e,t)=>e+t.deflatedBytes,0)),` deflaté(s)`]}),(0,P.jsx)(`p`,{style:{fontSize:12,color:`#888`},children:`Status, date et contenu vivent dans le blob compressé : ils ne s'affichent qu'à l'ouverture d'une entrée, une seule à la fois.`}),(0,P.jsx)(D,{accordion:!0,onChange:s,children:e.map(e=>(0,P.jsx)(D.Panel,{header:(0,P.jsxs)(`span`,{children:[(0,P.jsx)(`strong`,{children:e.queryKey?JSON.stringify(e.queryKey):e.storageKey}),` — `,F(e.deflatedBytes),L(e.queryKey)&&!d.has(e.queryHash)&&(0,P.jsx)(f,{title:`Args de cette exécution absents : au F5 la query reste disabled, ce blob ne sera pas restauré`,children:(0,P.jsx)(E,{color:`orange`,style:{marginLeft:8},children:`non restaurable`})})]}),children:n?.storageKey!==e.storageKey||!(`status`in n)?(0,P.jsx)(`p`,{style:{margin:0,color:`#888`},children:`Lecture…`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{style:{margin:`0 0 8px`,fontSize:12},children:[n.status,` — `,n.dataUpdatedAt??`—`,` — buster `,n.buster??`—`]}),(0,P.jsx)(`pre`,{style:{margin:0,fontSize:11,overflow:`auto`},children:R(n.data)})]})},e.storageKey))})]}),(0,P.jsx)(`h3`,{style:{marginTop:24},children:`Args des RUN (localStorage)`}),(0,P.jsx)(`p`,{style:{fontSize:12,color:`#888`},children:`Seule copie persistée des valeurs de filtres d'une exécution — le blob disque ne contient que ses résultats. Sans elle, un RUN présent sur disque n'est pas restauré (la query reste disabled) et la vue repart sur le drawer.`}),i.length===0?(0,P.jsx)(`p`,{children:`Aucun args enregistré.`}):(0,P.jsx)(D,{children:i.map(e=>(0,P.jsx)(D.Panel,{header:(0,P.jsxs)(`span`,{children:[(0,P.jsx)(`strong`,{children:e.viewName??e.key}),` — `,e.shArgs??`—`,` — `,e.at?`${((l-e.at)/36e5).toFixed(1)} h`:`—`,x(e,l)?(0,P.jsx)(f,{title:`Périmée (âge ou journée de données) : élaguée au prochain chargement, son blob disque a déjà été supprimé à la lecture. Normal, pas une rupture.`,children:(0,P.jsx)(E,{style:{marginLeft:8},children:`périmée`})}):p(e)&&(0,P.jsx)(f,{title:`Args sans entrée disque : ils ré-enablent un RUN dont le blob est absent, donc une exécution serveur automatique là où l'utilisateur devrait retrouver le drawer`,children:(0,P.jsx)(E,{color:`red`,style:{marginLeft:8},children:`orphelin`})})]}),children:(0,P.jsx)(`pre`,{style:{margin:0,fontSize:11,overflow:`auto`},children:R(e.args)})},e.key))})]})},z=1024*1024,B=1024,V=2e3,H=50*B,U=9,W=50,G=e=>e>=z?`${(e/z).toFixed(1)} Mo`:`${(e/B).toFixed(1)} Ko`,K=e=>e==null?`—`:`${e.toFixed(1)} ms`,q=()=>{let e=performance.memory;return e?{used:e.usedJSHeapSize,total:e.totalJSHeapSize,limit:e.jsHeapSizeLimit}:null},J=-1,Y=e=>{let t=0,n=e=>{let n=typeof e;n===`string`?t+=e.length*2:n===`number`?t+=8:n===`boolean`&&(t+=4)};if(Array.isArray(e))e.forEach(e=>{(typeof e!=`object`||!e)&&n(e)});else for(let r in e){t+=r.length*2;let i=e[r];(typeof i!=`object`||!i)&&n(i)}return t},ce=e=>{let t=new Map,n=0;e.forEach((e,r)=>{let i=new Set,a=[e.state.data];for(;a.length>0;){let e=a.pop();if(typeof e!=`object`||!e||i.has(e))continue;i.add(e),n+=Y(e);let o=t.get(e);if(o===void 0?t.set(e,r):o!==r&&t.set(e,J),Array.isArray(e))e.forEach(e=>{typeof e==`object`&&e&&a.push(e)});else for(let t in e){let n=e[t];typeof n==`object`&&n&&a.push(n)}}});let r=0,i=0,a=Array(e.length).fill(0);return t.forEach((e,t)=>{let n=Y(t);r+=n,e===J?i+=n:a[e]+=n}),{uniqueBytes:r,naiveBytes:n,sharedBytes:i,ownBytesByIndex:a}},le=e=>{let t=c.getQueryCache().getAll(),n=ce(t),r=t.map((t,r)=>{let i=t.state.data,a=i===void 0?0:JSON.stringify(i).length,o=t.options?.persister!=null;return{key:r,queryKey:JSON.stringify(t.queryKey),bytes:a,ownBytes:n.ownBytesByIndex[r],status:t.state.status,observers:t.getObserversCount(),isPersisted:o,diskBytes:e.get(t.queryHash),dataUpdatedAt:t.state.dataUpdatedAt,...y.perQuery.lastOpsByHash.get(t.queryHash)??{},updatedAt:t.state.dataUpdatedAt?new Date(t.state.dataUpdatedAt).toLocaleTimeString():`—`}});return r.sort((e,t)=>t.bytes-e.bytes),{rows:r,dedup:n}},X=(e,t,n,r)=>{let i=e===void 0?0:JSON.stringify(e).length,a={key:t,field:n,bytes:i},o=typeof e==`object`&&!!e,s=Array.isArray(e);if(s&&e.length>W)return a.field=`${n} [${e.length} éléments]`,a;if(r<U&&o&&i>=H){let n=(s?e.map((e,t)=>[String(t),e]):Object.entries(e)).map(([e,n])=>X(n,`${t}.${e}`,e,r+1)).filter(e=>e.bytes>=H).sort((e,t)=>t.bytes-e.bytes);n.length>0&&(a.children=n)}return a},ue=e=>!e||typeof e!=`object`?[]:Object.entries(e).map(([e,t])=>X(t,e,e,1)).filter(e=>e.bytes>=H).sort((e,t)=>t.bytes-e.bytes),de={success:`green`,error:`red`,pending:`orange`},Z=({label:e,ms:t})=>t==null?null:(0,P.jsxs)(`div`,{style:{whiteSpace:`nowrap`},children:[(0,P.jsxs)(`span`,{style:{fontSize:11,color:`#888`},children:[e,` `]}),K(t)]}),fe=[{title:`Query`,dataIndex:`queryKey`,key:`queryKey`,ellipsis:!0,render:e=>(0,P.jsx)(f,{title:e,children:(0,P.jsx)(`code`,{style:{fontSize:11},children:e})})},{title:`Poids sérialisé`,dataIndex:`bytes`,key:`bytes`,width:130,align:`right`,render:e=>G(e),sorter:(e,t)=>e.bytes-t.bytes,defaultSortOrder:`descend`},{title:`Propre (RAM)`,dataIndex:`ownBytes`,key:`ownBytes`,width:130,align:`right`,render:(e,t)=>(0,P.jsx)(f,{title:`RAM libérée en évinçant cette query (objets atteignables uniquement par elle). Un DESC construit par l'appli partage ses nœuds avec les globals → poids propre très faible malgré un gros poids sérialisé ; le même DESC relu du disque ne partage plus rien → poids propre plein. Voir « Origine RAM ».`,children:(0,P.jsx)(`span`,{style:{color:e<t.bytes/2?`#3f8600`:void 0},children:G(e)})}),sorter:(e,t)=>e.ownBytes-t.ownBytes},{title:`Disque`,dataIndex:`diskBytes`,key:`diskBytes`,width:130,align:`right`,sorter:(e,t)=>(e.diskBytes??0)-(t.diskBytes??0),render:(e,t)=>e==null?t.isPersisted?(0,P.jsx)(f,{title:`Déclare le persister mais rien sur disque. Transitoire juste après un fetch (écriture throttlée) ; persistant, c'est un quota dépassé — voir les échecs d'écriture ci-dessous.`,children:(0,P.jsx)(E,{color:`orange`,children:`absente`})}):(0,P.jsx)(`span`,{children:`—`}):(0,P.jsx)(f,{title:t.isPersisted?`Taille deflatée sur disque : restaurable au prochain montage.`:`Blob sur disque alors que la query ne déclare plus le persister : reste jusqu'au prochain balayage ou changement de buster.`,children:(0,P.jsx)(`span`,{style:{color:t.isPersisted?void 0:`#cf1322`},children:G(e)})})},{title:`Origine RAM`,dataIndex:`restoredAt`,key:`restoredAt`,width:130,align:`center`,render:(e,t)=>{if(!t.isPersisted)return(0,P.jsx)(`span`,{children:`—`});if(e==null)return(0,P.jsx)(f,{title:`Objet construit au fetch et jamais remonté du disque depuis le chargement : il partage ses nœuds avec les globals, d'où un poids propre faible malgré un gros poids sérialisé.`,children:(0,P.jsx)(E,{color:`green`,children:`appli`})});let n=new Date(e).toLocaleTimeString(),r=t.dataUpdatedAt>e;return(0,P.jsx)(f,{title:r?`Restaurée à ${n} puis refetchée : la RAM est de nouveau un objet frais, le partage de refs est retrouvé.`:`Remontée du disque à ${n} : la RAM est la copie issue du JSON.parse, qui ne partage plus ses nœuds avec les globals — d'où un poids propre plein.`,children:(0,P.jsx)(E,{color:r?`blue`:`volcano`,children:r?`refetchée`:`disque`})})}},{title:(0,P.jsx)(f,{title:`Main thread payé par CETTE query pour traverser le pont. « écrit » = stringify + deflate vers IndexedDB ; « lu » = inflate + parse vers TanStack. Dernière opération de chaque sens, pas un cumul — vide si aucune depuis le chargement (blob d'une session précédente).`,children:`Pont RAM↔disque`}),key:`bridgeMs`,width:140,align:`right`,sorter:(e,t)=>(e.persistMs??0)+(e.restoreMs??0)-((t.persistMs??0)+(t.restoreMs??0)),render:(e,t)=>t.persistMs==null&&t.restoreMs==null?(0,P.jsx)(`span`,{children:`—`}):(0,P.jsx)(f,{title:(0,P.jsxs)(P.Fragment,{children:[t.persistMs!=null&&(0,P.jsxs)(`div`,{children:[`écrit : stringify `,K(t.stringifyMs),` + deflate`,` `,K(t.deflateMs)]}),t.restoreMs!=null&&(0,P.jsxs)(`div`,{children:[`lu : inflate `,K(t.inflateMs),` + parse `,K(t.parseMs)]})]}),children:(0,P.jsxs)(`div`,{children:[(0,P.jsx)(Z,{label:`écrit`,ms:t.persistMs}),(0,P.jsx)(Z,{label:`lu`,ms:t.restoreMs})]})})},{title:`Statut`,dataIndex:`status`,key:`status`,width:100,align:`center`,render:e=>(0,P.jsx)(E,{color:de[e],children:e})},{title:`Observateurs`,dataIndex:`observers`,key:`observers`,width:130,align:`center`,render:e=>e===0?(0,P.jsx)(f,{title:`Aucun composant ne l'affiche : gardée vivante par gcTime, candidate à l'éviction`,children:(0,P.jsx)(E,{color:`orange`,children:`0 (gcTime)`})}):(0,P.jsx)(E,{color:`green`,children:e})},{title:(0,P.jsx)(f,{title:`dataUpdatedAt. Pour une query remontée du disque, c'est l'heure de son fetch D'ORIGINE, pas celle de la restauration : le persister repose l'horodatage persisté. Cette colonne ne dit donc pas quand la RAM a été peuplée — « Origine RAM » le dit.`,children:`MàJ`}),dataIndex:`updatedAt`,key:`updatedAt`,width:110}],pe=({rows:e,totalBytes:t})=>!e||e.length===0?(0,P.jsxs)(`span`,{style:{color:`#888`,fontSize:12},children:[`Aucune branche > `,G(H),` à ventiler.`]}):(0,P.jsx)(d,{size:`small`,columns:[{title:`Sous-champ`,dataIndex:`field`,key:`field`,render:e=>(0,P.jsx)(`code`,{style:{fontSize:11},children:e})},{title:`Poids`,dataIndex:`bytes`,key:`bytes`,width:120,align:`right`,render:e=>G(e)},{title:`% de la query`,dataIndex:`bytes`,key:`pct`,width:200,render:e=>(0,P.jsx)(p,{percent:t?Math.round(e/t*100):0,size:`small`})}],dataSource:e,pagination:!1,defaultExpandAllRows:!0}),me=()=>{let[e,t]=(0,O.useState)(q),[n,r]=(0,O.useState)(null),[i,a]=(0,O.useState)(null),[o,s]=(0,O.useState)(!1),[l,f]=(0,O.useState)({}),[m,h]=(0,O.useState)(()=>({...y}));(0,O.useEffect)(()=>{let e=setInterval(()=>{t(q()),h({perQuery:{...y.perQuery}})},V);return()=>clearInterval(e)},[]);let g=async()=>{s(!0),f({});let e=await N(),{rows:t,dedup:n}=le(new Map(e.map(e=>[e.queryHash,e.deflatedBytes])));r(t),a(n),s(!1)},_=(e,t)=>{if(!e||l[t.queryKey])return;let n=c.getQueryData(JSON.parse(t.queryKey));f(e=>({...e,[t.queryKey]:ue(n)}))},v=n?n.reduce((e,t)=>e+t.bytes,0):0,b=n?n.filter(e=>e.isPersisted).length:0,x=n?n.filter(e=>e.isPersisted&&e.diskBytes!=null).length:0,S=n?n.filter(e=>e.observers===0).length:0,C=e?Math.round(e.used/e.limit*100):0;return(0,P.jsxs)(`div`,{className:`debug-panel debug-memory`,children:[(0,P.jsxs)(`div`,{className:`debug-memory-tiles`,children:[(0,P.jsxs)(`section`,{children:[(0,P.jsx)(`h3`,{children:`Heap JavaScript (RAM de l'onglet)`}),e?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{children:[`Utilisé : `,(0,P.jsx)(`strong`,{children:G(e.used)}),` · Alloué :`,` `,G(e.total),` · Limite : `,G(e.limit)]}),(0,P.jsx)(p,{percent:C,status:C>80?`exception`:`normal`}),(0,P.jsxs)(`p`,{style:{fontSize:12,color:`#888`},children:[`Rafraîchi toutes les `,V/1e3,` s. Valeur au repos = RAM stationnaire.`]})]}):(0,P.jsx)(T,{type:`info`,showIcon:!0,message:`performance.memory indisponible`,description:`Ce navigateur n'expose pas le heap JS (API Chrome non standard). La mesure du cache mémoire ci-dessous reste disponible.`})]}),(0,P.jsxs)(`section`,{children:[(0,P.jsx)(`h3`,{children:`Pont RAM↔disque (persister) — coût CPU`}),(0,P.jsxs)(`p`,{style:{fontSize:13},children:[(0,P.jsxs)(`strong`,{children:[m.perQuery.persistCount,` écriture(s)`]}),` pour`,` `,(0,P.jsx)(`strong`,{children:K(m.perQuery.persistMsTotal)}),` de main thread cumulé ·`,` `,(0,P.jsxs)(`strong`,{children:[m.perQuery.restoreCount,` restauration(s)`]}),(0,P.jsxs)(`span`,{style:{color:`#888`},children:[` `,`— depuis le chargement. Le cumul en écriture est la mesure à suivre chez un client ; les restaurations sont paresseuses (au montage, RAM vide), donc leur compte suit ce qui a été affiché, sans valeur attendue.`]})]}),(0,P.jsxs)(`p`,{style:{fontSize:13},children:[`Échecs d'écriture disque (quota) :`,` `,m.perQuery.writeErrorCount===0?(0,P.jsx)(`span`,{style:{color:`#888`},children:`aucun`}):(0,P.jsxs)(`strong`,{style:{color:`#cf1322`},children:[m.perQuery.writeErrorCount,` — `,m.perQuery.lastWriteError?.message,` sur`,` `,(0,P.jsx)(`code`,{style:{fontSize:11},children:m.perQuery.lastWriteError?.storageKey})]})]})]})]}),(0,P.jsx)(`h3`,{style:{marginTop:24},children:`Cache TanStack Query en mémoire`}),(0,P.jsx)(u,{type:`primary`,loading:o,onClick:g,children:`Analyser le cache mémoire`}),(0,P.jsx)(`span`,{style:{marginLeft:12,fontSize:12,color:`#888`},children:`Fait un JSON.stringify de toutes les données : peut figer brièvement si le cache est volumineux. Lit aussi la taille de chaque blob disque, ce qui les charge le temps de la mesure — le heap juste après n'est donc pas une valeur au repos.`}),n&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{style:{marginTop:16},children:[`Poids sérialisé total : `,(0,P.jsx)(`strong`,{children:G(v)}),` `,`· `,n.length,` queries · `,b,` déclarent le persister, dont `,x,` écrites sur disque · `,S,` sans observateur (maintenues par gcTime)`]}),i&&(0,P.jsxs)(`p`,{style:{marginTop:-8},children:[(0,P.jsx)(`strong`,{children:`RAM réelle estimée (dédupliquée) :`}),` `,(0,P.jsx)(`strong`,{style:{color:`#3f8600`},children:G(i.uniqueBytes)}),` `,`— chaque objet compté 1× · dont`,` `,(0,P.jsx)(`strong`,{children:G(i.sharedBytes)}),` partagés entre ≥2 queries · vs `,G(i.naiveBytes),` en re-comptant les refs partagées (facteur ×`,i.uniqueBytes?(i.naiveBytes/i.uniqueBytes).toFixed(1):`1`,`).`,(0,P.jsx)(`br`,{}),(0,P.jsx)(`span`,{style:{fontSize:12,color:`#888`},children:`Un facteur élevé est normal quand les DESC partagent leurs nœuds treeData/globals ; il tombe à ×1 sur des données relues du disque, qui ne partagent plus rien.`})]}),(0,P.jsxs)(`p`,{style:{fontSize:12,color:`#888`,marginTop:-8},children:[`Déplier une ligne ventile son poids par sous-champ (branches >`,` `,G(H),`, `,U,` niveaux max).`]}),(0,P.jsx)(d,{size:`small`,columns:fe,dataSource:n,pagination:{pageSize:20},expandable:{rowExpandable:e=>e.bytes>=H,onExpand:_,expandedRowRender:e=>(0,P.jsx)(pe,{rows:l[e.queryKey],totalBytes:e.bytes})}})]})]})},he=[{title:`Id`,dataKey:`id`},{title:`Date`,dataKey:`createdAt`,width:150},{title:`Code`,dataKey:`code`,width:100},{title:`Count`,dataKey:`count`,width:100},{title:`Erreur`,dataKey:`error`,width:200},{title:`Texte`,dataKey:`text`,width:200},{title:`Message`,dataKey:`message`,width:200},{title:`Utilisateur`,dataKey:`user`,dataGetter:({rowData:e})=>e.extra.user,width:100},{title:`URL`,dataKey:`url`,dataGetter:({rowData:e})=>e.extra.url,width:300}].map(e=>({width:50,resizable:!0,key:e.dataKey,...e})),ge=({rowData:e,column:t})=>({onClick:n=>{n.preventDefault();let i=document.createElement(`textarea`);i.value=e[t.dataKey],document.body.appendChild(i),i.select(),document.execCommand(`copy`),document.body.removeChild(i),r.success(`Copié !`)}}),Q=[{key:`serveur`,label:(0,P.jsxs)(`span`,{children:[(0,P.jsx)(M,{}),` Logs serveur`]}),children:(0,P.jsx)(()=>{let e=re(),t=e.data??[];return(0,P.jsxs)(`div`,{className:`debug-panel debug-panel--table`,children:[(0,P.jsxs)(`div`,{className:`debug-panel-toolbar`,children:[(0,P.jsx)(u,{icon:(0,P.jsx)(w,{}),loading:e.isFetching,onClick:()=>{e.refetch()},children:`Recharger`}),(0,P.jsxs)(`span`,{className:`debug-panel-hint`,children:[t.length,` erreur(s) remontée(s) par les postes clients · un clic sur une cellule la copie.`]})]}),(0,P.jsx)(`div`,{className:`debug-logs-table`,children:(0,P.jsx)(ne,{rowKey:`id`,columns:he,data:t,loading:e.isFetching,cellProps:ge})})]})},{})},{key:`cache`,label:(0,P.jsxs)(`span`,{children:[(0,P.jsx)(A,{}),` Cache persistant`]}),children:(0,P.jsx)(se,{})},{key:`memoire`,label:(0,P.jsxs)(`span`,{children:[(0,P.jsx)(ae,{}),` Mémoire`]}),children:(0,P.jsx)(me,{})}],$=Q[0].key,_e=new Set([`serveur`]),ve=()=>{let e=m(),t=g(),n=ee().data?.session,r=t[`*`];return n.CONNECTEDUSER===`cti`?Q.some(e=>e.key===r)?(0,P.jsxs)(`div`,{className:`cti-page`,children:[(0,P.jsx)(`div`,{className:`page-header`,children:(0,P.jsx)(`div`,{className:`header-title`,children:`Debug`})}),(0,P.jsx)(`div`,{className:`page-content`,children:(0,P.jsx)(te,{className:_e.has(r)?`debug-tabs debug-tabs--fill`:`debug-tabs`,activeKey:r,items:Q,destroyInactiveTabPane:!0,onChange:t=>{e(`/outils/debug/${t}`)}})})]}):(0,P.jsx)(h,{to:`/outils/debug/${$}`,replace:!0}):(0,P.jsx)(h,{to:`/accueil`,replace:!0})};export{ve as default};
|