@lunora/studio 1.0.0-alpha.300 → 1.0.0-alpha.301

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/index.mjs +1 -1
  2. package/dist/packem_chunks/ExportImportPanel.mjs +1 -1
  3. package/dist/packem_chunks/FunctionRunner.mjs +1 -1
  4. package/dist/packem_chunks/MetricsPanel.mjs +1 -1
  5. package/dist/packem_chunks/TableEditor.mjs +1 -1
  6. package/dist/packem_chunks/payments-panel.mjs +1 -1
  7. package/dist/packem_chunks/permissions-panel.mjs +1 -1
  8. package/dist/packem_shared/{DataBrowser-C14aRmmR.mjs → DataBrowser-E68QfaST.mjs} +1 -1
  9. package/dist/standalone/{chunk-LUNNBKUL.js → chunk-24T422OY.js} +1 -1
  10. package/dist/standalone/{chunk-KUFFHQPR.js → chunk-2LJRI76T.js} +1 -1
  11. package/dist/standalone/{chunk-GMIJJY43.js → chunk-2SGUZAFC.js} +1 -1
  12. package/dist/standalone/chunk-2TP3H244.js +1 -0
  13. package/dist/standalone/{chunk-PTPKBYI5.js → chunk-3M7IXVST.js} +1 -1
  14. package/dist/standalone/{chunk-RUBMOQH2.js → chunk-45M2SFAD.js} +1 -1
  15. package/dist/standalone/{chunk-F2HHJDID.js → chunk-4FAWIWSZ.js} +1 -1
  16. package/dist/standalone/{chunk-VHLKUGQL.js → chunk-5WGHX3BJ.js} +1 -1
  17. package/dist/standalone/{chunk-IHPBU2X4.js → chunk-6JBF34XO.js} +1 -1
  18. package/dist/standalone/{chunk-VAITO6LM.js → chunk-6PDZ5QSX.js} +1 -1
  19. package/dist/standalone/{chunk-6K53DCPW.js → chunk-6X76NBY7.js} +1 -1
  20. package/dist/standalone/{chunk-47INSVZQ.js → chunk-76CINMOE.js} +1 -1
  21. package/dist/standalone/{chunk-2XNKJZR7.js → chunk-7IIQBGQK.js} +1 -1
  22. package/dist/standalone/{chunk-IT6VW5MM.js → chunk-7NWLYOGL.js} +1 -1
  23. package/dist/standalone/{chunk-G6DD6BH4.js → chunk-7PBPAGC2.js} +2 -2
  24. package/dist/standalone/{chunk-YSIOHDX6.js → chunk-APWVPIZV.js} +1 -1
  25. package/dist/standalone/chunk-AZHAXSRA.js +1 -0
  26. package/dist/standalone/chunk-B6WI7CHG.js +1 -0
  27. package/dist/standalone/{chunk-GUAU5JHQ.js → chunk-BXUP4USX.js} +1 -1
  28. package/dist/standalone/{chunk-Q4UISMBL.js → chunk-CG2BXM3M.js} +1 -1
  29. package/dist/standalone/chunk-CZBYO7MB.js +1 -0
  30. package/dist/standalone/{chunk-G3MCWHRS.js → chunk-D2MWAZIR.js} +1 -1
  31. package/dist/standalone/{chunk-E6E3H5HA.js → chunk-D4KVIMPR.js} +1 -1
  32. package/dist/standalone/{chunk-VMLLR636.js → chunk-DRFPILA5.js} +1 -1
  33. package/dist/standalone/{chunk-6EZBEZ7D.js → chunk-E3LQQON3.js} +1 -1
  34. package/dist/standalone/chunk-F4CHPK5T.js +1 -0
  35. package/dist/standalone/{chunk-5AORAJFI.js → chunk-F7CMFUN5.js} +1 -1
  36. package/dist/standalone/{chunk-LOKJEEUS.js → chunk-FSHFJSTY.js} +1 -1
  37. package/dist/standalone/chunk-G6EOMCDE.js +9 -0
  38. package/dist/standalone/{chunk-APEMVK3W.js → chunk-HLFK7BP6.js} +1 -1
  39. package/dist/standalone/{chunk-AXU6L4JV.js → chunk-HV77I2E5.js} +1 -1
  40. package/dist/standalone/chunk-HX5A6HC7.js +1 -0
  41. package/dist/standalone/{chunk-AUO3CXYH.js → chunk-J6GRPDN3.js} +1 -1
  42. package/dist/standalone/{chunk-DG4MKUNK.js → chunk-JVZG34HR.js} +1 -1
  43. package/dist/standalone/{chunk-IMBXNH5M.js → chunk-K76MCCBF.js} +1 -1
  44. package/dist/standalone/{chunk-CQILUV6T.js → chunk-KNVOVRC7.js} +1 -1
  45. package/dist/standalone/{chunk-6MHPVN2Q.js → chunk-L7XFE7ZQ.js} +1 -1
  46. package/dist/standalone/{chunk-FZIZZO3M.js → chunk-MGVUIQTE.js} +3 -3
  47. package/dist/standalone/{chunk-FJKOBDDS.js → chunk-N62W6SXC.js} +1 -1
  48. package/dist/standalone/{chunk-3CTF6VCQ.js → chunk-N7ZLG6XW.js} +1 -1
  49. package/dist/standalone/{chunk-VZWZIIP6.js → chunk-NNYTSWRW.js} +1 -1
  50. package/dist/standalone/{chunk-KCNSN6ZF.js → chunk-PD2VK52L.js} +1 -1
  51. package/dist/standalone/{chunk-FMJPASTV.js → chunk-PSPU5HSH.js} +1 -1
  52. package/dist/standalone/{chunk-C3TKN336.js → chunk-RJWFF2KE.js} +1 -1
  53. package/dist/standalone/{chunk-VAVZCMJZ.js → chunk-TVUR3FJ4.js} +1 -1
  54. package/dist/standalone/{chunk-YIDRRLUF.js → chunk-U5ESUXRC.js} +1 -1
  55. package/dist/standalone/{chunk-PPX63XHJ.js → chunk-UD4LDX2S.js} +1 -1
  56. package/dist/standalone/{chunk-OWD32MWS.js → chunk-UX6CSZ3D.js} +1 -1
  57. package/dist/standalone/{chunk-CKEE7CZ6.js → chunk-V3A4MT5T.js} +1 -1
  58. package/dist/standalone/{chunk-XTUTKZ2F.js → chunk-VNLBEXJH.js} +1 -1
  59. package/dist/standalone/{chunk-IALIMFV2.js → chunk-VOL6MWI6.js} +1 -1
  60. package/dist/standalone/{chunk-G7O4XEPM.js → chunk-WZ44V6FP.js} +1 -1
  61. package/dist/standalone/{chunk-3T5F2LKG.js → chunk-XIAH5TMC.js} +1 -1
  62. package/dist/standalone/{chunk-A4GRIXDU.js → chunk-XILJ2PEQ.js} +1 -1
  63. package/dist/standalone/{chunk-57L3MFDQ.js → chunk-XNN6PY57.js} +1 -1
  64. package/dist/standalone/{chunk-4FFZMCLM.js → chunk-YEB2U5KT.js} +1 -1
  65. package/dist/standalone/{chunk-GBS5ACLN.js → chunk-YQL6PSXT.js} +1 -1
  66. package/dist/standalone/{chunk-P5OQ2T7O.js → chunk-YRYRCORI.js} +1 -1
  67. package/dist/standalone/{chunk-P2I22USO.js → chunk-YZPYGQZ5.js} +1 -1
  68. package/dist/standalone/studio.js +1 -1
  69. package/package.json +6 -5
  70. package/dist/packem_shared/wire-codec-B2DgCbKt.mjs +0 -1
  71. package/dist/standalone/chunk-23DA2KK5.js +0 -9
  72. package/dist/standalone/chunk-2WCD2IHE.js +0 -1
  73. package/dist/standalone/chunk-4QO356DN.js +0 -1
  74. package/dist/standalone/chunk-C5NU4UZY.js +0 -1
  75. package/dist/standalone/chunk-ROX6INV5.js +0 -1
  76. package/dist/standalone/chunk-UIC7EN6V.js +0 -1
  77. package/dist/standalone/chunk-UVUKVNCP.js +0 -1
  78. package/dist/standalone/chunk-ZG4KF3SJ.js +0 -1
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{StudioApp as r}from"./packem_shared/StudioApp-C9ENwcOH.mjs";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-D9ZY-qQd.mjs";import{S as m}from"./packem_shared/studio-fK2DTLde.mjs";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-DU4p72Er.mjs";import{default as s}from"./packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.mjs";import{ShardInput as P}from"./packem_shared/ShardInput-C6mjgAh4.mjs";import{default as A}from"./packem_chunks/AdvisorHealthPanel.mjs";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.mjs";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.mjs";import{default as h}from"./packem_shared/ApiDocsPanel-fhDlZGE4.mjs";import{default as C}from"./packem_shared/ApiReferencePanel-nAf8tNRr.mjs";import{default as O}from"./packem_chunks/ApiTab.mjs";import{default as N}from"./packem_shared/OpenRpcReferencePanel-BxEr49D9.mjs";import{DataBrowser as U}from"./packem_shared/DataBrowser-C14aRmmR.mjs";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-CYZFt2EK.mjs";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{TableEditor as q}from"./packem_chunks/TableEditor.mjs";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.mjs";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-CkVIwAbK.mjs";import{PitrPanel as z}from"./packem_chunks/PitrPanel.mjs";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.mjs";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.mjs";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.mjs";import{H as oe}from"./packem_shared/home-panel-BcE8S2Nn.mjs";import{AuditPanel as te}from"./packem_chunks/AuditPanel.mjs";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.mjs";import{MailPanel as me}from"./packem_chunks/MailPanel.mjs";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-BZNcYWBP.mjs";import{default as se}from"./packem_chunks/NotificationsPanel.mjs";import{HealthPanel as de}from"./packem_chunks/HealthPanel.mjs";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-DKFJc-o5.mjs";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.mjs";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.mjs";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.mjs";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.mjs";import{FileBrowser as he}from"./packem_chunks/FileBrowser.mjs";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.mjs";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-fVsCSs5L.mjs";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.mjs";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
1
+ import{StudioApp as r}from"./packem_shared/StudioApp-C9ENwcOH.mjs";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-D9ZY-qQd.mjs";import{S as m}from"./packem_shared/studio-fK2DTLde.mjs";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-DU4p72Er.mjs";import{default as s}from"./packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.mjs";import{ShardInput as P}from"./packem_shared/ShardInput-C6mjgAh4.mjs";import{default as A}from"./packem_chunks/AdvisorHealthPanel.mjs";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.mjs";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.mjs";import{default as h}from"./packem_shared/ApiDocsPanel-fhDlZGE4.mjs";import{default as C}from"./packem_shared/ApiReferencePanel-nAf8tNRr.mjs";import{default as O}from"./packem_chunks/ApiTab.mjs";import{default as N}from"./packem_shared/OpenRpcReferencePanel-BxEr49D9.mjs";import{DataBrowser as U}from"./packem_shared/DataBrowser-E68QfaST.mjs";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-CYZFt2EK.mjs";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{TableEditor as q}from"./packem_chunks/TableEditor.mjs";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.mjs";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-CkVIwAbK.mjs";import{PitrPanel as z}from"./packem_chunks/PitrPanel.mjs";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.mjs";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.mjs";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.mjs";import{H as oe}from"./packem_shared/home-panel-BcE8S2Nn.mjs";import{AuditPanel as te}from"./packem_chunks/AuditPanel.mjs";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.mjs";import{MailPanel as me}from"./packem_chunks/MailPanel.mjs";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-BZNcYWBP.mjs";import{default as se}from"./packem_chunks/NotificationsPanel.mjs";import{HealthPanel as de}from"./packem_chunks/HealthPanel.mjs";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-DKFJc-o5.mjs";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.mjs";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.mjs";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.mjs";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.mjs";import{FileBrowser as he}from"./packem_chunks/FileBrowser.mjs";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.mjs";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-fVsCSs5L.mjs";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.mjs";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
@@ -1,3 +1,3 @@
1
- import{c as xe}from"react/compiler-runtime";import{LunoraError as ae}from"@lunora/errors";import{useLunora as he}from"@lunora/react";import{useState as q}from"react";import{e as be,d as ge}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{ConfirmButton as Ne}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{ShardInput as ye}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as Se}from"../packem_shared/button-q0UYSmrn.mjs";import{a as ie,C as ce}from"../packem_shared/card-By2O8ULa.mjs";import{T as we}from"../packem_shared/textarea--40GKAyz.mjs";import{a as Ie}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as _e}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as ee}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as fe,d as de,b as le,f as me}from"../packem_shared/internal-Df43vQI0.mjs";import{r as pe}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{jsx as s,jsxs as b}from"react/jsx-runtime";const je=fe(ee.exportShard),ve=fe(ee.importShard),Ce=u=>u.map(e=>JSON.stringify(be(e))).join(`
1
+ import{c as xe}from"react/compiler-runtime";import{LunoraError as ae}from"@lunora/errors";import{useLunora as he}from"@lunora/react";import{encodeWire as be,decodeWire as ge}from"@lunora/wire";import{useState as q}from"react";import{ConfirmButton as Ne}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{ShardInput as ye}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as Se}from"../packem_shared/button-q0UYSmrn.mjs";import{a as ie,C as ce}from"../packem_shared/card-By2O8ULa.mjs";import{T as we}from"../packem_shared/textarea--40GKAyz.mjs";import{a as Ie}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as _e}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as ee}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as fe,d as de,b as le,f as me}from"../packem_shared/internal-Df43vQI0.mjs";import{r as pe}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{jsx as s,jsxs as b}from"react/jsx-runtime";const je=fe(ee.exportShard),ve=fe(ee.importShard),Ce=u=>u.map(e=>JSON.stringify(be(e))).join(`
2
2
  `),Te=u=>{const e=[],te=u.split(`
3
3
  `);for(const[n,g]of te.entries()){const t=g.trim();if(t==="")continue;const r=ge(JSON.parse(t));if(typeof r!="object"||r===null)throw new ae("INTERNAL",`line ${(n+1).toString()}: expected a { table, doc } object`);const x=r;if(typeof x.table!="string"||typeof x.doc!="object"||x.doc===null||Array.isArray(x.doc))throw new ae("INTERNAL",`line ${(n+1).toString()}: expected a { table, doc } object`);e.push(x)}return e},Ue=u=>{const e=xe(94),{initialShardKey:te}=u,n=he(),g=Ie(),t=_e(),[r,x]=q(te??""),[l,oe]=q(""),[c,F]=q(!1),[z,H]=q(null),[a,re]=q(null),[N,ne]=q(null);let G;e[0]!==n||e[1]!==r?(G=async()=>{F(!0),H(null),re(null);try{const i=await n.query(je,{},de(r));pe(r),oe(Ce(i.rows)),ne(i.rows.length)}catch(i){H(le(i))}F(!1)},e[0]=n,e[1]=r,e[2]=G):G=e[2];const W=G;let Q;e[3]!==n||e[4]!==g||e[5]!==l||e[6]!==r||e[7]!==t?(Q=async()=>{F(!0),H(null),re(null),ne(null);let i;try{i=Te(l)}catch(o){H(t("Invalid NDJSON: {message}",{message:le(o)})),F(!1);return}try{const o=await n.query(ve,{rows:i},de(r));pe(r),re(o),g(ee.readTablePage),g(ee.listTables)}catch(o){H(le(o))}F(!1)},e[3]=n,e[4]=g,e[5]=l,e[6]=r,e[7]=t,e[8]=Q):Q=e[8];const U=Q;let y,S,w,d,I,m,p,_,j,f,v;if(e[9]!==c||e[10]!==N||e[11]!==W||e[12]!==a||e[13]!==U||e[14]!==l||e[15]!==r||e[16]!==t){const i=a===null?0:Object.values(a.inserted).reduce(Ae,0);let o;e[28]!==W?(o=()=>{me(W())},e[28]=W,e[29]=o):o=e[29];const X=o;let Y;e[30]!==U?(Y=()=>{me(U())},e[30]=U,e[31]=Y):Y=e[31];const se=Y;let Z;e[32]===Symbol.for("react.memo_cache_sentinel")?(Z=h=>{oe(h.target.value)},e[32]=Z):Z=e[32];const ue=Z;v="flex flex-col gap-4",w="lunora-export-import";let O;e[33]!==t?(O=t("Export"),e[33]=t,e[34]=O):O=e[34];let R;e[35]!==O?(R=s("header",{className:"border-b border-border px-4 py-3",children:s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:O})}),e[35]=O,e[36]=R):R=e[36];let E;e[37]!==r?(E=s(ye,{onChange:x,testId:"ei-shard-input",value:r}),e[37]=r,e[38]=E):E=e[38];let L;e[39]!==t?(L=t("Export"),e[39]=t,e[40]=L):L=e[40];let D;e[41]!==c||e[42]!==X||e[43]!==L?(D=s(Se,{"data-testid":"ei-export",disabled:c,onClick:X,type:"button",children:L}),e[41]=c,e[42]=X,e[43]=L,e[44]=D):D=e[44];let $;e[45]!==E||e[46]!==D?($=b("div",{className:"flex flex-wrap items-center gap-2",children:[E,D]}),e[45]=E,e[46]=D,e[47]=$):$=e[47];let B;e[48]!==N||e[49]!==t?(B=N!==null&&s("p",{className:"text-sm text-muted-foreground","data-testid":"ei-export-result",children:t("Exported {count} rows.",{count:N})}),e[48]=N,e[49]=t,e[50]=B):B=e[50];let J;e[51]!==$||e[52]!==B?(J=b(ie,{className:"flex flex-col gap-3 p-4",children:[$,B]}),e[51]=$,e[52]=B,e[53]=J):J=e[53],e[54]!==R||e[55]!==J?(d=b(ce,{className:"gap-0 py-0 rounded-xl border border-border bg-card shadow-xs",children:[R,J]}),e[54]=R,e[55]=J,e[56]=d):d=e[56],S=ce,j="gap-0 py-0 rounded-xl border border-border bg-card shadow-xs";let P;e[57]!==t?(P=t("Import"),e[57]=t,e[58]=P):P=e[58],e[59]!==P?(f=s("header",{className:"border-b border-border px-4 py-3",children:s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:P})}),e[59]=P,e[60]=f):f=e[60],y=ie,I="flex flex-col gap-3 p-4",e[61]!==l?(m=s(we,{"aria-label":"NDJSON",className:"font-mono text-xs min-h-40 rounded-md","data-testid":"ei-ndjson",onChange:ue,placeholder:'{"table":"messages","doc":{…}}',value:l}),e[61]=l,e[62]=m):m=e[62];let k;e[63]!==t?(k=t("Import (writes rows)?"),e[63]=t,e[64]=k):k=e[64];let K;e[65]!==c||e[66]!==l?(K=c||l.trim()==="",e[65]=c,e[66]=l,e[67]=K):K=e[67];let M;e[68]!==t?(M=t("Import"),e[68]=t,e[69]=M):M=e[69],e[70]!==se||e[71]!==k||e[72]!==K||e[73]!==M?(p=s("div",{className:"flex flex-wrap items-center gap-2",children:s(Ne,{confirmLabel:k,disabled:K,onConfirm:se,testId:"ei-import",children:M})}),e[70]=se,e[71]=k,e[72]=K,e[73]=M,e[74]=p):p=e[74],_=a!==null&&b("div",{className:"flex flex-col gap-2","data-testid":"ei-import-result",children:[s("p",{className:"text-sm text-muted-foreground",children:t("Inserted {inserted}, {conflicts} conflicts, {errors} errors.",{conflicts:a.conflicts,errors:a.errors.length,inserted:i})}),a.errors.length>0&&s("ul",{className:"flex flex-col gap-1","data-testid":"ei-import-errors",children:a.errors.map(h=>s("li",{className:"text-xs text-destructive",children:t("line {line} ({table}): {message}",{line:h.line,message:h.message,table:h.table})},`${h.table}-${h.line.toString()}`))})]}),e[9]=c,e[10]=N,e[11]=W,e[12]=a,e[13]=U,e[14]=l,e[15]=r,e[16]=t,e[17]=y,e[18]=S,e[19]=w,e[20]=d,e[21]=I,e[22]=m,e[23]=p,e[24]=_,e[25]=j,e[26]=f,e[27]=v}else y=e[17],S=e[18],w=e[19],d=e[20],I=e[21],m=e[22],p=e[23],_=e[24],j=e[25],f=e[26],v=e[27];let C;e[75]!==y||e[76]!==I||e[77]!==m||e[78]!==p||e[79]!==_?(C=b(y,{className:I,children:[m,p,_]}),e[75]=y,e[76]=I,e[77]=m,e[78]=p,e[79]=_,e[80]=C):C=e[80];let T;e[81]!==S||e[82]!==C||e[83]!==j||e[84]!==f?(T=b(S,{className:j,children:[f,C]}),e[81]=S,e[82]=C,e[83]=j,e[84]=f,e[85]=T):T=e[85];let A;e[86]!==z?(A=z!==null&&s("p",{className:"text-sm text-destructive","data-testid":"ei-error",role:"alert",children:z}),e[86]=z,e[87]=A):A=e[87];let V;return e[88]!==w||e[89]!==d||e[90]!==T||e[91]!==A||e[92]!==v?(V=b("div",{className:v,"data-testid":w,children:[d,T,A]}),e[88]=w,e[89]=d,e[90]=T,e[91]=A,e[92]=v,e[93]=V):V=e[93],V};function Ae(u,e){return u+e}export{Ue as ExportImportPanel};
@@ -1 +1 @@
1
- import{useLunora as X}from"@lunora/react";import{useState as i,useEffect as Y}from"react";import{e as O,d as G}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{ShardInput as Q}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as N}from"../packem_shared/button-q0UYSmrn.mjs";import{I as Z}from"../packem_shared/input-CXhxesPC.mjs";import{L as y}from"../packem_shared/label-DKFzyHq6.mjs";import{T as _}from"../packem_shared/textarea--40GKAyz.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as te}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{b as re,h as se,f as ae,j as ne,l as oe,c as ie}from"../packem_shared/internal-Df43vQI0.mjs";import{r as de}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{jsxs as n,jsx as r}from"react/jsx-runtime";const le=t=>t.kind==="id"?t.table===void 0?"id":`id<${t.table}>`:t.kind==="array"?t.element===void 0?"array":`${t.element}[]`:t.kind,ce=t=>t===void 0||t.length===0?"()":`(${t.map(o=>`${o.name}${o.optional?"?":""}: ${le(o)}`).join(", ")})`,ue=t=>{switch(t){case"array":return[];case"bigint":return O(0n);case"boolean":return!1;case"bytes":return O(new ArrayBuffer(0));case"number":return 0;case"object":case"record":return{};default:return""}},me=t=>{const o={};for(const s of t??[])s.optional||(o[s.name]=ue(s.kind));return JSON.stringify(o,void 0,2)},fe=ie(te.runAs),he=10,pe=t=>t===void 0?"undefined":JSON.stringify(t,ne,2),$e=({functions:t,runAsIdentity:o=!1}={})=>{const s=ee(),u=X(),[E,L]=i(null),[S,D]=i(null),p=t??E??[],[w,R]=i(""),[m,g]=i("{}"),[c,I]=i(""),[f,K]=i(""),[x,h]=i("idle"),[U,b]=i(void 0),[k,v]=i(null),[A,J]=i([]);Y(()=>{if(t!==void 0)return;let e=!1;return u.listFunctions().then(d=>(e||L(d),d)).catch(d=>{e||D(re(d))}),()=>{e=!0}},[u,t]);const C=w===""?p[0]?.path??"":w,a=p.find(e=>e.path===C),M=async()=>{if(!a)return;let e;try{e=m.trim()===""?{}:G(JSON.parse(m))}catch(l){h("error"),b(void 0),v(s("Invalid JSON args: {message}",{message:l.message}));return}const d={__lunoraRef:a.path},T=c.trim()===""?{}:{shardKey:c.trim()},F=o?f.trim():"",$=l=>{J(j=>[{argsText:m,at:Date.now(),id:(j[0]?.id??0)+1,kind:a.kind,path:a.path,shardKey:c,status:l},...j].slice(0,he))};h("running"),v(null);try{const l=F===""?await oe(u,a.kind,d,e,T):await u.query(fe,{args:e,functionPath:a.path,userId:F},T);de(c),b(l),h("success"),$("success")}catch(l){b(void 0),v(l.message),h("error"),$("error")}},P=e=>{R(e.path),g(e.argsText),I(e.shardKey)},z=e=>{R(e.target.value)},W=e=>{g(e.target.value)},q=e=>{K(e.target.value)},H=()=>{ae(M())},V=()=>{g(me(a?.args))};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-runner",children:[S!==null&&r("p",{className:"text-sm text-destructive","data-testid":"function-discover-error",role:"alert",children:S}),n("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4",children:[n("div",{className:"flex flex-col gap-1.5",children:[r(y,{htmlFor:"function-select",children:s("Function")}),r("select",{"aria-label":s("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"function-select",id:"function-select",onChange:z,value:C,children:p.map(e=>n("option",{value:e.path,children:[e.path," (",e.kind,")"]},e.path))}),a!==void 0&&n("p",{className:"text-xs text-muted-foreground",children:[r("span",{className:"mr-1.5 font-medium",children:s("Signature")}),r("code",{className:"font-mono","data-testid":"function-signature",children:ce(a.args)})]})]}),n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:"flex items-center justify-between gap-2",children:[r(y,{htmlFor:"args-input",children:s("Arguments")}),r(N,{"data-testid":"prefill-button",disabled:a===void 0,onClick:V,size:"xs",type:"button",variant:"ghost",children:s("Prefill")})]}),r(_,{"aria-label":s("Arguments"),className:"font-mono text-xs","data-testid":"args-input",id:"args-input",onChange:W,value:m})]}),r(Q,{onChange:I,testId:"shard-input",value:c}),o&&n("div",{className:"flex flex-col gap-1.5","data-testid":"run-as-field",children:[r(y,{htmlFor:"run-as-input",children:s("Run as identity (userId)")}),r(Z,{"aria-label":s("Run as identity (userId)"),className:"font-mono text-xs","data-testid":"run-as-input",id:"run-as-input",onChange:q,placeholder:s("Leave empty to run as admin"),value:f}),r("p",{className:"text-[11px] text-muted-foreground",children:s("Dev only: runs the function as this user so you can test auth and RLS. Forged over the admin gate.")})]}),n("div",{className:"flex flex-wrap items-center gap-2",children:[r(N,{"data-testid":"run-button",disabled:x==="running"||a===void 0,onClick:H,type:"button",children:s("Run")}),a!==void 0&&r(B,{variant:"outline",children:a.kind}),o&&f.trim()!==""&&r(B,{"data-testid":"run-as-badge",variant:"secondary",children:s("as {userId}",{userId:f.trim()})})]})]}),x==="error"&&k!==null&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"error",role:"alert",children:k}),x==="success"&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"result",children:pe(U)}),A.length>0&&r("ul",{className:"flex flex-col overflow-hidden rounded-xl border border-border","data-testid":"fn-history",children:A.map((e,d)=>n("li",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-sm last:border-b-0","data-testid":"fn-history-row",children:[r("span",{className:e.status==="success"?"text-success":"text-destructive","data-testid":`fn-history-status-${d.toString()}`,children:e.status==="success"?"✓":"✗"})," ",n("span",{className:"font-mono text-xs",children:[e.path," (",e.kind,")"]})," ",r("time",{className:"text-xs text-muted-foreground",children:se(e.at)})," ",r(N,{className:"ml-auto","data-testid":`fn-history-load-${d.toString()}`,onClick:()=>{P(e)},size:"xs",type:"button",variant:"ghost",children:s("Load")})]},e.id))})]})};export{$e as FunctionRunner};
1
+ import{useLunora as X}from"@lunora/react";import{encodeWire as O,decodeWire as Y}from"@lunora/wire";import{useState as i,useEffect as G}from"react";import{ShardInput as Q}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as N}from"../packem_shared/button-q0UYSmrn.mjs";import{I as Z}from"../packem_shared/input-CXhxesPC.mjs";import{L as y}from"../packem_shared/label-DKFzyHq6.mjs";import{T as _}from"../packem_shared/textarea--40GKAyz.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as te}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{b as re,h as se,f as ae,j as ne,l as oe,c as ie}from"../packem_shared/internal-Df43vQI0.mjs";import{r as de}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{jsxs as n,jsx as r}from"react/jsx-runtime";const le=t=>t.kind==="id"?t.table===void 0?"id":`id<${t.table}>`:t.kind==="array"?t.element===void 0?"array":`${t.element}[]`:t.kind,ce=t=>t===void 0||t.length===0?"()":`(${t.map(o=>`${o.name}${o.optional?"?":""}: ${le(o)}`).join(", ")})`,ue=t=>{switch(t){case"array":return[];case"bigint":return O(0n);case"boolean":return!1;case"bytes":return O(new ArrayBuffer(0));case"number":return 0;case"object":case"record":return{};default:return""}},me=t=>{const o={};for(const s of t??[])s.optional||(o[s.name]=ue(s.kind));return JSON.stringify(o,void 0,2)},fe=ie(te.runAs),he=10,pe=t=>t===void 0?"undefined":JSON.stringify(t,ne,2),$e=({functions:t,runAsIdentity:o=!1}={})=>{const s=ee(),u=X(),[E,L]=i(null),[S,D]=i(null),p=t??E??[],[w,R]=i(""),[m,g]=i("{}"),[c,I]=i(""),[f,K]=i(""),[x,h]=i("idle"),[U,b]=i(void 0),[k,v]=i(null),[A,J]=i([]);G(()=>{if(t!==void 0)return;let e=!1;return u.listFunctions().then(d=>(e||L(d),d)).catch(d=>{e||D(re(d))}),()=>{e=!0}},[u,t]);const C=w===""?p[0]?.path??"":w,a=p.find(e=>e.path===C),M=async()=>{if(!a)return;let e;try{e=m.trim()===""?{}:Y(JSON.parse(m))}catch(l){h("error"),b(void 0),v(s("Invalid JSON args: {message}",{message:l.message}));return}const d={__lunoraRef:a.path},T=c.trim()===""?{}:{shardKey:c.trim()},F=o?f.trim():"",$=l=>{J(j=>[{argsText:m,at:Date.now(),id:(j[0]?.id??0)+1,kind:a.kind,path:a.path,shardKey:c,status:l},...j].slice(0,he))};h("running"),v(null);try{const l=F===""?await oe(u,a.kind,d,e,T):await u.query(fe,{args:e,functionPath:a.path,userId:F},T);de(c),b(l),h("success"),$("success")}catch(l){b(void 0),v(l.message),h("error"),$("error")}},P=e=>{R(e.path),g(e.argsText),I(e.shardKey)},z=e=>{R(e.target.value)},W=e=>{g(e.target.value)},q=e=>{K(e.target.value)},H=()=>{ae(M())},V=()=>{g(me(a?.args))};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-runner",children:[S!==null&&r("p",{className:"text-sm text-destructive","data-testid":"function-discover-error",role:"alert",children:S}),n("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4",children:[n("div",{className:"flex flex-col gap-1.5",children:[r(y,{htmlFor:"function-select",children:s("Function")}),r("select",{"aria-label":s("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"function-select",id:"function-select",onChange:z,value:C,children:p.map(e=>n("option",{value:e.path,children:[e.path," (",e.kind,")"]},e.path))}),a!==void 0&&n("p",{className:"text-xs text-muted-foreground",children:[r("span",{className:"mr-1.5 font-medium",children:s("Signature")}),r("code",{className:"font-mono","data-testid":"function-signature",children:ce(a.args)})]})]}),n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:"flex items-center justify-between gap-2",children:[r(y,{htmlFor:"args-input",children:s("Arguments")}),r(N,{"data-testid":"prefill-button",disabled:a===void 0,onClick:V,size:"xs",type:"button",variant:"ghost",children:s("Prefill")})]}),r(_,{"aria-label":s("Arguments"),className:"font-mono text-xs","data-testid":"args-input",id:"args-input",onChange:W,value:m})]}),r(Q,{onChange:I,testId:"shard-input",value:c}),o&&n("div",{className:"flex flex-col gap-1.5","data-testid":"run-as-field",children:[r(y,{htmlFor:"run-as-input",children:s("Run as identity (userId)")}),r(Z,{"aria-label":s("Run as identity (userId)"),className:"font-mono text-xs","data-testid":"run-as-input",id:"run-as-input",onChange:q,placeholder:s("Leave empty to run as admin"),value:f}),r("p",{className:"text-[11px] text-muted-foreground",children:s("Dev only: runs the function as this user so you can test auth and RLS. Forged over the admin gate.")})]}),n("div",{className:"flex flex-wrap items-center gap-2",children:[r(N,{"data-testid":"run-button",disabled:x==="running"||a===void 0,onClick:H,type:"button",children:s("Run")}),a!==void 0&&r(B,{variant:"outline",children:a.kind}),o&&f.trim()!==""&&r(B,{"data-testid":"run-as-badge",variant:"secondary",children:s("as {userId}",{userId:f.trim()})})]})]}),x==="error"&&k!==null&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"error",role:"alert",children:k}),x==="success"&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"result",children:pe(U)}),A.length>0&&r("ul",{className:"flex flex-col overflow-hidden rounded-xl border border-border","data-testid":"fn-history",children:A.map((e,d)=>n("li",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-sm last:border-b-0","data-testid":"fn-history-row",children:[r("span",{className:e.status==="success"?"text-success":"text-destructive","data-testid":`fn-history-status-${d.toString()}`,children:e.status==="success"?"✓":"✗"})," ",n("span",{className:"font-mono text-xs",children:[e.path," (",e.kind,")"]})," ",r("time",{className:"text-xs text-muted-foreground",children:se(e.at)})," ",r(N,{className:"ml-auto","data-testid":`fn-history-load-${d.toString()}`,onClick:()=>{P(e)},size:"xs",type:"button",variant:"ghost",children:s("Load")})]},e.id))})]})};export{$e as FunctionRunner};
@@ -1 +1 @@
1
- import{useLunora as pt}from"@lunora/react";import{useState as pe,useRef as Ge,useEffect as tt,useMemo as xt}from"react";import{L as bt}from"../packem_shared/live-status-BuJdUZFU.mjs";import{ShardInput as yt}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as rt}from"../packem_shared/button-q0UYSmrn.mjs";import{u as Ue}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as vt}from"../packem_shared/use-open-trace-DMVhpnyG.mjs";import{u as Nt}from"../packem_shared/use-shard-key-BsP3o5wT.mjs";import{useT as xe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as Oe}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as St}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{i as wt,m as Xe,f as qt,d as Tt,b as _t,c as Ct}from"../packem_shared/internal-Df43vQI0.mjs";import{r as kt,l as Rt}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as Ee}from"react/compiler-runtime";import{f as Mt}from"../packem_shared/log-fields-BolUoZ9g.mjs";import{B as et}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as he,a as ge,b as Be,d as It,c as je}from"../packem_shared/card-By2O8ULa.mjs";import{b as Je,e as oe,T as dt,c as de,a as mt,d as ft}from"../packem_shared/table-D0SBiDu-.mjs";import{S as ut}from"../packem_shared/sparkline-B_sPPO_8.mjs";import{jsxs as n,jsx as t,Fragment as Ye}from"react/jsx-runtime";import{aggregateMetrics as Dt,computeLatencyPercentiles as $t,enrichQueryStats as At,shardsToAggregate as Et}from"../packem_shared/aggregateMetrics-DKFJc-o5.mjs";import{S as me}from"../packem_shared/stat-card-BAv73QtB.mjs";import{b as st,c as Ft,h as Ot}from"../packem_shared/metrics-format-1sNGG47R.mjs";import{ResponsiveContainer as lt,AreaChart as Lt,CartesianGrid as at,XAxis as it,YAxis as nt,Tooltip as ot,Area as zt,LineChart as Kt,Line as Pt}from"recharts";import{E as Bt}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as jt}from"../packem_shared/utils-bhneXptQ.mjs";import{S as Qt,a as Ht,c as Qe,b as Ut,d as Jt}from"../packem_shared/select-DPyS18Vy.mjs";const Vt=/["\\\u0000-\u001F\uD800-\uDFFF]/,ct=l=>Vt.test(l)?JSON.stringify(l):`"${l}"`,Ze=l=>{if(l===void 0)return"null";if(typeof l=="bigint")throw new TypeError("stableStringify: cannot use a bigint in a stable JSON cache key — pass it as a string, or use stableWireKey");if(typeof l=="number"){if(Number.isNaN(l))return"nan";if(l===1/0)return"inf";if(l===-1/0)return"-inf";if(Object.is(l,-0))return"-0"}if(typeof l=="string")return ct(l);if(l===null||typeof l!="object")return JSON.stringify(l);if(Array.isArray(l)){let o="[";for(let a=0;a<l.length;a++)a>0&&(o+=","),o+=Ze(l[a]);return o+"]"}const e=Object.getPrototypeOf(l);if(e!==null&&e!==Object.prototype){const o=l.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${o} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const i=l,s=Object.keys(i).sort();let r="{",f=!0;for(const o of s){const a=i[o];a!==void 0&&(f?f=!1:r+=",",r+=ct(o),r+=":",r+=Ze(a))}return r+"}"},ht=(l,e,i)=>`${l}:${e}:${Ze(i??{})}`,gt=(l,e)=>l==="gauge"?e.last:l==="histogram"?e.sum/Math.max(1,e.count):e.sum,Gt=(l,e)=>gt(l,e),Wt=l=>gt(l.kind,l),We=l=>Number.isInteger(l)?l.toLocaleString():l.toLocaleString(void 0,{maximumFractionDigits:2}),Xt=l=>Array.isArray(l?.series)?l.series:[],Yt="FUNCTION_NOT_FOUND",Zt=l=>{const e=new Map;if(!Array.isArray(l?.series))return e;for(const i of l.series)e.set(ht(i.kind,i.name,i.attributes),i.points);return e},er={counter:"secondary",gauge:"default",histogram:"outline"},tr=l=>{const e=Ee(18),{name:i,onOpenTrace:s,traceId:r}=l,f=xe();if(r===void 0){let d;return e[0]===Symbol.for("react.memo_cache_sentinel")?(d=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=d):d=e[0],d}let o;e[1]!==r?(o=r.slice(0,8),e[1]=r,e[2]=o):o=e[2];const a=o;if(s===void 0){const d=`mt-instrument-trace-${i}`;let p;return e[3]!==a||e[4]!==d||e[5]!==r?(p=t("span",{className:"text-muted-foreground","data-testid":d,title:r,children:a}),e[3]=a,e[4]=d,e[5]=r,e[6]=p):p=e[6],p}const h=`mt-instrument-trace-${i}`;let y;e[7]!==s||e[8]!==r?(y=()=>{s(r)},e[7]=s,e[8]=r,e[9]=y):y=e[9];let w;e[10]!==f||e[11]!==r?(w=f("Open the exemplar trace {trace}",{trace:r}),e[10]=f,e[11]=r,e[12]=w):w=e[12];let g;return e[13]!==a||e[14]!==h||e[15]!==y||e[16]!==w?(g=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":h,onClick:y,title:w,type:"button",children:a}),e[13]=a,e[14]=h,e[15]=y,e[16]=w,e[17]=g):g=e[17],g},rr=l=>{const e=Ee(105),{onOpenTrace:i,shardKey:s}=l,r=xe();let f;e[0]===Symbol.for("react.memo_cache_sentinel")?(f={},e[0]=f):f=e[0];let o;e[1]!==s?(o={live:!0,shardKey:s},e[1]=s,e[2]=o):o=e[2];const{data:a,error:h,errorSource:y}=Ue(Oe.getMetricSeries,f,o);let w;e[3]===Symbol.for("react.memo_cache_sentinel")?(w={},e[3]=w):w=e[3];let g;e[4]!==s?(g={live:!0,shardKey:s},e[4]=s,e[5]=g):g=e[5];const{data:d}=Ue(Oe.getMetricHistory,w,g);let p,v,q,C,c,T,x,b,_,k,u,R,M;if(e[6]!==a||e[7]!==h||e[8]!==y||e[9]!==d||e[10]!==i||e[11]!==r){b=Symbol.for("react.early_return_sentinel");e:{const O=Xt(a),L=wt(y)===Yt;if(h!==null&&!L){let m;e[25]!==r?(m=r("Instruments"),e[25]=r,e[26]=m):m=e[26];let B;e[27]!==m?(B=t("h3",{className:"text-sm font-semibold text-foreground",children:m}),e[27]=m,e[28]=B):B=e[28];let j;e[29]!==h||e[30]!==r?(j=r("Instruments unavailable: {error}",{error:h}),e[29]=h,e[30]=r,e[31]=j):j=e[31];let H;e[32]!==j?(H=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:j}),e[32]=j,e[33]=H):H=e[33];let U;e[34]!==B||e[35]!==H?(U=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[B,H]}),e[34]=B,e[35]=H,e[36]=U):U=e[36],b=U;break e}if(O.length===0){b=null;break e}const z=Zt(d);let E;e[37]!==r?(E=m=>r(m==="counter"?"Counter":m==="gauge"?"Gauge":"Histogram"),e[37]=r,e[38]=E):E=e[38];const Q=E;c="flex flex-col gap-2",T="mt-instruments";let P;e[39]!==r?(P=r("Instruments"),e[39]=r,e[40]=P):P=e[40],e[41]!==P?(x=t("h3",{className:"text-sm font-semibold text-foreground",children:P}),e[41]=P,e[42]=x):x=e[42],C=he,M="overflow-hidden py-0",q=ge,R="px-0",v=dt,k="mt-instruments-table";let F;e[43]!==r?(F=r("name"),e[43]=r,e[44]=F):F=e[44];let K;e[45]!==F?(K=t(de,{children:F}),e[45]=F,e[46]=K):K=e[46];let V;e[47]!==r?(V=r("kind"),e[47]=r,e[48]=V):V=e[48];let G;e[49]!==V?(G=t(de,{children:V}),e[49]=V,e[50]=G):G=e[50];let W;e[51]!==r?(W=r("value"),e[51]=r,e[52]=W):W=e[52];let X;e[53]!==W?(X=t(de,{className:"text-right",children:W}),e[53]=W,e[54]=X):X=e[54];let Y;e[55]!==r?(Y=r("count"),e[55]=r,e[56]=Y):Y=e[56];let Z;e[57]!==Y?(Z=t(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=Z):Z=e[58];let ee;e[59]!==r?(ee=r("range"),e[59]=r,e[60]=ee):ee=e[60];let te;e[61]!==ee?(te=t(de,{className:"text-right",children:ee}),e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==r?(re=r("trend"),e[63]=r,e[64]=re):re=e[64];let se;e[65]!==re?(se=t(de,{children:re}),e[65]=re,e[66]=se):se=e[66];let le;e[67]!==r?(le=r("trace"),e[67]=r,e[68]=le):le=e[68];let ae;e[69]!==le?(ae=t(de,{children:le}),e[69]=le,e[70]=ae):ae=e[70];let ie;e[71]!==r?(ie=r("dimensions"),e[71]=r,e[72]=ie):ie=e[72];let ne;e[73]!==ie?(ne=t(de,{children:ie}),e[73]=ie,e[74]=ne):ne=e[74],e[75]!==K||e[76]!==G||e[77]!==X||e[78]!==Z||e[79]!==te||e[80]!==se||e[81]!==ae||e[82]!==ne?(u=t(mt,{children:n(Je,{children:[K,G,X,Z,te,se,ae,ne]})}),e[75]=K,e[76]=G,e[77]=X,e[78]=Z,e[79]=te,e[80]=se,e[81]=ae,e[82]=ne,e[83]=u):u=e[83],p=ft,_=O.map(m=>{const B=Mt(m.attributes),j=ht(m.kind,m.name,m.attributes),U=(z.get(j)??[]).map(fe=>Gt(m.kind,fe));return n(Je,{"data-testid":`mt-instrument-${m.name}`,children:[t(oe,{className:"font-mono text-xs",title:m.functionPath,children:m.name}),t(oe,{children:t(et,{variant:er[m.kind],children:Q(m.kind)})}),t(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${m.name}`,children:We(Wt(m))}),t(oe,{className:"text-right tabular-nums text-muted-foreground",children:m.count.toLocaleString()}),t(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:m.min===m.max?"—":`${We(m.min)}–${We(m.max)}`}),t(oe,{children:U.length>=2?t(ut,{ariaLabel:r("{name} trend",{name:m.name}),className:"h-6 w-24 text-foreground",series:U,testId:`mt-instrument-trend-${m.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(oe,{className:"font-mono text-xs",children:t(tr,{name:m.name,onOpenTrace:i,traceId:m.exemplarTraceId})}),t(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:B,children:B===""?"—":B})]},j)})}e[6]=a,e[7]=h,e[8]=y,e[9]=d,e[10]=i,e[11]=r,e[12]=p,e[13]=v,e[14]=q,e[15]=C,e[16]=c,e[17]=T,e[18]=x,e[19]=b,e[20]=_,e[21]=k,e[22]=u,e[23]=R,e[24]=M}else p=e[12],v=e[13],q=e[14],C=e[15],c=e[16],T=e[17],x=e[18],b=e[19],_=e[20],k=e[21],u=e[22],R=e[23],M=e[24];if(b!==Symbol.for("react.early_return_sentinel"))return b;let I;e[84]!==p||e[85]!==_?(I=t(p,{children:_}),e[84]=p,e[85]=_,e[86]=I):I=e[86];let D;e[87]!==v||e[88]!==I||e[89]!==k||e[90]!==u?(D=n(v,{"data-testid":k,children:[u,I]}),e[87]=v,e[88]=I,e[89]=k,e[90]=u,e[91]=D):D=e[91];let S;e[92]!==q||e[93]!==D||e[94]!==R?(S=t(q,{className:R,children:D}),e[92]=q,e[93]=D,e[94]=R,e[95]=S):S=e[95];let N;e[96]!==C||e[97]!==S||e[98]!==M?(N=t(C,{className:M,children:S}),e[96]=C,e[97]=S,e[98]=M,e[99]=N):N=e[99];let A;return e[100]!==c||e[101]!==T||e[102]!==x||e[103]!==N?(A=n("section",{className:c,"data-testid":T,children:[x,N]}),e[100]=c,e[101]=T,e[102]=x,e[103]=N,e[104]=A):A=e[104],A},sr=l=>{const e=Ee(74),{aggregate:i,shardResults:s}=l,r=xe();let f;e[0]!==r?(f=r("Shards"),e[0]=r,e[1]=f):f=e[1];let o;e[2]!==i.failed||e[3]!==i.reachable||e[4]!==r?(o=i.failed>0?r("{reachable} reachable, {failed} unreachable",{failed:i.failed,reachable:i.reachable}):r("{reachable} reachable",{reachable:i.reachable}),e[2]=i.failed,e[3]=i.reachable,e[4]=r,e[5]=o):o=e[5];let a;e[6]!==f||e[7]!==o?(a=t(me,{label:f,testId:"mt-agg-shards",value:o}),e[6]=f,e[7]=o,e[8]=a):a=e[8];let h;e[9]!==r?(h=r("Total requests"),e[9]=r,e[10]=h):h=e[10];let y;e[11]!==i.totalRequests||e[12]!==h?(y=t(me,{label:h,testId:"mt-agg-requests",value:i.totalRequests}),e[11]=i.totalRequests,e[12]=h,e[13]=y):y=e[13];let w;e[14]!==r?(w=r("Total errors"),e[14]=r,e[15]=w):w=e[15];let g;e[16]!==i.totalErrors||e[17]!==w?(g=t(me,{label:w,testId:"mt-agg-errors",value:i.totalErrors}),e[16]=i.totalErrors,e[17]=w,e[18]=g):g=e[18];let d;e[19]!==r?(d=r("Total database size"),e[19]=r,e[20]=d):d=e[20];let p;e[21]!==i.totalDatabaseSize?(p=Xe(i.totalDatabaseSize),e[21]=i.totalDatabaseSize,e[22]=p):p=e[22];let v;e[23]!==d||e[24]!==p?(v=t(me,{label:d,testId:"mt-agg-db-size",value:p}),e[23]=d,e[24]=p,e[25]=v):v=e[25];let q;e[26]!==r?(q=r("Combined cache hit rate"),e[26]=r,e[27]=q):q=e[27];let C;e[28]!==i.hitRate||e[29]!==r?(C=i.hitRate===null?r("no cache configured"):`${(i.hitRate*100).toFixed(1)}%`,e[28]=i.hitRate,e[29]=r,e[30]=C):C=e[30];let c;e[31]!==q||e[32]!==C?(c=t(me,{label:q,testId:"mt-agg-cache",value:C}),e[31]=q,e[32]=C,e[33]=c):c=e[33];let T;e[34]!==v||e[35]!==c||e[36]!==a||e[37]!==y||e[38]!==g?(T=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[a,y,g,v,c]}),e[34]=v,e[35]=c,e[36]=a,e[37]=y,e[38]=g,e[39]=T):T=e[39];let x;e[40]!==r?(x=r("shard"),e[40]=r,e[41]=x):x=e[41];let b;e[42]!==x?(b=t(de,{children:x}),e[42]=x,e[43]=b):b=e[43];let _;e[44]!==r?(_=r("requests"),e[44]=r,e[45]=_):_=e[45];let k;e[46]!==_?(k=t(de,{children:_}),e[46]=_,e[47]=k):k=e[47];let u;e[48]!==r?(u=r("errors"),e[48]=r,e[49]=u):u=e[49];let R;e[50]!==u?(R=t(de,{children:u}),e[50]=u,e[51]=R):R=e[51];let M;e[52]!==r?(M=r("db size"),e[52]=r,e[53]=M):M=e[53];let I;e[54]!==M?(I=t(de,{children:M}),e[54]=M,e[55]=I):I=e[55];let D;e[56]!==b||e[57]!==k||e[58]!==R||e[59]!==I?(D=t(mt,{children:n(Je,{children:[b,k,R,I]})}),e[56]=b,e[57]=k,e[58]=R,e[59]=I,e[60]=D):D=e[60];let S;if(e[61]!==s||e[62]!==r){let L;e[64]!==r?(L=z=>n(Je,{"data-testid":`mt-agg-row-${z.shard}`,children:[t(oe,{children:z.shard}),z.metrics===null?t(oe,{className:"text-destructive",colSpan:3,children:z.error??r("unreachable")}):n(Ye,{children:[t(oe,{className:"tabular-nums",children:z.metrics.requests}),t(oe,{className:"tabular-nums",children:z.metrics.errors}),t(oe,{className:"tabular-nums",children:Xe(z.metrics.databaseSize)})]})]},z.shard),e[64]=r,e[65]=L):L=e[65],S=s.map(L),e[61]=s,e[62]=r,e[63]=S}else S=e[63];let N;e[66]!==S?(N=t(ft,{children:S}),e[66]=S,e[67]=N):N=e[67];let A;e[68]!==D||e[69]!==N?(A=t(he,{className:"overflow-hidden py-0",children:t(ge,{className:"px-0",children:n(dt,{"data-testid":"mt-agg-table",children:[D,N]})})}),e[68]=D,e[69]=N,e[70]=A):A=e[70];let O;return e[71]!==T||e[72]!==A?(O=n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[T,A]}),e[71]=T,e[72]=A,e[73]=O):O=e[73],O},lr=l=>{const e=Ee(75),{currentDelta:i,errorRate:s,history:r,latencyPercentiles:f,metrics:o}=l,a=xe(),{cache:h}=o;let y;e[0]!==r||e[1]!==a?(y=r.length>=2?t(ut,{ariaLabel:a("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:r,testId:"mt-sparkline"}):void 0,e[0]=r,e[1]=a,e[2]=y):y=e[2];let w;e[3]!==i||e[4]!==r.length||e[5]!==a?(w=r.length>=2?n(Ye,{children:[t("span",{className:"font-semibold text-foreground",children:`+${i.toLocaleString()}`})," ",a("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:a("collecting samples…")}),e[3]=i,e[4]=r.length,e[5]=a,e[6]=w):w=e[6];let g;e[7]!==a?(g=a("Requests"),e[7]=a,e[8]=g):g=e[8];let d;e[9]!==o.requests||e[10]!==y||e[11]!==w||e[12]!==g?(d=t(me,{chart:y,footer:w,label:g,testId:"mt-requests",value:o.requests}),e[9]=o.requests,e[10]=y,e[11]=w,e[12]=g,e[13]=d):d=e[13];let p;e[14]!==s||e[15]!==a?(p=a("{rate} error rate",{rate:s}),e[14]=s,e[15]=a,e[16]=p):p=e[16];let v;e[17]!==a?(v=a("Errors"),e[17]=a,e[18]=v):v=e[18];let q;e[19]!==s||e[20]!==o.errors?(q=n(Ye,{children:[o.errors," (",s,")"]}),e[19]=s,e[20]=o.errors,e[21]=q):q=e[21];let C;e[22]!==p||e[23]!==v||e[24]!==q?(C=t(me,{footer:p,label:v,testId:"mt-errors",value:q}),e[22]=p,e[23]=v,e[24]=q,e[25]=C):C=e[25];let c;e[26]!==f.p90?(c=f.p90>0?`P90 ${st(f.p90)}`:void 0,e[26]=f.p90,e[27]=c):c=e[27];let T;e[28]!==a?(T=a("P95 latency"),e[28]=a,e[29]=T):T=e[29];let x;e[30]!==f.p95?(x=f.p95>0?st(f.p95):"—",e[30]=f.p95,e[31]=x):x=e[31];let b;e[32]!==T||e[33]!==x||e[34]!==c?(b=t(me,{footer:c,label:T,testId:"mt-p95",value:x}),e[32]=T,e[33]=x,e[34]=c,e[35]=b):b=e[35];let _;e[36]!==h||e[37]!==a?(_=h?`${h.entries.toLocaleString()} ${a("cache entries")}`:void 0,e[36]=h,e[37]=a,e[38]=_):_=e[38];let k;e[39]!==a?(k=a("Database size"),e[39]=a,e[40]=k):k=e[40];let u;e[41]!==o.databaseSize?(u=Xe(o.databaseSize),e[41]=o.databaseSize,e[42]=u):u=e[42];let R;e[43]!==_||e[44]!==k||e[45]!==u?(R=t(me,{footer:_,label:k,testId:"mt-db-size",value:u}),e[43]=_,e[44]=k,e[45]=u,e[46]=R):R=e[46];let M;e[47]!==a?(M=a("Shard"),e[47]=a,e[48]=M):M=e[48];let I;e[49]!==o.shard||e[50]!==M?(I=t(me,{label:M,testId:"mt-shard",value:o.shard}),e[49]=o.shard,e[50]=M,e[51]=I):I=e[51];let D;e[52]!==a?(D=a("Uptime"),e[52]=a,e[53]=D):D=e[53];let S;e[54]!==o.uptimeMs?(S=Ft(o.uptimeMs),e[54]=o.uptimeMs,e[55]=S):S=e[55];let N;e[56]!==D||e[57]!==S?(N=t(me,{label:D,testId:"mt-uptime",value:S}),e[56]=D,e[57]=S,e[58]=N):N=e[58];let A;e[59]!==a?(A=a("Cache hit rate"),e[59]=a,e[60]=A):A=e[60];let O;e[61]!==h||e[62]!==a?(O=h?a("{rate} ({count} entries)",{count:h.entries,rate:Ot(h.hits,h.misses)}):a("no cache configured"),e[61]=h,e[62]=a,e[63]=O):O=e[63];let L;e[64]!==A||e[65]!==O?(L=t(me,{label:A,testId:"mt-cache",value:O}),e[64]=A,e[65]=O,e[66]=L):L=e[66];let z;return e[67]!==b||e[68]!==R||e[69]!==I||e[70]!==N||e[71]!==L||e[72]!==d||e[73]!==C?(z=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[d,C,b,R,I,N,L]}),e[67]=b,e[68]=R,e[69]=I,e[70]=N,e[71]=L,e[72]=d,e[73]=C,e[74]=z):z=e[74],z},Ve=l=>l>=100?"critical":l>=50?"warning":"good",Fe=l=>l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,He=l=>l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString(),ar=l=>{const e=Ee(3),{level:i}=l;if(i==="critical"){let r;return e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t(et,{variant:"destructive",children:"Slow"}),e[0]=r):r=e[0],r}if(i==="warning"){let r;return e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-warning/10 px-2 py-0.5 text-xs font-medium text-warning",children:"Moderate"}),e[1]=r):r=e[1],r}let s;return e[2]===Symbol.for("react.memo_cache_sentinel")?(s=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-success/10 px-2 py-0.5 text-xs font-medium text-success",children:"Fast"}),e[2]=s):s=e[2],s},ir=(l,e)=>{const i=[...l];return i.sort((s,r)=>{switch(e){case"avgTime":return r.avgDurationMs-s.avgDurationMs;case"execCount":return r.execCount-s.execCount;case"rowsRead":return r.rowsRead-s.rowsRead;default:return r.totalDurationMs-s.totalDurationMs}}),i},nr=l=>{const e=Ee(161),{queryStats:i}=l,s=xe(),[r,f]=pe("totalTime");let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=new Set,e[0]=o):o=e[0];const[a,h]=pe(o);let y;e[1]===Symbol.for("react.memo_cache_sentinel")?(y=M=>{M!==null&&f(M)},e[1]=y):y=e[1];const w=y;let g,d,p,v,q,C,c,T,x,b;if(e[2]!==a||e[3]!==i||e[4]!==r||e[5]!==s){p=Symbol.for("react.early_return_sentinel");e:{const M=ir(i,r);let I;e[16]!==i?(I=i.filter(or),e[16]=i,e[17]=I):I=e[17];const D=I.length;let S;e[18]!==i?(S=i.filter(cr),e[18]=i,e[19]=S):S=e[19];const N=S.length;let A;e[20]!==i?(A=i.filter(dr),e[20]=i,e[21]=A):A=e[21];const O=A.length;let L;e[22]===Symbol.for("react.memo_cache_sentinel")?(L=$=>{h(ce=>{const J=new Set(ce);return J.has($)?J.delete($):J.add($),J})},e[22]=L):L=e[22];const z=L;if(i.length===0){let $;e[23]!==s?($=s("No query insights yet"),e[23]=s,e[24]=$):$=e[24];let ce;e[25]!==$?(ce=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:$}),e[25]=$,e[26]=ce):ce=e[26];let J;e[27]!==s?(J=s("Query insights appear once statements are executed against this shard."),e[27]=s,e[28]=J):J=e[28];let ue;e[29]!==J?(ue=t("p",{className:"mt-1 text-sm",children:J}),e[29]=J,e[30]=ue):ue=e[30];let Pe;e[31]!==ce||e[32]!==ue?(Pe=t(he,{children:t(ge,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[ce,ue]})})}),e[31]=ce,e[32]=ue,e[33]=Pe):Pe=e[33],p=Pe;break e}c="space-y-4",T="qi-root";let E;e[34]!==s?(E=s("Critical queries"),e[34]=s,e[35]=E):E=e[35];let Q;e[36]!==E?(Q=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:E})}),e[36]=E,e[37]=Q):Q=e[37];let P;e[38]!==D?(P=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:D}),e[38]=D,e[39]=P):P=e[39];let F;e[40]!==s?(F=s(">100ms avg execution"),e[40]=s,e[41]=F):F=e[41];let K;e[42]!==F?(K=t("p",{className:"text-xs text-muted-foreground",children:F}),e[42]=F,e[43]=K):K=e[43];let V;e[44]!==P||e[45]!==K?(V=n(ge,{children:[P,K]}),e[44]=P,e[45]=K,e[46]=V):V=e[46];let G;e[47]!==Q||e[48]!==V?(G=n(he,{children:[Q,V]}),e[47]=Q,e[48]=V,e[49]=G):G=e[49];let W;e[50]!==s?(W=s("Moderate queries"),e[50]=s,e[51]=W):W=e[51];let X;e[52]!==W?(X=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==N?(Y=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:N}),e[54]=N,e[55]=Y):Y=e[55];let Z;e[56]!==s?(Z=s("50–100ms avg execution"),e[56]=s,e[57]=Z):Z=e[57];let ee;e[58]!==Z?(ee=t("p",{className:"text-xs text-muted-foreground",children:Z}),e[58]=Z,e[59]=ee):ee=e[59];let te;e[60]!==Y||e[61]!==ee?(te=n(ge,{children:[Y,ee]}),e[60]=Y,e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==X||e[64]!==te?(re=n(he,{children:[X,te]}),e[63]=X,e[64]=te,e[65]=re):re=e[65];let se;e[66]!==s?(se=s("Fast queries"),e[66]=s,e[67]=se):se=e[67];let le;e[68]!==se?(le=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:se})}),e[68]=se,e[69]=le):le=e[69];let ae;e[70]!==O?(ae=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:O}),e[70]=O,e[71]=ae):ae=e[71];let ie;e[72]!==s?(ie=s("<50ms avg execution"),e[72]=s,e[73]=ie):ie=e[73];let ne;e[74]!==ie?(ne=t("p",{className:"text-xs text-muted-foreground",children:ie}),e[74]=ie,e[75]=ne):ne=e[75];let m;e[76]!==ae||e[77]!==ne?(m=n(ge,{children:[ae,ne]}),e[76]=ae,e[77]=ne,e[78]=m):m=e[78];let B;e[79]!==le||e[80]!==m?(B=n(he,{children:[le,m]}),e[79]=le,e[80]=m,e[81]=B):B=e[81],e[82]!==G||e[83]!==re||e[84]!==B?(x=n("div",{className:"grid gap-4 md:grid-cols-3",children:[G,re,B]}),e[82]=G,e[83]=re,e[84]=B,e[85]=x):x=e[85];let j;e[86]!==s?(j=s("Query leaderboard"),e[86]=s,e[87]=j):j=e[87];let H;e[88]!==j?(H=t("h3",{className:"text-lg font-semibold",children:j}),e[88]=j,e[89]=H):H=e[89];let U;e[90]!==r||e[91]!==s?(U=s("Slow queries sorted by {sortField}",{sortField:s(r)}),e[90]=r,e[91]=s,e[92]=U):U=e[92];let fe;e[93]!==U?(fe=t("p",{className:"text-sm text-muted-foreground",children:U}),e[93]=U,e[94]=fe):fe=e[94];let be;e[95]!==H||e[96]!==fe?(be=n("div",{children:[H,fe]}),e[95]=H,e[96]=fe,e[97]=be):be=e[97];let ye;e[98]!==s?(ye=s("Sort by"),e[98]=s,e[99]=ye):ye=e[99];let ve;e[100]!==ye?(ve=t("span",{className:"text-sm text-muted-foreground",children:ye}),e[100]=ye,e[101]=ve):ve=e[101];let Ne;e[102]!==s?(Ne=s("Sort queries by"),e[102]=s,e[103]=Ne):Ne=e[103];let Le;e[104]===Symbol.for("react.memo_cache_sentinel")?(Le=t(Qt,{}),e[104]=Le):Le=e[104];let Se;e[105]!==Ne?(Se=t(Ht,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:Le}),e[105]=Ne,e[106]=Se):Se=e[106];let we;e[107]!==s?(we=s("Total time"),e[107]=s,e[108]=we):we=e[108];let qe;e[109]!==we?(qe=t(Qe,{value:"totalTime",children:we}),e[109]=we,e[110]=qe):qe=e[110];let Te;e[111]!==s?(Te=s("Avg time"),e[111]=s,e[112]=Te):Te=e[112];let _e;e[113]!==Te?(_e=t(Qe,{value:"avgTime",children:Te}),e[113]=Te,e[114]=_e):_e=e[114];let Ce;e[115]!==s?(Ce=s("Execution count"),e[115]=s,e[116]=Ce):Ce=e[116];let ke;e[117]!==Ce?(ke=t(Qe,{value:"execCount",children:Ce}),e[117]=Ce,e[118]=ke):ke=e[118];let Re;e[119]!==s?(Re=s("Rows read"),e[119]=s,e[120]=Re):Re=e[120];let Me;e[121]!==Re?(Me=t(Qe,{value:"rowsRead",children:Re}),e[121]=Re,e[122]=Me):Me=e[122];let Ie;e[123]!==qe||e[124]!==_e||e[125]!==ke||e[126]!==Me?(Ie=n(Ut,{children:[qe,_e,ke,Me]}),e[123]=qe,e[124]=_e,e[125]=ke,e[126]=Me,e[127]=Ie):Ie=e[127];let De;e[128]!==r||e[129]!==Se||e[130]!==Ie?(De=n(Jt,{onValueChange:w,value:r,children:[Se,Ie]}),e[128]=r,e[129]=Se,e[130]=Ie,e[131]=De):De=e[131];let $e;e[132]!==ve||e[133]!==De?($e=n("div",{className:"flex items-center gap-2",children:[ve,De]}),e[132]=ve,e[133]=De,e[134]=$e):$e=e[134],e[135]!==be||e[136]!==$e?(b=n("div",{className:"flex items-center justify-between",children:[be,$e]}),e[135]=be,e[136]=$e,e[137]=b):b=e[137],d=he;let Ae;e[138]!==s?(Ae=s("Statements"),e[138]=s,e[139]=Ae):Ae=e[139];let ze;e[140]!==Ae?(ze=t(je,{children:Ae}),e[140]=Ae,e[141]=ze):ze=e[141],C=n(Be,{children:[ze,t(It,{children:s("{count} tracked statements",{count:M.length})})]}),g=ge,v="space-y-2";let Ke;e[142]!==a||e[143]!==s?(Ke=$=>{const ce=$.normalizedSql,J=a.has(ce),ue=Ve($.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":J,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{z(ce)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(ar,{level:ue}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:$.normalizedSql})]}),n("div",{className:"flex shrink-0 items-center gap-4",children:[n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Fe($.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Fe($.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("avg")})]}),$.p95DurationMs!==void 0&&n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Fe($.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("p95")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:He($.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:s("calls")})]})]})]}),J&&n("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[n("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:s("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:$.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[$.p50DurationMs!==void 0&&n("div",{children:[t("span",{className:"text-muted-foreground",children:s("p50")}),t("span",{className:"block font-medium tabular-nums",children:Fe($.p50DurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:He($.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Fe($.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:He($.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:He($.rowsWritten)})]})]})]})]},ce)},e[142]=a,e[143]=s,e[144]=Ke):Ke=e[144],q=M.map(Ke)}e[2]=a,e[3]=i,e[4]=r,e[5]=s,e[6]=g,e[7]=d,e[8]=p,e[9]=v,e[10]=q,e[11]=C,e[12]=c,e[13]=T,e[14]=x,e[15]=b}else g=e[6],d=e[7],p=e[8],v=e[9],q=e[10],C=e[11],c=e[12],T=e[13],x=e[14],b=e[15];if(p!==Symbol.for("react.early_return_sentinel"))return p;let _;e[145]!==v||e[146]!==q?(_=t("div",{className:v,children:q}),e[145]=v,e[146]=q,e[147]=_):_=e[147];let k;e[148]!==g||e[149]!==_?(k=t(g,{children:_}),e[148]=g,e[149]=_,e[150]=k):k=e[150];let u;e[151]!==d||e[152]!==k||e[153]!==C?(u=n(d,{children:[C,k]}),e[151]=d,e[152]=k,e[153]=C,e[154]=u):u=e[154];let R;return e[155]!==u||e[156]!==c||e[157]!==T||e[158]!==x||e[159]!==b?(R=n("div",{className:c,"data-testid":T,children:[x,b,u]}),e[155]=u,e[156]=c,e[157]=T,e[158]=x,e[159]=b,e[160]=R):R=e[160],R};function or(l){return Ve(l.avgDurationMs)==="critical"}function cr(l){return Ve(l.avgDurationMs)==="warning"}function dr(l){return Ve(l.avgDurationMs)==="good"}const mr=["1m","5m","15m","1h"],fr=l=>new Date(l).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),ur=l=>l.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:fr(e.bucketMs)})),hr=({shardKey:l=""})=>{const e=xe(),[i,s]=pe("15m"),f=Ue(Oe.getQueryInsights,{range:i},{live:!0,shardKey:l}).data,o=ur(f?.buckets??[]);return n("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t("div",{className:"flex gap-1 rounded-lg border border-border p-0.5","data-testid":"qi-ranges",role:"group",children:mr.map(a=>t("button",{"aria-pressed":a===i,className:jt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",a===i&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${a}`,onClick:()=>{s(a)},type:"button",children:a},a))}),f?.capped===!0&&t(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),o.length===0?t(Bt,{description:e("Statements executed in the selected window appear here, with throughput and latency over time."),testId:"qi-empty",title:e("No queries in this window.")}):n("div",{className:"grid gap-4 lg:grid-cols-2",children:[n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-throughput",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Throughput")}),t(lt,{height:140,width:"100%",children:n(Lt,{data:o,children:[t(at,{strokeDasharray:"3 3",vertical:!1}),t(it,{dataKey:"label",fontSize:10,tickLine:!1}),t(nt,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(zt,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-latency",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Mean latency (ms)")}),t(lt,{height:140,width:"100%",children:n(Kt,{data:o,children:[t(at,{strokeDasharray:"3 3",vertical:!1}),t(it,{dataKey:"label",fontSize:10,tickLine:!1}),t(nt,{fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(Pt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(nr,{queryStats:f?.entries??[]})]})},gr=Ct(Oe.getMetrics),pr=(l,e)=>l?e:"overview",Qr=({initialShardKey:l})=>{const e=pt(),i=xe(),{queryShardKey:s,setShardKey:r,shardKey:f}=Nt(l),[o,a]=pe("overview"),[h,y]=pe([]),w=Ge(null),g=Ge(null),d=Ge(!0);tt(()=>(d.current=!0,()=>{d.current=!1}),[]);const p=vt(s),{data:v,error:q,liveError:C}=Ue(Oe.getMetrics,{},{live:!0,shardKey:s}),c=v??null;tt(()=>{if(v===void 0)return;kt(s);const E=v,Q=w.current,P=g.current!==null&&g.current!==E.shard;if(g.current=E.shard,w.current=E.requests,P){y([]);return}Q!==null&&E.requests>=Q&&y(F=>[...F,E.requests-Q].slice(-30))},[v,s]);const[T,x]=pe(null),[b,_]=pe(!1),k=async()=>{_(!0);const E=f,Q=Et(E,Rt());try{const P=await Promise.all(Q.map(async F=>{try{const K=await e.query(gr,{},Tt(F));return{error:null,metrics:K,shard:F===""?K.shard:F}}catch(K){return{error:_t(K),metrics:null,shard:F===""?"__root__":F}}}));d.current&&x({results:P,shard:E})}finally{d.current&&_(!1)}},u=T?.shard===f?T.results:null,R=u===null?null:Dt(u),M=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,I=h.length>0?h.at(-1):0,D=c?$t(c):{p90:0,p95:0},S=xt(()=>{if(!c||!("queryStats"in c))return;const E=c.queryStats;if(!(!E||!Array.isArray(E)))return At(E)},[c]),N=pr(S!==void 0,o),A=()=>{qt(k())},O=()=>{x(null)},L=()=>{a("overview")},z=()=>{a("query-insights")};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(yt,{onChange:r,testId:"mt-shard-input",value:f}),t(bt,{message:C,prefix:"mt"}),t(rt,{"data-testid":"mt-aggregate",disabled:b,onClick:A,size:"sm",type:"button",variant:"secondary",children:i(b?"Aggregating…":"All shards")}),u!==null&&t(rt,{"data-testid":"mt-aggregate-clear",onClick:O,size:"sm",type:"button",variant:"ghost",children:i("Hide")}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:St,rel:"noreferrer",target:"_blank",children:i("Open in Cloudflare")})]}),q!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:q}),S!==void 0&&n("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:L,type:"button",children:i("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:z,type:"button",children:[i("Query insights"),S.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:S.length})]})]}),N==="query-insights"&&S!==void 0&&t(hr,{shardKey:s}),N==="overview"&&c!==null&&t(lr,{currentDelta:I,errorRate:M,history:h,latencyPercentiles:D,metrics:c}),N==="overview"&&c===null&&null,N==="overview"&&t(rr,{onOpenTrace:p,shardKey:s}),N==="overview"&&R!==null&&u!==null&&t(sr,{aggregate:R,shardResults:u})]})};export{Qr as MetricsPanel};
1
+ import{useLunora as ht}from"@lunora/react";import{useState as pe,useRef as Je,useEffect as et,useMemo as gt}from"react";import{L as pt}from"../packem_shared/live-status-BuJdUZFU.mjs";import{ShardInput as xt}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as tt}from"../packem_shared/button-q0UYSmrn.mjs";import{u as Ve}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as bt}from"../packem_shared/use-open-trace-DMVhpnyG.mjs";import{u as vt}from"../packem_shared/use-shard-key-BsP3o5wT.mjs";import{useT as xe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as Fe}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as yt}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{i as Nt,m as Xe,f as St,d as wt,b as qt,c as Tt}from"../packem_shared/internal-Df43vQI0.mjs";import{r as _t,l as Ct}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as Le}from"react/compiler-runtime";import{f as Rt}from"../packem_shared/log-fields-BolUoZ9g.mjs";import{B as Ze}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as he,a as ge,b as Pe,d as Mt,c as Qe}from"../packem_shared/card-By2O8ULa.mjs";import{b as je,e as oe,T as ot,c as de,a as ct,d as dt}from"../packem_shared/table-D0SBiDu-.mjs";import{stableStringify as kt}from"@lunora/wire";import{S as mt}from"../packem_shared/sparkline-B_sPPO_8.mjs";import{jsxs as n,jsx as t,Fragment as Ye}from"react/jsx-runtime";import{aggregateMetrics as It,computeLatencyPercentiles as Dt,enrichQueryStats as $t,shardsToAggregate as At}from"../packem_shared/aggregateMetrics-DKFJc-o5.mjs";import{S as me}from"../packem_shared/stat-card-BAv73QtB.mjs";import{b as rt,c as Lt,h as Et}from"../packem_shared/metrics-format-1sNGG47R.mjs";import{ResponsiveContainer as st,AreaChart as Ft,CartesianGrid as lt,XAxis as at,YAxis as it,Tooltip as nt,Area as zt,LineChart as Ot,Line as Kt}from"recharts";import{E as Bt}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as Pt}from"../packem_shared/utils-bhneXptQ.mjs";import{S as Qt,a as Ht,c as He,b as Ut,d as Vt}from"../packem_shared/select-DPyS18Vy.mjs";const ut=(i,e,a)=>`${i}:${e}:${kt(a??{})}`,ft=(i,e)=>i==="gauge"?e.last:i==="histogram"?e.sum/Math.max(1,e.count):e.sum,jt=(i,e)=>ft(i,e),Gt=i=>ft(i.kind,i),We=i=>Number.isInteger(i)?i.toLocaleString():i.toLocaleString(void 0,{maximumFractionDigits:2}),Jt=i=>Array.isArray(i?.series)?i.series:[],Wt="FUNCTION_NOT_FOUND",Xt=i=>{const e=new Map;if(!Array.isArray(i?.series))return e;for(const a of i.series)e.set(ut(a.kind,a.name,a.attributes),a.points);return e},Yt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=i=>{const e=Le(18),{name:a,onOpenTrace:s,traceId:r}=i,f=xe();if(r===void 0){let d;return e[0]===Symbol.for("react.memo_cache_sentinel")?(d=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=d):d=e[0],d}let o;e[1]!==r?(o=r.slice(0,8),e[1]=r,e[2]=o):o=e[2];const l=o;if(s===void 0){const d=`mt-instrument-trace-${a}`;let p;return e[3]!==l||e[4]!==d||e[5]!==r?(p=t("span",{className:"text-muted-foreground","data-testid":d,title:r,children:l}),e[3]=l,e[4]=d,e[5]=r,e[6]=p):p=e[6],p}const h=`mt-instrument-trace-${a}`;let v;e[7]!==s||e[8]!==r?(v=()=>{s(r)},e[7]=s,e[8]=r,e[9]=v):v=e[9];let w;e[10]!==f||e[11]!==r?(w=f("Open the exemplar trace {trace}",{trace:r}),e[10]=f,e[11]=r,e[12]=w):w=e[12];let g;return e[13]!==l||e[14]!==h||e[15]!==v||e[16]!==w?(g=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":h,onClick:v,title:w,type:"button",children:l}),e[13]=l,e[14]=h,e[15]=v,e[16]=w,e[17]=g):g=e[17],g},er=i=>{const e=Le(105),{onOpenTrace:a,shardKey:s}=i,r=xe();let f;e[0]===Symbol.for("react.memo_cache_sentinel")?(f={},e[0]=f):f=e[0];let o;e[1]!==s?(o={live:!0,shardKey:s},e[1]=s,e[2]=o):o=e[2];const{data:l,error:h,errorSource:v}=Ve(Fe.getMetricSeries,f,o);let w;e[3]===Symbol.for("react.memo_cache_sentinel")?(w={},e[3]=w):w=e[3];let g;e[4]!==s?(g={live:!0,shardKey:s},e[4]=s,e[5]=g):g=e[5];const{data:d}=Ve(Fe.getMetricHistory,w,g);let p,y,q,C,c,T,x,b,_,R,u,M,k;if(e[6]!==l||e[7]!==h||e[8]!==v||e[9]!==d||e[10]!==a||e[11]!==r){b=Symbol.for("react.early_return_sentinel");e:{const F=Jt(l),z=Nt(v)===Wt;if(h!==null&&!z){let m;e[25]!==r?(m=r("Instruments"),e[25]=r,e[26]=m):m=e[26];let P;e[27]!==m?(P=t("h3",{className:"text-sm font-semibold text-foreground",children:m}),e[27]=m,e[28]=P):P=e[28];let Q;e[29]!==h||e[30]!==r?(Q=r("Instruments unavailable: {error}",{error:h}),e[29]=h,e[30]=r,e[31]=Q):Q=e[31];let U;e[32]!==Q?(U=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:Q}),e[32]=Q,e[33]=U):U=e[33];let V;e[34]!==P||e[35]!==U?(V=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[P,U]}),e[34]=P,e[35]=U,e[36]=V):V=e[36],b=V;break e}if(F.length===0){b=null;break e}const O=Xt(d);let L;e[37]!==r?(L=m=>r(m==="counter"?"Counter":m==="gauge"?"Gauge":"Histogram"),e[37]=r,e[38]=L):L=e[38];const H=L;c="flex flex-col gap-2",T="mt-instruments";let B;e[39]!==r?(B=r("Instruments"),e[39]=r,e[40]=B):B=e[40],e[41]!==B?(x=t("h3",{className:"text-sm font-semibold text-foreground",children:B}),e[41]=B,e[42]=x):x=e[42],C=he,k="overflow-hidden py-0",q=ge,M="px-0",y=ot,R="mt-instruments-table";let E;e[43]!==r?(E=r("name"),e[43]=r,e[44]=E):E=e[44];let K;e[45]!==E?(K=t(de,{children:E}),e[45]=E,e[46]=K):K=e[46];let G;e[47]!==r?(G=r("kind"),e[47]=r,e[48]=G):G=e[48];let J;e[49]!==G?(J=t(de,{children:G}),e[49]=G,e[50]=J):J=e[50];let W;e[51]!==r?(W=r("value"),e[51]=r,e[52]=W):W=e[52];let X;e[53]!==W?(X=t(de,{className:"text-right",children:W}),e[53]=W,e[54]=X):X=e[54];let Y;e[55]!==r?(Y=r("count"),e[55]=r,e[56]=Y):Y=e[56];let Z;e[57]!==Y?(Z=t(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=Z):Z=e[58];let ee;e[59]!==r?(ee=r("range"),e[59]=r,e[60]=ee):ee=e[60];let te;e[61]!==ee?(te=t(de,{className:"text-right",children:ee}),e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==r?(re=r("trend"),e[63]=r,e[64]=re):re=e[64];let se;e[65]!==re?(se=t(de,{children:re}),e[65]=re,e[66]=se):se=e[66];let le;e[67]!==r?(le=r("trace"),e[67]=r,e[68]=le):le=e[68];let ae;e[69]!==le?(ae=t(de,{children:le}),e[69]=le,e[70]=ae):ae=e[70];let ie;e[71]!==r?(ie=r("dimensions"),e[71]=r,e[72]=ie):ie=e[72];let ne;e[73]!==ie?(ne=t(de,{children:ie}),e[73]=ie,e[74]=ne):ne=e[74],e[75]!==K||e[76]!==J||e[77]!==X||e[78]!==Z||e[79]!==te||e[80]!==se||e[81]!==ae||e[82]!==ne?(u=t(ct,{children:n(je,{children:[K,J,X,Z,te,se,ae,ne]})}),e[75]=K,e[76]=J,e[77]=X,e[78]=Z,e[79]=te,e[80]=se,e[81]=ae,e[82]=ne,e[83]=u):u=e[83],p=dt,_=F.map(m=>{const P=Rt(m.attributes),Q=ut(m.kind,m.name,m.attributes),V=(O.get(Q)??[]).map(ue=>jt(m.kind,ue));return n(je,{"data-testid":`mt-instrument-${m.name}`,children:[t(oe,{className:"font-mono text-xs",title:m.functionPath,children:m.name}),t(oe,{children:t(Ze,{variant:Yt[m.kind],children:H(m.kind)})}),t(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${m.name}`,children:We(Gt(m))}),t(oe,{className:"text-right tabular-nums text-muted-foreground",children:m.count.toLocaleString()}),t(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:m.min===m.max?"—":`${We(m.min)}–${We(m.max)}`}),t(oe,{children:V.length>=2?t(mt,{ariaLabel:r("{name} trend",{name:m.name}),className:"h-6 w-24 text-foreground",series:V,testId:`mt-instrument-trend-${m.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(oe,{className:"font-mono text-xs",children:t(Zt,{name:m.name,onOpenTrace:a,traceId:m.exemplarTraceId})}),t(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:P,children:P===""?"—":P})]},Q)})}e[6]=l,e[7]=h,e[8]=v,e[9]=d,e[10]=a,e[11]=r,e[12]=p,e[13]=y,e[14]=q,e[15]=C,e[16]=c,e[17]=T,e[18]=x,e[19]=b,e[20]=_,e[21]=R,e[22]=u,e[23]=M,e[24]=k}else p=e[12],y=e[13],q=e[14],C=e[15],c=e[16],T=e[17],x=e[18],b=e[19],_=e[20],R=e[21],u=e[22],M=e[23],k=e[24];if(b!==Symbol.for("react.early_return_sentinel"))return b;let I;e[84]!==p||e[85]!==_?(I=t(p,{children:_}),e[84]=p,e[85]=_,e[86]=I):I=e[86];let D;e[87]!==y||e[88]!==I||e[89]!==R||e[90]!==u?(D=n(y,{"data-testid":R,children:[u,I]}),e[87]=y,e[88]=I,e[89]=R,e[90]=u,e[91]=D):D=e[91];let S;e[92]!==q||e[93]!==D||e[94]!==M?(S=t(q,{className:M,children:D}),e[92]=q,e[93]=D,e[94]=M,e[95]=S):S=e[95];let N;e[96]!==C||e[97]!==S||e[98]!==k?(N=t(C,{className:k,children:S}),e[96]=C,e[97]=S,e[98]=k,e[99]=N):N=e[99];let A;return e[100]!==c||e[101]!==T||e[102]!==x||e[103]!==N?(A=n("section",{className:c,"data-testid":T,children:[x,N]}),e[100]=c,e[101]=T,e[102]=x,e[103]=N,e[104]=A):A=e[104],A},tr=i=>{const e=Le(74),{aggregate:a,shardResults:s}=i,r=xe();let f;e[0]!==r?(f=r("Shards"),e[0]=r,e[1]=f):f=e[1];let o;e[2]!==a.failed||e[3]!==a.reachable||e[4]!==r?(o=a.failed>0?r("{reachable} reachable, {failed} unreachable",{failed:a.failed,reachable:a.reachable}):r("{reachable} reachable",{reachable:a.reachable}),e[2]=a.failed,e[3]=a.reachable,e[4]=r,e[5]=o):o=e[5];let l;e[6]!==f||e[7]!==o?(l=t(me,{label:f,testId:"mt-agg-shards",value:o}),e[6]=f,e[7]=o,e[8]=l):l=e[8];let h;e[9]!==r?(h=r("Total requests"),e[9]=r,e[10]=h):h=e[10];let v;e[11]!==a.totalRequests||e[12]!==h?(v=t(me,{label:h,testId:"mt-agg-requests",value:a.totalRequests}),e[11]=a.totalRequests,e[12]=h,e[13]=v):v=e[13];let w;e[14]!==r?(w=r("Total errors"),e[14]=r,e[15]=w):w=e[15];let g;e[16]!==a.totalErrors||e[17]!==w?(g=t(me,{label:w,testId:"mt-agg-errors",value:a.totalErrors}),e[16]=a.totalErrors,e[17]=w,e[18]=g):g=e[18];let d;e[19]!==r?(d=r("Total database size"),e[19]=r,e[20]=d):d=e[20];let p;e[21]!==a.totalDatabaseSize?(p=Xe(a.totalDatabaseSize),e[21]=a.totalDatabaseSize,e[22]=p):p=e[22];let y;e[23]!==d||e[24]!==p?(y=t(me,{label:d,testId:"mt-agg-db-size",value:p}),e[23]=d,e[24]=p,e[25]=y):y=e[25];let q;e[26]!==r?(q=r("Combined cache hit rate"),e[26]=r,e[27]=q):q=e[27];let C;e[28]!==a.hitRate||e[29]!==r?(C=a.hitRate===null?r("no cache configured"):`${(a.hitRate*100).toFixed(1)}%`,e[28]=a.hitRate,e[29]=r,e[30]=C):C=e[30];let c;e[31]!==q||e[32]!==C?(c=t(me,{label:q,testId:"mt-agg-cache",value:C}),e[31]=q,e[32]=C,e[33]=c):c=e[33];let T;e[34]!==y||e[35]!==c||e[36]!==l||e[37]!==v||e[38]!==g?(T=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[l,v,g,y,c]}),e[34]=y,e[35]=c,e[36]=l,e[37]=v,e[38]=g,e[39]=T):T=e[39];let x;e[40]!==r?(x=r("shard"),e[40]=r,e[41]=x):x=e[41];let b;e[42]!==x?(b=t(de,{children:x}),e[42]=x,e[43]=b):b=e[43];let _;e[44]!==r?(_=r("requests"),e[44]=r,e[45]=_):_=e[45];let R;e[46]!==_?(R=t(de,{children:_}),e[46]=_,e[47]=R):R=e[47];let u;e[48]!==r?(u=r("errors"),e[48]=r,e[49]=u):u=e[49];let M;e[50]!==u?(M=t(de,{children:u}),e[50]=u,e[51]=M):M=e[51];let k;e[52]!==r?(k=r("db size"),e[52]=r,e[53]=k):k=e[53];let I;e[54]!==k?(I=t(de,{children:k}),e[54]=k,e[55]=I):I=e[55];let D;e[56]!==b||e[57]!==R||e[58]!==M||e[59]!==I?(D=t(ct,{children:n(je,{children:[b,R,M,I]})}),e[56]=b,e[57]=R,e[58]=M,e[59]=I,e[60]=D):D=e[60];let S;if(e[61]!==s||e[62]!==r){let z;e[64]!==r?(z=O=>n(je,{"data-testid":`mt-agg-row-${O.shard}`,children:[t(oe,{children:O.shard}),O.metrics===null?t(oe,{className:"text-destructive",colSpan:3,children:O.error??r("unreachable")}):n(Ye,{children:[t(oe,{className:"tabular-nums",children:O.metrics.requests}),t(oe,{className:"tabular-nums",children:O.metrics.errors}),t(oe,{className:"tabular-nums",children:Xe(O.metrics.databaseSize)})]})]},O.shard),e[64]=r,e[65]=z):z=e[65],S=s.map(z),e[61]=s,e[62]=r,e[63]=S}else S=e[63];let N;e[66]!==S?(N=t(dt,{children:S}),e[66]=S,e[67]=N):N=e[67];let A;e[68]!==D||e[69]!==N?(A=t(he,{className:"overflow-hidden py-0",children:t(ge,{className:"px-0",children:n(ot,{"data-testid":"mt-agg-table",children:[D,N]})})}),e[68]=D,e[69]=N,e[70]=A):A=e[70];let F;return e[71]!==T||e[72]!==A?(F=n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[T,A]}),e[71]=T,e[72]=A,e[73]=F):F=e[73],F},rr=i=>{const e=Le(75),{currentDelta:a,errorRate:s,history:r,latencyPercentiles:f,metrics:o}=i,l=xe(),{cache:h}=o;let v;e[0]!==r||e[1]!==l?(v=r.length>=2?t(mt,{ariaLabel:l("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:r,testId:"mt-sparkline"}):void 0,e[0]=r,e[1]=l,e[2]=v):v=e[2];let w;e[3]!==a||e[4]!==r.length||e[5]!==l?(w=r.length>=2?n(Ye,{children:[t("span",{className:"font-semibold text-foreground",children:`+${a.toLocaleString()}`})," ",l("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:l("collecting samples…")}),e[3]=a,e[4]=r.length,e[5]=l,e[6]=w):w=e[6];let g;e[7]!==l?(g=l("Requests"),e[7]=l,e[8]=g):g=e[8];let d;e[9]!==o.requests||e[10]!==v||e[11]!==w||e[12]!==g?(d=t(me,{chart:v,footer:w,label:g,testId:"mt-requests",value:o.requests}),e[9]=o.requests,e[10]=v,e[11]=w,e[12]=g,e[13]=d):d=e[13];let p;e[14]!==s||e[15]!==l?(p=l("{rate} error rate",{rate:s}),e[14]=s,e[15]=l,e[16]=p):p=e[16];let y;e[17]!==l?(y=l("Errors"),e[17]=l,e[18]=y):y=e[18];let q;e[19]!==s||e[20]!==o.errors?(q=n(Ye,{children:[o.errors," (",s,")"]}),e[19]=s,e[20]=o.errors,e[21]=q):q=e[21];let C;e[22]!==p||e[23]!==y||e[24]!==q?(C=t(me,{footer:p,label:y,testId:"mt-errors",value:q}),e[22]=p,e[23]=y,e[24]=q,e[25]=C):C=e[25];let c;e[26]!==f.p90?(c=f.p90>0?`P90 ${rt(f.p90)}`:void 0,e[26]=f.p90,e[27]=c):c=e[27];let T;e[28]!==l?(T=l("P95 latency"),e[28]=l,e[29]=T):T=e[29];let x;e[30]!==f.p95?(x=f.p95>0?rt(f.p95):"—",e[30]=f.p95,e[31]=x):x=e[31];let b;e[32]!==T||e[33]!==x||e[34]!==c?(b=t(me,{footer:c,label:T,testId:"mt-p95",value:x}),e[32]=T,e[33]=x,e[34]=c,e[35]=b):b=e[35];let _;e[36]!==h||e[37]!==l?(_=h?`${h.entries.toLocaleString()} ${l("cache entries")}`:void 0,e[36]=h,e[37]=l,e[38]=_):_=e[38];let R;e[39]!==l?(R=l("Database size"),e[39]=l,e[40]=R):R=e[40];let u;e[41]!==o.databaseSize?(u=Xe(o.databaseSize),e[41]=o.databaseSize,e[42]=u):u=e[42];let M;e[43]!==_||e[44]!==R||e[45]!==u?(M=t(me,{footer:_,label:R,testId:"mt-db-size",value:u}),e[43]=_,e[44]=R,e[45]=u,e[46]=M):M=e[46];let k;e[47]!==l?(k=l("Shard"),e[47]=l,e[48]=k):k=e[48];let I;e[49]!==o.shard||e[50]!==k?(I=t(me,{label:k,testId:"mt-shard",value:o.shard}),e[49]=o.shard,e[50]=k,e[51]=I):I=e[51];let D;e[52]!==l?(D=l("Uptime"),e[52]=l,e[53]=D):D=e[53];let S;e[54]!==o.uptimeMs?(S=Lt(o.uptimeMs),e[54]=o.uptimeMs,e[55]=S):S=e[55];let N;e[56]!==D||e[57]!==S?(N=t(me,{label:D,testId:"mt-uptime",value:S}),e[56]=D,e[57]=S,e[58]=N):N=e[58];let A;e[59]!==l?(A=l("Cache hit rate"),e[59]=l,e[60]=A):A=e[60];let F;e[61]!==h||e[62]!==l?(F=h?l("{rate} ({count} entries)",{count:h.entries,rate:Et(h.hits,h.misses)}):l("no cache configured"),e[61]=h,e[62]=l,e[63]=F):F=e[63];let z;e[64]!==A||e[65]!==F?(z=t(me,{label:A,testId:"mt-cache",value:F}),e[64]=A,e[65]=F,e[66]=z):z=e[66];let O;return e[67]!==b||e[68]!==M||e[69]!==I||e[70]!==N||e[71]!==z||e[72]!==d||e[73]!==C?(O=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[d,C,b,M,I,N,z]}),e[67]=b,e[68]=M,e[69]=I,e[70]=N,e[71]=z,e[72]=d,e[73]=C,e[74]=O):O=e[74],O},Ge=i=>i>=100?"critical":i>=50?"warning":"good",Ee=i=>i<1?`${(i*1e3).toFixed(0)}μs`:i<1e3?`${i.toFixed(1)}ms`:`${(i/1e3).toFixed(2)}s`,Ue=i=>i>=1e9?`${(i/1e9).toFixed(1)}B`:i>=1e6?`${(i/1e6).toFixed(1)}M`:i>=1e3?`${(i/1e3).toFixed(1)}K`:i.toLocaleString(),sr=i=>{const e=Le(3),{level:a}=i;if(a==="critical"){let r;return e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t(Ze,{variant:"destructive",children:"Slow"}),e[0]=r):r=e[0],r}if(a==="warning"){let r;return e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-warning/10 px-2 py-0.5 text-xs font-medium text-warning",children:"Moderate"}),e[1]=r):r=e[1],r}let s;return e[2]===Symbol.for("react.memo_cache_sentinel")?(s=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-success/10 px-2 py-0.5 text-xs font-medium text-success",children:"Fast"}),e[2]=s):s=e[2],s},lr=(i,e)=>{const a=[...i];return a.sort((s,r)=>{switch(e){case"avgTime":return r.avgDurationMs-s.avgDurationMs;case"execCount":return r.execCount-s.execCount;case"rowsRead":return r.rowsRead-s.rowsRead;default:return r.totalDurationMs-s.totalDurationMs}}),a},ar=i=>{const e=Le(161),{queryStats:a}=i,s=xe(),[r,f]=pe("totalTime");let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=new Set,e[0]=o):o=e[0];const[l,h]=pe(o);let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=k=>{k!==null&&f(k)},e[1]=v):v=e[1];const w=v;let g,d,p,y,q,C,c,T,x,b;if(e[2]!==l||e[3]!==a||e[4]!==r||e[5]!==s){p=Symbol.for("react.early_return_sentinel");e:{const k=lr(a,r);let I;e[16]!==a?(I=a.filter(ir),e[16]=a,e[17]=I):I=e[17];const D=I.length;let S;e[18]!==a?(S=a.filter(nr),e[18]=a,e[19]=S):S=e[19];const N=S.length;let A;e[20]!==a?(A=a.filter(or),e[20]=a,e[21]=A):A=e[21];const F=A.length;let z;e[22]===Symbol.for("react.memo_cache_sentinel")?(z=$=>{h(ce=>{const j=new Set(ce);return j.has($)?j.delete($):j.add($),j})},e[22]=z):z=e[22];const O=z;if(a.length===0){let $;e[23]!==s?($=s("No query insights yet"),e[23]=s,e[24]=$):$=e[24];let ce;e[25]!==$?(ce=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:$}),e[25]=$,e[26]=ce):ce=e[26];let j;e[27]!==s?(j=s("Query insights appear once statements are executed against this shard."),e[27]=s,e[28]=j):j=e[28];let fe;e[29]!==j?(fe=t("p",{className:"mt-1 text-sm",children:j}),e[29]=j,e[30]=fe):fe=e[30];let Be;e[31]!==ce||e[32]!==fe?(Be=t(he,{children:t(ge,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[ce,fe]})})}),e[31]=ce,e[32]=fe,e[33]=Be):Be=e[33],p=Be;break e}c="space-y-4",T="qi-root";let L;e[34]!==s?(L=s("Critical queries"),e[34]=s,e[35]=L):L=e[35];let H;e[36]!==L?(H=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:L})}),e[36]=L,e[37]=H):H=e[37];let B;e[38]!==D?(B=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:D}),e[38]=D,e[39]=B):B=e[39];let E;e[40]!==s?(E=s(">100ms avg execution"),e[40]=s,e[41]=E):E=e[41];let K;e[42]!==E?(K=t("p",{className:"text-xs text-muted-foreground",children:E}),e[42]=E,e[43]=K):K=e[43];let G;e[44]!==B||e[45]!==K?(G=n(ge,{children:[B,K]}),e[44]=B,e[45]=K,e[46]=G):G=e[46];let J;e[47]!==H||e[48]!==G?(J=n(he,{children:[H,G]}),e[47]=H,e[48]=G,e[49]=J):J=e[49];let W;e[50]!==s?(W=s("Moderate queries"),e[50]=s,e[51]=W):W=e[51];let X;e[52]!==W?(X=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==N?(Y=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:N}),e[54]=N,e[55]=Y):Y=e[55];let Z;e[56]!==s?(Z=s("50–100ms avg execution"),e[56]=s,e[57]=Z):Z=e[57];let ee;e[58]!==Z?(ee=t("p",{className:"text-xs text-muted-foreground",children:Z}),e[58]=Z,e[59]=ee):ee=e[59];let te;e[60]!==Y||e[61]!==ee?(te=n(ge,{children:[Y,ee]}),e[60]=Y,e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==X||e[64]!==te?(re=n(he,{children:[X,te]}),e[63]=X,e[64]=te,e[65]=re):re=e[65];let se;e[66]!==s?(se=s("Fast queries"),e[66]=s,e[67]=se):se=e[67];let le;e[68]!==se?(le=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:se})}),e[68]=se,e[69]=le):le=e[69];let ae;e[70]!==F?(ae=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:F}),e[70]=F,e[71]=ae):ae=e[71];let ie;e[72]!==s?(ie=s("<50ms avg execution"),e[72]=s,e[73]=ie):ie=e[73];let ne;e[74]!==ie?(ne=t("p",{className:"text-xs text-muted-foreground",children:ie}),e[74]=ie,e[75]=ne):ne=e[75];let m;e[76]!==ae||e[77]!==ne?(m=n(ge,{children:[ae,ne]}),e[76]=ae,e[77]=ne,e[78]=m):m=e[78];let P;e[79]!==le||e[80]!==m?(P=n(he,{children:[le,m]}),e[79]=le,e[80]=m,e[81]=P):P=e[81],e[82]!==J||e[83]!==re||e[84]!==P?(x=n("div",{className:"grid gap-4 md:grid-cols-3",children:[J,re,P]}),e[82]=J,e[83]=re,e[84]=P,e[85]=x):x=e[85];let Q;e[86]!==s?(Q=s("Query leaderboard"),e[86]=s,e[87]=Q):Q=e[87];let U;e[88]!==Q?(U=t("h3",{className:"text-lg font-semibold",children:Q}),e[88]=Q,e[89]=U):U=e[89];let V;e[90]!==r||e[91]!==s?(V=s("Slow queries sorted by {sortField}",{sortField:s(r)}),e[90]=r,e[91]=s,e[92]=V):V=e[92];let ue;e[93]!==V?(ue=t("p",{className:"text-sm text-muted-foreground",children:V}),e[93]=V,e[94]=ue):ue=e[94];let be;e[95]!==U||e[96]!==ue?(be=n("div",{children:[U,ue]}),e[95]=U,e[96]=ue,e[97]=be):be=e[97];let ve;e[98]!==s?(ve=s("Sort by"),e[98]=s,e[99]=ve):ve=e[99];let ye;e[100]!==ve?(ye=t("span",{className:"text-sm text-muted-foreground",children:ve}),e[100]=ve,e[101]=ye):ye=e[101];let Ne;e[102]!==s?(Ne=s("Sort queries by"),e[102]=s,e[103]=Ne):Ne=e[103];let ze;e[104]===Symbol.for("react.memo_cache_sentinel")?(ze=t(Qt,{}),e[104]=ze):ze=e[104];let Se;e[105]!==Ne?(Se=t(Ht,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:ze}),e[105]=Ne,e[106]=Se):Se=e[106];let we;e[107]!==s?(we=s("Total time"),e[107]=s,e[108]=we):we=e[108];let qe;e[109]!==we?(qe=t(He,{value:"totalTime",children:we}),e[109]=we,e[110]=qe):qe=e[110];let Te;e[111]!==s?(Te=s("Avg time"),e[111]=s,e[112]=Te):Te=e[112];let _e;e[113]!==Te?(_e=t(He,{value:"avgTime",children:Te}),e[113]=Te,e[114]=_e):_e=e[114];let Ce;e[115]!==s?(Ce=s("Execution count"),e[115]=s,e[116]=Ce):Ce=e[116];let Re;e[117]!==Ce?(Re=t(He,{value:"execCount",children:Ce}),e[117]=Ce,e[118]=Re):Re=e[118];let Me;e[119]!==s?(Me=s("Rows read"),e[119]=s,e[120]=Me):Me=e[120];let ke;e[121]!==Me?(ke=t(He,{value:"rowsRead",children:Me}),e[121]=Me,e[122]=ke):ke=e[122];let Ie;e[123]!==qe||e[124]!==_e||e[125]!==Re||e[126]!==ke?(Ie=n(Ut,{children:[qe,_e,Re,ke]}),e[123]=qe,e[124]=_e,e[125]=Re,e[126]=ke,e[127]=Ie):Ie=e[127];let De;e[128]!==r||e[129]!==Se||e[130]!==Ie?(De=n(Vt,{onValueChange:w,value:r,children:[Se,Ie]}),e[128]=r,e[129]=Se,e[130]=Ie,e[131]=De):De=e[131];let $e;e[132]!==ye||e[133]!==De?($e=n("div",{className:"flex items-center gap-2",children:[ye,De]}),e[132]=ye,e[133]=De,e[134]=$e):$e=e[134],e[135]!==be||e[136]!==$e?(b=n("div",{className:"flex items-center justify-between",children:[be,$e]}),e[135]=be,e[136]=$e,e[137]=b):b=e[137],d=he;let Ae;e[138]!==s?(Ae=s("Statements"),e[138]=s,e[139]=Ae):Ae=e[139];let Oe;e[140]!==Ae?(Oe=t(Qe,{children:Ae}),e[140]=Ae,e[141]=Oe):Oe=e[141],C=n(Pe,{children:[Oe,t(Mt,{children:s("{count} tracked statements",{count:k.length})})]}),g=ge,y="space-y-2";let Ke;e[142]!==l||e[143]!==s?(Ke=$=>{const ce=$.normalizedSql,j=l.has(ce),fe=Ge($.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":j,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{O(ce)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(sr,{level:fe}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:$.normalizedSql})]}),n("div",{className:"flex shrink-0 items-center gap-4",children:[n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee($.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee($.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("avg")})]}),$.p95DurationMs!==void 0&&n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee($.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("p95")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ue($.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:s("calls")})]})]})]}),j&&n("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[n("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:s("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:$.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[$.p50DurationMs!==void 0&&n("div",{children:[t("span",{className:"text-muted-foreground",children:s("p50")}),t("span",{className:"block font-medium tabular-nums",children:Ee($.p50DurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:Ue($.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Ee($.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:Ue($.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:Ue($.rowsWritten)})]})]})]})]},ce)},e[142]=l,e[143]=s,e[144]=Ke):Ke=e[144],q=k.map(Ke)}e[2]=l,e[3]=a,e[4]=r,e[5]=s,e[6]=g,e[7]=d,e[8]=p,e[9]=y,e[10]=q,e[11]=C,e[12]=c,e[13]=T,e[14]=x,e[15]=b}else g=e[6],d=e[7],p=e[8],y=e[9],q=e[10],C=e[11],c=e[12],T=e[13],x=e[14],b=e[15];if(p!==Symbol.for("react.early_return_sentinel"))return p;let _;e[145]!==y||e[146]!==q?(_=t("div",{className:y,children:q}),e[145]=y,e[146]=q,e[147]=_):_=e[147];let R;e[148]!==g||e[149]!==_?(R=t(g,{children:_}),e[148]=g,e[149]=_,e[150]=R):R=e[150];let u;e[151]!==d||e[152]!==R||e[153]!==C?(u=n(d,{children:[C,R]}),e[151]=d,e[152]=R,e[153]=C,e[154]=u):u=e[154];let M;return e[155]!==u||e[156]!==c||e[157]!==T||e[158]!==x||e[159]!==b?(M=n("div",{className:c,"data-testid":T,children:[x,b,u]}),e[155]=u,e[156]=c,e[157]=T,e[158]=x,e[159]=b,e[160]=M):M=e[160],M};function ir(i){return Ge(i.avgDurationMs)==="critical"}function nr(i){return Ge(i.avgDurationMs)==="warning"}function or(i){return Ge(i.avgDurationMs)==="good"}const cr=["1m","5m","15m","1h"],dr=i=>new Date(i).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),mr=i=>i.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:dr(e.bucketMs)})),ur=({shardKey:i=""})=>{const e=xe(),[a,s]=pe("15m"),f=Ve(Fe.getQueryInsights,{range:a},{live:!0,shardKey:i}).data,o=mr(f?.buckets??[]);return n("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t("div",{className:"flex gap-1 rounded-lg border border-border p-0.5","data-testid":"qi-ranges",role:"group",children:cr.map(l=>t("button",{"aria-pressed":l===a,className:Pt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",l===a&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${l}`,onClick:()=>{s(l)},type:"button",children:l},l))}),f?.capped===!0&&t(Ze,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),o.length===0?t(Bt,{description:e("Statements executed in the selected window appear here, with throughput and latency over time."),testId:"qi-empty",title:e("No queries in this window.")}):n("div",{className:"grid gap-4 lg:grid-cols-2",children:[n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-throughput",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Throughput")}),t(st,{height:140,width:"100%",children:n(Ft,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(at,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(zt,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-latency",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Mean latency (ms)")}),t(st,{height:140,width:"100%",children:n(Ot,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(at,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(Kt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(ar,{queryStats:f?.entries??[]})]})},fr=Tt(Fe.getMetrics),hr=(i,e)=>i?e:"overview",Qr=({initialShardKey:i})=>{const e=ht(),a=xe(),{queryShardKey:s,setShardKey:r,shardKey:f}=vt(i),[o,l]=pe("overview"),[h,v]=pe([]),w=Je(null),g=Je(null),d=Je(!0);et(()=>(d.current=!0,()=>{d.current=!1}),[]);const p=bt(s),{data:y,error:q,liveError:C}=Ve(Fe.getMetrics,{},{live:!0,shardKey:s}),c=y??null;et(()=>{if(y===void 0)return;_t(s);const L=y,H=w.current,B=g.current!==null&&g.current!==L.shard;if(g.current=L.shard,w.current=L.requests,B){v([]);return}H!==null&&L.requests>=H&&v(E=>[...E,L.requests-H].slice(-30))},[y,s]);const[T,x]=pe(null),[b,_]=pe(!1),R=async()=>{_(!0);const L=f,H=At(L,Ct());try{const B=await Promise.all(H.map(async E=>{try{const K=await e.query(fr,{},wt(E));return{error:null,metrics:K,shard:E===""?K.shard:E}}catch(K){return{error:qt(K),metrics:null,shard:E===""?"__root__":E}}}));d.current&&x({results:B,shard:L})}finally{d.current&&_(!1)}},u=T?.shard===f?T.results:null,M=u===null?null:It(u),k=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,I=h.length>0?h.at(-1):0,D=c?Dt(c):{p90:0,p95:0},S=gt(()=>{if(!c||!("queryStats"in c))return;const L=c.queryStats;if(!(!L||!Array.isArray(L)))return $t(L)},[c]),N=hr(S!==void 0,o),A=()=>{St(R())},F=()=>{x(null)},z=()=>{l("overview")},O=()=>{l("query-insights")};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(xt,{onChange:r,testId:"mt-shard-input",value:f}),t(pt,{message:C,prefix:"mt"}),t(tt,{"data-testid":"mt-aggregate",disabled:b,onClick:A,size:"sm",type:"button",variant:"secondary",children:a(b?"Aggregating…":"All shards")}),u!==null&&t(tt,{"data-testid":"mt-aggregate-clear",onClick:F,size:"sm",type:"button",variant:"ghost",children:a("Hide")}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:yt,rel:"noreferrer",target:"_blank",children:a("Open in Cloudflare")})]}),q!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:q}),S!==void 0&&n("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:z,type:"button",children:a("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:O,type:"button",children:[a("Query insights"),S.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:S.length})]})]}),N==="query-insights"&&S!==void 0&&t(ur,{shardKey:s}),N==="overview"&&c!==null&&t(rr,{currentDelta:I,errorRate:k,history:h,latencyPercentiles:D,metrics:c}),N==="overview"&&c===null&&null,N==="overview"&&t(er,{onOpenTrace:p,shardKey:s}),N==="overview"&&M!==null&&u!==null&&t(tr,{aggregate:M,shardResults:u})]})};export{Qr as MetricsPanel};
@@ -1 +1 @@
1
- import{c as k}from"react/compiler-runtime";import{useLunora as F}from"@lunora/react";import{useNavigate as L,useRouter as M,useSearch as P}from"@tanstack/react-router";import{useState as Q,useEffect as A}from"react";import{T as w}from"../packem_shared/storage-tier-C2mKwYRj.mjs";import{u as q}from"../packem_shared/use-mirrored-ref-CVDf2z1M.mjs";import{useT as J}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{s as K,d as D}from"../packem_shared/data-view-params-DhYmAkcj.mjs";import{f as m}from"../packem_shared/internal-Df43vQI0.mjs";import{l as O,s as I}from"../packem_shared/browser-storage-BH1MxLZs.mjs";import{DataBrowser as X}from"../packem_shared/DataBrowser-C14aRmmR.mjs";import{GlobalDataBrowser as Y}from"../packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{jsx as v,jsxs as E}from"react/jsx-runtime";const N="lunora-studio-saved-queries",$=50,z=r=>r!==null&&typeof r=="object"&&typeof r.name=="string"&&typeof r.view=="object"&&r.view!==null,y=()=>O(N).filter(z),B=r=>{I(N,r)},H=(r,e)=>{const l=r.trim();if(l==="")return y();const n=[{name:l,view:e},...y().filter(o=>o.name!==l)].slice(0,$);return B(n),n},U=r=>{const e=y().filter(l=>l.name!==r);return B(e),e},W=r=>{const e=k(15),{onChange:l,tier:n}=r,o=J();let p;e[0]!==l?(p=S=>{l(S.target.value)},e[0]=l,e[1]=p):p=e[1];const u=p;let s;e[2]!==o?(s=o("Storage tier"),e[2]=o,e[3]=s):s=e[3];let d;e[4]!==s?(d=v("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:s}),e[4]=s,e[5]=d):d=e[5];const g=w[n];let c,i;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=v("option",{value:"shard",children:w.shard.label}),i=v("option",{value:"global",children:w.global.label}),e[6]=c,e[7]=i):(c=e[6],i=e[7]);let h;e[8]!==u||e[9]!==g.title||e[10]!==n?(h=E("select",{className:"h-8 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus-visible:border-ring","data-testid":"table-editor-schema",id:"table-editor-schema",onChange:u,title:g.title,value:n,children:[c,i]}),e[8]=u,e[9]=g.title,e[10]=n,e[11]=h):h=e[11];let f;return e[12]!==d||e[13]!==h?(f=E("label",{className:"flex w-full flex-col gap-1",htmlFor:"table-editor-schema",children:[d,h]}),e[12]=d,e[13]=h,e[14]=f):f=e[14],f},Z=()=>{try{m(globalThis.navigator.clipboard.writeText(globalThis.location.href))}catch{}},ge=({canGenerateRows:r=!1,editable:e=!1,initialShardKey:l})=>{const n=F(),o=L(),p=M(),u=P({strict:!1}),s=K(u),d=q(u),g=()=>p.state.location.pathname.split("/").findLast(Boolean)==="data",c=s.tier??"shard",i=s.table,[h,f]=Q(()=>y()),[S,R]=Q(()=>new Set);A(()=>{m((async()=>{try{const a=await n.listGlobalTables();R(new Set(a.map(t=>t.name)))}catch{}})())},[n]),A(()=>{c==="shard"&&i!==void 0&&S.has(i)&&m(o({replace:!0,search:a=>({...a,schema:"global"}),to:"/data"}))},[S,o,i,c]);const C=a=>{m(o({search:t=>({...t,schema:a==="global"?"global":void 0,table:void 0}),to:"/data"}))},T=(a,t)=>{g()&&m(o({search:b=>({schema:b.schema,search:t?.search,shard:b.shard,table:a}),to:"/data"}))},G=a=>{m(o({search:t=>({...t,schema:"global",table:a}),to:"/data"}))},_=a=>{const t=D(a),{current:b}=d;(b.filters??void 0)===t.filters&&(b.order??void 0)===t.order&&(b.search??void 0)===t.search&&(b.shard??void 0)===t.shard||!g()||m(o({replace:!0,search:V=>({...V,filters:t.filters,order:t.order,search:t.search,shard:t.shard}),to:"/data"}))},j={onApplyQuery:a=>{const t=D(a.view);m(o({search:()=>({filters:t.filters,order:t.order,schema:t.schema,search:t.search,shard:t.shard,table:t.table}),to:"/data"}))},onCopyLink:Z,onDeleteQuery:a=>{f(U(a))},onSaveQuery:(a,t)=>{f(H(a,t))},saved:h},x=v(W,{onChange:C,tier:c});return c==="global"?v(Y,{initialTable:i,onSelectTable:T,schemaSwitch:x}):v(X,{canGenerateRows:r,editable:e,globalTableNames:S,initialFilters:s.filters,initialOrderBy:s.orderBy,initialPins:u.pins,initialSearch:s.search,initialShardKey:s.shard??l,onNavigateToGlobal:G,onSelectTable:T,onViewChange:_,queryBar:j,schemaSwitch:x,tableParam:i})};export{ge as TableEditor};
1
+ import{c as k}from"react/compiler-runtime";import{useLunora as F}from"@lunora/react";import{useNavigate as L,useRouter as M,useSearch as P}from"@tanstack/react-router";import{useState as Q,useEffect as A}from"react";import{T as w}from"../packem_shared/storage-tier-C2mKwYRj.mjs";import{u as q}from"../packem_shared/use-mirrored-ref-CVDf2z1M.mjs";import{useT as J}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{s as K,d as D}from"../packem_shared/data-view-params-DhYmAkcj.mjs";import{f as m}from"../packem_shared/internal-Df43vQI0.mjs";import{l as O,s as I}from"../packem_shared/browser-storage-BH1MxLZs.mjs";import{DataBrowser as X}from"../packem_shared/DataBrowser-E68QfaST.mjs";import{GlobalDataBrowser as Y}from"../packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{jsx as v,jsxs as E}from"react/jsx-runtime";const N="lunora-studio-saved-queries",$=50,z=r=>r!==null&&typeof r=="object"&&typeof r.name=="string"&&typeof r.view=="object"&&r.view!==null,y=()=>O(N).filter(z),B=r=>{I(N,r)},H=(r,e)=>{const l=r.trim();if(l==="")return y();const n=[{name:l,view:e},...y().filter(o=>o.name!==l)].slice(0,$);return B(n),n},U=r=>{const e=y().filter(l=>l.name!==r);return B(e),e},W=r=>{const e=k(15),{onChange:l,tier:n}=r,o=J();let p;e[0]!==l?(p=S=>{l(S.target.value)},e[0]=l,e[1]=p):p=e[1];const u=p;let s;e[2]!==o?(s=o("Storage tier"),e[2]=o,e[3]=s):s=e[3];let d;e[4]!==s?(d=v("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:s}),e[4]=s,e[5]=d):d=e[5];const g=w[n];let c,i;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=v("option",{value:"shard",children:w.shard.label}),i=v("option",{value:"global",children:w.global.label}),e[6]=c,e[7]=i):(c=e[6],i=e[7]);let h;e[8]!==u||e[9]!==g.title||e[10]!==n?(h=E("select",{className:"h-8 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus-visible:border-ring","data-testid":"table-editor-schema",id:"table-editor-schema",onChange:u,title:g.title,value:n,children:[c,i]}),e[8]=u,e[9]=g.title,e[10]=n,e[11]=h):h=e[11];let f;return e[12]!==d||e[13]!==h?(f=E("label",{className:"flex w-full flex-col gap-1",htmlFor:"table-editor-schema",children:[d,h]}),e[12]=d,e[13]=h,e[14]=f):f=e[14],f},Z=()=>{try{m(globalThis.navigator.clipboard.writeText(globalThis.location.href))}catch{}},ge=({canGenerateRows:r=!1,editable:e=!1,initialShardKey:l})=>{const n=F(),o=L(),p=M(),u=P({strict:!1}),s=K(u),d=q(u),g=()=>p.state.location.pathname.split("/").findLast(Boolean)==="data",c=s.tier??"shard",i=s.table,[h,f]=Q(()=>y()),[S,R]=Q(()=>new Set);A(()=>{m((async()=>{try{const a=await n.listGlobalTables();R(new Set(a.map(t=>t.name)))}catch{}})())},[n]),A(()=>{c==="shard"&&i!==void 0&&S.has(i)&&m(o({replace:!0,search:a=>({...a,schema:"global"}),to:"/data"}))},[S,o,i,c]);const C=a=>{m(o({search:t=>({...t,schema:a==="global"?"global":void 0,table:void 0}),to:"/data"}))},T=(a,t)=>{g()&&m(o({search:b=>({schema:b.schema,search:t?.search,shard:b.shard,table:a}),to:"/data"}))},G=a=>{m(o({search:t=>({...t,schema:"global",table:a}),to:"/data"}))},_=a=>{const t=D(a),{current:b}=d;(b.filters??void 0)===t.filters&&(b.order??void 0)===t.order&&(b.search??void 0)===t.search&&(b.shard??void 0)===t.shard||!g()||m(o({replace:!0,search:V=>({...V,filters:t.filters,order:t.order,search:t.search,shard:t.shard}),to:"/data"}))},j={onApplyQuery:a=>{const t=D(a.view);m(o({search:()=>({filters:t.filters,order:t.order,schema:t.schema,search:t.search,shard:t.shard,table:t.table}),to:"/data"}))},onCopyLink:Z,onDeleteQuery:a=>{f(U(a))},onSaveQuery:(a,t)=>{f(H(a,t))},saved:h},x=v(W,{onChange:C,tier:c});return c==="global"?v(Y,{initialTable:i,onSelectTable:T,schemaSwitch:x}):v(X,{canGenerateRows:r,editable:e,globalTableNames:S,initialFilters:s.filters,initialOrderBy:s.orderBy,initialPins:u.pins,initialSearch:s.search,initialShardKey:s.shard??l,onNavigateToGlobal:G,onSelectTable:T,onViewChange:_,queryBar:j,schemaSwitch:x,tableParam:i})};export{ge as TableEditor};
@@ -1 +1 @@
1
- import{a as D}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as E}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as x,a as A}from"../packem_shared/card-By2O8ULa.mjs";import{E as I}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as P,a as V,b as g,c as m,d as C,e as o}from"../packem_shared/table-D0SBiDu-.mjs";import{u as h}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useAutoRefresh as H}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{u as M}from"../packem_shared/home-panel-BcE8S2Nn.mjs";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as b}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as B}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as e,jsxs as d}from"react/jsx-runtime";const T="payment_subscriptions",R="payment_events",k=[T,R],G={},N=new Set(["active","trialing"]),Y=new Set(["past_due","unpaid"]),a=(n,r)=>{if(n[r]!==void 0)return n[r];const p=n.__doc__;return typeof p=="string"?D(p)?.[r]:void 0},s=n=>typeof n=="string"?n:typeof n=="number"||typeof n=="bigint"||typeof n=="boolean"?String(n):"",q=n=>N.has(n)?"default":Y.has(n)?"destructive":"outline",oe=({limit:n=100})=>{const r=U(),p=M(),{data:y}=h(b.listTables,G,{live:!0}),_=y!==void 0,w=Array.isArray(y)&&k.every(t=>y.some(c=>c.name===t)),l=p.payments&&w,i=h(b.readTablePage,{filters:[],limit:n,offset:0,orderBy:{column:"updatedAt",direction:"desc"},search:"",table:T},{enabled:l}),u=h(b.readTablePage,{filters:[],limit:25,offset:0,orderBy:{column:"processedAt",direction:"desc"},search:"",table:R},{enabled:l}),v=h(b.facetColumn,{column:"state",table:T},{enabled:l});H(()=>{l&&(i.refetch(),u.refetch(),v.refetch())},!0);const f=i.data?.rows??[],L=u.data?.rows??[],O=i.error??u.error,Q=i.error===null?u.errorSource:i.errorSource,j=i.data?.total??f.length,S=v.data?.values===void 0?f.filter(t=>N.has(s(a(t,"state")))).length:v.data.values.reduce((t,c)=>t+(N.has(s(c.value))?c.count:0),0);return _&&!l?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(I,{description:r("No @lunora/payment tables found in this deployment. Add `.extend(paymentExtension)` to lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:r("No payments configured")})}):d("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:[e("div",{className:"flex items-center gap-2","data-testid":"payments-summary",children:d(x,{className:"justify-between gap-0 py-0",children:[d("div",{className:"flex flex-col gap-2.5 p-4",children:[e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Subscriptions")}),d("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:S}),e(E,{variant:"default",children:r("{count} active",{count:S})})]})]}),e("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:r("{total} total",{total:j})})]})}),O===null?void 0:e(F,{error:Q}),f.length===0&&!i.isLoading?e(I,{testId:"payments-empty",title:r("No subscriptions yet")}):e(x,{className:"overflow-hidden py-0",children:e(A,{className:"px-0",children:d(P,{children:[e(V,{children:d(g,{children:[e(m,{children:r("Provider")}),e(m,{children:r("Reference")}),e(m,{children:r("Plan")}),e(m,{children:r("State")}),e(m,{children:r("Renews")})]})}),e(C,{children:f.map(t=>{const c=s(a(t,"state"));return d(g,{"data-testid":"payment-subscription-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{children:s(a(t,"referenceId"))}),e(o,{children:s(a(t,"priceId"))}),e(o,{children:e(E,{variant:q(c),children:c})}),e(o,{children:B(a(t,"currentPeriodEnd"))})]},s(a(t,"providerSubscriptionId")))})})]})})}),d(x,{className:"overflow-hidden py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Recent webhook events")})}),e(A,{className:"px-0",children:e(P,{children:e(C,{children:L.map(t=>d(g,{"data-testid":"payment-event-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{className:"font-medium",children:s(a(t,"type"))}),e(o,{className:"text-muted-foreground",children:s(a(t,"providerEventId"))}),e(o,{children:B(a(t,"processedAt"))})]},s(a(t,"providerEventId"))))})})})]})]})};export{oe as PaymentsPanel};
1
+ import{decodeDocument as D}from"@lunora/wire";import{E as F}from"../packem_shared/error-alert-DueSEkt-.mjs";import{B as E}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as x,a as A}from"../packem_shared/card-By2O8ULa.mjs";import{E as I}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as P,a as V,b as g,c as m,d as C,e as o}from"../packem_shared/table-D0SBiDu-.mjs";import{u as h}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useAutoRefresh as H}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{u as M}from"../packem_shared/home-panel-BcE8S2Nn.mjs";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as b}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as B}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as e,jsxs as d}from"react/jsx-runtime";const T="payment_subscriptions",R="payment_events",k=[T,R],G={},N=new Set(["active","trialing"]),Y=new Set(["past_due","unpaid"]),a=(n,r)=>{if(n[r]!==void 0)return n[r];const p=n.__doc__;return typeof p=="string"?D(p)?.[r]:void 0},s=n=>typeof n=="string"?n:typeof n=="number"||typeof n=="bigint"||typeof n=="boolean"?String(n):"",q=n=>N.has(n)?"default":Y.has(n)?"destructive":"outline",oe=({limit:n=100})=>{const r=U(),p=M(),{data:y}=h(b.listTables,G,{live:!0}),_=y!==void 0,w=Array.isArray(y)&&k.every(t=>y.some(c=>c.name===t)),l=p.payments&&w,i=h(b.readTablePage,{filters:[],limit:n,offset:0,orderBy:{column:"updatedAt",direction:"desc"},search:"",table:T},{enabled:l}),u=h(b.readTablePage,{filters:[],limit:25,offset:0,orderBy:{column:"processedAt",direction:"desc"},search:"",table:R},{enabled:l}),v=h(b.facetColumn,{column:"state",table:T},{enabled:l});H(()=>{l&&(i.refetch(),u.refetch(),v.refetch())},!0);const f=i.data?.rows??[],L=u.data?.rows??[],O=i.error??u.error,Q=i.error===null?u.errorSource:i.errorSource,j=i.data?.total??f.length,S=v.data?.values===void 0?f.filter(t=>N.has(s(a(t,"state")))).length:v.data.values.reduce((t,c)=>t+(N.has(s(c.value))?c.count:0),0);return _&&!l?e("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:e(I,{description:r("No @lunora/payment tables found in this deployment. Add `.extend(paymentExtension)` to lunora/schema.ts and wire `payment` on createShardDO() to sync customers and subscriptions."),testId:"payments-unconfigured",title:r("No payments configured")})}):d("div",{className:"flex flex-col gap-4","data-testid":"payments-panel",children:[e("div",{className:"flex items-center gap-2","data-testid":"payments-summary",children:d(x,{className:"justify-between gap-0 py-0",children:[d("div",{className:"flex flex-col gap-2.5 p-4",children:[e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Subscriptions")}),d("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:S}),e(E,{variant:"default",children:r("{count} active",{count:S})})]})]}),e("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:r("{total} total",{total:j})})]})}),O===null?void 0:e(F,{error:Q}),f.length===0&&!i.isLoading?e(I,{testId:"payments-empty",title:r("No subscriptions yet")}):e(x,{className:"overflow-hidden py-0",children:e(A,{className:"px-0",children:d(P,{children:[e(V,{children:d(g,{children:[e(m,{children:r("Provider")}),e(m,{children:r("Reference")}),e(m,{children:r("Plan")}),e(m,{children:r("State")}),e(m,{children:r("Renews")})]})}),e(C,{children:f.map(t=>{const c=s(a(t,"state"));return d(g,{"data-testid":"payment-subscription-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{children:s(a(t,"referenceId"))}),e(o,{children:s(a(t,"priceId"))}),e(o,{children:e(E,{variant:q(c),children:c})}),e(o,{children:B(a(t,"currentPeriodEnd"))})]},s(a(t,"providerSubscriptionId")))})})]})})}),d(x,{className:"overflow-hidden py-0",children:[e("header",{className:"border-b border-border px-4 py-3",children:e("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Recent webhook events")})}),e(A,{className:"px-0",children:e(P,{children:e(C,{children:L.map(t=>d(g,{"data-testid":"payment-event-row",children:[e(o,{children:s(a(t,"provider"))}),e(o,{className:"font-medium",children:s(a(t,"type"))}),e(o,{className:"text-muted-foreground",children:s(a(t,"providerEventId"))}),e(o,{children:B(a(t,"processedAt"))})]},s(a(t,"providerEventId"))))})})})]})]})};export{oe as PaymentsPanel};
@@ -1 +1 @@
1
- import{useState as h,useRef as se,useEffect as oe}from"react";import{c as xe,d as ye,b as be,a as de,C as me}from"../packem_shared/card-By2O8ULa.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{c as fe}from"react/compiler-runtime";import{E as ge}from"../packem_shared/error-alert-DueSEkt-.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as $}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{E as pe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Ne,a as ke,b as ie,c as te,d as Se,e as ae}from"../packem_shared/table-D0SBiDu-.mjs";import{u as re}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{ADMIN_FUNCTIONS as X}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsxs as i,jsx as a}from"react/jsx-runtime";import{useLunora as ue}from"@lunora/react";import{d as Ce}from"../packem_shared/wire-codec-B2DgCbKt.mjs";import{ShardInput as we}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{I as J}from"../packem_shared/input-CXhxesPC.mjs";import{L as U}from"../packem_shared/label-DKFzyHq6.mjs";import{T as Pe}from"../packem_shared/textarea--40GKAyz.mjs";import{d as Ae,c as Ee,b as Te,f as le,j as _e}from"../packem_shared/internal-Df43vQI0.mjs";const ne=["read","insert","update","delete"],Ie=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],Re=e=>e.file===""?e.procedure:`${e.file}:${e.procedure}`,Fe=e=>{const t=new Set;for(const s of e?.advisories??[])if(s.name==="rls_uncovered_table"){const{table:c}=s.metadata;typeof c=="string"&&c!==""&&t.add(c)}return t},Oe=(e,t,s)=>{const c=new Map,r=n=>{const o=c.get(n);if(o!==void 0)return o;const f={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:new Set,table:n,uncovered:s.has(n)};return c.set(n,f),f};for(const n of e)r(n.table).cells[n.on]={path:Re(n),procedure:n.procedure};for(const n of t)r(n.table).maskedColumns.add(n.column);for(const n of s)r(n);return[...c.values()].toSorted((n,o)=>n.table.localeCompare(o.table))},De=e=>{const t=fe(17);let s;t[0]!==e?(s=e===void 0?{}:e,t[0]=e,t[1]=s):s=t[1];const{onProbe:c}=s,r=ee();let n,o;t[2]===Symbol.for("react.memo_cache_sentinel")?(n={},o={live:!0},t[2]=n,t[3]=o):(n=t[2],o=t[3]);const f=re(X.rlsPolicies,n,o);let l;t[4]===Symbol.for("react.memo_cache_sentinel")?(l={},t[4]=l):l=t[4];const b=re(X.maskPolicies,l);let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u={},t[5]=u):u=t[5];const g=re(X.getAdvisories,u);let v;if(t[6]!==g.data||t[7]!==b.data||t[8]!==c||t[9]!==f||t[10]!==r){let N=null;f.data!==void 0&&(N=Array.isArray(f.data.policies)?f.data.policies:[]);const R=Array.isArray(b.data?.columns)?b.data.columns:[],M=g.data??null,{error:P,errorSource:k,liveError:A}=f,_=N===null?[]:Oe(N,R,Fe(M));let S;t[12]!==A?(S=a("div",{className:"flex items-center justify-end",children:a(ve,{message:A,prefix:"pm"})}),t[12]=A,t[13]=S):S=t[13];let p;t[14]!==P||t[15]!==k?(p=P!==null&&a(ge,{error:k,testId:"pm-error"}),t[14]=P,t[15]=k,t[16]=p):p=t[16],v=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[S,p,N!==null&&_.length===0?a(pe,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(Ne,{"data-testid":"pm-table",children:[a(ke,{children:i(ie,{children:[a(te,{children:r("Table")}),ne.map(m=>a(te,{children:Ie(r,m)},m)),a(te,{children:r("Masked columns")})]})}),a(Se,{children:_.map(m=>i(ie,{"data-testid":`pm-row-${m.table}`,children:[a(ae,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[m.table,m.uncovered&&a($,{"data-testid":`pm-uncovered-${m.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),ne.map(E=>{const x=m.cells[E];return a(ae,{"data-testid":`pm-cell-${m.table}-${E}`,children:x.procedure===void 0?a("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[a($,{variant:"secondary",children:r("Covered by {procedure}",{procedure:x.procedure})}),c!==void 0&&a(L,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${m.table}-${E}`,onClick:()=>{c(m.table,E,x.path??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},E)}),a(ae,{children:m.maskedColumns.size===0?a("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):a("span",{className:"flex flex-wrap gap-1",children:[...m.maskedColumns].map(Le)})})]},m.table))})]})]}),t[6]=g.data,t[7]=b.data,t[8]=c,t[9]=f,t[10]=r,t[11]=v}else v=t[11];return v};function Le(e){return a($,{variant:"outline",children:e},e)}const $e=Ee(X.runAs),Ue=new Set(["FORBIDDEN","RLS_REQUIRED","UNAUTHORIZED"]),Me=e=>{const t=e?.code;return typeof t=="string"?t:void 0},ze=()=>{const e=ue();return async({args:t,functionPath:s,shardKey:c="",userId:r})=>{if(r.trim()==="")return{kind:"invalid",message:"No identity to probe: enter the userId whose access you want to test."};const n=$e;try{return{kind:"allowed",value:await e.query(n,{args:t,functionPath:s,userId:r},Ae(c))}}catch(o){const f=o instanceof Error?o.message:String(o),l=Me(o);return l!==void 0&&Ue.has(l)?{kind:"denied",message:f}:{kind:"errored",message:f}}}},je=e=>e===void 0?"undefined":JSON.stringify(e,_e,2),qe=({functions:e,prefill:t,runAsIdentity:s=!1}={})=>{const c=ue(),r=ee(),n=ze(),[o,f]=h(null),[l,b]=h(null),u=e??o??[],[g,v]=h(""),[N,R]=h("{}"),[M,P]=h(""),[k,A]=h(""),[_,S]=h(!1),[p,m]=h(null),[E,x]=h(null),I=se(-1),C=se(0);oe(()=>{if(e!==void 0)return;let d=!1;return c.listFunctions().then(y=>(d||f(y),y)).catch(y=>{d||b(Te(y))}),()=>{d=!0}},[c,e]),oe(()=>{if(t===void 0||I.current===t.nonce)return;I.current=t.nonce,C.current+=1;const d=t.functionPath;queueMicrotask(()=>{v(d),m(null)})},[t]);const w=g===""?u[0]?.path??"":g,F=async()=>{if(w==="")return;let d;try{d=N.trim()===""?{}:Ce(JSON.parse(N))}catch(T){x(r("Invalid JSON args: {message}",{message:T.message})),m(null);return}C.current+=1;const y=C.current;x(null),S(!0);try{const T=await n({args:d,functionPath:w,shardKey:M.trim(),userId:k.trim()});y===C.current&&m(T)}finally{S(!1)}},K=()=>{le(F())},O=d=>{v(d.target.value)},D=d=>{R(d.target.value)},Y=d=>{A(d.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[l!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:l}),!s&&a(pe,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-function",children:r("Function")}),a("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:O,value:w,children:u.map(d=>i("option",{value:d.path,children:[d.path," (",d.kind,")"]},d.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-args",children:r("Arguments")}),a(Pe,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:D,value:N})]}),a(we,{onChange:P,testId:"pp-shard",value:M}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-user",children:r("Run as (userId)")}),a(J,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:Y,placeholder:r("Required — the identity to probe as"),value:k})]}),i("div",{className:"flex items-center gap-2",children:[a(L,{"data-testid":"pp-run",disabled:!s||_||w==="",onClick:K,type:"button",children:r(_?"Probing…":"Run probe")}),k.trim()!==""&&a($,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:k.trim()})})]})]}),E!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:E}),p!==null&&p.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[a($,{variant:"secondary",children:r("Allowed")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:je(p.value)})]}),p!==null&&p.kind==="invalid"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-invalid",children:[a($,{variant:"outline",children:r("Not run")}),a("p",{className:"text-sm text-muted-foreground","data-testid":"pp-invalid",role:"status",children:p.message})]}),p!==null&&p.kind==="errored"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-errored",children:[a($,{variant:"outline",children:r("Errored")}),a("p",{className:"text-sm text-muted-foreground",children:r("The call failed for a reason that is not an access verdict, so it says nothing about the policy.")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-errored",role:"alert",children:p.message})]}),p!==null&&p.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[a($,{variant:"destructive",children:r("Denied")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:p.message})]})]})},Be="/__lunora/policy-scaffold",We={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Qe=async e=>{const t=await fetch(Be,{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"}),s=await t.json();if(s.needsManualEdit===!0)return{kind:"needs-manual-edit",message:s.message??"This change must be made by hand."};if(t.ok)return{diagnostics:s.diagnostics??[],kind:"ok",label:s.fileName??s.exportName??""};const c=s.error;return{kind:"error",message:c===void 0?`policy scaffold failed (${String(t.status)})`:We[c]??c}},ce={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},He=()=>{const e=fe(69),t=ee(),[s,c]=h(null),[r,n]=h(!1),[o,f]=h(null),[l,b]=h(ce);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=Z=>{const H=Z.target.name,{value:G}=Z.target;b(he=>({...he,[H]:G}))},e[0]=u):u=e[0];const g=u;let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{c(null),b(ce)},e[1]=v):v=e[1];const N=v;let R;e[2]===Symbol.for("react.memo_cache_sentinel")?(R=async Z=>{n(!0),f(null);try{const H=await Qe(Z);f(H),H.kind==="ok"&&N()}catch(H){const G=H;f({kind:"error",message:G instanceof Error?G.message:String(G)})}n(!1)},e[2]=R):R=e[2];const M=R;let P;e[3]!==l.policyName||e[4]!==l.tableName?(P=()=>{le(M({kind:"scaffoldPolicy",name:l.policyName.trim(),table:l.tableName.trim()}))},e[3]=l.policyName,e[4]=l.tableName,e[5]=P):P=e[5];const k=P;let A;e[6]!==l.exportName||e[7]!==l.filePath||e[8]!==l.policies?(A=()=>{le(M({exportName:l.exportName.trim(),filePath:l.filePath.trim(),kind:"wireRls",policies:l.policies.trim()}))},e[6]=l.exportName,e[7]=l.filePath,e[8]=l.policies,e[9]=A):A=e[9];const _=A;let S;e[10]===Symbol.for("react.memo_cache_sentinel")?(S=()=>{f(null),c("scaffold")},e[10]=S):S=e[10];const p=S;let m;e[11]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{f(null),c("wire")},e[11]=m):m=e[11];const E=m;let x;e[12]!==t?(x=t("Scaffold access rules"),e[12]=t,e[13]=x):x=e[13];let I;e[14]!==x?(I=a(xe,{children:x}),e[14]=x,e[15]=I):I=e[15];let C;e[16]!==t?(C=t("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only."),e[16]=t,e[17]=C):C=e[17];let w;e[18]!==C?(w=a(ye,{children:C}),e[18]=C,e[19]=w):w=e[19];let F;e[20]!==w||e[21]!==I?(F=i(be,{children:[I,w]}),e[20]=w,e[21]=I,e[22]=F):F=e[22];const K=s==="scaffold"?"default":"outline";let O;e[23]!==t?(O=t("New policy file"),e[23]=t,e[24]=O):O=e[24];let D;e[25]!==K||e[26]!==O?(D=a(L,{"data-testid":"policy-scaffolder-new",onClick:p,size:"xs",type:"button",variant:K,children:O}),e[25]=K,e[26]=O,e[27]=D):D=e[27];const Y=s==="wire"?"default":"outline";let d;e[28]!==t?(d=t("Wire into a procedure"),e[28]=t,e[29]=d):d=e[29];let y;e[30]!==Y||e[31]!==d?(y=a(L,{"data-testid":"policy-scaffolder-wire",onClick:E,size:"xs",type:"button",variant:Y,children:d}),e[30]=Y,e[31]=d,e[32]=y):y=e[32];let T;e[33]!==D||e[34]!==y?(T=i("div",{className:"flex flex-wrap gap-2",children:[D,y]}),e[33]=D,e[34]=y,e[35]=T):T=e[35];let z;e[36]!==r||e[37]!==l.policyName||e[38]!==l.tableName||e[39]!==s||e[40]!==k||e[41]!==t?(z=s==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-name",children:t("Policy name")}),a(J,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:g,value:l.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-table",children:t("Table name")}),a(J,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:g,value:l.tableName})]}),a(L,{"data-testid":"policy-scaffolder-create",disabled:r||l.policyName.trim()===""||l.tableName.trim()==="",onClick:k,size:"xs",type:"button",children:t(r?"Creating…":"Create policy file")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[36]=r,e[37]=l.policyName,e[38]=l.tableName,e[39]=s,e[40]=k,e[41]=t,e[42]=z):z=e[42];let j;e[43]!==r||e[44]!==l.exportName||e[45]!==l.filePath||e[46]!==l.policies||e[47]!==s||e[48]!==_||e[49]!==t?(j=s==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-file",children:t("Procedure file path")}),a(J,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:g,value:l.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-export",children:t("Exported procedure")}),a(J,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:g,value:l.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-policies",children:t("Policy set identifier")}),a(J,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:g,value:l.policies})]}),a(L,{"data-testid":"policy-scaffolder-apply",disabled:r||l.filePath.trim()===""||l.exportName.trim()===""||l.policies.trim()==="",onClick:_,size:"xs",type:"button",children:t(r?"Wiring…":"Wire RLS")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[43]=r,e[44]=l.exportName,e[45]=l.filePath,e[46]=l.policies,e[47]=s,e[48]=_,e[49]=t,e[50]=j):j=e[50];let q;e[51]!==o?(q=o?.kind==="error"&&a("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:o.message}),e[51]=o,e[52]=q):q=e[52];let B;e[53]!==o?.kind||e[54]!==t?(B=o?.kind==="needs-manual-edit"&&a("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:t("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),e[53]=o?.kind,e[54]=t,e[55]=B):B=e[55];let W;e[56]!==o||e[57]!==t?(W=o?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[a("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:t("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:o.label})}),o.diagnostics.length>0&&a("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:o.diagnostics.map(Je)})]}),e[56]=o,e[57]=t,e[58]=W):W=e[58];let Q;e[59]!==T||e[60]!==z||e[61]!==j||e[62]!==q||e[63]!==B||e[64]!==W?(Q=i(de,{children:[T,z,j,q,B,W]}),e[59]=T,e[60]=z,e[61]=j,e[62]=q,e[63]=B,e[64]=W,e[65]=Q):Q=e[65];let V;return e[66]!==F||e[67]!==Q?(V=i(me,{"data-testid":"policy-scaffolder",size:"sm",children:[F,Q]}),e[66]=F,e[67]=Q,e[68]=V):V=e[68],V};function Je(e){return a("li",{className:"font-mono text-[11px] text-destructive",children:e},e)}const ut=({functions:e,runAsIdentity:t=!1,schemaEditable:s=!1}={})=>{const c=ee(),[r,n]=h(void 0),o=(f,l,b)=>{b!==""&&n(u=>({functionPath:b,nonce:(u?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Permissions")})}),a(De,{onProbe:o})]}),a("section",{className:"flex flex-col gap-3",children:i(me,{className:"gap-0 py-0",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Probe")})}),i(de,{className:"px-4 py-4",children:[a("p",{className:"mb-3 text-sm text-muted-foreground",children:c("Pick a function and an identity, then run it to see the access outcome.")}),a(qe,{functions:e,prefill:r,runAsIdentity:t})]})]})}),s&&a("section",{className:"flex flex-col gap-2",children:a(He,{})})]})};export{ut as PermissionsPanel};
1
+ import{useState as h,useRef as se,useEffect as oe}from"react";import{c as xe,d as ye,b as be,a as de,C as me}from"../packem_shared/card-By2O8ULa.mjs";import{useT as ee}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{c as fe}from"react/compiler-runtime";import{E as ge}from"../packem_shared/error-alert-DueSEkt-.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as $}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as L}from"../packem_shared/button-q0UYSmrn.mjs";import{E as pe}from"../packem_shared/empty-state-D7jEML_T.mjs";import{T as Ne,a as ke,b as ie,c as te,d as Se,e as ae}from"../packem_shared/table-D0SBiDu-.mjs";import{u as re}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{ADMIN_FUNCTIONS as X}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{jsxs as i,jsx as a}from"react/jsx-runtime";import{useLunora as ue}from"@lunora/react";import{decodeWire as Ce}from"@lunora/wire";import{ShardInput as we}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{I as J}from"../packem_shared/input-CXhxesPC.mjs";import{L as U}from"../packem_shared/label-DKFzyHq6.mjs";import{T as Pe}from"../packem_shared/textarea--40GKAyz.mjs";import{d as Ae,c as Ee,b as Te,f as le,j as _e}from"../packem_shared/internal-Df43vQI0.mjs";const ne=["read","insert","update","delete"],Ie=(e,t)=>({delete:e("Delete"),insert:e("Insert"),read:e("Read"),update:e("Update")})[t],Re=e=>e.file===""?e.procedure:`${e.file}:${e.procedure}`,Fe=e=>{const t=new Set;for(const s of e?.advisories??[])if(s.name==="rls_uncovered_table"){const{table:c}=s.metadata;typeof c=="string"&&c!==""&&t.add(c)}return t},Oe=(e,t,s)=>{const c=new Map,r=n=>{const o=c.get(n);if(o!==void 0)return o;const f={cells:{delete:{},insert:{},read:{},update:{}},maskedColumns:new Set,table:n,uncovered:s.has(n)};return c.set(n,f),f};for(const n of e)r(n.table).cells[n.on]={path:Re(n),procedure:n.procedure};for(const n of t)r(n.table).maskedColumns.add(n.column);for(const n of s)r(n);return[...c.values()].toSorted((n,o)=>n.table.localeCompare(o.table))},De=e=>{const t=fe(17);let s;t[0]!==e?(s=e===void 0?{}:e,t[0]=e,t[1]=s):s=t[1];const{onProbe:c}=s,r=ee();let n,o;t[2]===Symbol.for("react.memo_cache_sentinel")?(n={},o={live:!0},t[2]=n,t[3]=o):(n=t[2],o=t[3]);const f=re(X.rlsPolicies,n,o);let l;t[4]===Symbol.for("react.memo_cache_sentinel")?(l={},t[4]=l):l=t[4];const b=re(X.maskPolicies,l);let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u={},t[5]=u):u=t[5];const g=re(X.getAdvisories,u);let v;if(t[6]!==g.data||t[7]!==b.data||t[8]!==c||t[9]!==f||t[10]!==r){let N=null;f.data!==void 0&&(N=Array.isArray(f.data.policies)?f.data.policies:[]);const R=Array.isArray(b.data?.columns)?b.data.columns:[],M=g.data??null,{error:P,errorSource:k,liveError:A}=f,_=N===null?[]:Oe(N,R,Fe(M));let S;t[12]!==A?(S=a("div",{className:"flex items-center justify-end",children:a(ve,{message:A,prefix:"pm"})}),t[12]=A,t[13]=S):S=t[13];let p;t[14]!==P||t[15]!==k?(p=P!==null&&a(ge,{error:k,testId:"pm-error"}),t[14]=P,t[15]=k,t[16]=p):p=t[16],v=i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-matrix",children:[S,p,N!==null&&_.length===0?a(pe,{description:r("Add a `definePolicy` and wire it through `.use(rls(...))` to populate this matrix."),testId:"pm-empty",title:r("No policy")}):i(Ne,{"data-testid":"pm-table",children:[a(ke,{children:i(ie,{children:[a(te,{children:r("Table")}),ne.map(m=>a(te,{children:Ie(r,m)},m)),a(te,{children:r("Masked columns")})]})}),a(Se,{children:_.map(m=>i(ie,{"data-testid":`pm-row-${m.table}`,children:[a(ae,{className:"font-mono text-xs",children:i("span",{className:"flex items-center gap-1.5",children:[m.table,m.uncovered&&a($,{"data-testid":`pm-uncovered-${m.table}`,title:r("Uncovered — reachable without a policy"),variant:"destructive",children:r("Uncovered — reachable without a policy")})]})}),ne.map(E=>{const x=m.cells[E];return a(ae,{"data-testid":`pm-cell-${m.table}-${E}`,children:x.procedure===void 0?a("span",{className:"text-xs text-muted-foreground",children:r("No policy")}):i("span",{className:"flex flex-col gap-1",children:[a($,{variant:"secondary",children:r("Covered by {procedure}",{procedure:x.procedure})}),c!==void 0&&a(L,{className:"h-auto justify-start p-0 text-[11px]","data-testid":`pm-probe-${m.table}-${E}`,onClick:()=>{c(m.table,E,x.path??"")},size:"xs",type:"button",variant:"ghost",children:r("Probe this")})]})},E)}),a(ae,{children:m.maskedColumns.size===0?a("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"—"}):a("span",{className:"flex flex-wrap gap-1",children:[...m.maskedColumns].map(Le)})})]},m.table))})]})]}),t[6]=g.data,t[7]=b.data,t[8]=c,t[9]=f,t[10]=r,t[11]=v}else v=t[11];return v};function Le(e){return a($,{variant:"outline",children:e},e)}const $e=Ee(X.runAs),Ue=new Set(["FORBIDDEN","RLS_REQUIRED","UNAUTHORIZED"]),Me=e=>{const t=e?.code;return typeof t=="string"?t:void 0},ze=()=>{const e=ue();return async({args:t,functionPath:s,shardKey:c="",userId:r})=>{if(r.trim()==="")return{kind:"invalid",message:"No identity to probe: enter the userId whose access you want to test."};const n=$e;try{return{kind:"allowed",value:await e.query(n,{args:t,functionPath:s,userId:r},Ae(c))}}catch(o){const f=o instanceof Error?o.message:String(o),l=Me(o);return l!==void 0&&Ue.has(l)?{kind:"denied",message:f}:{kind:"errored",message:f}}}},je=e=>e===void 0?"undefined":JSON.stringify(e,_e,2),qe=({functions:e,prefill:t,runAsIdentity:s=!1}={})=>{const c=ue(),r=ee(),n=ze(),[o,f]=h(null),[l,b]=h(null),u=e??o??[],[g,v]=h(""),[N,R]=h("{}"),[M,P]=h(""),[k,A]=h(""),[_,S]=h(!1),[p,m]=h(null),[E,x]=h(null),I=se(-1),C=se(0);oe(()=>{if(e!==void 0)return;let d=!1;return c.listFunctions().then(y=>(d||f(y),y)).catch(y=>{d||b(Te(y))}),()=>{d=!0}},[c,e]),oe(()=>{if(t===void 0||I.current===t.nonce)return;I.current=t.nonce,C.current+=1;const d=t.functionPath;queueMicrotask(()=>{v(d),m(null)})},[t]);const w=g===""?u[0]?.path??"":g,F=async()=>{if(w==="")return;let d;try{d=N.trim()===""?{}:Ce(JSON.parse(N))}catch(T){x(r("Invalid JSON args: {message}",{message:T.message})),m(null);return}C.current+=1;const y=C.current;x(null),S(!0);try{const T=await n({args:d,functionPath:w,shardKey:M.trim(),userId:k.trim()});y===C.current&&m(T)}finally{S(!1)}},K=()=>{le(F())},O=d=>{v(d.target.value)},D=d=>{R(d.target.value)},Y=d=>{A(d.target.value)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-permissions-playground",children:[l!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-discover-error",role:"alert",children:l}),!s&&a(pe,{description:r("Dev only: runs the selected function as this user over the admin gate so you can test auth and RLS."),testId:"pp-gate",title:r("Set `runAsIdentity` to forge an identity and probe access.")}),i("div",{className:"flex flex-col gap-3 rounded-md border border-border p-3",children:[i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-function",children:r("Function")}),a("select",{"aria-label":r("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","data-testid":"pp-function",id:"pp-function",onChange:O,value:w,children:u.map(d=>i("option",{value:d.path,children:[d.path," (",d.kind,")"]},d.path))})]}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-args",children:r("Arguments")}),a(Pe,{"aria-label":r("Arguments"),className:"font-mono text-xs","data-testid":"pp-args",id:"pp-args",onChange:D,value:N})]}),a(we,{onChange:P,testId:"pp-shard",value:M}),i("div",{className:"flex flex-col gap-1.5",children:[a(U,{htmlFor:"pp-user",children:r("Run as (userId)")}),a(J,{"aria-label":r("Identity (userId) to run as"),className:"font-mono text-xs","data-testid":"pp-user",id:"pp-user",onChange:Y,placeholder:r("Required — the identity to probe as"),value:k})]}),i("div",{className:"flex items-center gap-2",children:[a(L,{"data-testid":"pp-run",disabled:!s||_||w==="",onClick:K,type:"button",children:r(_?"Probing…":"Run probe")}),k.trim()!==""&&a($,{"data-testid":"pp-as-badge",variant:"secondary",children:r("as {userId}",{userId:k.trim()})})]})]}),E!==null&&a("p",{className:"text-sm text-destructive","data-testid":"pp-args-error",role:"alert",children:E}),p!==null&&p.kind==="allowed"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-allowed",children:[a($,{variant:"secondary",children:r("Allowed")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-result",children:je(p.value)})]}),p!==null&&p.kind==="invalid"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-invalid",children:[a($,{variant:"outline",children:r("Not run")}),a("p",{className:"text-sm text-muted-foreground","data-testid":"pp-invalid",role:"status",children:p.message})]}),p!==null&&p.kind==="errored"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-errored",children:[a($,{variant:"outline",children:r("Errored")}),a("p",{className:"text-sm text-muted-foreground",children:r("The call failed for a reason that is not an access verdict, so it says nothing about the policy.")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"pp-errored",role:"alert",children:p.message})]}),p!==null&&p.kind==="denied"&&i("div",{className:"flex flex-col gap-2","data-testid":"pp-outcome-denied",children:[a($,{variant:"destructive",children:r("Denied")}),a("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"pp-denied",role:"alert",children:p.message})]})]})},Be="/__lunora/policy-scaffold",We={"already-wired":"That procedure already has an rls(...) policy wired in.","file-exists":"A policy file with that name already exists — pick another name or edit it by hand.","invalid-identifier":"Name, table, and policy-set must be plain identifiers (letters, digits, _ or $).","unknown-procedure":"No exported procedure was found at that file path.","unsupported-procedure-shape":"That procedure uses the bare query({…}) form — convert it to the builder form (c.use(…).query(…)) before wiring RLS."},Qe=async e=>{const t=await fetch(Be,{body:JSON.stringify(e),headers:{"Content-Type":"application/json"},method:"POST"}),s=await t.json();if(s.needsManualEdit===!0)return{kind:"needs-manual-edit",message:s.message??"This change must be made by hand."};if(t.ok)return{diagnostics:s.diagnostics??[],kind:"ok",label:s.fileName??s.exportName??""};const c=s.error;return{kind:"error",message:c===void 0?`policy scaffold failed (${String(t.status)})`:We[c]??c}},ce={exportName:"",filePath:"",policyName:"",policies:"",tableName:""},He=()=>{const e=fe(69),t=ee(),[s,c]=h(null),[r,n]=h(!1),[o,f]=h(null),[l,b]=h(ce);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=Z=>{const H=Z.target.name,{value:G}=Z.target;b(he=>({...he,[H]:G}))},e[0]=u):u=e[0];const g=u;let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=()=>{c(null),b(ce)},e[1]=v):v=e[1];const N=v;let R;e[2]===Symbol.for("react.memo_cache_sentinel")?(R=async Z=>{n(!0),f(null);try{const H=await Qe(Z);f(H),H.kind==="ok"&&N()}catch(H){const G=H;f({kind:"error",message:G instanceof Error?G.message:String(G)})}n(!1)},e[2]=R):R=e[2];const M=R;let P;e[3]!==l.policyName||e[4]!==l.tableName?(P=()=>{le(M({kind:"scaffoldPolicy",name:l.policyName.trim(),table:l.tableName.trim()}))},e[3]=l.policyName,e[4]=l.tableName,e[5]=P):P=e[5];const k=P;let A;e[6]!==l.exportName||e[7]!==l.filePath||e[8]!==l.policies?(A=()=>{le(M({exportName:l.exportName.trim(),filePath:l.filePath.trim(),kind:"wireRls",policies:l.policies.trim()}))},e[6]=l.exportName,e[7]=l.filePath,e[8]=l.policies,e[9]=A):A=e[9];const _=A;let S;e[10]===Symbol.for("react.memo_cache_sentinel")?(S=()=>{f(null),c("scaffold")},e[10]=S):S=e[10];const p=S;let m;e[11]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{f(null),c("wire")},e[11]=m):m=e[11];const E=m;let x;e[12]!==t?(x=t("Scaffold access rules"),e[12]=t,e[13]=x):x=e[13];let I;e[14]!==x?(I=a(xe,{children:x}),e[14]=x,e[15]=I):I=e[15];let C;e[16]!==t?(C=t("Writes a new deny-by-default policy file under lunora/, or wires one into a procedure, then reruns codegen. Local dev only."),e[16]=t,e[17]=C):C=e[17];let w;e[18]!==C?(w=a(ye,{children:C}),e[18]=C,e[19]=w):w=e[19];let F;e[20]!==w||e[21]!==I?(F=i(be,{children:[I,w]}),e[20]=w,e[21]=I,e[22]=F):F=e[22];const K=s==="scaffold"?"default":"outline";let O;e[23]!==t?(O=t("New policy file"),e[23]=t,e[24]=O):O=e[24];let D;e[25]!==K||e[26]!==O?(D=a(L,{"data-testid":"policy-scaffolder-new",onClick:p,size:"xs",type:"button",variant:K,children:O}),e[25]=K,e[26]=O,e[27]=D):D=e[27];const Y=s==="wire"?"default":"outline";let d;e[28]!==t?(d=t("Wire into a procedure"),e[28]=t,e[29]=d):d=e[29];let y;e[30]!==Y||e[31]!==d?(y=a(L,{"data-testid":"policy-scaffolder-wire",onClick:E,size:"xs",type:"button",variant:Y,children:d}),e[30]=Y,e[31]=d,e[32]=y):y=e[32];let T;e[33]!==D||e[34]!==y?(T=i("div",{className:"flex flex-wrap gap-2",children:[D,y]}),e[33]=D,e[34]=y,e[35]=T):T=e[35];let z;e[36]!==r||e[37]!==l.policyName||e[38]!==l.tableName||e[39]!==s||e[40]!==k||e[41]!==t?(z=s==="scaffold"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-new-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-name",children:t("Policy name")}),a(J,{"data-testid":"policy-scaffolder-name",id:"policy-scaffolder-name",name:"policyName",onChange:g,value:l.policyName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-table",children:t("Table name")}),a(J,{"data-testid":"policy-scaffolder-table",id:"policy-scaffolder-table",name:"tableName",onChange:g,value:l.tableName})]}),a(L,{"data-testid":"policy-scaffolder-create",disabled:r||l.policyName.trim()===""||l.tableName.trim()==="",onClick:k,size:"xs",type:"button",children:t(r?"Creating…":"Create policy file")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[36]=r,e[37]=l.policyName,e[38]=l.tableName,e[39]=s,e[40]=k,e[41]=t,e[42]=z):z=e[42];let j;e[43]!==r||e[44]!==l.exportName||e[45]!==l.filePath||e[46]!==l.policies||e[47]!==s||e[48]!==_||e[49]!==t?(j=s==="wire"&&i("div",{className:"mt-3 flex flex-wrap items-end gap-2","data-testid":"policy-scaffolder-wire-form",children:[i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-file",children:t("Procedure file path")}),a(J,{"data-testid":"policy-scaffolder-file",id:"policy-scaffolder-file",name:"filePath",onChange:g,value:l.filePath})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-export",children:t("Exported procedure")}),a(J,{"data-testid":"policy-scaffolder-export",id:"policy-scaffolder-export",name:"exportName",onChange:g,value:l.exportName})]}),i("div",{className:"flex flex-col gap-1 text-xs",children:[a(U,{htmlFor:"policy-scaffolder-policies",children:t("Policy set identifier")}),a(J,{"data-testid":"policy-scaffolder-policies",id:"policy-scaffolder-policies",name:"policies",onChange:g,value:l.policies})]}),a(L,{"data-testid":"policy-scaffolder-apply",disabled:r||l.filePath.trim()===""||l.exportName.trim()===""||l.policies.trim()==="",onClick:_,size:"xs",type:"button",children:t(r?"Wiring…":"Wire RLS")}),a(L,{onClick:N,size:"xs",type:"button",variant:"ghost",children:t("Cancel")})]}),e[43]=r,e[44]=l.exportName,e[45]=l.filePath,e[46]=l.policies,e[47]=s,e[48]=_,e[49]=t,e[50]=j):j=e[50];let q;e[51]!==o?(q=o?.kind==="error"&&a("p",{className:"mt-3 text-sm text-destructive","data-testid":"policy-scaffolder-error",role:"alert",children:o.message}),e[51]=o,e[52]=q):q=e[52];let B;e[53]!==o?.kind||e[54]!==t?(B=o?.kind==="needs-manual-edit"&&a("p",{className:"mt-3 text-sm text-amber-600 dark:text-amber-500","data-testid":"policy-scaffolder-manual",role:"alert",children:t("This change must be made by hand — the scaffolder only adds new, deny-by-default rules.")}),e[53]=o?.kind,e[54]=t,e[55]=B):B=e[55];let W;e[56]!==o||e[57]!==t?(W=o?.kind==="ok"&&i("div",{className:"mt-3 flex flex-col gap-1","data-testid":"policy-scaffolder-ok",children:[a("p",{className:"text-sm text-emerald-600 dark:text-emerald-500",children:t("Scaffolded {label} and reran codegen. Fill in the `when` predicates before relying on it.",{label:o.label})}),o.diagnostics.length>0&&a("ul",{className:"flex flex-col gap-0.5","data-testid":"policy-scaffolder-diagnostics",children:o.diagnostics.map(Je)})]}),e[56]=o,e[57]=t,e[58]=W):W=e[58];let Q;e[59]!==T||e[60]!==z||e[61]!==j||e[62]!==q||e[63]!==B||e[64]!==W?(Q=i(de,{children:[T,z,j,q,B,W]}),e[59]=T,e[60]=z,e[61]=j,e[62]=q,e[63]=B,e[64]=W,e[65]=Q):Q=e[65];let V;return e[66]!==F||e[67]!==Q?(V=i(me,{"data-testid":"policy-scaffolder",size:"sm",children:[F,Q]}),e[66]=F,e[67]=Q,e[68]=V):V=e[68],V};function Je(e){return a("li",{className:"font-mono text-[11px] text-destructive",children:e},e)}const ut=({functions:e,runAsIdentity:t=!1,schemaEditable:s=!1}={})=>{const c=ee(),[r,n]=h(void 0),o=(f,l,b)=>{b!==""&&n(u=>({functionPath:b,nonce:(u?.nonce??0)+1}))};return i("div",{className:"flex flex-col gap-8","data-testid":"lunora-permissions",children:[i("section",{className:"flex flex-col gap-3",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Permissions")})}),a(De,{onProbe:o})]}),a("section",{className:"flex flex-col gap-3",children:i(me,{className:"gap-0 py-0",children:[a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:c("Probe")})}),i(de,{className:"px-4 py-4",children:[a("p",{className:"mb-3 text-sm text-muted-foreground",children:c("Pick a function and an identity, then run it to see the access outcome.")}),a(qe,{functions:e,prefill:r,runAsIdentity:t})]})]})}),s&&a("section",{className:"flex flex-col gap-2",children:a(He,{})})]})};export{ut as PermissionsPanel};