@lunora/studio 1.0.0-alpha.7 → 1.0.0-alpha.71
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.
- package/LICENSE.md +6 -0
- package/dist/index.d.ts +762 -779
- package/dist/index.js +1 -41
- package/dist/mount.d.ts +10 -10
- package/dist/mount.js +1 -26
- package/dist/packem_chunks/ApiTab.js +1 -0
- package/dist/packem_chunks/AuditPanel.js +1 -0
- package/dist/packem_chunks/DeploymentHealthPanel.js +1 -0
- package/dist/packem_chunks/ExportImportPanel.js +3 -0
- package/dist/packem_chunks/FileBrowser.js +4 -0
- package/dist/packem_chunks/FunctionRunner.js +1 -0
- package/dist/packem_chunks/FunctionStatsPanel.js +1 -0
- package/dist/packem_chunks/HealthPanel.js +1 -0
- package/dist/packem_chunks/InsightsPanel.js +1 -0
- package/dist/packem_chunks/LogsPanel.js +1 -0
- package/dist/packem_chunks/MailPanel.js +2 -0
- package/dist/packem_chunks/MetricsPanel.js +1 -0
- package/dist/packem_chunks/MigrationsPanel.js +1 -0
- package/dist/packem_chunks/NotificationsPanel.js +1 -0
- package/dist/packem_chunks/PitrPanel.js +1 -0
- package/dist/packem_chunks/SchemaViewer.js +2 -0
- package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -0
- package/dist/packem_chunks/SettingsPanel.js +1 -0
- package/dist/packem_chunks/SqlEditorPanel.js +4 -0
- package/dist/packem_chunks/TableEditor.js +1 -0
- package/dist/packem_chunks/agents-panel.js +1 -0
- package/dist/packem_chunks/analytics-panel.js +1 -0
- package/dist/packem_chunks/auth-audit-panel.js +1 -0
- package/dist/packem_chunks/auth-config-panel.js +1 -0
- package/dist/packem_chunks/auth-sessions-panel.js +1 -0
- package/dist/packem_chunks/containers-panel.js +1 -0
- package/dist/packem_chunks/dashboards-panel.js +1 -0
- package/dist/packem_chunks/fanout-panel.js +1 -0
- package/dist/packem_chunks/flags-panel.js +1 -0
- package/dist/packem_chunks/issues-panel.js +1 -0
- package/dist/packem_chunks/kv-browser.js +1 -0
- package/dist/packem_chunks/log-drains-panel.js +4 -0
- package/dist/packem_chunks/organizations-panel.js +1 -0
- package/dist/packem_chunks/payments-panel.js +1 -0
- package/dist/packem_chunks/permissions-panel.js +1 -0
- package/dist/packem_chunks/queues-panel.js +1 -0
- package/dist/packem_chunks/rls-panel.js +1 -0
- package/dist/packem_chunks/schedule-panel.js +1 -0
- package/dist/packem_chunks/sparkline.js +1 -0
- package/dist/packem_chunks/storage-rules-panel.js +1 -0
- package/dist/packem_chunks/subscriptions-panel.js +1 -0
- package/dist/packem_chunks/sync-client-panel.js +1 -0
- package/dist/packem_chunks/traces-panel.js +1 -0
- package/dist/packem_chunks/users-panel.js +1 -0
- package/dist/packem_chunks/vector-browser.js +1 -0
- package/dist/packem_chunks/workflows-panel.js +1 -0
- package/dist/packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js +1 -0
- package/dist/packem_shared/ApiDocsPanel-eJYZlylw.js +2 -0
- package/dist/packem_shared/ApiReferencePanel-C42v1jr6.js +1 -0
- package/dist/packem_shared/CommandPalette-CVIaY3j8.js +1 -0
- package/dist/packem_shared/ConfirmButton-CTL3f3kr.js +1 -0
- package/dist/packem_shared/ConnectionBadge-DOk0CQWo.js +1 -0
- package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js +1 -0
- package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js +1 -0
- package/dist/packem_shared/DEFAULT_LOCALE-BZ4NojpD.js +1 -0
- package/dist/packem_shared/DataBrowser-B8J5lHjP.js +1 -0
- package/dist/packem_shared/DataFilters-Csb30F0C.js +1 -0
- package/dist/packem_shared/ErrorBoundary-DvzYskH7.js +1 -0
- package/dist/packem_shared/GlobalDataBrowser-RLJ6NvOs.js +1 -0
- package/dist/packem_shared/HomePanel-DL1HupAN.js +1 -0
- package/dist/packem_shared/OpenRpcReferencePanel-sGsIgYWj.js +1 -0
- package/dist/packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js +1 -0
- package/dist/packem_shared/ScheduledJobs-DUbo6epc.js +1 -0
- package/dist/packem_shared/ShardInput-BVn2iCU0.js +1 -0
- package/dist/packem_shared/Studio-BWBclm_C.js +1 -0
- package/dist/packem_shared/StudioApp-BFm73yVr.js +1 -0
- package/dist/packem_shared/StudioI18nProvider-CZ5h4nrV.js +1 -0
- package/dist/packem_shared/advisor-view-DaCX9Jy5.js +1 -0
- package/dist/packem_shared/aggregateMetrics-BNfajLa2.js +1 -0
- package/dist/packem_shared/alert-CVcOFuDR.js +1 -0
- package/dist/packem_shared/app.d-bRPJhby-.d.ts +254 -0
- package/dist/packem_shared/badge-BbuuAio7.js +1 -0
- package/dist/packem_shared/bar-chart-AryFCeoa.js +9 -0
- package/dist/packem_shared/browser-storage-xjTyMKY0.js +1 -0
- package/dist/packem_shared/button-BkCrNcAs.js +1 -0
- package/dist/packem_shared/card-CIDGUN6K.js +1 -0
- package/dist/packem_shared/cf-links-gbDy51nR.js +1 -0
- package/dist/packem_shared/checkbox-StT4Gob6.js +1 -0
- package/dist/packem_shared/data-grid-BMBKzMEJ.js +1 -0
- package/dist/packem_shared/data-view-params-C8T3bW1z.js +1 -0
- package/dist/packem_shared/dropdown-menu-C3RQ_HlW.js +2 -0
- package/dist/packem_shared/empty-state-Cg7t_8qu.js +1 -0
- package/dist/packem_shared/error-alert-B59DnrDI.js +1 -0
- package/dist/packem_shared/grid-features-uZCUj955.js +6 -0
- package/dist/packem_shared/home-panel-B-8BCffw.js +3 -0
- package/dist/packem_shared/input-JHu63lTv.js +1 -0
- package/dist/packem_shared/internal-AtZ4bTal.js +2 -0
- package/dist/packem_shared/label-6uP1obNF.js +1 -0
- package/dist/packem_shared/live-status-CGW2JHf_.js +1 -0
- package/dist/packem_shared/log-fields-CoL3hsIQ.js +1 -0
- package/dist/packem_shared/modal-shell-CUwwWC2o.js +1 -0
- package/dist/packem_shared/reference-view-KvhektwF.js +12 -0
- package/dist/packem_shared/result-chart-CwKhhKM0.js +1 -0
- package/dist/packem_shared/scroll-area-DTEq6Jec.js +2 -0
- package/dist/packem_shared/select-Bul-DeII.js +2 -0
- package/dist/packem_shared/shard-history-DMEW5VBE.js +1 -0
- package/dist/packem_shared/skeleton-C1wQ9M5t.js +1 -0
- package/dist/packem_shared/sparkline-DtcZoU48.js +1 -0
- package/dist/packem_shared/storage-tier-DznqOf-q.js +1 -0
- package/dist/packem_shared/studio-BHA7hnI3.js +2 -0
- package/dist/packem_shared/table-DdJBrClo.js +2 -0
- package/dist/packem_shared/table-list-sidebar-CMCcNALK.js +1 -0
- package/dist/packem_shared/textarea-Bu2-jKAs.js +1 -0
- package/dist/packem_shared/trace-handoff-Dw7mwjxu.js +1 -0
- package/dist/packem_shared/use-admin-query-Di3fLE8H.js +1 -0
- package/dist/packem_shared/use-async-submit-H68GHPz8.js +1 -0
- package/dist/packem_shared/useDebounced-Ihdiid_k.js +1 -0
- package/dist/packem_shared/utils-bhneXptQ.js +1 -0
- package/dist/packem_shared/virtual-rect-1o1veP7R.js +1 -0
- package/dist/standalone/chunk-2F7G7IWQ.js +1 -0
- package/dist/standalone/chunk-2OUPA2WJ.js +1 -0
- package/dist/standalone/chunk-2PJNAWB3.js +1 -0
- package/dist/standalone/chunk-2Y36BVVM.js +4 -0
- package/dist/standalone/chunk-34UVAASH.js +1 -0
- package/dist/standalone/chunk-35II7U25.js +11 -0
- package/dist/standalone/chunk-3FUFEZ65.js +1 -0
- package/dist/standalone/chunk-3QRTYSSX.js +1 -0
- package/dist/standalone/chunk-3RTTXLMU.js +1 -0
- package/dist/standalone/chunk-3XIESWL4.js +1 -0
- package/dist/standalone/chunk-4CGALXS3.js +19 -0
- package/dist/standalone/chunk-4UOFSGUS.js +1 -0
- package/dist/standalone/chunk-4WLYA3XE.js +1 -0
- package/dist/standalone/chunk-54MMVNPT.js +1 -0
- package/dist/standalone/chunk-5L2MD6F6.js +1 -0
- package/dist/standalone/chunk-5OWIOACV.js +13 -0
- package/dist/standalone/chunk-5RF4QDDA.js +6 -0
- package/dist/standalone/chunk-5U2THBI7.js +1 -0
- package/dist/standalone/chunk-5Y3QLNWX.js +1 -0
- package/dist/standalone/chunk-65OTWFS3.js +1 -0
- package/dist/standalone/chunk-6DWCIIHE.js +1 -0
- package/dist/standalone/chunk-6ST5ECQA.js +1 -0
- package/dist/standalone/chunk-7J5N6DGQ.js +1 -0
- package/dist/standalone/chunk-7LQWFOEU.js +1 -0
- package/dist/standalone/chunk-7QIFDWQV.js +1 -0
- package/dist/standalone/chunk-7RXOPYR5.js +1 -0
- package/dist/standalone/chunk-7T7UOTYK.js +1 -0
- package/dist/standalone/chunk-7YEFOSPH.js +1 -0
- package/dist/standalone/chunk-AVAC26HJ.js +1 -0
- package/dist/standalone/chunk-B43FTQJ7.js +1 -0
- package/dist/standalone/chunk-BEH5N5ZA.js +1 -0
- package/dist/standalone/chunk-BGBLQ563.js +1 -0
- package/dist/standalone/chunk-BNUJ7QMG.js +3 -0
- package/dist/standalone/chunk-C43X4M5U.js +1 -0
- package/dist/standalone/chunk-CFPZYHPY.js +2 -0
- package/dist/standalone/chunk-D7XXWV4E.js +1 -0
- package/dist/standalone/chunk-DVOBKIUX.js +1 -0
- package/dist/standalone/chunk-EKRN4ZQM.js +1 -0
- package/dist/standalone/chunk-ESVP44Y3.js +1 -0
- package/dist/standalone/chunk-EVN46TVV.js +1 -0
- package/dist/standalone/chunk-EXFBIISG.js +2 -0
- package/dist/standalone/chunk-F5QWLENA.js +1 -0
- package/dist/standalone/chunk-F6GOKFMU.js +3 -0
- package/dist/standalone/chunk-FGTK44LR.js +1 -0
- package/dist/standalone/chunk-FXCBF4XT.js +1 -0
- package/dist/standalone/chunk-GMR677FL.js +1 -0
- package/dist/standalone/chunk-GRL5MG3Z.js +1 -0
- package/dist/standalone/chunk-GSPTEMYN.js +1 -0
- package/dist/standalone/chunk-GXZAXNZI.js +1 -0
- package/dist/standalone/chunk-H7NIIBHH.js +1 -0
- package/dist/standalone/chunk-HP2UCWND.js +1 -0
- package/dist/standalone/chunk-HPFLBYRI.js +1 -0
- package/dist/standalone/chunk-IC4L6G56.js +1 -0
- package/dist/standalone/chunk-IDNNI63H.js +1 -0
- package/dist/standalone/chunk-ILNELDFC.js +1 -0
- package/dist/standalone/chunk-IVFHIQOT.js +1 -0
- package/dist/standalone/chunk-JN2Y24PY.js +1 -0
- package/dist/standalone/chunk-KDOC2DP5.js +1 -0
- package/dist/standalone/chunk-KUVMORDQ.js +1 -0
- package/dist/standalone/chunk-KYF2E5CJ.js +1 -0
- package/dist/standalone/chunk-L7N7F3DA.js +1 -0
- package/dist/standalone/chunk-LE56LPNH.js +13 -0
- package/dist/standalone/chunk-LEDWUPXM.js +1 -0
- package/dist/standalone/chunk-LFKCLLPT.js +1 -0
- package/dist/standalone/chunk-LFXFP4IF.js +1 -0
- package/dist/standalone/chunk-LJDP7NRB.js +1 -0
- package/dist/standalone/chunk-LLXFYRGQ.js +1 -0
- package/dist/standalone/chunk-M536Y2KX.js +1 -0
- package/dist/standalone/chunk-MIQTKZAR.js +1 -0
- package/dist/standalone/chunk-OHKRN65U.js +1 -0
- package/dist/standalone/chunk-P24JBHEZ.js +4 -0
- package/dist/standalone/chunk-PF7V3G2Z.js +62 -0
- package/dist/standalone/chunk-PWWHP76O.js +1 -0
- package/dist/standalone/chunk-QBWRC5YX.js +1 -0
- package/dist/standalone/chunk-QGKAJTQQ.js +1 -0
- package/dist/standalone/chunk-QLJJ5YYZ.js +1 -0
- package/dist/standalone/chunk-QVEHPYA5.js +1 -0
- package/dist/standalone/chunk-QWGT25SE.js +1 -0
- package/dist/standalone/chunk-QWJ3NPE3.js +1 -0
- package/dist/standalone/chunk-RAA2RGG6.js +1 -0
- package/dist/standalone/chunk-RBU52M5T.js +1 -0
- package/dist/standalone/chunk-SA3MDZC3.js +1 -0
- package/dist/standalone/chunk-SD4BERSA.js +1 -0
- package/dist/standalone/chunk-SFDOII3B.js +1 -0
- package/dist/standalone/chunk-SKHEGARW.js +1 -0
- package/dist/standalone/chunk-SMIESS7P.js +1 -0
- package/dist/standalone/chunk-T2JIUFOD.js +4 -0
- package/dist/standalone/chunk-T6VMSOBB.js +1 -0
- package/dist/standalone/chunk-THIXMMZD.js +1 -0
- package/dist/standalone/chunk-TJ2WZ5OP.js +1 -0
- package/dist/standalone/chunk-TLHJRWNK.js +1 -0
- package/dist/standalone/chunk-UIS34ZPB.js +8 -0
- package/dist/standalone/chunk-UNUU7CJJ.js +1 -0
- package/dist/standalone/chunk-UZERI5YC.js +1 -0
- package/dist/standalone/chunk-V53KNYRN.js +1 -0
- package/dist/standalone/chunk-VPAXCQ2Y.js +4 -0
- package/dist/standalone/chunk-X2FQ6B5V.js +1 -0
- package/dist/standalone/chunk-XBDKZZ67.js +1 -0
- package/dist/standalone/chunk-XEDU5FO4.js +1 -0
- package/dist/standalone/chunk-XQBTNJUQ.js +1 -0
- package/dist/standalone/chunk-XQCVZAGU.js +1 -0
- package/dist/standalone/chunk-XQGANNLS.js +1 -0
- package/dist/standalone/chunk-XSD4Y6SQ.js +1 -0
- package/dist/standalone/chunk-XXQUMVWH.js +1 -0
- package/dist/standalone/chunk-YD5NF6UT.js +1 -0
- package/dist/standalone/chunk-YI3WYUXK.js +1 -0
- package/dist/standalone/chunk-ZJGP6EKR.js +1 -0
- package/dist/standalone/chunk-ZNNAGR6N.js +1 -0
- package/dist/standalone/studio.js +9 -356
- package/dist/styles.css +2 -2
- package/package.json +17 -15
- package/dist/packem_shared/ADMIN_FUNCTIONS-DmBqMZ-z.js +0 -45
- package/dist/packem_shared/ApiDocsPanel-C5-yJ1p7.js +0 -842
- package/dist/packem_shared/ApiReferencePanel-1vubqG5s.js +0 -229
- package/dist/packem_shared/ApiTab-W3no0KOj.js +0 -251
- package/dist/packem_shared/AuditPanel-Bq4o_IqT.js +0 -212
- package/dist/packem_shared/CommandPalette-BtgkBzZI.js +0 -373
- package/dist/packem_shared/ConfirmButton-C2eVi2Qv.js +0 -59
- package/dist/packem_shared/ConnectionBadge-B2DDM2Tn.js +0 -111
- package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +0 -50
- package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +0 -89
- package/dist/packem_shared/DEFAULT_LOCALE-CiX4W7Kr.js +0 -27
- package/dist/packem_shared/DataBrowser-CtBe1So9.js +0 -4542
- package/dist/packem_shared/DataFilters-FNquMaiu.js +0 -249
- package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +0 -66
- package/dist/packem_shared/ExportImportPanel-dxY56TDF.js +0 -193
- package/dist/packem_shared/FileBrowser-Dhy4zES8.js +0 -2932
- package/dist/packem_shared/FunctionRunner--fQJRPAD.js +0 -343
- package/dist/packem_shared/FunctionStatsPanel-BjRUA_G3.js +0 -432
- package/dist/packem_shared/GlobalDataBrowser-BTEmGrph.js +0 -318
- package/dist/packem_shared/HealthPanel-PxclMWmA.js +0 -640
- package/dist/packem_shared/HomePanel-Cw16stjq.js +0 -1273
- package/dist/packem_shared/InsightsPanel-CWS_C-xW.js +0 -423
- package/dist/packem_shared/LogsPanel-CTW8CFcM.js +0 -839
- package/dist/packem_shared/MailPanel-BwkvfIHF.js +0 -447
- package/dist/packem_shared/MetricsPanel-BLuOhZQ4.js +0 -1625
- package/dist/packem_shared/MigrationsPanel-DT3lnwHF.js +0 -246
- package/dist/packem_shared/OpenRpcReferencePanel-vbcYbv3V.js +0 -191
- package/dist/packem_shared/PitrPanel-CdErL7EJ.js +0 -252
- package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +0 -3
- package/dist/packem_shared/ScheduledJobs-CabfKbyM.js +0 -159
- package/dist/packem_shared/SchemaViewer-LJDcmNIO.js +0 -2512
- package/dist/packem_shared/SecurityAdvisorPanel-C_ETsPih.js +0 -79
- package/dist/packem_shared/SettingsPanel-C0uLRf5P.js +0 -176
- package/dist/packem_shared/ShardInput-gx_DZXXn.js +0 -107
- package/dist/packem_shared/SqlEditorPanel-CguV7otm.js +0 -13
- package/dist/packem_shared/Studio-BmSGSIuY.js +0 -33
- package/dist/packem_shared/StudioApp-D4azxYBu.js +0 -657
- package/dist/packem_shared/StudioI18nProvider-B-tDCZIi.js +0 -48
- package/dist/packem_shared/TableEditor-ChfUOZec.js +0 -371
- package/dist/packem_shared/advisor-view-CGcfMiPq.js +0 -159
- package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +0 -108
- package/dist/packem_shared/app.d-CCmwDEVs.d.ts +0 -300
- package/dist/packem_shared/badge-B2PKA1-5.js +0 -49
- package/dist/packem_shared/bar-chart-CzJAgqkp.js +0 -3245
- package/dist/packem_shared/button-BhsN2uZH.js +0 -49
- package/dist/packem_shared/card-DURq3ElK.js +0 -175
- package/dist/packem_shared/cf-links-2cktDedA.js +0 -8
- package/dist/packem_shared/checkbox-UNkzAxl-.js +0 -63
- package/dist/packem_shared/data-grid-B5CaV3wS.js +0 -183
- package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +0 -280
- package/dist/packem_shared/empty-state-DY_oe0k6.js +0 -98
- package/dist/packem_shared/grid-features-CzUfqgsM.js +0 -840
- package/dist/packem_shared/input-XH4r1Pt1.js +0 -53
- package/dist/packem_shared/internal-rXJEAhXS.js +0 -68
- package/dist/packem_shared/label-D8ykjn5J.js +0 -46
- package/dist/packem_shared/live-status-FZ0psC1z.js +0 -44
- package/dist/packem_shared/reference-view-B4E49Lip.js +0 -2180
- package/dist/packem_shared/shard-history-DyebH1R5.js +0 -38
- package/dist/packem_shared/sparkline-10dG-_f0.js +0 -93
- package/dist/packem_shared/sql-editor-panel-BFRpzj6r.js +0 -2562
- package/dist/packem_shared/storage-tier-CL98eOvn.js +0 -85
- package/dist/packem_shared/studio-H9fuQgSj.js +0 -10303
- package/dist/packem_shared/table-_RzNvy3R.js +0 -246
- package/dist/packem_shared/table-list-sidebar-Bg7uzbvC.js +0 -832
- package/dist/packem_shared/textarea-D3gaCU_-.js +0 -46
- package/dist/packem_shared/use-live-admin-Dq6g3daN.js +0 -73
- package/dist/packem_shared/use-live-shard-seed-Cuk3dnH0.js +0 -76
- package/dist/packem_shared/useDebounced-Dxncpg6z.js +0 -32
- package/dist/packem_shared/utils-B05Dmz_H.js +0 -8
- package/dist/packem_shared/virtual-rect-CVMUskSm.js +0 -10
package/dist/index.js
CHANGED
|
@@ -1,41 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { CommandPalette, openCommandPalette } from './packem_shared/CommandPalette-BtgkBzZI.js';
|
|
3
|
-
export { S as Studio } from './packem_shared/studio-H9fuQgSj.js';
|
|
4
|
-
export { ConfirmButton } from './packem_shared/ConfirmButton-C2eVi2Qv.js';
|
|
5
|
-
export { default as ConnectionBadge } from './packem_shared/ConnectionBadge-B2DDM2Tn.js';
|
|
6
|
-
export { ErrorBoundary } from './packem_shared/ErrorBoundary-BzAApI7J.js';
|
|
7
|
-
export { ShardInput } from './packem_shared/ShardInput-gx_DZXXn.js';
|
|
8
|
-
export { DEFAULT_INSIGHT_THRESHOLDS, deriveInsights } from './packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js';
|
|
9
|
-
export { InsightsPanel } from './packem_shared/InsightsPanel-CWS_C-xW.js';
|
|
10
|
-
export { default as SecurityAdvisorPanel } from './packem_shared/SecurityAdvisorPanel-C_ETsPih.js';
|
|
11
|
-
export { default as ApiDocsPanel } from './packem_shared/ApiDocsPanel-C5-yJ1p7.js';
|
|
12
|
-
export { default as ApiReferencePanel } from './packem_shared/ApiReferencePanel-1vubqG5s.js';
|
|
13
|
-
export { default as ApiTab } from './packem_shared/ApiTab-W3no0KOj.js';
|
|
14
|
-
export { default as OpenRpcReferencePanel } from './packem_shared/OpenRpcReferencePanel-vbcYbv3V.js';
|
|
15
|
-
export { DataBrowser } from './packem_shared/DataBrowser-CtBe1So9.js';
|
|
16
|
-
export { DataFilters, toFilterClauses } from './packem_shared/DataFilters-FNquMaiu.js';
|
|
17
|
-
export { GlobalDataBrowser } from './packem_shared/GlobalDataBrowser-BTEmGrph.js';
|
|
18
|
-
export { TableEditor } from './packem_shared/TableEditor-ChfUOZec.js';
|
|
19
|
-
export { ExportImportPanel } from './packem_shared/ExportImportPanel-dxY56TDF.js';
|
|
20
|
-
export { MigrationsPanel } from './packem_shared/MigrationsPanel-DT3lnwHF.js';
|
|
21
|
-
export { PitrPanel } from './packem_shared/PitrPanel-CdErL7EJ.js';
|
|
22
|
-
export { FunctionRunner } from './packem_shared/FunctionRunner--fQJRPAD.js';
|
|
23
|
-
export { FunctionStatsPanel } from './packem_shared/FunctionStatsPanel-BjRUA_G3.js';
|
|
24
|
-
export { HomePanel } from './packem_shared/HomePanel-Cw16stjq.js';
|
|
25
|
-
export { AuditPanel } from './packem_shared/AuditPanel-Bq4o_IqT.js';
|
|
26
|
-
export { LogsPanel } from './packem_shared/LogsPanel-CTW8CFcM.js';
|
|
27
|
-
export { MailPanel } from './packem_shared/MailPanel-BwkvfIHF.js';
|
|
28
|
-
export { ScheduledJobs } from './packem_shared/ScheduledJobs-CabfKbyM.js';
|
|
29
|
-
export { HealthPanel } from './packem_shared/HealthPanel-PxclMWmA.js';
|
|
30
|
-
export { aggregateMetrics, shardsToAggregate } from './packem_shared/aggregateMetrics-D4nUHEKU.js';
|
|
31
|
-
export { MetricsPanel } from './packem_shared/MetricsPanel-BLuOhZQ4.js';
|
|
32
|
-
export { SchemaViewer } from './packem_shared/SchemaViewer-LJDcmNIO.js';
|
|
33
|
-
export { SettingsPanel } from './packem_shared/SettingsPanel-C0uLRf5P.js';
|
|
34
|
-
export { S as SqlEditorPanel } from './packem_shared/sql-editor-panel-BFRpzj6r.js';
|
|
35
|
-
export { FileBrowser } from './packem_shared/FileBrowser-Dhy4zES8.js';
|
|
36
|
-
export { DEFAULT_AUTO_REFRESH_MS, useAutoRefresh } from './packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js';
|
|
37
|
-
export { default as useDebounced } from './packem_shared/useDebounced-Dxncpg6z.js';
|
|
38
|
-
export { DEFAULT_LOCALE, createStudioI18n, studioI18n, useT } from './packem_shared/DEFAULT_LOCALE-CiX4W7Kr.js';
|
|
39
|
-
export { StudioI18nProvider } from './packem_shared/StudioI18nProvider-B-tDCZIi.js';
|
|
40
|
-
export { ADMIN_FUNCTIONS, ADMIN_FUNCTION_PREFIX } from './packem_shared/ADMIN_FUNCTIONS-DmBqMZ-z.js';
|
|
41
|
-
export { default as STUDIO_ROOT_CLASS } from './packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js';
|
|
1
|
+
import{StudioApp as r}from"./packem_shared/StudioApp-BFm73yVr.js";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-CVIaY3j8.js";import{S as m}from"./packem_shared/studio-BHA7hnI3.js";import{ConfirmButton as x}from"./packem_shared/ConfirmButton-CTL3f3kr.js";import{default as s}from"./packem_shared/ConnectionBadge-DOk0CQWo.js";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-DvzYskH7.js";import{ShardInput as P}from"./packem_shared/ShardInput-BVn2iCU0.js";import{DEFAULT_INSIGHT_THRESHOLDS as A,deriveInsights as c}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{InsightsPanel as T}from"./packem_chunks/InsightsPanel.js";import{default as g}from"./packem_chunks/SecurityAdvisorPanel.js";import{default as F}from"./packem_shared/ApiDocsPanel-eJYZlylw.js";import{default as R}from"./packem_shared/ApiReferencePanel-C42v1jr6.js";import{default as C}from"./packem_chunks/ApiTab.js";import{default as H}from"./packem_shared/OpenRpcReferencePanel-sGsIgYWj.js";import{DataBrowser as N}from"./packem_shared/DataBrowser-B8J5lHjP.js";import{DataFilters as U,toFilterClauses as B}from"./packem_shared/DataFilters-Csb30F0C.js";import{GlobalDataBrowser as w}from"./packem_shared/GlobalDataBrowser-RLJ6NvOs.js";import{TableEditor as y}from"./packem_chunks/TableEditor.js";import{ExportImportPanel as q}from"./packem_chunks/ExportImportPanel.js";import{MigrationsPanel as V}from"./packem_chunks/MigrationsPanel.js";import{PitrPanel as j}from"./packem_chunks/PitrPanel.js";import{FunctionRunner as z}from"./packem_chunks/FunctionRunner.js";import{FunctionStatsPanel as Q}from"./packem_chunks/FunctionStatsPanel.js";import{DeploymentHealthPanel as Y}from"./packem_chunks/DeploymentHealthPanel.js";import{H as $}from"./packem_shared/home-panel-B-8BCffw.js";import{AuditPanel as oe}from"./packem_chunks/AuditPanel.js";import{LogsPanel as te}from"./packem_chunks/LogsPanel.js";import{MailPanel as fe}from"./packem_chunks/MailPanel.js";import{ScheduledJobs as me}from"./packem_shared/ScheduledJobs-DUbo6epc.js";import{NotificationsPanel as xe}from"./packem_chunks/NotificationsPanel.js";import{HealthPanel as se}from"./packem_chunks/HealthPanel.js";import{aggregateMetrics as de,shardsToAggregate as ue}from"./packem_shared/aggregateMetrics-BNfajLa2.js";import{MetricsPanel as Se}from"./packem_chunks/MetricsPanel.js";import{SchemaViewer as ce}from"./packem_chunks/SchemaViewer.js";import{SettingsPanel as Te}from"./packem_chunks/SettingsPanel.js";import{SqlEditorPanel as ge}from"./packem_chunks/SqlEditorPanel.js";import{FileBrowser as Fe}from"./packem_chunks/FileBrowser.js";import{DEFAULT_AUTO_REFRESH_MS as Re,useAutoRefresh as he}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{default as Oe}from"./packem_shared/useDebounced-Ihdiid_k.js";import{DEFAULT_LOCALE as Le,createStudioI18n as Ne,studioI18n as Me,useT as Ue}from"./packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as be}from"./packem_shared/StudioI18nProvider-CZ5h4nrV.js";import{ADMIN_FUNCTIONS as ve,ADMIN_FUNCTION_PREFIX as ye}from"./packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{default as qe}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js";export{ve as ADMIN_FUNCTIONS,ye as ADMIN_FUNCTION_PREFIX,F as ApiDocsPanel,R as ApiReferencePanel,C as ApiTab,oe as AuditPanel,a as CommandPalette,x as ConfirmButton,s as ConnectionBadge,Re as DEFAULT_AUTO_REFRESH_MS,A as DEFAULT_INSIGHT_THRESHOLDS,Le as DEFAULT_LOCALE,N as DataBrowser,U as DataFilters,Y as DeploymentHealthPanel,d as ErrorBoundary,q as ExportImportPanel,Fe as FileBrowser,z as FunctionRunner,Q as FunctionStatsPanel,w as GlobalDataBrowser,se as HealthPanel,$ as HomePanel,T as InsightsPanel,te as LogsPanel,fe as MailPanel,Se as MetricsPanel,V as MigrationsPanel,xe as NotificationsPanel,H as OpenRpcReferencePanel,j as PitrPanel,qe as STUDIO_ROOT_CLASS,me as ScheduledJobs,ce as SchemaViewer,g as SecurityAdvisorPanel,Te as SettingsPanel,P as ShardInput,ge as SqlEditorPanel,m as Studio,r as StudioApp,be as StudioI18nProvider,y as TableEditor,de as aggregateMetrics,Ne as createStudioI18n,c as deriveInsights,f as openCommandPalette,ue as shardsToAggregate,Me as studioI18n,B as toFilterClauses,he as useAutoRefresh,Oe as useDebounced,Ue as useT};
|
package/dist/mount.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { Root } from 'react-dom/client';
|
|
2
|
-
import { S as StudioAppProps } from "./packem_shared/app.d-
|
|
2
|
+
import { S as StudioAppProps } from "./packem_shared/app.d-bRPJhby-.js";
|
|
3
3
|
import '@lunora/client';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '@lingui/core';
|
|
6
6
|
interface MountStudioOptions extends StudioAppProps {
|
|
7
7
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
* The container to mount into. Accepts an element or a selector; defaults to
|
|
9
|
+
* `#root`. Throws if the selector matches nothing so misconfiguration fails
|
|
10
|
+
* loudly rather than silently rendering nowhere.
|
|
11
|
+
*/
|
|
12
12
|
readonly container?: Element | string;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* Mount the batteries-included {@link StudioApp} into the DOM and return the
|
|
16
|
-
* React root (call `.unmount()` to tear it down). This is the entry the
|
|
17
|
-
* standalone app's `main.tsx` and the `@lunora/vite` dev route both call — it
|
|
18
|
-
* keeps the host HTML to a single `<div id="root">` plus one script.
|
|
19
|
-
*/
|
|
15
|
+
* Mount the batteries-included {@link StudioApp} into the DOM and return the
|
|
16
|
+
* React root (call `.unmount()` to tear it down). This is the entry the
|
|
17
|
+
* standalone app's `main.tsx` and the `@lunora/vite` dev route both call — it
|
|
18
|
+
* keeps the host HTML to a single `<div id="root">` plus one script.
|
|
19
|
+
*/
|
|
20
20
|
declare const mountStudio: (options?: MountStudioOptions) => Root;
|
|
21
21
|
export { MountStudioOptions, mountStudio };
|
package/dist/mount.js
CHANGED
|
@@ -1,26 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StudioApp } from './packem_shared/StudioApp-D4azxYBu.js';
|
|
3
|
-
import { jsxDEV } from 'react/jsx-dev-runtime';
|
|
4
|
-
|
|
5
|
-
const mountStudio = (options = {}) => {
|
|
6
|
-
const {
|
|
7
|
-
container = "#root",
|
|
8
|
-
...appProps
|
|
9
|
-
} = options;
|
|
10
|
-
const element = typeof container === "string" ? document.querySelector(container) : container;
|
|
11
|
-
if (element === null) {
|
|
12
|
-
throw new Error(`mountStudio: container ${typeof container === "string" ? container : "element"} not found`);
|
|
13
|
-
}
|
|
14
|
-
const root = createRoot(element);
|
|
15
|
-
root.render(/* @__PURE__ */ jsxDEV(StudioApp, {
|
|
16
|
-
adminToken: appProps.adminToken,
|
|
17
|
-
basePath: appProps.basePath,
|
|
18
|
-
baseUrl: appProps.baseUrl,
|
|
19
|
-
locale: appProps.locale,
|
|
20
|
-
rulesInstalled: appProps.rulesInstalled,
|
|
21
|
-
studio: appProps.studio
|
|
22
|
-
}, void 0, false));
|
|
23
|
-
return root;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { mountStudio };
|
|
1
|
+
import{LunoraError as a}from"@lunora/errors";import{createRoot as s}from"react-dom/client";import{StudioApp as i}from"./packem_shared/StudioApp-BFm73yVr.js";import{jsx as l}from"react/jsx-runtime";const p=(n={})=>{const{container:t="#root",...o}=n,e=typeof t=="string"?document.querySelector(t):t;if(e===null)throw new a("INTERNAL",`mountStudio: container ${typeof t=="string"?t:"element"} not found`);const r=s(e);return r.render(l(i,{adminToken:o.adminToken,basePath:o.basePath,baseUrl:o.baseUrl,locale:o.locale,rulesInstalled:o.rulesInstalled,studio:o.studio})),r};export{p as mountStudio};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as q}from"react/compiler-runtime";import{useState as j}from"react";import{u as k}from"../packem_shared/button-BkCrNcAs.js";import{useT as F}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import M from"../packem_shared/ApiDocsPanel-eJYZlylw.js";import V from"../packem_shared/ApiReferencePanel-C42v1jr6.js";import W from"../packem_shared/OpenRpcReferencePanel-sGsIgYWj.js";import{jsx as o,jsxs as T}from"react/jsx-runtime";const B=["reference","snippets"],E=["openapi","openrpc"],Z=I=>{const e=q(51),{functions:$,initialShardKey:A,openApiSpec:P,openRpcSpec:_}=I,t=F(),[r,O]=j("reference"),[l,z]=j("openapi");let i;e[0]!==t?(i=t("Reference"),e[0]=t,e[1]=i):i=e[1];let n;e[2]!==t?(n=t("Snippets"),e[2]=t,e[3]=n):n=e[3];let g;e[4]!==i||e[5]!==n?(g={reference:i,snippets:n},e[4]=i,e[5]=n,e[6]=g):g=e[6];const C=g;let p;e[7]!==t?(p=t("OpenAPI"),e[7]=t,e[8]=p):p=e[8];let s;e[9]!==t?(s=t("OpenRPC"),e[9]=t,e[10]=s):s=e[10];let w;e[11]!==p||e[12]!==s?(w={openapi:p,openrpc:s},e[11]=p,e[12]=s,e[13]=w):w=e[13];const R=w;let y;e[14]===Symbol.for("react.memo_cache_sentinel")?(y=a=>{O(a.currentTarget.dataset.view)},e[14]=y):y=e[14];const D=y;let S;e[15]===Symbol.for("react.memo_cache_sentinel")?(S=a=>{z(a.currentTarget.dataset.format)},e[15]=S):S=e[15];const K=S;let c;e[16]!==t?(c=t("API view"),e[16]=t,e[17]=c):c=e[17];let f;e[18]!==r||e[19]!==C?(f=B.map(a=>o(k,{"aria-selected":r===a,"data-testid":`api-view-${a}`,"data-view":a,onClick:D,role:"tab",size:"sm",type:"button",variant:r===a?"default":"outline",children:C[a]},a)),e[18]=r,e[19]=C,e[20]=f):f=e[20];let m;e[21]!==f||e[22]!==c?(m=o("div",{"aria-label":c,className:"flex gap-1.5","data-testid":"api-view-toggle",role:"tablist",children:f}),e[21]=f,e[22]=c,e[23]=m):m=e[23];let d;e[24]!==l||e[25]!==R||e[26]!==t||e[27]!==r?(d=r==="reference"&&o("div",{"aria-label":t("API spec format"),className:"flex gap-1.5","data-testid":"api-format-toggle",role:"tablist",children:E.map(a=>o(k,{"aria-selected":l===a,"data-format":a,"data-testid":`api-format-${a}`,onClick:K,role:"tab",size:"sm",type:"button",variant:l===a?"default":"outline",children:R[a]},a))}),e[24]=l,e[25]=R,e[26]=t,e[27]=r,e[28]=d):d=e[28];let h;e[29]!==m||e[30]!==d?(h=T("div",{className:"flex shrink-0 flex-wrap items-center gap-3 border-b border-border px-6 py-3",children:[m,d]}),e[29]=m,e[30]=d,e[31]=h):h=e[31];let u;e[32]!==$||e[33]!==A||e[34]!==r?(u=r==="snippets"&&o("div",{className:"min-h-0 flex-1 overflow-y-auto p-6",children:o(M,{functions:$,initialShardKey:A})}),e[32]=$,e[33]=A,e[34]=r,e[35]=u):u=e[35];let b;e[36]!==l||e[37]!==P||e[38]!==r?(b=r==="reference"&&l==="openapi"&&o(V,{spec:P}),e[36]=l,e[37]=P,e[38]=r,e[39]=b):b=e[39];let v;e[40]!==l||e[41]!==_||e[42]!==r?(v=r==="reference"&&l==="openrpc"&&o(W,{spec:_}),e[40]=l,e[41]=_,e[42]=r,e[43]=v):v=e[43];let x;e[44]!==u||e[45]!==b||e[46]!==v?(x=T("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[u,b,v]}),e[44]=u,e[45]=b,e[46]=v,e[47]=x):x=e[47];let N;return e[48]!==h||e[49]!==x?(N=T("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"lunora-api-tab",children:[h,x]}),e[48]=h,e[49]=x,e[50]=N):N=e[50],N};export{Z as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useVirtualizer as j,observeElementRect as K}from"@tanstack/react-virtual";import{useState as w,useMemo as S,useRef as F}from"react";import{E as H}from"../packem_shared/error-alert-B59DnrDI.js";import{L as O}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as P}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as _}from"../packem_shared/badge-BbuuAio7.js";import{c as q,u as B}from"../packem_shared/card-CIDGUN6K.js";import{E as D}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as J}from"../packem_shared/input-JHu63lTv.js";import{n as U,d as W,m as L,p as l,f as Z,u as d}from"../packem_shared/table-DdJBrClo.js";import{K as G}from"../packem_shared/use-admin-query-Di3fLE8H.js";import Q from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as X}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Y}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as ee}from"../packem_shared/internal-AtZ4bTal.js";import{jsxs as n,jsx as e}from"react/jsx-runtime";const b=80,te=i=>{if(i===void 0)return"";const t=JSON.stringify(i);return t.length>b?`${t.slice(0,b)}…`:t},re=41,$=480,y=5,ae=(i,t)=>K(i,o=>{t(o.height>0?o:{height:$,width:o.width})}),we=({initialShardKey:i})=>{const t=X(),[o,C]=w(i??""),[m,E]=w(""),I=Q(o.trim(),400),{data:u,error:p,errorSource:A,isLoading:M,liveError:R}=G(Y.getAuditLog,{},{live:!0,shardKey:I}),c=S(()=>u?.entries??[],[u]),s=S(()=>{const a=m.trim().toLowerCase();return a===""?c:c.filter(r=>r.op.toLowerCase().includes(a)||(r.table??"").toLowerCase().includes(a)||(r.id??"").toLowerCase().includes(a))},[c,m]),f=F(null),g=j({count:s.length,estimateSize:()=>re,getScrollElement:()=>f.current,initialRect:{height:$,width:800},observeElementRect:ae,overscan:8}),h=g.getVirtualItems(),T=g.getTotalSize(),x=h[0]?.start??0,v=T-(h.at(-1)?.end??0),k={height:x},z={height:v},V=a=>{E(a.target.value)};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-audit",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[e(P,{onChange:C,testId:"au-shard-input",value:o}),e(O,{message:R,prefix:"au"}),e(J,{"aria-label":t("Filter audit log"),className:"h-8 w-48","data-testid":"au-search",onChange:V,placeholder:t("filter op, table, id"),value:m})]}),p!==null&&e(H,{error:A,testId:"au-error"}),p===null&&!M&&s.length===0&&e(D,{description:t("State-changing admin operations are recorded here."),icon:e("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:e("path",{d:"M8 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2h-2M9 3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V3Zm-1 9h8m-8 4h5"})}),testId:"au-empty",title:t("No audit entries.")}),s.length>0&&e(q,{className:"overflow-hidden py-0",children:e(B,{className:"max-h-[30rem] overflow-auto px-0",ref:f,children:n(U,{"data-testid":"au-table",children:[e(W,{children:n(L,{children:[e(l,{children:t("time")}),e(l,{children:t("op")}),e(l,{children:t("table")}),e(l,{children:t("id")}),e(l,{children:t("detail")})]})}),n(Z,{children:[x>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:y,style:k})}),h.map(a=>{const r=s[a.index],N=te(r.detail);return n(L,{"data-testid":"au-row",children:[e(d,{className:"text-muted-foreground tabular-nums",children:ee(r.ts,"—")}),e(d,{children:e(_,{variant:"secondary",children:r.op})}),e(d,{className:"font-medium",children:r.table??e("span",{className:"text-muted-foreground",children:"—"})}),e(d,{className:"max-w-[20ch] truncate font-mono text-xs",children:r.id??e("span",{className:"text-muted-foreground",children:"—"})}),e(d,{className:"max-w-[32ch] truncate font-mono text-xs text-muted-foreground",title:N||void 0,children:N||e("span",{className:"text-muted-foreground",children:"—"})})]},r.seq)}),v>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:y,style:z})})]})]})})})]})};export{we as AuditPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as ie}from"react/compiler-runtime";import{useLunora as ce}from"@lunora/react";import{useQuery as me}from"@tanstack/react-query";import{g as le}from"../packem_shared/badge-BbuuAio7.js";import{c as se}from"../packem_shared/card-CIDGUN6K.js";import{E as pe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as re}from"../packem_shared/skeleton-C1wQ9M5t.js";import{useT as he}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{i as ue}from"../packem_shared/internal-AtZ4bTal.js";import{c as te}from"../packem_shared/utils-bhneXptQ.js";import{jsxs as o,jsx as l}from"react/jsx-runtime";const fe="/_lunora/health",ge="/_lunora/health/ready",xe=(n,e)=>(n.endsWith("/")?n.slice(0,-1):n)+e,Ne=()=>{const n=ce();return async e=>{const w=e==="ready"?ge:fe,t=n.getAuthToken(),$=xe(n.url,w);try{const r=await fetch($,{headers:t===null?{}:{authorization:`Bearer ${t}`}});let d=null;try{d=await r.json()}catch{d=null}return{body:d,ok:r.ok,status:r.status}}catch(r){return{body:null,error:r instanceof Error?r.message:String(r),ok:!1,status:0}}}},de={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ve={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},ye=n=>n==="unhealthy"?"crit":n==="degraded"?"warn":"ok",ne=n=>{const e=ie(13),{label:w,level:t,testId:$,value:r}=n,d=de[t];let c;e[0]!==d?(c=te("size-1.5 shrink-0 rounded-full",d),e[0]=d,e[1]=c):c=e[1];let m;e[2]!==c?(m=l("span",{"aria-hidden":"true",className:c}),e[2]=c,e[3]=m):m=e[3];let x;e[4]!==w||e[5]!==m?(x=o("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[m,w]}),e[4]=w,e[5]=m,e[6]=x):x=e[6];let N;e[7]!==$||e[8]!==r?(N=l("span",{className:"text-lg font-semibold text-foreground","data-testid":$,children:r}),e[7]=$,e[8]=r,e[9]=N):N=e[9];let u;return e[10]!==x||e[11]!==N?(u=l(se,{className:"gap-0 py-0",children:o("div",{className:"flex flex-col gap-2.5 p-4",children:[x,N]})}),e[10]=x,e[11]=N,e[12]=u):u=e[12],u},Ie=n=>{const e=ie(115),{probe:w}=n,t=he(),$=Ne(),r=w??$;let d;e[0]!==r?(d=async()=>{const[a,i]=await Promise.all([r("live"),r("ready")]);return{live:a,ready:i}},e[0]=r,e[1]=d):d=e[1];let c;e[2]===Symbol.for("react.memo_cache_sentinel")?(c=["deployment-health"],e[2]=c):c=e[2];let m;e[3]!==d?(m={queryFn:d,queryKey:c},e[3]=d,e[4]=m):m=e[4];const{data:x,isPending:N}=me(m),u=x?.live??null,oe=x?.ready??null;if(N){let a;return e[5]===Symbol.for("react.memo_cache_sentinel")?(a=o("div",{className:"flex flex-col gap-4","data-testid":"deployment-health-loading",children:[l(re,{className:"h-16 w-full"}),l(re,{className:"h-40 w-full"})]}),e[5]=a):a=e[5],a}const s=u?.body??null;if(s===null){const a=u?.status===403;let i;e[6]!==a||e[7]!==u?.error||e[8]!==t?(i=a?t("The health endpoint is in the admin posture. Paste a valid admin token in the connect popover, or set its auth to public."):t("Couldn't reach the health endpoint: {message}",{message:u?.error??t("no response")}),e[6]=a,e[7]=u?.error,e[8]=t,e[9]=i):i=e[9];let f;e[10]!==t?(f=t("Health endpoint unavailable"),e[10]=t,e[11]=f):f=e[11];let h;return e[12]!==i||e[13]!==f?(h=l(pe,{description:i,testId:"deployment-health-error",title:f}),e[12]=i,e[13]=f,e[14]=h):h=e[14],h}let Z;e[15]!==s.status?(Z=ye(s.status),e[15]=s.status,e[16]=Z):Z=e[16];const _=Z;let p;if(s.status==="unhealthy"){let a;e[17]!==t?(a=t("Unhealthy"),e[17]=t,e[18]=a):a=e[18],p=a}else if(s.status==="degraded"){let a;e[19]!==t?(a=t("Degraded"),e[19]=t,e[20]=a):a=e[20],p=a}else{let a;e[21]!==t?(a=t("Healthy"),e[21]=t,e[22]=a):a=e[22],p=a}const j=oe?.ok??!1,Y=j?"ok":"crit";let C,P,v,y,b,S,z,k,V,H;if(e[23]!==s.appName||e[24]!==s.appVersion||e[25]!==s.checks||e[26]!==s.timestamp||e[27]!==_||e[28]!==Y||e[29]!==j||e[30]!==p||e[31]!==t){const a=[...s.checks].toSorted(be);H="flex flex-col gap-6",P="deployment-health";let i;e[42]!==t?(i=t("Live liveness, readiness, and per-binding health from the deployment's /_lunora/health endpoint — wire an uptime monitor or a Cloudflare Health Check at it."),e[42]=t,e[43]=i):i=e[43],e[44]!==i?(v=l("p",{className:"text-sm text-muted-foreground",children:i}),e[44]=i,e[45]=v):v=e[45];const f=ve[_];let h;e[46]!==f?(h=te("flex size-10 shrink-0 items-center justify-center rounded-full",f),e[46]=f,e[47]=h):h=e[47];const ae=de[_];let T;e[48]!==ae?(T=te("size-3 rounded-full",ae),e[48]=ae,e[49]=T):T=e[49];let D;e[50]!==T?(D=l("span",{className:T}),e[50]=T,e[51]=D):D=e[51];let E;e[52]!==h||e[53]!==D?(E=l("span",{"aria-hidden":"true",className:h,children:D}),e[52]=h,e[53]=D,e[54]=E):E=e[54];let L;e[55]!==p?(L=l("span",{className:"text-sm font-semibold text-foreground","data-testid":"dh-status",children:p}),e[55]=p,e[56]=L):L=e[56];let q;e[57]!==s.appName||e[58]!==s.appVersion?(q=o("span",{className:"font-mono text-[13px] text-muted-foreground","data-testid":"dh-app",children:[s.appName," · ",s.appVersion]}),e[57]=s.appName,e[58]=s.appVersion,e[59]=q):q=e[59];let R;e[60]!==L||e[61]!==q?(R=o("div",{className:"grid leading-tight",children:[L,q]}),e[60]=L,e[61]=q,e[62]=R):R=e[62];let U;e[63]!==E||e[64]!==R?(U=o("div",{className:"flex items-center gap-3",children:[E,R]}),e[63]=E,e[64]=R,e[65]=U):U=e[65];let A;e[66]!==t?(A=t("Checked"),e[66]=t,e[67]=A):A=e[67];let B;e[68]!==A?(B=l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:A}),e[68]=A,e[69]=B):B=e[69];let F;e[70]!==s.timestamp?(F=ue(s.timestamp),e[70]=s.timestamp,e[71]=F):F=e[71];let K;e[72]!==F?(K=l("time",{className:"text-[13px] text-muted-foreground","data-testid":"dh-timestamp",children:F}),e[72]=F,e[73]=K):K=e[73];let Q;e[74]!==B||e[75]!==K?(Q=o("div",{className:"text-end",children:[B,K]}),e[74]=B,e[75]=K,e[76]=Q):Q=e[76],e[77]!==U||e[78]!==Q?(y=l(se,{className:"gap-0 py-0",children:o("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[U,Q]})}),e[77]=U,e[78]=Q,e[79]=y):y=e[79];let W;e[80]!==t?(W=t("Liveness"),e[80]=t,e[81]=W):W=e[81];let G;e[82]!==_||e[83]!==p||e[84]!==W?(G=l(ne,{label:W,level:_,testId:"dh-liveness",value:p}),e[82]=_,e[83]=p,e[84]=W,e[85]=G):G=e[85];let J;e[86]!==t?(J=t("Readiness"),e[86]=t,e[87]=J):J=e[87];let M;e[88]!==j||e[89]!==t?(M=t(j?"Ready":"Not ready"),e[88]=j,e[89]=t,e[90]=M):M=e[90];let O;e[91]!==Y||e[92]!==J||e[93]!==M?(O=l(ne,{label:J,level:Y,testId:"dh-readiness",value:M}),e[91]=Y,e[92]=J,e[93]=M,e[94]=O):O=e[94],e[95]!==G||e[96]!==O?(b=o("div",{className:"grid gap-3 sm:grid-cols-2","data-testid":"dh-probes",children:[G,O]}),e[95]=G,e[96]=O,e[97]=b):b=e[97],C=se,S="gap-0 py-0",z="dh-checks";let X;e[98]!==t?(X=t("Subsystem checks"),e[98]=t,e[99]=X):X=e[99],e[100]!==X?(k=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:X})}),e[100]=X,e[101]=k):k=e[101],V=a.length===0?l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"dh-checks-empty",children:t("No checks reported.")}):l("ul",{className:"divide-y divide-border",children:a.map(g=>o("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2.5 text-xs","data-testid":`dh-check-${g.name}`,children:[o("span",{className:"flex items-center gap-2",children:[l("span",{"aria-hidden":"true",className:te("size-1.5 shrink-0 rounded-full",g.status==="up"?"bg-success":"bg-destructive")}),l("span",{className:"font-mono text-foreground",children:g.name}),g.critical&&l(le,{variant:"outline",children:t("Critical")})]}),o("span",{className:"flex shrink-0 items-center gap-2",children:[g.message!==void 0&&l("span",{className:"text-muted-foreground",children:g.message}),l(le,{"data-testid":`dh-check-status-${g.name}`,variant:g.status==="up"?"secondary":"destructive",children:g.status==="up"?t("Up"):t("Down")})]})]},g.name))}),e[23]=s.appName,e[24]=s.appVersion,e[25]=s.checks,e[26]=s.timestamp,e[27]=_,e[28]=Y,e[29]=j,e[30]=p,e[31]=t,e[32]=C,e[33]=P,e[34]=v,e[35]=y,e[36]=b,e[37]=S,e[38]=z,e[39]=k,e[40]=V,e[41]=H}else C=e[32],P=e[33],v=e[34],y=e[35],b=e[36],S=e[37],z=e[38],k=e[39],V=e[40],H=e[41];let I;e[102]!==C||e[103]!==S||e[104]!==z||e[105]!==k||e[106]!==V?(I=o(C,{className:S,"data-testid":z,children:[k,V]}),e[102]=C,e[103]=S,e[104]=z,e[105]=k,e[106]=V,e[107]=I):I=e[107];let ee;return e[108]!==P||e[109]!==v||e[110]!==y||e[111]!==b||e[112]!==I||e[113]!==H?(ee=o("div",{className:H,"data-testid":P,children:[v,y,b,I]}),e[108]=P,e[109]=v,e[110]=y,e[111]=b,e[112]=I,e[113]=H,e[114]=ee):ee=e[114],ee};function be(n,e){return n.name.localeCompare(e.name)}export{Ie as DeploymentHealthPanel};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{LunoraError as S}from"@lunora/errors";import{useLunora as D}from"@lunora/react";import{useState as c}from"react";import{ConfirmButton as F}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{ShardInput as R}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as _}from"../packem_shared/button-BkCrNcAs.js";import{c as v,u as j}from"../packem_shared/card-CIDGUN6K.js";import{l as M}from"../packem_shared/textarea-Bu2-jKAs.js";import{_ as P}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as h}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{f as $,c as O,e as g,a as E}from"../packem_shared/internal-AtZ4bTal.js";import{r as A}from"../packem_shared/shard-history-DMEW5VBE.js";import{jsxs as d,jsx as r}from"react/jsx-runtime";const B=E(h.exportShard),K=E(h.importShard),X=m=>m.map(a=>JSON.stringify(a)).join(`
|
|
2
|
+
`),z=m=>{const a=[],u=m.split(`
|
|
3
|
+
`);for(const[t,l]of u.entries()){const x=l.trim();if(x==="")continue;const s=JSON.parse(x);if(typeof s!="object"||s===null)throw new S("INTERNAL",`line ${(t+1).toString()}: expected a { table, doc } object`);const o=s;if(typeof o.table!="string"||typeof o.doc!="object"||o.doc===null||Array.isArray(o.doc))throw new S("INTERNAL",`line ${(t+1).toString()}: expected a { table, doc } object`);a.push(o)}return a},ne=({initialShardKey:m})=>{const a=D(),u=P(),t=U(),[l,x]=c(m??""),[s,o]=c(""),[N,p]=c(!1),[y,f]=c(null),[n,b]=c(null),[w,I]=c(null),T=async()=>{p(!0),f(null),b(null);try{const e=await a.query(B,{},O(l));A(l),o(X(e.rows)),I(e.rows.length)}catch(e){f(g(e))}finally{p(!1)}},C=async()=>{p(!0),f(null),b(null),I(null);let e;try{e=z(s)}catch(i){f(t("Invalid NDJSON: {message}",{message:g(i)})),p(!1);return}try{const i=await a.query(K,{rows:e},O(l));A(l),b(i),u(h.readTablePage),u(h.listTables)}catch(i){f(g(i))}finally{p(!1)}},L=n===null?0:Object.values(n.inserted).reduce((e,i)=>e+i,0),k=()=>{$(T())},J=()=>{$(C())},q=e=>{o(e.target.value)};return d("div",{className:"flex flex-col gap-4","data-testid":"lunora-export-import",children:[d(v,{className:"rounded-xl border border-border bg-card shadow-xs",children:[r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Export")})}),d(j,{className:"flex flex-col gap-3 p-4",children:[d("div",{className:"flex flex-wrap items-center gap-2",children:[r(R,{onChange:x,testId:"ei-shard-input",value:l}),r(_,{"data-testid":"ei-export",disabled:N,onClick:k,type:"button",children:t("Export")})]}),w!==null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"ei-export-result",children:t("Exported {count} rows.",{count:w})})]})]}),d(v,{className:"rounded-xl border border-border bg-card shadow-xs",children:[r("header",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Import")})}),d(j,{className:"flex flex-col gap-3 p-4",children:[r(M,{"aria-label":"NDJSON",className:"font-mono text-xs min-h-40 rounded-md","data-testid":"ei-ndjson",onChange:q,placeholder:'{"table":"messages","doc":{…}}',value:s}),r("div",{className:"flex flex-wrap items-center gap-2",children:r(F,{confirmLabel:t("Import (writes rows)?"),disabled:N||s.trim()==="",onConfirm:J,testId:"ei-import",children:t("Import")})}),n!==null&&d("div",{className:"flex flex-col gap-2","data-testid":"ei-import-result",children:[r("p",{className:"text-sm text-muted-foreground",children:t("Inserted {inserted}, {conflicts} conflicts, {errors} errors.",{conflicts:n.conflicts,errors:n.errors.length,inserted:L})}),n.errors.length>0&&r("ul",{className:"flex flex-col gap-1","data-testid":"ei-import-errors",children:n.errors.map(e=>r("li",{className:"text-xs text-destructive",children:t("line {line} ({table}): {message}",{line:e.line,message:e.message,table:e.table})},`${e.table}-${e.line.toString()}`))})]})]})]}),y!==null&&r("p",{className:"text-sm text-destructive","data-testid":"ei-error",role:"alert",children:y})]})};export{ne as ExportImportPanel};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{c as B}from"react/compiler-runtime";import{useState as O,useEffect as oe,useRef as he,useMemo as fe,useCallback as lt}from"react";import{ShardInput as ot}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as se}from"../packem_shared/button-BkCrNcAs.js";import{E as Se}from"../packem_shared/empty-state-Cg7t_8qu.js";import{useT as st}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{F as at}from"../packem_shared/grid-features-uZCUj955.js";import{c as it,u as ct}from"../packem_shared/card-CIDGUN6K.js";import{f as Ne}from"../packem_shared/checkbox-StT4Gob6.js";import{p as le,d as dt,m as me,f as ut,n as ft,u as te}from"../packem_shared/table-DdJBrClo.js";import{k as Ce,f as G,e as ee,c as xe,a as $e,g as ht}from"../packem_shared/internal-AtZ4bTal.js";import{ConfirmButton as mt}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{g as ce}from"../packem_shared/badge-BbuuAio7.js";import{jsx as a,jsxs as T,Fragment as je}from"react/jsx-runtime";import{u as pt}from"../packem_shared/input-JHu63lTv.js";import{d as gt}from"../packem_shared/cf-links-gbDy51nR.js";import{useLunora as bt}from"@lunora/react";import{useAutoRefresh as yt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";const Ke=(c,e,r)=>{const t=B(21),{onCopy:o,onDelete:n,onDownload:u,onToggleSelect:i}=r;let l;t[0]!==c.key||t[1]!==o?(l=()=>{o(c.key)},t[0]=c.key,t[1]=o,t[2]=l):l=t[2];const f=l;let h;t[3]!==c.key||t[4]!==u?(h=()=>{u(c.key)},t[3]=c.key,t[4]=u,t[5]=h):h=t[5];const d=h;let m;t[6]!==c.key||t[7]!==n?(m=()=>{n(c.key)},t[6]=c.key,t[7]=n,t[8]=m):m=t[8];const v=m;let s;t[9]!==c.key||t[10]!==i?(s=()=>{i(c.key)},t[9]=c.key,t[10]=i,t[11]=s):s=t[11];const x=s;let y;t[12]!==c.key||t[13]!==e.length?(y=c.key.slice(e.length),t[12]=c.key,t[13]=e.length,t[14]=y):y=t[14];let g;return t[15]!==f||t[16]!==d||t[17]!==v||t[18]!==y||t[19]!==x?(g={copy:f,download:d,name:y,remove:v,toggle:x},t[15]=f,t[16]=d,t[17]=v,t[18]=y,t[19]=x,t[20]=g):g=t[20],g},De=c=>{const e=B(31),{busy:r,buttonClassName:t,copied:o,objectKey:n,onCopy:u,onDelete:i,onDownload:l,t:f}=c,h=`storage-copy-${n}`;let d;e[0]!==o||e[1]!==f?(d=f(o?"Copied":"Copy URL"),e[0]=o,e[1]=f,e[2]=d):d=e[2];let m;e[3]!==r||e[4]!==t||e[5]!==u||e[6]!==h||e[7]!==d?(m=a(se,{className:t,"data-testid":h,disabled:r,onClick:u,size:"sm",type:"button",variant:"ghost",children:d}),e[3]=r,e[4]=t,e[5]=u,e[6]=h,e[7]=d,e[8]=m):m=e[8];const v=`storage-download-${n}`;let s;e[9]!==f?(s=f("Download"),e[9]=f,e[10]=s):s=e[10];let x;e[11]!==r||e[12]!==t||e[13]!==l||e[14]!==v||e[15]!==s?(x=a(se,{className:t,"data-testid":v,disabled:r,onClick:l,size:"sm",type:"button",variant:"ghost",children:s}),e[11]=r,e[12]=t,e[13]=l,e[14]=v,e[15]=s,e[16]=x):x=e[16];let y;e[17]!==f?(y=f("Delete object?"),e[17]=f,e[18]=y):y=e[18];const g=`storage-delete-${n}`;let b;e[19]!==f?(b=f("Delete"),e[19]=f,e[20]=b):b=e[20];let k;e[21]!==r||e[22]!==i||e[23]!==y||e[24]!==g||e[25]!==b?(k=a(mt,{confirmLabel:y,disabled:r,onConfirm:i,testId:g,children:b}),e[21]=r,e[22]=i,e[23]=y,e[24]=g,e[25]=b,e[26]=k):k=e[26];let w;return e[27]!==k||e[28]!==m||e[29]!==x?(w=T(je,{children:[m,x,k]}),e[27]=k,e[28]=m,e[29]=x,e[30]=w):w=e[30],w},Te=c=>{const e=B(14),{objectKey:r,references:t,t:o}=c;if(t===void 0)return null;if(t.length===0){const h=`storage-orphan-${r}`;let d;e[0]!==o?(d=o("Orphan"),e[0]=o,e[1]=d):d=e[1];let m;return e[2]!==h||e[3]!==d?(m=a(ce,{"data-testid":h,variant:"warning",children:d}),e[2]=h,e[3]=d,e[4]=m):m=e[4],m}let n;e[5]!==t?(n=t.map(xt).join(`
|
|
2
|
+
`),e[5]=t,e[6]=n):n=e[6];const u=n,i=`storage-refs-${r}`;let l;e[7]!==t.length||e[8]!==o?(l=t.length===1?o("1 record"):o("{count} records",{count:t.length}),e[7]=t.length,e[8]=o,e[9]=l):l=e[9];let f;return e[10]!==u||e[11]!==i||e[12]!==l?(f=a(ce,{"data-testid":i,title:u,variant:"secondary",children:l}),e[10]=u,e[11]=i,e[12]=l,e[13]=f):f=e[13],f},Fe=c=>{const e=B(7),{objectKey:r,onToggle:t,selected:o,t:n}=c;let u;e[0]!==n?(u=n("Select row"),e[0]=n,e[1]=u):u=e[1];const i=`storage-select-${r}`;let l;return e[2]!==t||e[3]!==o||e[4]!==u||e[5]!==i?(l=a(Ne,{"aria-label":u,checked:o,"data-testid":i,onCheckedChange:t}),e[2]=t,e[3]=o,e[4]=u,e[5]=i,e[6]=l):l=e[6],l};function xt(c){return`${c.table}·${c.id}`}const kt=c=>{const e=B(10),{colSpan:r,name:t,onEnter:o}=c;let n;e[0]!==t||e[1]!==o?(n=()=>{o(t)},e[0]=t,e[1]=o,e[2]=n):n=e[2];const u=n;let i;e[3]===Symbol.for("react.memo_cache_sentinel")?(i=a("svg",{"aria-hidden":"true",className:"size-4 text-muted-foreground",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:a("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"})}),e[3]=i):i=e[3];let l;e[4]!==u||e[5]!==t?(l=T("button",{className:"inline-flex items-center gap-2 font-mono text-xs outline-none hover:text-foreground focus-visible:text-foreground","data-testid":"fb-folder",onClick:u,type:"button",children:[i,t]}),e[4]=u,e[5]=t,e[6]=l):l=e[6];let f;return e[7]!==r||e[8]!==l?(f=a(me,{children:a(te,{colSpan:r,children:l})}),e[7]=r,e[8]=l,e[9]=f):f=e[9],f},vt=c=>{const e=B(33),{busy:r,copiedKey:t,handlers:o,object:n,prefix:u,references:i,selected:l,showReferences:f,t:h}=c,{copy:d,download:m,name:v,remove:s,toggle:x}=Ke(n,u,o);let y;e[0]!==n.key||e[1]!==l||e[2]!==h||e[3]!==x?(y=a(te,{className:"w-8",children:a(Fe,{objectKey:n.key,onToggle:x,selected:l,t:h})}),e[0]=n.key,e[1]=l,e[2]=h,e[3]=x,e[4]=y):y=e[4];let g;e[5]!==v?(g=a(te,{className:"font-mono text-xs",children:v}),e[5]=v,e[6]=g):g=e[6];let b;e[7]!==n.size?(b=Ce(n.size),e[7]=n.size,e[8]=b):b=e[8];let k;e[9]!==b?(k=a(te,{className:"tabular-nums text-muted-foreground",children:b}),e[9]=b,e[10]=k):k=e[10];const w=n.httpMetadata?.contentType??"";let C;e[11]!==w?(C=a(te,{children:w}),e[11]=w,e[12]=C):C=e[12];let S;e[13]!==n.key||e[14]!==i||e[15]!==f||e[16]!==h?(S=f&&a(te,{children:a(Te,{objectKey:n.key,references:i,t:h})}),e[13]=n.key,e[14]=i,e[15]=f,e[16]=h,e[17]=S):S=e[17];const N=t===n.key;let $;e[18]!==r||e[19]!==d||e[20]!==m||e[21]!==n.key||e[22]!==s||e[23]!==h||e[24]!==N?($=a(te,{className:"text-right",children:a("span",{className:"inline-flex items-center gap-1",children:a(De,{busy:r,copied:N,objectKey:n.key,onCopy:d,onDelete:s,onDownload:m,t:h})})}),e[18]=r,e[19]=d,e[20]=m,e[21]=n.key,e[22]=s,e[23]=h,e[24]=N,e[25]=$):$=e[25];let z;return e[26]!==y||e[27]!==g||e[28]!==k||e[29]!==C||e[30]!==S||e[31]!==$?(z=T(me,{"data-testid":"fb-row",children:[y,g,k,C,S,$]}),e[26]=y,e[27]=g,e[28]=k,e[29]=C,e[30]=S,e[31]=$,e[32]=z):z=e[32],z},wt=c=>{const e=B(65),{allSelected:r,busy:t,copiedKey:o,files:n,folders:u,handlers:i,onEnterFolder:l,prefix:f,references:h,selected:d,showReferences:m,someSelected:v,t:s,toggleSelectAll:x}=c;let y;e[0]!==s?(y=s("Select all rows"),e[0]=s,e[1]=y):y=e[1];let g;e[2]!==r||e[3]!==v||e[4]!==y||e[5]!==x?(g=a(le,{className:"w-8",children:a(Ne,{"aria-label":y,checked:r,"data-testid":"storage-select-all",indeterminate:v,onCheckedChange:x})}),e[2]=r,e[3]=v,e[4]=y,e[5]=x,e[6]=g):g=e[6];let b;e[7]!==s?(b=s("key"),e[7]=s,e[8]=b):b=e[8];let k;e[9]!==b?(k=a(le,{children:b}),e[9]=b,e[10]=k):k=e[10];let w;e[11]!==s?(w=s("size"),e[11]=s,e[12]=w):w=e[12];let C;e[13]!==w?(C=a(le,{children:w}),e[13]=w,e[14]=C):C=e[14];let S;e[15]!==s?(S=s("content-type"),e[15]=s,e[16]=S):S=e[16];let N;e[17]!==S?(N=a(le,{children:S}),e[17]=S,e[18]=N):N=e[18];let $;e[19]!==m||e[20]!==s?($=m&&a(le,{children:s("used by")}),e[19]=m,e[20]=s,e[21]=$):$=e[21];let z;e[22]!==s?(z=s("Actions"),e[22]=s,e[23]=z):z=e[23];let D;e[24]!==z?(D=a(le,{"aria-label":z}),e[24]=z,e[25]=D):D=e[25];let K;e[26]!==D||e[27]!==g||e[28]!==k||e[29]!==C||e[30]!==N||e[31]!==$?(K=a(dt,{children:T(me,{children:[g,k,C,N,$,D]})}),e[26]=D,e[27]=g,e[28]=k,e[29]=C,e[30]=N,e[31]=$,e[32]=K):K=e[32];let E;if(e[33]!==u||e[34]!==l||e[35]!==m){let F;e[37]!==l||e[38]!==m?(F=L=>a(kt,{colSpan:m?6:5,name:L,onEnter:l},L),e[37]=l,e[38]=m,e[39]=F):F=e[39],E=u.map(F),e[33]=u,e[34]=l,e[35]=m,e[36]=E}else E=e[36];let U;if(e[40]!==t||e[41]!==o||e[42]!==n||e[43]!==i||e[44]!==f||e[45]!==h||e[46]!==d||e[47]!==m||e[48]!==s){let F;e[50]!==t||e[51]!==o||e[52]!==i||e[53]!==f||e[54]!==h||e[55]!==d||e[56]!==m||e[57]!==s?(F=L=>a(vt,{busy:t,copiedKey:o,handlers:i,object:L,prefix:f,references:h[L.key],selected:d.has(L.key),showReferences:m,t:s},L.key),e[50]=t,e[51]=o,e[52]=i,e[53]=f,e[54]=h,e[55]=d,e[56]=m,e[57]=s,e[58]=F):F=e[58],U=n.map(F),e[40]=t,e[41]=o,e[42]=n,e[43]=i,e[44]=f,e[45]=h,e[46]=d,e[47]=m,e[48]=s,e[49]=U}else U=e[49];let R;e[59]!==E||e[60]!==U?(R=T(ut,{children:[E,U]}),e[59]=E,e[60]=U,e[61]=R):R=e[61];let I;return e[62]!==K||e[63]!==R?(I=a(it,{className:"overflow-hidden py-0",children:a(ct,{className:"px-0",children:T(ft,{"data-testid":"fb-table",children:[K,R]})})}),e[62]=K,e[63]=R,e[64]=I):I=e[64],I},St=[{label:"15m",seconds:900},{label:"1h",seconds:3600},{label:"24h",seconds:86400},{label:"7d",seconds:604800}],Nt=3600,ke=(c,e)=>{if(e==="size")return c.size;if(e==="type")return c.httpMetadata?.contentType??"";if(e==="date"){if(c.uploaded===void 0)return 0;const r=new Date(c.uploaded).getTime();return Number.isNaN(r)?0:r}return e.startsWith("tag:")?c.customMetadata?.[e.slice(4)]??"":c.key},Ct=(c,e,r)=>{const t=r==="desc"?-1:1;return c.toSorted((o,n)=>{const u=ke(o,e),i=ke(n,e);return(typeof u=="number"&&typeof i=="number"?u-i:String(u).localeCompare(String(i)))*t})},$t=(c,e)=>{const r=new Set,t=[];for(const o of c){const n=o.key.slice(e.length),u=n.indexOf("/");u===-1?t.push(o):r.add(n.slice(0,u+1))}return{files:t,folders:[...r].toSorted((o,n)=>o.localeCompare(n))}},jt=c=>{const e=B(59),{bucket:r,buckets:t,busy:o,draftPrefix:n,expiry:u,fileInputRef:i,onBucketChange:l,onExpiryChange:f,onFileChange:h,onList:d,onPrefixChange:m,onUploadClick:v,t:s}=c;let x;e[0]!==m?(x=P=>{m(P.target.value)},e[0]=m,e[1]=x):x=e[1];const y=x;let g;e[2]!==l?(g=P=>{l(P.target.value)},e[2]=l,e[3]=g):g=e[3];const b=g;let k;e[4]!==f?(k=P=>{f(Number.parseInt(P.target.value,10))},e[4]=f,e[5]=k):k=e[5];const w=k;let C;e[6]!==r||e[7]!==t||e[8]!==b||e[9]!==s?(C=t.length>0&&a("select",{"aria-label":s("Bucket"),className:"h-8 rounded-md border border-border bg-background px-1 outline-none focus-visible:border-ring","data-testid":"fb-bucket",onChange:b,value:r,children:t.map(Kt)}),e[6]=r,e[7]=t,e[8]=b,e[9]=s,e[10]=C):C=e[10];let S;e[11]!==s?(S=s("Key prefix"),e[11]=s,e[12]=S):S=e[12];let N;e[13]!==s?(N=s("key prefix (optional)"),e[13]=s,e[14]=N):N=e[14];let $;e[15]!==n||e[16]!==y||e[17]!==S||e[18]!==N?($=a(pt,{"aria-label":S,className:"h-8 w-64 max-w-full","data-testid":"fb-prefix-input",onChange:y,placeholder:N,value:n}),e[15]=n,e[16]=y,e[17]=S,e[18]=N,e[19]=$):$=e[19];let z;e[20]!==s?(z=s("List"),e[20]=s,e[21]=z):z=e[21];let D;e[22]!==o||e[23]!==d||e[24]!==z?(D=a(se,{"data-testid":"fb-list",disabled:o,onClick:d,size:"sm",type:"button",children:z}),e[22]=o,e[23]=d,e[24]=z,e[25]=D):D=e[25];let K;e[26]!==o||e[27]!==s?(K=s(o?"Uploading…":"Upload"),e[26]=o,e[27]=s,e[28]=K):K=e[28];let E;e[29]!==o||e[30]!==v||e[31]!==K?(E=a(se,{"data-testid":"storage-upload",disabled:o,onClick:v,size:"sm",type:"button",variant:"outline",children:K}),e[29]=o,e[30]=v,e[31]=K,e[32]=E):E=e[32];let U;e[33]!==i||e[34]!==h?(U=a("input",{className:"hidden","data-testid":"storage-file-input",onChange:h,ref:i,type:"file"}),e[33]=i,e[34]=h,e[35]=U):U=e[35];let R;e[36]!==s?(R=s("Link expiry"),e[36]=s,e[37]=R):R=e[37];let I;e[38]!==s?(I=St.map(P=>a("option",{value:P.seconds,children:s(P.label)},P.seconds)),e[38]=s,e[39]=I):I=e[39];let F;e[40]!==u||e[41]!==w||e[42]!==I?(F=a("select",{className:"h-8 rounded-md border border-border bg-background px-1 tabular-nums outline-none focus-visible:border-ring","data-testid":"storage-expiry",id:"storage-expiry",onChange:w,value:u,children:I}),e[40]=u,e[41]=w,e[42]=I,e[43]=F):F=e[43];let L;e[44]!==R||e[45]!==F?(L=T("label",{className:"ml-auto flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"storage-expiry",children:[R,F]}),e[44]=R,e[45]=F,e[46]=L):L=e[46];let M;e[47]!==s?(M=s("Open in Cloudflare"),e[47]=s,e[48]=M):M=e[48];let A;e[49]!==M?(A=a("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"fb-cf-link",href:gt,rel:"noreferrer",target:"_blank",children:M}),e[49]=M,e[50]=A):A=e[50];let W;return e[51]!==E||e[52]!==U||e[53]!==L||e[54]!==A||e[55]!==C||e[56]!==$||e[57]!==D?(W=T("div",{className:"flex flex-wrap items-center gap-2",children:[C,$,D,E,U,L,A]}),e[51]=E,e[52]=U,e[53]=L,e[54]=A,e[55]=C,e[56]=$,e[57]=D,e[58]=W):W=e[58],W},zt=c=>{const e=B(66),{onSortKeyChange:r,onThumbSizeChange:t,showGrid:o,showList:n,sortDirection:u,sortKey:i,t:l,tagKeys:f,thumbSize:h,toggleSortDirection:d,view:m}=c;let v;e[0]!==r?(v=q=>{r(q.target.value)},e[0]=r,e[1]=v):v=e[1];const s=v;let x;e[2]!==t?(x=q=>{t(Number.parseInt(q.target.value,10))},e[2]=t,e[3]=x):x=e[3];const y=x,g=m==="list";let b;e[4]!==l?(b=l("List"),e[4]=l,e[5]=b):b=e[5];let k;e[6]!==n||e[7]!==g||e[8]!==b?(k=a("button",{"aria-pressed":g,className:"px-2 py-1 outline-none transition-colors hover:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground","data-testid":"fb-view-list",onClick:n,type:"button",children:b}),e[6]=n,e[7]=g,e[8]=b,e[9]=k):k=e[9];const w=m==="grid";let C;e[10]!==l?(C=l("Grid"),e[10]=l,e[11]=C):C=e[11];let S;e[12]!==o||e[13]!==w||e[14]!==C?(S=a("button",{"aria-pressed":w,className:"border-s border-border px-2 py-1 outline-none transition-colors hover:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground","data-testid":"fb-view-grid",onClick:o,type:"button",children:C}),e[12]=o,e[13]=w,e[14]=C,e[15]=S):S=e[15];let N;e[16]!==k||e[17]!==S?(N=T("div",{className:"inline-flex overflow-hidden rounded-md border border-border",children:[k,S]}),e[16]=k,e[17]=S,e[18]=N):N=e[18];let $;e[19]!==l?($=l("Sort"),e[19]=l,e[20]=$):$=e[20];let z;e[21]!==l?(z=l("Name"),e[21]=l,e[22]=z):z=e[22];let D;e[23]!==z?(D=a("option",{value:"name",children:z}),e[23]=z,e[24]=D):D=e[24];let K;e[25]!==l?(K=l("size"),e[25]=l,e[26]=K):K=e[26];let E;e[27]!==K?(E=a("option",{value:"size",children:K}),e[27]=K,e[28]=E):E=e[28];let U;e[29]!==l?(U=l("Type"),e[29]=l,e[30]=U):U=e[30];let R;e[31]!==U?(R=a("option",{value:"type",children:U}),e[31]=U,e[32]=R):R=e[32];let I;e[33]!==l?(I=l("Modified"),e[33]=l,e[34]=I):I=e[34];let F;e[35]!==I?(F=a("option",{value:"date",children:I}),e[35]=I,e[36]=F):F=e[36];let L;e[37]!==f?(L=f.map(Dt),e[37]=f,e[38]=L):L=e[38];let M;e[39]!==s||e[40]!==i||e[41]!==D||e[42]!==E||e[43]!==R||e[44]!==F||e[45]!==L?(M=T("select",{className:"h-8 rounded-md border border-border bg-background px-1 outline-none focus-visible:border-ring","data-testid":"fb-sort",id:"fb-sort",onChange:s,value:i,children:[D,E,R,F,L]}),e[39]=s,e[40]=i,e[41]=D,e[42]=E,e[43]=R,e[44]=F,e[45]=L,e[46]=M):M=e[46];let A;e[47]!==$||e[48]!==M?(A=T("label",{className:"flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-sort",children:[$,M]}),e[47]=$,e[48]=M,e[49]=A):A=e[49];let W;e[50]!==l?(W=l("Toggle sort direction"),e[50]=l,e[51]=W):W=e[51];const P=u==="asc"?"↑":"↓";let H;e[52]!==W||e[53]!==P||e[54]!==d?(H=a("button",{"aria-label":W,className:"flex size-8 items-center justify-center rounded-md border border-border tabular-nums outline-none transition-colors hover:bg-accent focus-visible:bg-accent","data-testid":"fb-sort-dir",onClick:d,type:"button",children:P}),e[52]=W,e[53]=P,e[54]=d,e[55]=H):H=e[55];let Q;e[56]!==y||e[57]!==l||e[58]!==h||e[59]!==m?(Q=m==="grid"&&T("label",{className:"ml-auto flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-thumb-size",children:[l("Thumbnail size"),a("input",{className:"accent-primary","data-testid":"fb-thumb-size",id:"fb-thumb-size",max:240,min:80,onChange:y,step:8,type:"range",value:h})]}),e[56]=y,e[57]=l,e[58]=h,e[59]=m,e[60]=Q):Q=e[60];let re;return e[61]!==A||e[62]!==H||e[63]!==Q||e[64]!==N?(re=T("div",{className:"flex flex-wrap items-center gap-2 text-xs","data-testid":"fb-controls",children:[N,A,H,Q]}),e[61]=A,e[62]=H,e[63]=Q,e[64]=N,e[65]=re):re=e[65],re};function Kt(c){return a("option",{value:c,children:c},c)}function Dt(c){return a("option",{value:`tag:${c}`,children:c},c)}const Tt=/\.(?:avif|bmp|gif|ico|jpe?g|png|svg|webp)$/iu,Ft=c=>(c.httpMetadata?.contentType??"").startsWith("image/")||Tt.test(c.key),Rt=()=>{const c=B(1);let e;return c[0]===Symbol.for("react.memo_cache_sentinel")?(e=a("svg",{"aria-hidden":"true",className:"size-8 text-muted-foreground/60",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.4,viewBox:"0 0 24 24",children:a("path",{d:"M7 3h7l5 5v13a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm7 0v5h5"})}),c[0]=e):e=c[0],e},Lt=c=>{const e=B(13),{object:r,resolveUrl:t}=c,[o,n]=O(null),[u,i]=O(!1);let l;e[0]!==r?(l=Ft(r),e[0]=r,e[1]=l):l=e[1];const f=l;let h,d;e[2]!==f||e[3]!==r.key||e[4]!==t?(h=()=>{if(!f)return;const x={cancelled:!1};return G((async()=>{try{const y=await t(r.key);x.cancelled||n(y)}catch{x.cancelled||i(!0)}})()),()=>{x.cancelled=!0}},d=[f,r.key,t],e[2]=f,e[3]=r.key,e[4]=t,e[5]=h,e[6]=d):(h=e[5],d=e[6]),oe(h,d);let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{i(!0)},e[7]=m):m=e[7];const v=m;let s;return e[8]!==u||e[9]!==f||e[10]!==r.key||e[11]!==o?(s=a("div",{className:"flex aspect-square w-full items-center justify-center overflow-hidden rounded-md border border-border bg-muted/30",children:f&&o!==null&&!u?a("img",{alt:r.key,className:"size-full object-cover",loading:"lazy",onError:v,src:o}):a(Rt,{})}),e[8]=u,e[9]=f,e[10]=r.key,e[11]=o,e[12]=s):s=e[12],s},Ot=c=>{const e=B(38),{busy:r,copiedKey:t,handlers:o,object:n,prefix:u,references:i,resolveUrl:l,selected:f,showReferences:h,t:d}=c,{copy:m,download:v,name:s,remove:x,toggle:y}=Ke(n,u,o);let g;e[0]!==n||e[1]!==l?(g=a(Lt,{object:n,resolveUrl:l}),e[0]=n,e[1]=l,e[2]=g):g=e[2];let b;e[3]!==n.key||e[4]!==f||e[5]!==d||e[6]!==y?(b=a("span",{className:"absolute left-1.5 top-1.5 rounded bg-background/80 p-0.5",children:a(Fe,{objectKey:n.key,onToggle:y,selected:f,t:d})}),e[3]=n.key,e[4]=f,e[5]=d,e[6]=y,e[7]=b):b=e[7];let k;e[8]!==g||e[9]!==b?(k=T("div",{className:"relative",children:[g,b]}),e[8]=g,e[9]=b,e[10]=k):k=e[10];let w;e[11]!==s?(w=a("p",{className:"truncate font-mono text-xs",title:s,children:s}),e[11]=s,e[12]=w):w=e[12];let C;e[13]!==n.size?(C=Ce(n.size),e[13]=n.size,e[14]=C):C=e[14];let S;e[15]!==C?(S=a("p",{className:"text-[11px] tabular-nums text-muted-foreground",children:C}),e[15]=C,e[16]=S):S=e[16];let N;e[17]!==n.key||e[18]!==i||e[19]!==h||e[20]!==d?(N=h&&a("div",{className:"mt-1",children:a(Te,{objectKey:n.key,references:i,t:d})}),e[17]=n.key,e[18]=i,e[19]=h,e[20]=d,e[21]=N):N=e[21];let $;e[22]!==w||e[23]!==S||e[24]!==N?($=T("div",{className:"min-w-0",children:[w,S,N]}),e[22]=w,e[23]=S,e[24]=N,e[25]=$):$=e[25];const z=t===n.key;let D;e[26]!==r||e[27]!==m||e[28]!==v||e[29]!==n.key||e[30]!==x||e[31]!==d||e[32]!==z?(D=a("div",{className:"flex items-center gap-1",children:a(De,{busy:r,buttonClassName:"h-7 px-2 text-xs",copied:z,objectKey:n.key,onCopy:m,onDelete:x,onDownload:v,t:d})}),e[26]=r,e[27]=m,e[28]=v,e[29]=n.key,e[30]=x,e[31]=d,e[32]=z,e[33]=D):D=e[33];let K;return e[34]!==D||e[35]!==k||e[36]!==$?(K=T("div",{className:"flex flex-col gap-1.5","data-testid":"fb-tile",children:[k,$,D]}),e[34]=D,e[35]=k,e[36]=$,e[37]=K):K=e[37],K},Et=c=>{const e=B(9),{name:r,onEnter:t}=c;let o;e[0]!==r||e[1]!==t?(o=()=>{t(r)},e[0]=r,e[1]=t,e[2]=o):o=e[2];const n=o;let u;e[3]===Symbol.for("react.memo_cache_sentinel")?(u=a("span",{className:"flex aspect-square w-full items-center justify-center rounded-md border border-border bg-muted/30 transition-colors hover:bg-accent",children:a("svg",{"aria-hidden":"true",className:"size-10 text-muted-foreground",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.4,viewBox:"0 0 24 24",children:a("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"})})}),e[3]=u):u=e[3];let i;e[4]!==r?(i=a("span",{className:"truncate font-mono text-xs",title:r,children:r}),e[4]=r,e[5]=i):i=e[5];let l;return e[6]!==n||e[7]!==i?(l=T("button",{className:"flex flex-col gap-1.5 text-left outline-none","data-testid":"fb-folder",onClick:n,type:"button",children:[u,i]}),e[6]=n,e[7]=i,e[8]=l):l=e[8],l},Ut=c=>{const e=B(34),{busy:r,copiedKey:t,files:o,folders:n,handlers:u,onEnterFolder:i,prefix:l,references:f,resolveUrl:h,selected:d,showReferences:m,size:v,t:s}=c;let x;e[0]!==v?(x=v.toString(),e[0]=v,e[1]=x):x=e[1];const y=`repeat(auto-fill, minmax(${x}px, 1fr))`;let g;e[2]!==y?(g={gridTemplateColumns:y},e[2]=y,e[3]=g):g=e[3];const b=g;let k;if(e[4]!==n||e[5]!==i){let S;e[7]!==i?(S=N=>a(Et,{name:N,onEnter:i},N),e[7]=i,e[8]=S):S=e[8],k=n.map(S),e[4]=n,e[5]=i,e[6]=k}else k=e[6];let w;if(e[9]!==r||e[10]!==t||e[11]!==o||e[12]!==u||e[13]!==l||e[14]!==f||e[15]!==h||e[16]!==d||e[17]!==m||e[18]!==s){let S;e[20]!==r||e[21]!==t||e[22]!==u||e[23]!==l||e[24]!==f||e[25]!==h||e[26]!==d||e[27]!==m||e[28]!==s?(S=N=>a(Ot,{busy:r,copiedKey:t,handlers:u,object:N,prefix:l,references:f[N.key],resolveUrl:h,selected:d.has(N.key),showReferences:m,t:s},N.key),e[20]=r,e[21]=t,e[22]=u,e[23]=l,e[24]=f,e[25]=h,e[26]=d,e[27]=m,e[28]=s,e[29]=S):S=e[29],w=o.map(S),e[9]=r,e[10]=t,e[11]=o,e[12]=u,e[13]=l,e[14]=f,e[15]=h,e[16]=d,e[17]=m,e[18]=s,e[19]=w}else w=e[19];let C;return e[30]!==b||e[31]!==k||e[32]!==w?(C=T("div",{className:"grid gap-4","data-testid":"fb-gallery",style:b,children:[k,w]}),e[30]=b,e[31]=k,e[32]=w,e[33]=C):C=e[33],C},_t=c=>{const e=B(23),{reference:r,t}=c,o=`fb-dangling-${r.table}-${r.id}-${r.column}`,n=`${r.table}·${r.id}`;let u;e[0]!==n?(u=a(ce,{variant:"secondary",children:n}),e[0]=n,e[1]=u):u=e[1];let i;e[2]!==r.column?(i=a("span",{className:"text-muted-foreground",children:r.column}),e[2]=r.column,e[3]=i):i=e[3];let l;e[4]!==t?(l=t("→"),e[4]=t,e[5]=l):l=e[5];let f;e[6]!==l?(f=a("span",{className:"text-muted-foreground/60",children:l}),e[6]=l,e[7]=f):f=e[7];let h;e[8]!==r.key?(h=a("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-foreground",children:r.key}),e[8]=r.key,e[9]=h):h=e[9];let d;e[10]!==u||e[11]!==i||e[12]!==f||e[13]!==h?(d=T("span",{className:"flex flex-wrap items-center gap-1.5",children:[u,i,f,h]}),e[10]=u,e[11]=i,e[12]=f,e[13]=h,e[14]=d):d=e[14];let m;e[15]!==t?(m=t("Missing object"),e[15]=t,e[16]=m):m=e[16];let v;e[17]!==m?(v=a(ce,{className:"border-destructive/40 text-destructive",variant:"outline",children:m}),e[17]=m,e[18]=v):v=e[18];let s;return e[19]!==o||e[20]!==v||e[21]!==d?(s=T("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-md border border-border/60 px-3 py-2 text-xs","data-testid":o,children:[d,v]}),e[19]=o,e[20]=v,e[21]=d,e[22]=s):s=e[22],s},It=c=>{const e=B(37),{busy:r,onCheck:t,references:o,t:n,truncated:u}=c;let i;e[0]!==n?(i=n("Integrity"),e[0]=n,e[1]=i):i=e[1];let l;e[2]!==i?(l=a("span",{className:"font-mono text-[11px] uppercase tracking-wide text-muted-foreground",children:i}),e[2]=i,e[3]=l):l=e[3];let f;e[4]!==n?(f=n("Orphaned objects"),e[4]=n,e[5]=f):f=e[5];let h;e[6]!==f?(h=a("span",{className:"text-sm font-medium text-foreground",children:f}),e[6]=f,e[7]=h):h=e[7];let d;e[8]!==n?(d=n("Find records whose file reference points at an object the bucket no longer has."),e[8]=n,e[9]=d):d=e[9];let m;e[10]!==d?(m=a("span",{className:"text-xs text-muted-foreground",children:d}),e[10]=d,e[11]=m):m=e[11];let v;e[12]!==l||e[13]!==h||e[14]!==m?(v=T("div",{className:"flex flex-col gap-1",children:[l,h,m]}),e[12]=l,e[13]=h,e[14]=m,e[15]=v):v=e[15];let s;e[16]!==r||e[17]!==n?(s=n(r?"Checking…":"Check for orphans"),e[16]=r,e[17]=n,e[18]=s):s=e[18];let x;e[19]!==r||e[20]!==t||e[21]!==s?(x=a(se,{"data-testid":"fb-orphans-check",disabled:r,onClick:t,size:"sm",type:"button",variant:"outline",children:s}),e[19]=r,e[20]=t,e[21]=s,e[22]=x):x=e[22];let y;e[23]!==v||e[24]!==x?(y=T("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[v,x]}),e[23]=v,e[24]=x,e[25]=y):y=e[25];let g;e[26]!==o?.length||e[27]!==n?(g=o?.length===0&&a(Se,{description:n("Every record's file reference points at an object that exists in the bucket."),testId:"fb-orphans-empty",title:n("No dangling references.")}),e[26]=o?.length,e[27]=n,e[28]=g):g=e[28];let b;e[29]!==o||e[30]!==n||e[31]!==u?(b=o!==void 0&&o.length>0&&T(je,{children:[u&&a("p",{className:"text-xs text-warning","data-testid":"fb-orphans-truncated",children:n("Showing the first {count} dangling references — the scan was truncated.",{count:o.length})}),a("ul",{className:"flex flex-col gap-1.5","data-testid":"fb-orphans-list",children:o.map(w=>a(_t,{reference:w,t:n},`${w.table}·${w.id}·${w.column}`))})]}),e[29]=o,e[30]=n,e[31]=u,e[32]=b):b=e[32];let k;return e[33]!==y||e[34]!==g||e[35]!==b?(k=T("section",{className:"flex flex-col gap-2 rounded-lg border border-border/60 p-3","data-testid":"fb-orphans",children:[y,g,b]}),e[33]=y,e[34]=g,e[35]=b,e[36]=k):k=e[36],k},Mt=function(c,e){const r=B(18);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t=new Set,r[0]=t):t=r[0];const[o,n]=O(t);let u;r[1]===Symbol.for("react.memo_cache_sentinel")?(u=g=>{n(b=>{const k=new Set(b);return k.has(g)?k.delete(g):k.add(g),k})},r[1]=u):u=r[1];const i=u;let l;r[2]===Symbol.for("react.memo_cache_sentinel")?(l=()=>{n(new Set)},r[2]=l):l=r[2];const f=l;let h,d,m;if(r[3]!==c||r[4]!==e||r[5]!==o){let g;r[9]!==e?(g=b=>e(b),r[9]=e,r[10]=g):g=r[10],d=c.map(g),h=d.length>0&&d.every(b=>o.has(b)),m=!h&&d.some(b=>o.has(b)),r[3]=c,r[4]=e,r[5]=o,r[6]=h,r[7]=d,r[8]=m}else h=r[6],d=r[7],m=r[8];const v=m;let s;r[11]!==d?(s=()=>{n(g=>d.every(b=>g.has(b))?new Set:new Set(d))},r[11]=d,r[12]=s):s=r[12];const x=s;let y;return r[13]!==h||r[14]!==o||r[15]!==v||r[16]!==x?(y={allSelected:h,clear:f,selected:o,someSelected:v,toggle:i,toggleAll:x},r[13]=h,r[14]=o,r[15]=v,r[16]=x,r[17]=y):y=r[17],y},Bt=$e(ze.storageReferences),At=$e(ze.storageOrphans),ve=1e4,Pt=1e3,Wt=3600,Gt=(c,e)=>{if(!("document"in globalThis))return;const r=globalThis.document.createElement("a");r.href=c,r.download=e,r.rel="noopener",globalThis.document.body.append(r),r.click(),r.remove()},Ht=({initialPrefix:c,pageSize:e})=>{const r=bt(),[t,o]=O(c??""),[n,u]=O(c??""),[i,l]=O(Nt),[f,h]=O("list"),[d,m]=O(128),[v,s]=O("name"),[x,y]=O("asc"),[g,b]=O(void 0),[k,w]=O(void 0),[C,S]=O(!1),[N,$]=O(void 0),[z,D]=O(void 0),[K,E]=O(""),[U,R]=O({}),[I,F]=O(!1),[L,M]=O(void 0),[A,W]=O(!1),[P,H]=O(!1),[Q,re]=O([]),[q,pe]=O(""),ne=he(0),Y=he(0);oe(()=>{const p={cancelled:!1};return G((async()=>{try{const j=await r.listStorageBuckets();if(!p.cancelled){re(j);const[_]=j;_!==void 0&&pe(Z=>Z===""?_:Z)}}catch{}})()),()=>{p.cancelled=!0}},[r]);const V=fe(()=>({list:p=>r.listStorageObjects({...p,bucket:q}),remove:p=>r.deleteStorageObject(p,{bucket:q}),signedUrl:(p,j)=>r.signedStorageUrl(p,{...j,bucket:q}),upload:p=>r.uploadStorageObject({...p,bucket:q})}),[q,r]),X=lt(async(p,j,_)=>{ne.current+=1;const Z=ne.current;w(void 0),S(!0);try{const J=await V.list({cursor:j,limit:e,prefix:p});if(Z!==ne.current)return;b(ye=>_&&ye!==void 0?[...ye,...J.objects]:J.objects),D(J.cursor)}catch(J){if(Z!==ne.current)return;_||b(void 0),w(ee(J))}finally{Z===ne.current&&S(!1)}},[e,V]);oe(()=>{G(X(c??"",void 0,!1))},[X,c]);const Re=(g?.length??0)<=e;yt(()=>{G(X(t,void 0,!1))},Re);const{files:de,folders:Le}=$t(g??[],t),Oe=fe(()=>{const p=new Set;for(const j of de)for(const _ of Object.keys(j.customMetadata??{}))p.add(_);return[...p].toSorted((j,_)=>j.localeCompare(_))},[de]),ie=Ct(de,v,x),ue=fe(()=>[...new Set(ie.map(p=>p.key))].toSorted((p,j)=>p.localeCompare(j)).join(`
|
|
3
|
+
`),[ie]);oe(()=>{const p=ue===""?[]:ue.split(`
|
|
4
|
+
`);if(p.length===0){R({});return}const j={current:!0};return G((async()=>{try{const _=await r.query(Bt,{keys:p},xe(K));j.current&&(R(_.references??{}),F(Object.keys(_.storageColumns??{}).length>0))}catch{j.current&&(R({}),F(!1))}})()),()=>{j.current=!1}},[r,ue,K]);const Ee=p=>p.key,{allSelected:Ue,clear:ae,selected:ge,someSelected:_e,toggle:Ie,toggleAll:Me}=Mt(ie,Ee),Be=()=>{o(n),ae(),G(X(n,void 0,!1))},Ae=()=>{G(X(t,z,!0))},be=p=>{o(p),u(p),ae(),G(X(p,void 0,!1))},Pe=p=>{be(`${t}${p}`)},We=p=>V.signedUrl(p,{expiresInSeconds:Wt}),Ge=()=>{h("list")},He=()=>{h("grid")},Ze=p=>{s(p)},qe=()=>{y(p=>p==="asc"?"desc":"asc")},Ve=p=>{m(p)},Xe=p=>{l(p)},Qe=()=>{w(void 0),S(!0),G((async()=>{try{for(const p of ge)await V.remove(p);await X(t,void 0,!1),ae()}catch(p){w(ee(p))}finally{S(!1)}})())},Ye=p=>{w(void 0),G((async()=>{try{const j=await V.signedUrl(p,{expiresInSeconds:i});ht(j)&&$(p)}catch(j){w(ee(j))}})())},Je=p=>{w(void 0),G((async()=>{try{const j=await V.signedUrl(p,{expiresInSeconds:i}),_=p.slice(p.lastIndexOf("/")+1)||p;Gt(j,_)}catch(j){w(ee(j))}})())};oe(()=>{if(N===void 0)return;const p=globalThis.setTimeout(()=>{$(void 0)},2e3);return()=>{globalThis.clearTimeout(p)}},[N]);const et=p=>{w(void 0),S(!0),G((async()=>{try{await V.remove(p),await X(t,void 0,!1)}catch(j){w(ee(j))}finally{S(!1)}})())},tt=p=>{const j=`${t}${p.name}`;w(void 0),S(!0),G((async()=>{try{const _=await p.arrayBuffer();await V.upload({body:_,contentType:p.type===""?void 0:p.type,key:j}),await X(t,void 0,!1)}catch(_){w(ee(_))}finally{S(!1)}})())};oe(()=>{Y.current+=1,M(void 0),H(!1)},[K]);const rt=()=>{Y.current+=1;const p=Y.current;w(void 0),W(!0),G((async()=>{try{const j=[];let _;do{const Z=await V.list({cursor:_,limit:Pt});for(const J of Z.objects)j.push(J.key);_=j.length>=ve?void 0:Z.cursor}while(_!==void 0);if(j.length>=ve)p===Y.current&&(M([]),H(!0));else{const Z=await r.query(At,{liveKeys:j},xe(K));p===Y.current&&(M(Z.references??[]),H(Z.truncated===!0))}}catch(j){p===Y.current&&(M([]),H(!1),w(ee(j)))}finally{p===Y.current&&W(!1)}})())},nt=p=>{ne.current+=1,Y.current+=1,pe(p),o(c??""),u(c??""),b(void 0),M(void 0),H(!1),ae()};return{allSelected:Ue,bucket:q,buckets:Q,bulkDelete:Qe,busy:C,checkOrphans:rt,clearSelection:ae,copiedKey:N,danglingBusy:A,danglingReferences:L,danglingTruncated:P,draftPrefix:n,enterFolder:Pe,error:k,expiry:i,files:ie,folders:Le,hasObjects:g!==void 0&&g.length>0,hasStorageColumns:I,listFirst:Be,loaded:g!==void 0,loadMore:Ae,navigate:be,nextCursor:z,onCopy:Ye,onDelete:et,onDownload:Je,onExpiryChange:Xe,onFile:tt,onSortKeyChange:Ze,onThumbSizeChange:Ve,prefix:t,referenceShard:K,references:U,resolveUrl:We,selectBucket:nt,selected:ge,setDraftPrefix:u,setReferenceShard:E,showGrid:He,showList:Ge,someSelected:_e,sortDirection:x,sortKey:v,tagKeys:Oe,thumbSize:d,toggleSelect:Ie,toggleSelectAll:Me,toggleSortDirection:qe,view:f}},Zt=100,we=c=>{const e=B(6),{label:r,onNavigate:t,target:o}=c;let n;e[0]!==t||e[1]!==o?(n=()=>{t(o)},e[0]=t,e[1]=o,e[2]=n):n=e[2];const u=n;let i;return e[3]!==u||e[4]!==r?(i=a("button",{className:"rounded px-1 text-muted-foreground outline-none hover:text-foreground focus-visible:text-foreground",onClick:u,type:"button",children:r}),e[3]=u,e[4]=r,e[5]=i):i=e[5],i},qt=c=>{const e=B(11),{onNavigate:r,prefix:t,t:o}=c;let n;if(e[0]!==r||e[1]!==t||e[2]!==o){const u=t.split("/").filter(Vt);let i;e[4]!==o?(i=o("Folder path"),e[4]=o,e[5]=i):i=e[5];let l;e[6]!==o?(l=o("root"),e[6]=o,e[7]=l):l=e[7];let f;e[8]!==r||e[9]!==l?(f=a(we,{label:l,onNavigate:r,target:""}),e[8]=r,e[9]=l,e[10]=f):f=e[10],n=T("nav",{"aria-label":i,className:"flex flex-wrap items-center gap-0.5 text-xs","data-testid":"fb-breadcrumbs",children:[f,u.map((h,d)=>T("span",{className:"flex items-center gap-0.5",children:[a("span",{className:"text-muted-foreground/50",children:"/"}),a(we,{label:h,onNavigate:r,target:`${u.slice(0,d+1).join("/")}/`})]},`${h}-${d.toString()}`))]}),e[0]=r,e[1]=t,e[2]=o,e[3]=n}else n=e[3];return n},pr=({initialPrefix:c,pageSize:e=Zt})=>{const r=st(),t=Ht({initialPrefix:c,pageSize:e}),o=he(null),{onCopy:n,onDelete:u,onDownload:i,onFile:l,toggleSelect:f}=t,h={onCopy:n,onDelete:u,onDownload:i,onToggleSelect:f},d=()=>{o.current?.click()},m=s=>{const x=s.target,y=x.files?.[0];x.value="",y&&l(y)},v=t.loaded&&!t.hasObjects;return T("div",{className:"flex flex-col gap-3","data-testid":"lunora-file-browser",children:[a(jt,{bucket:t.bucket,buckets:t.buckets,busy:t.busy,draftPrefix:t.draftPrefix,expiry:t.expiry,fileInputRef:o,onBucketChange:t.selectBucket,onExpiryChange:t.onExpiryChange,onFileChange:m,onList:t.listFirst,onPrefixChange:t.setDraftPrefix,onUploadClick:d,t:r}),t.loaded&&a(qt,{onNavigate:t.navigate,prefix:t.prefix,t:r}),t.hasObjects&&a(zt,{onSortKeyChange:t.onSortKeyChange,onThumbSizeChange:t.onThumbSizeChange,showGrid:t.showGrid,showList:t.showList,sortDirection:t.sortDirection,sortKey:t.sortKey,t:r,tagKeys:t.tagKeys,thumbSize:t.thumbSize,toggleSortDirection:t.toggleSortDirection,view:t.view}),t.hasStorageColumns&&T("div",{className:"flex flex-wrap items-center gap-2","data-testid":"fb-references-shard",children:[a("label",{className:"text-xs text-muted-foreground",htmlFor:"fb-reference-shard-input",children:r("References shard")}),a(ot,{id:"fb-reference-shard-input",onChange:t.setReferenceShard,testId:"fb-reference-shard-input",value:t.referenceShard}),a("span",{className:"text-xs text-muted-foreground",children:r("Which shard's records are checked for references to these files. Empty = root shard.")})]}),t.hasStorageColumns&&a(It,{busy:t.danglingBusy,onCheck:t.checkOrphans,references:t.danglingReferences,t:r,truncated:t.danglingTruncated}),t.selected.size>0&&a(at,{count:t.selected.size,editable:!0,onClear:t.clearSelection,onDelete:t.bulkDelete}),t.error!==void 0&&a("p",{className:"text-sm text-destructive","data-testid":"storage-error",role:"alert",children:t.error}),v&&a(Se,{description:r("Objects you upload to your R2 buckets will appear here."),icon:T("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[a("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"}),a("path",{d:"M12 11v5m-2.5-2.5h5"})]}),testId:"fb-empty",title:r("No objects.")}),t.hasObjects&&t.view==="list"&&a(wt,{allSelected:t.allSelected,busy:t.busy,copiedKey:t.copiedKey,files:t.files,folders:t.folders,handlers:h,onEnterFolder:t.enterFolder,prefix:t.prefix,references:t.references,selected:t.selected,showReferences:t.hasStorageColumns,someSelected:t.someSelected,t:r,toggleSelectAll:t.toggleSelectAll}),t.hasObjects&&t.view==="grid"&&a(Ut,{busy:t.busy,copiedKey:t.copiedKey,files:t.files,folders:t.folders,handlers:h,onEnterFolder:t.enterFolder,prefix:t.prefix,references:t.references,resolveUrl:t.resolveUrl,selected:t.selected,showReferences:t.hasStorageColumns,size:t.thumbSize,t:r}),t.nextCursor!==void 0&&a("div",{children:a(se,{"data-testid":"fb-next",disabled:t.busy,onClick:t.loadMore,size:"sm",type:"button",variant:"outline",children:r("Load more")})})]})};function Vt(c){return c!==""}export{pr as FileBrowser};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useLunora as G}from"@lunora/react";import{useState as o,useEffect as H}from"react";import{ShardInput as Q}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as T}from"../packem_shared/badge-BbuuAio7.js";import{u as y}from"../packem_shared/button-BkCrNcAs.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as N}from"../packem_shared/label-6uP1obNF.js";import{l as W}from"../packem_shared/textarea-Bu2-jKAs.js";import{useT as Y}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{e as ee,i as te,f as re,j as ae,a as se}from"../packem_shared/internal-AtZ4bTal.js";import{r as ne}from"../packem_shared/shard-history-DMEW5VBE.js";import{jsxs as n,jsx as r}from"react/jsx-runtime";const ie=t=>t.kind==="id"?t.table===void 0?"id":`id<${t.table}>`:t.kind==="array"?t.element===void 0?"array":`${t.element}[]`:t.kind,oe=t=>t===void 0||t.length===0?"()":`(${t.map(i=>`${i.name}${i.optional?"?":""}: ${ie(i)}`).join(", ")})`,de=t=>{switch(t){case"array":return[];case"bigint":case"number":return 0;case"boolean":return!1;case"object":case"record":return{};default:return""}},le=t=>{const i={};for(const a of t??[])a.optional||(i[a.name]=de(a.kind));return JSON.stringify(i,void 0,2)},ce=se(Z.runAs),ue=10,me=t=>t===void 0?"undefined":JSON.stringify(t,null,2),Ie=({functions:t,runAsIdentity:i=!1}={})=>{const a=Y(),u=G(),[J,K]=o(null),[w,L]=o(null),p=t??J??[],[k,S]=o(""),[m,g]=o("{}"),[c,$]=o(""),[f,z]=o(""),[x,h]=o("idle"),[M,b]=o(void 0),[I,v]=o(null),[F,P]=o([]);H(()=>{if(t!==void 0)return;let e=!1;return u.listFunctions().then(d=>(e||K(d),d)).catch(d=>{e||L(ee(d))}),()=>{e=!0}},[u,t]);const C=k===""?p[0]?.path??"":k,s=p.find(e=>e.path===C),_=async()=>{if(!s)return;let e;try{e=m.trim()===""?{}:JSON.parse(m)}catch(l){h("error"),b(void 0),v(a("Invalid JSON args: {message}",{message:l.message}));return}const d={__lunoraRef:s.path},R=c.trim()===""?{}:{shardKey:c.trim()},j=i?f.trim():"",A=l=>{P(O=>[{argsText:m,at:Date.now(),id:(O[0]?.id??0)+1,kind:s.kind,path:s.path,shardKey:c,status:l},...O].slice(0,ue))};h("running"),v(null);try{const l=j===""?await ae(u,s.kind,d,e,R):await u.query(ce,{args:e,functionPath:s.path,userId:j},R);ne(c),b(l),h("success"),A("success")}catch(l){b(void 0),v(l.message),h("error"),A("error")}},q=e=>{S(e.path),g(e.argsText),$(e.shardKey)},B=e=>{S(e.target.value)},D=e=>{g(e.target.value)},E=e=>{z(e.target.value)},U=()=>{re(_())},X=()=>{g(le(s?.args))};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-runner",children:[w!==null&&r("p",{className:"text-sm text-destructive","data-testid":"function-discover-error",role:"alert",children:w}),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(N,{htmlFor:"function-select",children:a("Function")}),r("select",{"aria-label":a("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:B,value:C,children:p.map(e=>n("option",{value:e.path,children:[e.path," (",e.kind,")"]},e.path))}),s!==void 0&&n("p",{className:"text-xs text-muted-foreground",children:[r("span",{className:"mr-1.5 font-medium",children:a("Signature")}),r("code",{className:"font-mono","data-testid":"function-signature",children:oe(s.args)})]})]}),n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:"flex items-center justify-between gap-2",children:[r(N,{htmlFor:"args-input",children:a("Arguments")}),r(y,{"data-testid":"prefill-button",disabled:s===void 0,onClick:X,size:"xs",type:"button",variant:"ghost",children:a("Prefill")})]}),r(W,{"aria-label":a("Arguments"),className:"font-mono text-xs","data-testid":"args-input",id:"args-input",onChange:D,value:m})]}),r(Q,{onChange:$,testId:"shard-input",value:c}),i&&n("div",{className:"flex flex-col gap-1.5","data-testid":"run-as-field",children:[r(N,{htmlFor:"run-as-input",children:a("Run as identity (userId)")}),r(V,{"aria-label":a("Run as identity (userId)"),className:"font-mono text-xs","data-testid":"run-as-input",id:"run-as-input",onChange:E,placeholder:a("Leave empty to run as admin"),value:f}),r("p",{className:"text-[11px] text-muted-foreground",children:a("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(y,{"data-testid":"run-button",disabled:x==="running"||s===void 0,onClick:U,type:"button",children:a("Run")}),s!==void 0&&r(T,{variant:"outline",children:s.kind}),i&&f.trim()!==""&&r(T,{"data-testid":"run-as-badge",variant:"secondary",children:a("as {userId}",{userId:f.trim()})})]})]}),x==="error"&&I!==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:I}),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:me(M)}),F.length>0&&r("ul",{className:"flex flex-col overflow-hidden rounded-xl border border-border","data-testid":"fn-history",children:F.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:te(e.at)})," ",r(y,{className:"ml-auto","data-testid":`fn-history-load-${d.toString()}`,onClick:()=>{q(e)},size:"xs",type:"button",variant:"ghost",children:a("Load")})]},e.id))})]})};export{Ie as FunctionRunner};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as W}from"react/compiler-runtime";import{useState as q}from"react";import{E as G}from"../packem_shared/error-alert-B59DnrDI.js";import{L as J}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as V}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as X}from"../packem_shared/badge-BbuuAio7.js";import{u as Y}from"../packem_shared/button-BkCrNcAs.js";import{c as Z,u as tt}from"../packem_shared/card-CIDGUN6K.js";import{E as et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as rt,d as at,m as P,p as l,f as st,u as n}from"../packem_shared/table-DdJBrClo.js";import{K as lt}from"../packem_shared/use-admin-query-Di3fLE8H.js";import nt from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as ot}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as it}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as ct}from"../packem_shared/internal-AtZ4bTal.js";import{c as z}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as y}from"react/jsx-runtime";const dt={action:"outline",mutation:"default",query:"secondary"},O=r=>r<1e3?`${r<10?r.toFixed(1):Math.round(r).toString()}ms`:`${(r/1e3).toFixed(2)}s`,mt=r=>r.calls===0?"—":r.errors===0?"0":`${r.errors.toString()} (${(r.errors/r.calls*100).toFixed(1)}%)`,ut=r=>{const t=r.conflicts??0;return r.calls===0?"—":t===0?"0":`${t.toString()} (${(t/r.calls*100).toFixed(1)}%)`},ht={calls:(r,t)=>t.calls-r.calls,recent:(r,t)=>t.lastCalledAt-r.lastCalledAt,slowest:(r,t)=>t.maxDurationMs-r.maxDurationMs},Dt=r=>{const t=W(47),{functions:_,initialShardKey:R}=r,s=ot(),[o,U]=q(R??""),[i,B]=q("recent");let S;t[0]!==o?(S=o.trim(),t[0]=o,t[1]=S):S=t[1];const T=nt(S,400);let M;t[2]===Symbol.for("react.memo_cache_sentinel")?(M={},t[2]=M):M=t[2];let w;t[3]!==T?(w={live:!0,shardKey:T},t[3]=T,t[4]=w):w=t[4];const{data:H,error:c,errorSource:$,liveError:v}=lt(it.getFunctionStats,M,w),b=H?.functions??null;let E;t[5]!==_?(E=new Map((_??[]).map(ft)),t[5]=_,t[6]=E):E=t[6];const K=E;let C;t[7]===Symbol.for("react.memo_cache_sentinel")?(C=k=>{B(k.currentTarget.dataset.sort)},t[7]=C):C=t[7];const Q=C;let F;if(t[8]!==c||t[9]!==$||t[10]!==K||t[11]!==v||t[12]!==o||t[13]!==i||t[14]!==b||t[15]!==s){const k=b===null?[]:b.toSorted(ht[i]);let d;t[17]!==s?(d=s("Recent"),t[17]=s,t[18]=d):d=t[18];let m;t[19]!==d?(m={key:"recent",label:d},t[19]=d,t[20]=m):m=t[20];let u;t[21]!==s?(u=s("Most called"),t[21]=s,t[22]=u):u=t[22];let h;t[23]!==u?(h={key:"calls",label:u},t[23]=u,t[24]=h):h=t[24];let f;t[25]!==s?(f=s("Slowest"),t[25]=s,t[26]=f):f=t[26];let p;t[27]!==f?(p={key:"slowest",label:f},t[27]=f,t[28]=p):p=t[28];let I;t[29]!==h||t[30]!==p||t[31]!==m?(I=[m,h,p],t[29]=h,t[30]=p,t[31]=m,t[32]=I):I=t[32];const L=I;let x;t[33]!==o?(x=e(V,{onChange:U,testId:"fs-shard-input",value:o}),t[33]=o,t[34]=x):x=t[34];let g;t[35]!==v?(g=e(J,{message:v,prefix:"fs"}),t[35]=v,t[36]=g):g=t[36];let N;t[37]!==L||t[38]!==i?(N=e("div",{className:"ml-auto flex items-center gap-1",role:"group",children:L.map(a=>e(Y,{"data-sort":a.key,"data-testid":`fs-sort-${a.key}`,onClick:Q,size:"sm",type:"button",variant:i===a.key?"secondary":"ghost",children:a.label},a.key))}),t[37]=L,t[38]=i,t[39]=N):N=t[39];let A;t[40]!==x||t[41]!==g||t[42]!==N?(A=y("div",{className:"flex flex-wrap items-center gap-2",children:[x,g,N]}),t[40]=x,t[41]=g,t[42]=N,t[43]=A):A=t[43];let D;t[44]!==c||t[45]!==$?(D=c!==null&&e(G,{error:$,testId:"fs-error"}),t[44]=c,t[45]=$,t[46]=D):D=t[46],F=y("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-stats",children:[A,D,b!==null&&k.length===0&&c===null&&e(et,{description:s("Per-function call counts, error rates, and latency land here after your first request."),icon:y("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[e("path",{d:"M3 3v18h18"}),e("path",{d:"M7 14l4-4 3 3 5-6"})]}),testId:"fs-empty",title:s("No functions have run on this shard yet.")}),k.length>0&&e(Z,{className:"overflow-hidden py-0",children:e(tt,{className:"px-0",children:y(rt,{"data-testid":"fs-table",children:[e(at,{children:y(P,{children:[e(l,{children:s("function")}),e(l,{children:s("kind")}),e(l,{className:"text-right",children:s("calls")}),e(l,{className:"text-right",children:s("errors")}),e(l,{className:"text-right",children:s("conflicts")}),e(l,{className:"text-right",children:s("avg")}),e(l,{className:"text-right",children:s("max")}),e(l,{children:s("last run")}),e(l,{children:s("last error")})]})}),e(st,{children:k.map(a=>{const j=K.get(a.path);return y(P,{"data-testid":`fs-row-${a.path}`,children:[e(n,{className:"font-medium",children:a.path}),e(n,{children:j===void 0?e("span",{className:"text-muted-foreground",children:"—"}):e(X,{variant:dt[j],children:j})}),e(n,{className:"text-right tabular-nums",children:a.calls}),e(n,{className:z("text-right tabular-nums",a.errors>0&&"text-destructive"),children:mt(a)}),e(n,{className:z("text-right tabular-nums",(a.conflicts??0)>0&&"text-warning"),children:ut(a)}),e(n,{className:"text-right tabular-nums",children:a.calls===0?"—":O(a.totalDurationMs/a.calls)}),e(n,{className:"text-right tabular-nums",children:a.calls===0?"—":O(a.maxDurationMs)}),e(n,{className:"text-muted-foreground",children:ct(a.lastCalledAt,"—")}),e(n,{className:"max-w-[24ch] truncate text-destructive",title:a.lastErrorMessage??void 0,children:a.lastErrorMessage??e("span",{className:"text-muted-foreground",children:"—"})})]},a.path)})})]})})})]}),t[8]=c,t[9]=$,t[10]=K,t[11]=v,t[12]=o,t[13]=i,t[14]=b,t[15]=s,t[16]=F}else F=t[16];return F};function ft(r){return[r.path,r.kind]}export{Dt as FunctionStatsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as fe}from"react/compiler-runtime";import{useLunora as pe}from"@lunora/react";import{useState as b,useRef as P,useEffect as T,useCallback as he,useMemo as ge}from"react";import xe from"../packem_shared/ConnectionBadge-DOk0CQWo.js";import{L as ve}from"../packem_shared/live-status-CGW2JHf_.js";import{g as C}from"../packem_shared/badge-BbuuAio7.js";import{c as k}from"../packem_shared/card-CIDGUN6K.js";import{K as be}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useT as Ne}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as y}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{f as B,i as ye,c as Z,e as ee,a as M}from"../packem_shared/internal-AtZ4bTal.js";import{l as we}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as S}from"../packem_shared/utils-bhneXptQ.js";import{shardsToAggregate as ke}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{S as G}from"../packem_shared/sparkline-DtcZoU48.js";import{jsxs as i,jsx as s}from"react/jsx-runtime";const te={completed:0,failed:2,in_progress:1},Se=l=>{let e=0,r=0,t=0,n=0;const u=[];for(const{metrics:m}of l){if(m===null){n+=1;continue}t+=1,e+=m.requests,r+=m.errors,u.push(...m.history??[])}return{errors:r,failed:n,history:u,reachable:t,requests:e}},Me=l=>{const e=new Map;for(const r of l)for(const t of r){const n=e.get(t.path);if(n===void 0){e.set(t.path,{...t});continue}n.calls+=t.calls,n.errors+=t.errors,n.totalDurationMs+=t.totalDurationMs,n.scans=(n.scans??0)+(t.scans??0),n.maxDurationMs=Math.max(n.maxDurationMs,t.maxDurationMs),n.lastCalledAt=Math.max(n.lastCalledAt,t.lastCalledAt),(t.lastErrorAt??0)>(n.lastErrorAt??0)&&(n.lastErrorAt=t.lastErrorAt,n.lastErrorMessage=t.lastErrorMessage)}return[...e.values()]},qe=l=>{const e=new Map;for(const r of l)for(const t of r){const n=e.get(t.id);if(n===void 0){e.set(t.id,t);continue}const u=te[t.status]-te[n.status];(u>0||u===0&&(t.updatedAt??0)>(n.updatedAt??0))&&e.set(t.id,t)}return[...e.values()]},Ae=M(y.getAuthMetrics),Ee=M(y.getFunctionStats),je=M(y.getLogs),De=M(y.getMetrics),Ie=M(y.migrationStatus),Le=5,re=2e3,$e=5,se=.01,ae=.05,Pe=.1,Te=.3,Ce=1,Fe=50,V=(l,e,r)=>l>=r?"crit":l>=e?"warn":"ok",Re=(l,e,r)=>l>=r?"crit":l>=e?"warn":"ok",Oe={crit:"destructive",ok:"secondary",warn:"default"},F=(l,e)=>e===0?"—":`${(l/e*100).toFixed(1)}%`,_e=l=>{const e=new Map;for(const t of l??[]){const n=e.get(t.bucketMs)??{calls:0,errors:0};n.calls+=t.calls,n.errors+=t.errors,e.set(t.bucketMs,n)}const r=[...e.entries()].toSorted((t,n)=>t[0]-n[0]);return{errors:r.map(([,t])=>t.errors),requests:r.map(([,t])=>t.calls)}},ze=l=>{let e=0,r=0;for(const n of l)n.status==="failed"?e+=1:n.status==="in_progress"&&(r+=1);let t="ok";return e>0?t="crit":r>0&&(t="warn"),{failed:e,level:t,running:r}},Ke=(l,e)=>l.failed>0?e("{count} failed",{count:l.failed.toString()}):l.running>0?e("{count} running",{count:l.running.toString()}):e("OK"),le={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ne={crit:"text-destructive",ok:"text-foreground",warn:"text-warning"},He={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Ue=l=>l.includes("crit")?"crit":l.includes("warn")?"warn":"ok",R=l=>{const e=fe(19),{chart:r,label:t,level:n,testId:u,value:m}=l,c=le[n];let p;e[0]!==c?(p=S("size-1.5 shrink-0 rounded-full",c),e[0]=c,e[1]=p):p=e[1];let f;e[2]!==p?(f=s("span",{"aria-hidden":"true",className:p}),e[2]=p,e[3]=f):f=e[3];let h;e[4]!==t||e[5]!==f?(h=i("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[f,t]}),e[4]=t,e[5]=f,e[6]=h):h=e[6];const N=ne[n];let d;e[7]!==N?(d=S("truncate text-2xl font-semibold tabular-nums",N),e[7]=N,e[8]=d):d=e[8];let o;e[9]!==d||e[10]!==u||e[11]!==m?(o=s("span",{className:d,"data-testid":u,children:m}),e[9]=d,e[10]=u,e[11]=m,e[12]=o):o=e[12];let g;e[13]!==r||e[14]!==o?(g=i("div",{className:"flex items-center justify-between gap-3",children:[o,r]}),e[13]=r,e[14]=o,e[15]=g):g=e[15];let x;return e[16]!==h||e[17]!==g?(x=s(k,{className:"gap-0 py-0",children:i("div",{className:"flex flex-col gap-2.5 p-4",children:[h,g]})}),e[16]=h,e[17]=g,e[18]=x):x=e[18],x},Be=async(l,e,r)=>{const t=await Promise.all(r.map(d=>{const o=Z(d);return Promise.allSettled([l.query(De,{},o),l.query(Ee,{},o),l.query(Ie,{},o)])})),n=Z(e),u=typeof l.schedulerStatus=="function"?l.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[m,c,p]=await Promise.allSettled([l.query(je,{},n),l.query(Ae,{},n),u]),f=t.map(([d,o,g])=>({functions:o.status==="fulfilled"?o.value.functions:[],metrics:d.status==="fulfilled"?d.value:null,migrations:g.status==="fulfilled"?g.value.migrations:[]})),h=Se(f),N=t[0]?.[0];return{auth:c.status==="fulfilled"?c.value:null,entries:m.status==="fulfilled"?m.value.entries:[],functions:Me(f.map(d=>d.functions)),logsError:m.status==="rejected"?ee(m.reason):null,metricsError:h.reachable===0&&N?.status==="rejected"?ee(N.reason):null,migrations:qe(f.map(d=>d.migrations)),scheduler:p.status==="fulfilled"?p.value:null,totals:h}},ot=({initialShardKey:l})=>{const e=pe(),r=Ne(),[t,n]=b([]),[u,m]=b(null),[c,p]=b(null),[f,h]=b(null),[N,d]=b([]),[o,g]=b(null),[x,ie]=b(null),[oe,ce]=b([]),[w]=b(we),q=P(!1),O=P(!0);T(()=>(O.current=!0,()=>{O.current=!1}),[]);const A=l??"",E=he(async()=>{if(q.current)return;q.current=!0;const a=await Be(e,A,ke(A,w));if(!O.current){q.current=!1;return}p(a.totals),h(a.metricsError),d(a.functions),ce(a.migrations),n(a.entries),m(a.logsError),g(a.auth),ie(a.scheduler),q.current=!1},[e,w,A]);T(()=>{B(E())},[E]);const _=P(0),j=P(null),de=()=>{const a=Date.now()-_.current;if(a>=re){_.current=Date.now(),B(E());return}j.current??=setTimeout(()=>{j.current=null,_.current=Date.now(),B(E())},re-a)};T(()=>()=>{j.current!==null&&clearTimeout(j.current)},[]);const{data:J,liveError:ue}=be(y.getMetrics,{},{live:!0,shardKey:A});T(()=>{J!==void 0&&de()},[J]);const z=t.filter(a=>a.level==="error"),K=z.slice(0,Le),D=_e(c?.history),Q=ge(()=>{const a=o?.history??[];return{attempts:a.map(v=>v.attempts),failures:a.map(v=>v.failures)}},[o?.history]),W=N.filter(a=>a.calls>0).toSorted((a,v)=>v.errors/v.calls-a.errors/a.calls||v.calls-a.calls).slice(0,$e),H=ze(oe),me=c===null||c.requests===0?0:c.errors/c.requests,U=V(me,se,ae),X=o===null?"ok":V(o.failureRate,Pe,Te),Y=x===null?"ok":Re(x.backlog,Ce,Fe),I=Ue([U,X,Y,H.level]);let L,$;return I==="crit"?(L=r("Critical"),$=r("One or more service levels are breached.")):I==="warn"?(L=r("Degraded"),$=r("Some service levels need attention.")):(L=r("All systems healthy"),$=r("All service levels are within target.")),i("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[i(k,{className:"gap-0 py-0",children:[i("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[i("div",{className:"flex items-center gap-3",children:[s("span",{"aria-hidden":"true",className:S("flex size-10 shrink-0 items-center justify-center rounded-full",He[I]),children:s("span",{className:S("size-3 rounded-full",le[I])})}),i("div",{className:"grid leading-tight",children:[s("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:L}),s("span",{className:"text-[13px] text-muted-foreground",children:$})]})]}),i("div",{className:"flex flex-wrap items-center gap-4",children:[i("div",{className:"text-end",children:[s("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Requests")}),i("div",{className:"flex items-center justify-end gap-2",children:[D.requests.length>=2&&s(G,{ariaLabel:r("Requests over time"),className:"h-6 w-20 text-foreground",series:D.requests,testId:"hl-spark-requests"}),s("span",{className:"text-lg font-semibold tabular-nums text-foreground","data-testid":"hl-requests",children:(c?.requests??0).toString()})]})]}),s("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),i("div",{className:"text-end",children:[s("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Error rate")}),s("div",{className:S("text-lg font-semibold tabular-nums",ne[U]),"data-testid":"hl-error-rate",children:c===null?"—":F(c.errors,c.requests)})]}),s("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),i("div",{className:"flex items-center gap-2",children:[s(xe,{}),s(ve,{message:ue,prefix:"hl"})]})]})]}),f!==null&&s("div",{className:"border-t border-border bg-destructive/5 px-4 py-2 text-sm text-destructive","data-testid":"hl-metrics-error",role:"alert",children:f})]}),i("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[s(R,{chart:D.errors.length>=2?s(G,{ariaLabel:r("Errors over time"),className:"h-7 w-20 text-destructive",series:D.errors,testId:"hl-spark-errors"}):void 0,label:r("Error rate"),level:U,testId:"hl-slo-errorrate",value:c===null?"—":F(c.errors,c.requests)}),s(R,{chart:Q.failures.length>=2?s(G,{ariaLabel:r("Auth failures over time"),className:"h-7 w-20 text-destructive",series:Q.failures,testId:"hl-spark-auth"}):void 0,label:r("Auth failures"),level:X,testId:"hl-slo-auth",value:o===null?"—":F(o.failures,o.attempts)}),s(R,{label:r("Scheduler backlog"),level:Y,testId:"hl-slo-backlog",value:x===null?"—":x.backlog.toString()}),s(R,{label:r("Migrations"),level:H.level,testId:"hl-slo-migrations",value:Ke(H,r)})]}),i("div",{className:"grid gap-3 lg:grid-cols-2",children:[i(k,{className:"gap-0 py-0","data-testid":"hl-functions",children:[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:r("Functions by error rate")})}),W.length===0?s("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-functions-empty",children:r("No function activity yet.")}):s("ul",{className:"divide-y divide-border",children:W.map(a=>i("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs","data-testid":"hl-fn-row",children:[s("span",{className:"truncate font-mono text-foreground",children:a.path}),i("span",{className:"flex shrink-0 items-center gap-2",children:[s("span",{className:"tabular-nums text-muted-foreground",children:r("{count} calls",{count:a.calls.toString()})}),s(C,{variant:Oe[V(a.errors/a.calls,se,ae)],children:F(a.errors,a.calls)})]})]},a.path))})]}),i(k,{className:"gap-0 py-0",children:[i("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Recent errors")}),s(C,{"data-testid":"hl-error-count",variant:z.length>0?"destructive":"outline",children:z.length})]}),u!==null&&s("p",{className:"px-4 py-8 text-center text-sm text-destructive","data-testid":"hl-logs-error",role:"alert",children:u}),u===null&&K.length===0&&s("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-errors-empty",children:r("No recent errors.")}),K.length>0&&s("ul",{className:"divide-y divide-border",children:K.map((a,v)=>i("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[i("span",{className:"flex items-center gap-2",children:[s("time",{className:"shrink-0 text-muted-foreground",children:ye(a.timestamp)}),a.functionPath!==void 0&&s("span",{className:"truncate font-mono text-foreground",children:a.functionPath})]}),s("span",{className:"text-destructive",children:a.message})]},`${a.timestamp.toString()}-${v.toString()}`))})]})]}),i(k,{className:"gap-0 py-0",children:[i("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Shards seen")}),s(C,{"data-testid":"hl-shard-count",variant:"outline",children:w.length})]}),w.length>0&&s("ul",{className:"flex flex-wrap gap-1.5 p-4",children:w.map(a=>s("li",{"data-testid":"hl-shard",children:s(C,{variant:"secondary",children:a})},a))})]})]})};export{ot as HealthPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as B}from"react/compiler-runtime";import{useLunora as Z}from"@lunora/react";import{useNavigate as ee}from"@tanstack/react-router";import{useState as A,useRef as te,useCallback as R,useEffect as j,useMemo as ne}from"react";import{ShardInput as ae}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as re}from"../packem_shared/button-BkCrNcAs.js";import{K as H}from"../packem_shared/use-admin-query-Di3fLE8H.js";import ie from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as T}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{f as N,c as q,a as J}from"../packem_shared/internal-AtZ4bTal.js";import{r as se}from"../packem_shared/shard-history-DMEW5VBE.js";import{O as U,A as oe}from"../packem_shared/advisor-view-DaCX9Jy5.js";import{ConfirmButton as le}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{jsx as w}from"react/jsx-runtime";import{deriveInsights as ce}from"../packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{runAdvisor as de,RUNTIME_LINTS as ue}from"@lunora/advisor";const fe=t=>{const{suggestedIndex:e,table:r}=t;return!(typeof r!="string"||r.length===0||typeof e!="object"||e===null||!Array.isArray(e.fields)||e.fields.length===0)},me=(t,e,r)=>{const n=`"${t}"`,a=`"${e}"`,l=r.map(o=>`"${o}"`).join(", ");return`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${l});`},he=t=>{const e=B(19),{fields:r,indexName:n,table:a,testId:l}=t,o=M(),[x,d]=A(!1);let u;e[0]!==r||e[1]!==n||e[2]!==a?(u=()=>{const v="navigator"in globalThis?globalThis.navigator.clipboard:void 0;if(v===void 0)return;const g=me(a,n,r);N(v.writeText(g)),d(!0)},e[0]=r,e[1]=n,e[2]=a,e[3]=u):u=e[3];const h=u;if(x){const v=`${l}-applied`;let g;e[4]!==o?(g=o("CREATE INDEX SQL copied to clipboard."),e[4]=o,e[5]=g):g=e[5];let S;return e[6]!==v||e[7]!==g?(S=w("span",{className:"text-xs text-muted-foreground","data-testid":v,children:g}),e[6]=v,e[7]=g,e[8]=S):S=e[8],S}let f;e[9]!==o?(f=o("Apply?"),e[9]=o,e[10]=f):f=e[10];let m;e[11]!==o||e[12]!==a?(m=o("Apply index on {table}",{table:a}),e[11]=o,e[12]=a,e[13]=m):m=e[13];let p;return e[14]!==h||e[15]!==f||e[16]!==m||e[17]!==l?(p=w(le,{confirmLabel:f,onConfirm:h,testId:l,children:m}),e[14]=h,e[15]=f,e[16]=m,e[17]=l,e[18]=p):p=e[18],p},pe=(t,e)=>{const r=new Map;for(const n of e){const a=`${n.table} ${n.index}`;r.set(a,(r.get(a)??0)+n.reads)}return t.map(n=>({index:n.index,reads:r.get(`${n.table} ${n.index}`)??0,table:n.table}))},ge=t=>{const e=new Map;for(const r of t)for(const n of r.scannedTables??[])e.set(n.table,(e.get(n.table)??0)+n.scans);return[...e].map(([r,n])=>({scans:n,table:r}))},be=(t,e)=>e.map(r=>({index:r.name,table:t})),ve=t=>{const e=pe(t.declaredIndexes??[],t.indexHits??[]),r=ge(t.functions??[]),n=t.shardTraffic??[],a=t.analyticsMetrics,l=a&&a.indexHits.length>0?a.indexHits:e,o=a&&a.tableScans.length>0?a.tableScans:r,x=a&&a.shardTraffic.length>0?a.shardTraffic:n,d=de({indexHits:l,schema:{tables:[]},shardTraffic:x,tableScans:o},{lints:ue,source:"runtime"}),u=t.suppressHotScanTables;return(u===void 0?d:d.filter(h=>!(h.metadata.kind==="hot_scan"&&typeof h.metadata.table=="string"&&u.has(h.metadata.table)))).map(h=>U(h))},xe=J(T.listTables),ye=J(T.listTableIndexes),K=t=>`${(t*100).toFixed(1)}%`,D=t=>`${(t/1e3).toFixed(2)}s`,$e=t=>{if(t.length<=1)return t[0]??"";const e=t[t.length-1]??"";return`${t.slice(0,-1).join(", ")} and ${e}`},we=(t,e)=>({"high-error-rate":t("High error rate"),"high-evictions":t("High cache eviction rate"),"high-write-contention":t("High write contention"),"low-cache-hit-rate":t("Low cache hit rate"),"missing-index":t("Missing index"),"slow-function":t("Slow function")})[e.kind],X=(t,e)=>({"high-error-rate":t("{rate} of calls failed.",{rate:K(e.value)}),"high-evictions":t("{count} entries evicted recently.",{count:e.value}),"high-write-contention":t("{rate} of calls hit a write conflict — consider sharding to cut contention.",{rate:K(e.value)}),"low-cache-hit-rate":t("{rate} hit rate over recent traffic.",{rate:K(e.value)}),"missing-index":t("Slowest call took {duration} — it full-scanned {tables} with no index.",{duration:D(e.value),tables:$e(e.tables??[])}),"slow-function":t("Slowest call took {duration}.",{duration:D(e.value)})})[e.kind],Se=t=>{const e=B(10),{onJump:r,table:n}=t,a=M();let l;e[0]!==r||e[1]!==n?(l=()=>{r(n)},e[0]=r,e[1]=n,e[2]=l):l=e[2];const o=l,x=`in-add-index-${n}`;let d;e[3]!==a||e[4]!==n?(d=a("Add index on {table}",{table:n}),e[3]=a,e[4]=n,e[5]=d):d=e[5];let u;return e[6]!==o||e[7]!==x||e[8]!==d?(u=w(re,{"data-testid":x,onClick:o,size:"sm",type:"button",variant:"outline",children:d}),e[6]=o,e[7]=x,e[8]=d,e[9]=u):u=e[9],u},De=({initialShardKey:t,loadShardTraffic:e})=>{const r=Z(),n=ee(),a=M(),[l,o]=A(t??""),[x,d]=A(null),[u,h]=A(null),f=ie(l.trim(),400),m=te(""),p=H(T.getMetrics,{},{live:!0,shardKey:f}),v=H(T.getFunctionStats,{},{live:!0,shardKey:f}),g=H(T.getAdvisories,{},{live:!0,shardKey:f}),S=p.data??null,C=v.data?.functions??null,F=g.data?.advisories??null,z=p.data?.indexHits??null,L=p.error!==null&&v.error!==null?p.error:null,P=e??(i=>r.shardTraffic(i)),V=async(i,$)=>{const s=i[0];if(s===void 0||s===""){m.current===$&&h(null);return}try{const y=await P(s);if(m.current!==$)return;const b=new Map;for(const c of y.shards)b.has(c.shardKey)||b.set(c.shardKey,{requests:c.requests,shardKey:c.shardKey});h([...b.values()])}catch{m.current===$&&h(null)}},I=R(async i=>{m.current=i;let $=[];try{const s=await r.query(xe,{},q(i));if(m.current!==i)return;se(i),$=s.map(c=>c.name);const y=await Promise.allSettled(s.map(async c=>[c.name,await r.query(ye,{table:c.name},q(i))]));if(m.current!==i)return;const b=[];for(const c of y)if(c.status==="fulfilled"){const[E,Y]=c.value;b.push(...be(E,Y.indexes))}d(b)}catch{m.current===i&&d(null)}await V($,i)},[r]);j(()=>{N(I(f))},[f,I]),j(()=>{const i=()=>{document.visibilityState==="visible"&&(p.refetch(),v.refetch(),g.refetch(),N(I(f)))};return document.addEventListener("visibilitychange",i),()=>{document.removeEventListener("visibilitychange",i)}},[g,f,I,v,p]);const _=R(i=>{N(n({search:{table:i},to:"/schema"}))},[n]),k=ce(S,C),G=new Set(k.filter(i=>i.kind==="missing-index").flatMap(i=>i.tables??[])),O=ve({declaredIndexes:x??[],functions:C,indexHits:z,shardTraffic:u,suppressHotScanTables:G}),Q=ne(()=>{const i=k.map(s=>{const y=s.kind==="missing-index"?s.tables??[]:[];return{action:y.length>0?y.map(b=>w(Se,{onJump:_,table:b},b)):void 0,description:s.message===void 0?X(a,s):`${X(a,s)} — ${s.message}`,entity:s.fn,issueType:we(a,s),key:`${s.kind}:${s.fn??""}`,level:s.severity}}),$=new Set(["unindexed_foreign_key","unindexed_relation_target"]);return[...(F??[]).map(s=>{const y=U(s);if($.has(s.name)&&fe(s.metadata)){const{table:b,suggestedIndex:c}=s.metadata,E=`in-apply-index-${b}-${c.name}`;return{...y,action:w(he,{fields:c.fields,indexName:c.name,table:b,testId:E})}}return y}),...O,...i]},[F,k,_,O,a]),W=w(ae,{onChange:o,testId:"in-shard-input",value:l});return w(oe,{error:L,errorSource:L===null?void 0:p.errorSource,rows:Q,testId:"lunora-insights",toolbar:W})};export{De as InsightsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as M}from"react/compiler-runtime";import{useVirtualizer as qe}from"@tanstack/react-virtual";import{useState as $,useReducer as Me,useRef as ie,useEffect as de,useMemo as Ae}from"react";import{f as Q}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Oe}from"../packem_shared/error-alert-B59DnrDI.js";import{L as Fe}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as De}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as Y}from"../packem_shared/badge-BbuuAio7.js";import{E as B}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as _}from"../packem_shared/input-JHu63lTv.js";import{K as re}from"../packem_shared/use-admin-query-Di3fLE8H.js";import G from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as ce}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as te}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{b as ue}from"../packem_shared/cf-links-gbDy51nR.js";import{r as Ke}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as q}from"../packem_shared/utils-bhneXptQ.js";import{l as Ue}from"../packem_shared/virtual-rect-1o1veP7R.js";import{useLunora as Ve}from"@lunora/react";import{u as ze}from"../packem_shared/button-BkCrNcAs.js";import{n as je,d as Be,m as me,p as P,f as Ge,u as T}from"../packem_shared/table-DdJBrClo.js";import{f as ae,l as We,e as le}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as t,jsxs as w,Fragment as Qe}from"react/jsx-runtime";const he=["trace","debug","log","info","warn","error","fatal"],Ye="LOG_ARCHIVE_NOT_CONFIGURED",ge={debug:"secondary",error:"destructive",fatal:"destructive",info:"outline",log:"outline",trace:"outline",warn:"secondary"},He={cursor:void 0,error:null,loading:!1,notConfigured:!1,rows:null},Je=(l,e)=>{switch(e.type){case"append":return{...l,cursor:e.cursor,error:null,loading:!1,rows:[...l.rows??[],...e.rows]};case"failed":return{cursor:void 0,error:e.message,loading:!1,notConfigured:!1,rows:null};case"loaded":return{cursor:e.cursor,error:null,loading:!1,notConfigured:!1,rows:e.rows};case"loading":return{...l,error:null,loading:!0,notConfigured:!1};case"notConfigured":return{cursor:void 0,error:null,loading:!1,notConfigured:!0,rows:null};case"pageFailed":return{...l,error:e.message,loading:!1};default:return l}},Xe=l=>{const e=M(33),{row:r}=l;let s;e[0]!==r.fields?(s=Q(r.fields),e[0]=r.fields,e[1]=s):s=e[1];const n=s,a=`lg-archive-row-${String(r.ts)}`;let i;e[2]!==r.ts?(i=new Date(r.ts).toLocaleString(),e[2]=r.ts,e[3]=i):i=e[3];let u;e[4]!==i?(u=t(T,{className:"tabular-nums whitespace-nowrap text-xs text-muted-foreground",children:i}),e[4]=i,e[5]=u):u=e[5];const v=ge[r.level];let c;e[6]!==r.level||e[7]!==v?(c=t(T,{children:t(Y,{variant:v,children:r.level})}),e[6]=r.level,e[7]=v,e[8]=c):c=e[8];let d;e[9]!==r.functionPath?(d=t(T,{className:"font-mono text-xs",children:r.functionPath}),e[9]=r.functionPath,e[10]=d):d=e[10];let b;e[11]!==r.message?(b=t("div",{className:"truncate",title:r.message,children:r.message}),e[11]=r.message,e[12]=b):b=e[12];let f;e[13]!==n?(f=n!==""&&t("div",{className:"truncate font-mono text-[11px] text-muted-foreground",title:n,children:n}),e[13]=n,e[14]=f):f=e[14];let m;e[15]!==b||e[16]!==f?(m=w(T,{className:"max-w-md",children:[b,f]}),e[15]=b,e[16]=f,e[17]=m):m=e[17];const h=r.traceId??"—";let p;e[18]!==h?(p=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:h}),e[18]=h,e[19]=p):p=e[19];const L=r.shardKey??"—";let g;e[20]!==L?(g=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:L}),e[20]=L,e[21]=g):g=e[21];const x=r.userId??"—";let y;e[22]!==x?(y=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:x}),e[22]=x,e[23]=y):y=e[23];let C;return e[24]!==m||e[25]!==p||e[26]!==g||e[27]!==y||e[28]!==a||e[29]!==u||e[30]!==c||e[31]!==d?(C=w(me,{"data-testid":a,children:[u,c,d,m,p,g,y]}),e[24]=m,e[25]=p,e[26]=g,e[27]=y,e[28]=a,e[29]=u,e[30]=c,e[31]=d,e[32]=C):C=e[32],C},Ze=({shardKey:l})=>{const e=Ve(),r=ce(),[s,n]=$(""),[a,i]=$(""),[u,v]=$(""),[{cursor:c,error:d,loading:b,notConfigured:f,rows:m},h]=Me(Je,He),p=G(s.trim(),400),L=G(a.trim(),400),g={...p===""?{}:{functionPathPrefix:p},...u===""?{}:{minLevel:u},...l===""?{}:{shardKey:l},...L===""?{}:{userId:L}},x=JSON.stringify(g),y=ie(x);de(()=>{const N={cancelled:!1};return y.current=x,ae((async()=>{h({type:"loading"});try{const k=await e.queryLogArchive(g);N.cancelled||h({cursor:k.nextCursor,rows:k.rows,type:"loaded"})}catch(k){N.cancelled||h(We(k)===Ye?{type:"notConfigured"}:{message:le(k),type:"failed"})}})()),()=>{N.cancelled=!0}},[e,x]);const C=async()=>{if(c===void 0)return;const N=x;h({type:"loading"});try{const k=await e.queryLogArchive({...g,cursor:c});y.current===N&&h({cursor:k.nextCursor,rows:k.rows,type:"append"})}catch(k){y.current===N&&h({message:le(k),type:"pageFailed"})}},R=N=>{n(N.target.value)},S=N=>{i(N.target.value)},I=N=>{v(N.target.value)},E=()=>{ae(C())};return f?t(B,{action:t("a",{className:"text-sm text-primary underline-offset-4 hover:underline",href:ue,rel:"noreferrer",target:"_blank",children:r("Open in Cloudflare")}),description:r("Wire pipelineLogSink to a Cloudflare Pipeline → R2 Data Catalog table and set R2_SQL_ACCOUNT_ID, R2_SQL_TOKEN, R2_SQL_BUCKET to browse the durable log archive here."),testId:"lg-archive-not-configured",title:r("Log archive not configured")}):w("div",{className:"flex flex-col gap-4","data-testid":"lg-archive",children:[w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":r("Function path prefix"),className:"h-8 w-48","data-testid":"lg-archive-path",onChange:R,placeholder:r("function path…"),value:s}),t(_,{"aria-label":r("User id"),className:"h-8 w-40","data-testid":"lg-archive-user",onChange:S,placeholder:r("user id…"),value:a}),w("select",{"aria-label":r("Minimum level"),className:"h-8 rounded-md border border-border bg-background px-2 text-sm","data-testid":"lg-archive-min-level",onChange:I,value:u,children:[t("option",{value:"",children:r("min level")}),he.map(N=>t("option",{value:N,children:N},N))]})]}),d!==null&&t("p",{className:"text-sm text-destructive","data-testid":"lg-archive-error",role:"alert",children:d}),b&&m===null&&d===null&&t("p",{className:"text-sm text-muted-foreground","data-testid":"lg-archive-loading",children:r("Loading…")}),m!==null&&m.length===0&&t(B,{description:r("No archived logs match these filters. The durable archive fills as pipelineLogSink flushes records to R2."),testId:"lg-archive-empty",title:r("No archived logs.")}),m!==null&&m.length>0&&t("div",{className:"overflow-hidden rounded-xl border border-border shadow-xs",children:w(je,{"data-testid":"lg-archive-table",children:[t(Be,{children:w(me,{children:[t(P,{children:r("Time")}),t(P,{children:r("Level")}),t(P,{children:r("Function")}),t(P,{children:r("Message")}),t(P,{children:r("Trace")}),t(P,{children:r("Shard")}),t(P,{children:r("User")})]})}),t(Ge,{children:m.map((N,k)=>t(Xe,{row:N},`${String(N.ts)}-${String(k)}`))})]})}),c!==void 0&&t("div",{children:t(ze,{"data-testid":"lg-archive-more",disabled:b,onClick:E,size:"sm",variant:"outline",children:r(b?"Loading…":"Load more")})})]})},W=400,er=36,rr={height:W,overflow:"auto"},fe={left:0,position:"absolute",top:0,width:"100%"},tr={error:"destructive",ok:"secondary"},ar=l=>{const e=M(26),{entry:r,index:s,measureRef:n,start:a}=l,i=`translateY(${String(a)}px)`;let u;e[0]!==i?(u={...fe,transform:i},e[0]=i,e[1]=u):u=e[1];const v=u;let c;e[2]!==r.fields?(c=Q(r.fields),e[2]=r.fields,e[3]=c):c=e[3];const d=c;let b;e[4]!==r.timestamp?(b=new Date(r.timestamp).toLocaleString(),e[4]=r.timestamp,e[5]=b):b=e[5];let f;e[6]!==b?(f=t("span",{className:"w-44 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:b}),e[6]=b,e[7]=f):f=e[7];const m=ge[r.level];let h;e[8]!==r.level||e[9]!==m?(h=t("span",{className:"w-20 shrink-0",role:"gridcell",children:t(Y,{variant:m,children:r.level})}),e[8]=r.level,e[9]=m,e[10]=h):h=e[10];const p=r.functionPath??"—";let L;e[11]!==p?(L=t("span",{className:"w-48 shrink-0 truncate text-muted-foreground",role:"gridcell",children:p}),e[11]=p,e[12]=L):L=e[12];let g;e[13]!==d?(g=d===""?null:t("span",{className:"ml-2 text-muted-foreground","data-testid":"lg-fields",children:d}),e[13]=d,e[14]=g):g=e[14];let x;e[15]!==r.message||e[16]!==g?(x=w("span",{className:"flex-1 truncate",role:"gridcell",children:[r.message,g]}),e[15]=r.message,e[16]=g,e[17]=x):x=e[17];let y;return e[18]!==s||e[19]!==n||e[20]!==v||e[21]!==x||e[22]!==f||e[23]!==h||e[24]!==L?(y=w("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":s,"data-testid":"lg-row",ref:n,role:"row",style:v,children:[f,h,L,x]}),e[18]=s,e[19]=n,e[20]=v,e[21]=x,e[22]=f,e[23]=h,e[24]=L,e[25]=y):y=e[25],y},oe=l=>l.length===0?"—":l.join(", "),lr=l=>{const e=M(37),{entry:r,index:s,measureRef:n,start:a}=l,i=`translateY(${String(a)}px)`;let u;e[0]!==i?(u={...fe,transform:i},e[0]=i,e[1]=u):u=e[1];const v=u;let c;e[2]!==r.ts?(c=new Date(r.ts).toLocaleString(),e[2]=r.ts,e[3]=c):c=e[3];let d;e[4]!==c?(d=t("span",{className:"w-40 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:c}),e[4]=c,e[5]=d):d=e[5];const b=tr[r.outcome];let f;e[6]!==r.outcome||e[7]!==b?(f=t("span",{className:"w-16 shrink-0",role:"gridcell",children:t(Y,{variant:b,children:r.outcome})}),e[6]=r.outcome,e[7]=b,e[8]=f):f=e[8];let m;e[9]!==r.functionPath?(m=t("span",{className:"w-44 shrink-0 truncate",role:"gridcell",title:r.functionPath,children:r.functionPath}),e[9]=r.functionPath,e[10]=m):m=e[10];const h=r.shardKey??"—";let p;e[11]!==h?(p=t("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:h}),e[11]=h,e[12]=p):p=e[12];const L=r.userId??"—";let g;e[13]!==L?(g=t("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:L}),e[13]=L,e[14]=g):g=e[14];let x;e[15]!==r.durationMs?(x=Math.round(r.durationMs),e[15]=r.durationMs,e[16]=x):x=e[16];const y=`${String(x)}ms`;let C;e[17]!==y?(C=t("span",{className:"w-16 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:y}),e[17]=y,e[18]=C):C=e[18];let R;e[19]!==r.errorMessage||e[20]!==r.outcome||e[21]!==r.tablesRead||e[22]!==r.tablesWritten?(R=r.outcome==="error"&&r.errorMessage!==void 0?r.errorMessage:`r:${oe(r.tablesRead)} · w:${oe(r.tablesWritten)}`,e[19]=r.errorMessage,e[20]=r.outcome,e[21]=r.tablesRead,e[22]=r.tablesWritten,e[23]=R):R=e[23];let S;e[24]!==R?(S=t("span",{className:"flex-1 truncate text-muted-foreground",role:"gridcell",children:R}),e[24]=R,e[25]=S):S=e[25];let I;return e[26]!==s||e[27]!==n||e[28]!==v||e[29]!==g||e[30]!==C||e[31]!==S||e[32]!==d||e[33]!==f||e[34]!==m||e[35]!==p?(I=w("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":s,"data-testid":"lg-req-row",ref:n,role:"row",style:v,children:[d,f,m,p,g,C,S]}),e[26]=s,e[27]=n,e[28]=v,e[29]=g,e[30]=C,e[31]=S,e[32]=d,e[33]=f,e[34]=m,e[35]=p,e[36]=I):I=e[36],I},se=l=>{const{entries:e}=l??{};return Array.isArray(e)?e:[]},or=l=>{const e={};return l.functionPathPrefix.trim()!==""&&(e.functionPathPrefix=l.functionPathPrefix.trim()),l.userId.trim()!==""&&(e.userId=l.userId.trim()),l.tableTouched.trim()!==""&&(e.tableTouched=l.tableTouched.trim()),(l.outcome==="ok"||l.outcome==="error")&&(e.outcome=l.outcome),e},pe=he,sr={"5m":300*1e3,"15m":900*1e3,"1h":3600*1e3},nr=(l,e)=>{const r=e.search.trim().toLowerCase(),s=e.path.trim().toLowerCase(),n=e.range==="all"?Number.NEGATIVE_INFINITY:e.now-sr[e.range];return l.filter(a=>e.levels.size>0&&!e.levels.has(a.level)||a.timestamp<n||s!==""&&!(a.functionPath??"").toLowerCase().includes(s)?!1:r===""||a.message.toLowerCase().includes(r)||Q(a.fields).toLowerCase().includes(r))},ir="—",dr=l=>{const e=new Map,r=new Map;for(const a of l){e.set(a.level,(e.get(a.level)??0)+1);const i=a.functionPath??ir;r.set(i,(r.get(i)??0)+1)}const s=pe.filter(a=>e.has(a)).map(a=>({count:e.get(a)??0,key:a})),n=[...r.entries()].map(([a,i])=>({count:i,key:a})).toSorted((a,i)=>i.count===a.count?a.key.localeCompare(i.key):i.count-a.count);return{byLevel:s,byPath:n,total:l.length}},cr=l=>{const e=M(11),{level:r,onToggle:s,selected:n}=l;let a;e[0]!==r||e[1]!==s?(a=()=>{s(r)},e[0]=r,e[1]=s,e[2]=a):a=e[2];const i=a,u=n?"border-border bg-muted font-medium":"border-input text-muted-foreground";let v;e[3]!==u?(v=q("rounded-md border px-2 py-1 text-xs",u),e[3]=u,e[4]=v):v=e[4];const c=`logs-level-${r}`;let d;return e[5]!==r||e[6]!==i||e[7]!==n||e[8]!==v||e[9]!==c?(d=t("button",{"aria-pressed":n,className:v,"data-testid":c,onClick:i,type:"button",children:r}),e[5]=r,e[6]=i,e[7]=n,e[8]=v,e[9]=c,e[10]=d):d=e[10],d},ne=l=>{const e=M(7),{bucket:r}=l;let s;e[0]!==r.key?(s=t("span",{className:"truncate text-muted-foreground",role:"gridcell",children:r.key}),e[0]=r.key,e[1]=s):s=e[1];let n;e[2]!==r.count?(n=t("span",{className:"shrink-0 tabular-nums",role:"gridcell",children:r.count}),e[2]=r.count,e[3]=n):n=e[3];let a;return e[4]!==s||e[5]!==n?(a=w("div",{className:"flex items-center justify-between gap-4 px-3 py-1 font-mono text-xs","data-testid":"logs-summary-row",role:"row",children:[s,n]}),e[4]=s,e[5]=n,e[6]=a):a=e[6],a},qr=({initialShardKey:l})=>{const e=ce(),[r,s]=$("requests"),[n,a]=$(l??""),[i,u]=$(""),[v,c]=$(()=>new Set),[d,b]=$(""),[f,m]=$("all"),[h,p]=$(!1),[L,g]=$(""),[x,y]=$(""),[C,R]=$(""),[S,I]=$("all"),E=G(n.trim(),400),N=or({functionPathPrefix:L,outcome:S,tableTouched:C,userId:x}),k=re(te.getRequestLog,N,{enabled:r==="requests",live:!0,shardKey:E}),H=re(te.getLogs,{},{enabled:r==="errors",live:!0,shardKey:E}),D=r==="requests"?k:H,{error:J,errorSource:ve,isLoading:X,liveError:be}=D,xe=se(H.data),Z=se(k.data);de(()=>{D.data!==void 0&&Ke(E)},[D.data,E]);const K=nr(xe,{levels:v,now:Date.now(),path:d,range:f,search:i}),U=dr(K),V=r==="requests"?Z.length:K.length,z=r==="errors"&&h,A=Ae(()=>J!==null?"error":V===0?X?z?"summary":"list":"empty":z?"summary":"list",[V,X,J,z]),ee=ie(null),O=qe({count:V,estimateSize:()=>er,getScrollElement:()=>ee.current,initialRect:{height:W,width:800},observeElementRect:(o,j)=>Ue(o,j,W),overscan:8}),we=O.getVirtualItems(),ye={height:O.getTotalSize(),position:"relative",width:"100%"},Ne=o=>{u(o.target.value)},Le=o=>{c(j=>{const F=new Set(j);return F.has(o)?F.delete(o):F.add(o),F})},Ce=o=>{b(o.target.value)},ke=o=>{m(o.target.value)},$e=()=>{p(o=>!o)},Se=o=>{g(o.target.value)},Re=o=>{y(o.target.value)},Ie=o=>{R(o.target.value)},Ee=o=>{I(o.target.value)},Pe=()=>{s("requests"),p(!1)},Te=()=>{s("errors"),p(!1)},_e=()=>{s("archive"),p(!1)};return w("div",{className:"flex flex-col gap-4","data-testid":"lunora-logs",children:[w("div",{className:"flex flex-wrap items-center gap-2",children:[w("div",{className:"inline-flex overflow-hidden rounded-lg border border-border",role:"tablist",children:[t("button",{"aria-selected":r==="requests",className:q("px-3 py-1 text-sm",r==="requests"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-requests",onClick:Pe,role:"tab",type:"button",children:e("Requests")}),t("button",{"aria-selected":r==="errors",className:q("px-3 py-1 text-sm",r==="errors"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-errors",onClick:Te,role:"tab",type:"button",children:e("Errors")}),t("button",{"aria-selected":r==="archive",className:q("px-3 py-1 text-sm",r==="archive"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-archive",onClick:_e,role:"tab",type:"button",children:e("Archive")})]}),t(De,{onChange:a,testId:"lg-shard-input",value:n}),r!=="archive"&&t(Fe,{message:be,prefix:"lg"}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"lg-cf-link",href:ue,rel:"noreferrer",target:"_blank",children:e("Open in Cloudflare")})]}),r==="errors"&&w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":e("Search messages"),className:"h-8 w-48","data-testid":"lg-search",onChange:Ne,placeholder:e("search message"),value:i}),t(_,{"aria-label":e("Function path"),className:"h-8 w-40","data-testid":"logs-path-filter",onChange:Ce,placeholder:e("filter path"),value:d}),t("div",{"aria-label":e("Level filter"),className:"inline-flex items-center gap-1","data-testid":"logs-level-filter",role:"group",children:pe.map(o=>t(cr,{level:o,onToggle:Le,selected:v.has(o)},o))}),w("select",{"aria-label":e("Time range"),className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"logs-time-range",onChange:ke,value:f,children:[t("option",{value:"all",children:e("All time")}),t("option",{value:"5m",children:e("Last 5m")}),t("option",{value:"15m",children:e("Last 15m")}),t("option",{value:"1h",children:e("Last hour")})]}),t("button",{"aria-pressed":h,className:q("h-8 rounded-md border px-3 text-sm",h?"border-border bg-muted font-medium":"border-input text-muted-foreground"),"data-testid":"logs-summary-toggle",onClick:$e,type:"button",children:e(h?"List":"Summary")})]}),r==="requests"&&w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":e("Function path"),className:"h-8 w-44","data-testid":"lg-req-path",onChange:Se,placeholder:e("file:function"),value:L}),t(_,{"aria-label":e("User id"),className:"h-8 w-32","data-testid":"lg-req-user",onChange:Re,placeholder:e("userId"),value:x}),t(_,{"aria-label":e("Table touched"),className:"h-8 w-32","data-testid":"lg-req-table",onChange:Ie,placeholder:e("table"),value:C}),w("select",{"aria-label":e("Outcome filter"),className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"lg-req-outcome",onChange:Ee,value:S,children:[t("option",{value:"all",children:e("all")}),t("option",{value:"ok",children:e("ok")}),t("option",{value:"error",children:e("error")})]})]}),r==="archive"?t(Ze,{shardKey:E}):w(Qe,{children:[A==="error"&&t(Oe,{error:ve,testId:"lg-error"}),A==="empty"&&t(B,{description:e("Function and request logs for this shard show up here as your app handles traffic."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 5h16M4 12h16M4 19h10"})}),testId:"lg-empty",title:e("No logs.")}),A==="summary"&&w("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"logs-summary",children:[t("p",{className:"text-xs text-muted-foreground","data-testid":"logs-summary-total",children:e("{count} entries",{count:U.total})}),w("div",{children:[t("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:e("By level")}),t("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-levels",role:"grid",children:U.byLevel.map(o=>t(ne,{bucket:o},o.key))})]}),w("div",{children:[t("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:e("By function")}),t("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-paths",role:"grid",children:U.byPath.map(o=>t(ne,{bucket:o},o.key))})]})]}),A==="list"&&t("div",{className:"rounded-xl border border-border shadow-xs","data-testid":"lg-scroll",ref:ee,style:rr,children:t("div",{"aria-label":e("Recent logs"),"data-testid":"lg-table",role:"grid",style:ye,children:we.map(o=>r==="requests"?t(lr,{entry:Z[o.index],index:o.index,measureRef:O.measureElement,start:o.start},o.key):t(ar,{entry:K[o.index],index:o.index,measureRef:O.measureElement,start:o.start},o.key))})})]})]})};export{qr as LogsPanel,nr as filterLogs,dr as summarizeLogs};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useLunora as G}from"@lunora/react";import{useState as p,useMemo as b}from"react";import{E as J}from"../packem_shared/error-alert-B59DnrDI.js";import{g as Q}from"../packem_shared/badge-BbuuAio7.js";import{u as m}from"../packem_shared/button-BkCrNcAs.js";import{E as V}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as X}from"../packem_shared/input-JHu63lTv.js";import{p as Y}from"../packem_shared/scroll-area-DTEq6Jec.js";import{Separator as Z}from"@base-ui/react/separator";import{c as ee}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as d,Fragment as te}from"react/jsx-runtime";import{K as ae}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useAutoRefresh as re}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as ie}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as v}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as j,f as T,g as le,c as M,e as z,a as A}from"../packem_shared/internal-AtZ4bTal.js";function de({className:r,orientation:u="horizontal",...a}){return e(Z,{"data-slot":"separator",orientation:u,className:ee("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",r),...a})}const se=A(v.clearCapturedMail),oe=A(v.sendTestMail),ne=/https?:\/\/[^\s"'<>)]+/i,S=r=>r===void 0?void 0:ne.exec(r)?.[0],ce=r=>{if(r!==void 0)return S(r.html)??S(r.text)},me=`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:">`,ue=r=>`${me}${r}`,f=r=>r===void 0?"":Array.isArray(r)?r.join(", "):r,ze=({limit:r=100})=>{const u=G(),a=ie(),{data:N,error:w,errorSource:L,isLoading:E,refetch:x}=ae(v.getCapturedMail,{limit:r}),[y,h]=p(null),[C,k]=p(null),[n,F]=p("html"),[g,O]=p(""),s=b(()=>N?.entries??[],[N]),$=w??y,H=w===null?y:L,I=async()=>{h(null);try{await u.query(se,{},M("")),k(null),x()}catch(t){h(z(t))}},_=async()=>{h(null);try{await u.query(oe,{},M("")),x()}catch(t){h(z(t))}};re(()=>{x()},!0);const q=()=>{T(I())},P=()=>{T(_())},D=t=>{O(t.currentTarget.value)},R=t=>{const{id:l}=t.currentTarget.dataset;l!==void 0&&k(l)},B=t=>{const l=t.currentTarget.dataset.tab;(l==="headers"||l==="html"||l==="text")&&F(l)},K=t=>a(t==="html"?"HTML":t==="text"?"Plain text":"Headers"),c=b(()=>{const t=g.trim().toLowerCase();return t===""?s:s.filter(l=>`${l.subject} ${f(l.to)}`.toLowerCase().includes(t))},[s,g]),i=b(()=>{if(c.length!==0)return c.find(t=>t.id===C)??c[0]},[c,C]),o=ce(i),U=()=>{o!==void 0&&le(o)},W=()=>{o!==void 0&&"window"in globalThis&&globalThis.window.open(o,"_blank","noopener")};return d("div",{className:"flex flex-col gap-4","data-testid":"mail-panel",children:[d("div",{className:"flex flex-wrap items-center gap-2",children:[e(m,{"data-testid":"mail-send-test",onClick:P,size:"sm",type:"button",variant:"outline",children:a("Send test")}),e(m,{"data-testid":"mail-clear",disabled:s.length===0,onClick:q,size:"sm",type:"button",variant:"outline",children:a("Clear inbox")}),s.length>0&&e(Q,{className:"ml-auto","data-testid":"mail-count",variant:"secondary",children:a("{count} messages",{count:s.length})})]}),$!==null&&e(J,{error:H,testId:"mail-error"}),$===null&&!E&&s.length===0&&e(V,{description:a("Email your app sends in dev is captured here — nothing is delivered."),icon:d("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[e("path",{d:"M4 5h16v14H4z"}),e("path",{d:"m4 6 8 6 8-6"})]}),testId:"mail-empty",title:a("No captured email.")}),s.length>0&&d("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[minmax(0,22rem)_1fr]","data-testid":"mail-reader",children:[d("div",{className:"flex flex-col gap-2",children:[e(X,{"aria-label":a("Search messages"),"data-testid":"mail-search",onChange:D,placeholder:a("Filter messages"),type:"search",value:g}),e(Y,{className:"max-h-[32rem] rounded-xl border border-border bg-card shadow-xs","data-testid":"mail-list",children:e("ul",{className:"divide-y",children:c.map(t=>{const l=t.id===i?.id;return e("li",{children:d("button",{className:`flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left text-sm hover:bg-muted/60 ${l?"bg-muted":""}`,"data-active":l,"data-id":t.id,"data-testid":"mail-list-item",onClick:R,type:"button",children:[e("span",{className:"w-full truncate font-medium",children:t.subject||a("(no subject)")}),e("span",{className:"w-full truncate text-xs text-muted-foreground",children:f(t.to)}),e("span",{className:"text-xs text-muted-foreground tabular-nums",children:j(t.capturedAt,"—")})]})},t.id)})})})]}),i!==void 0&&d("div",{className:"flex min-w-0 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"mail-detail",children:[d("div",{className:"flex flex-col gap-1",children:[e("h2",{className:"truncate text-base font-semibold","data-testid":"mail-subject",children:i.subject||a("(no subject)")}),d("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs text-muted-foreground",children:[e("dt",{children:a("From")}),e("dd",{className:"truncate font-mono",children:i.from??"—"}),e("dt",{children:a("To")}),e("dd",{className:"truncate font-mono",children:f(i.to)}),i.cc!==void 0&&i.cc.length>0&&d(te,{children:[e("dt",{children:a("Cc")}),e("dd",{className:"truncate font-mono",children:f(i.cc)})]}),e("dt",{children:a("Sent")}),e("dd",{className:"tabular-nums",children:j(i.capturedAt,"—")})]})]}),d("div",{className:"flex flex-wrap items-center gap-2","data-testid":"mail-actions",children:[e(m,{"data-testid":"mail-copy-link",disabled:o===void 0,onClick:U,size:"sm",type:"button",variant:"outline",children:a("Copy link")}),e(m,{"data-testid":"mail-open-link",disabled:o===void 0,onClick:W,size:"sm",type:"button",variant:"outline",children:a("Open in new tab")})]}),e(de,{}),e("div",{className:"flex items-center gap-1","data-testid":"mail-tabs",role:"tablist",children:["html","text","headers"].map(t=>e(m,{"aria-selected":n===t,"data-tab":t,"data-testid":`mail-tab-${t}`,onClick:B,role:"tab",size:"sm",type:"button",variant:n===t?"secondary":"ghost",children:K(t)},t))}),d("div",{className:"min-h-[12rem]",children:[n==="html"&&(i.html===void 0?e("p",{className:"text-sm text-muted-foreground",children:a("No HTML body.")}):e("iframe",{className:"h-[24rem] w-full rounded-md border bg-white","data-testid":"mail-preview-html",sandbox:"",srcDoc:ue(i.html),title:a("Email preview")})),n==="text"&&(i.text===void 0?e("p",{className:"text-sm text-muted-foreground",children:a("No text body.")}):e("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-text",children:i.text})),n==="headers"&&(i.headers===void 0||Object.keys(i.headers).length===0?e("p",{className:"text-sm text-muted-foreground",children:a("No headers.")}):e("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-headers",children:Object.entries(i.headers).map(([t,l])=>`${t}: ${l}`).join(`
|
|
2
|
+
`)}))]})]})]})]})};export{ze as MailPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as Fe}from"react/compiler-runtime";import{useLunora as lt}from"@lunora/react";import{useNavigate as st}from"@tanstack/react-router";import{useState as ge,useRef as Ke,useEffect as Be,useMemo as nt}from"react";import{L as it}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as ot}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as Ve}from"../packem_shared/button-BkCrNcAs.js";import{c as he,u as fe,n as Te,f as Re,m as ct}from"../packem_shared/card-CIDGUN6K.js";import{p as ie,d as Xe,m as Ae,u as ae,n as Ye,f as Ze}from"../packem_shared/table-DdJBrClo.js";import{K as He}from"../packem_shared/use-admin-query-Di3fLE8H.js";import dt from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as Ee}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{c as mt}from"../packem_shared/cf-links-gbDy51nR.js";import{l as ut,k as Pe,f as Ge,c as ht,e as gt,a as ft}from"../packem_shared/internal-AtZ4bTal.js";import{r as xt,l as pt}from"../packem_shared/shard-history-DMEW5VBE.js";import{w as bt}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{f as vt}from"../packem_shared/log-fields-CoL3hsIQ.js";import{g as et}from"../packem_shared/badge-BbuuAio7.js";import{S as tt}from"../packem_shared/sparkline-DtcZoU48.js";import{jsx as t,jsxs as n,Fragment as Ue}from"react/jsx-runtime";import{aggregateMetrics as Nt,computeLatencyPercentiles as yt,enrichQueryStats as $t,shardsToAggregate as wt}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{N as St,y as qt,k as De,_ as kt,w as _t}from"../packem_shared/select-Bul-DeII.js";const Mt=(s,e)=>s<e?-1:s>e?1:0,We=s=>{if(s===void 0)return"null";if(typeof s=="bigint")throw new TypeError("stableStringify: cannot use a bigint in a stable JSON cache key — pass it as a string, or use stableWireKey");if(s===null||typeof s!="object")return JSON.stringify(s);if(Array.isArray(s))return`[${s.map(p=>We(p)).join(",")}]`;const e=Object.getPrototypeOf(s);if(e!==null&&e!==Object.prototype){const p=s.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${p} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const l=s,r=Object.keys(l).toSorted(Mt),a=[];for(const p of r){const b=l[p];b!==void 0&&a.push(`${JSON.stringify(p)}:${We(b)}`)}return`{${a.join(",")}}`},rt=(s,e,l)=>`${s}:${e}:${We(l??{})}`,at=(s,e)=>s==="gauge"?e.last:s==="histogram"?e.sum/Math.max(1,e.count):e.sum,It=(s,e)=>at(s,e),Ft=s=>at(s.kind,s),Je=s=>Number.isInteger(s)?s.toLocaleString():s.toLocaleString(void 0,{maximumFractionDigits:2}),Ct=s=>Array.isArray(s?.series)?s.series:[],Ot="FUNCTION_NOT_FOUND",Tt=s=>{const e=new Map;if(!Array.isArray(s?.series))return e;for(const l of s.series)e.set(rt(l.kind,l.name,l.attributes),l.points);return e},Rt={counter:"secondary",gauge:"default",histogram:"outline"},Dt=s=>{const e=Fe(18),{name:l,onOpenTrace:r,traceId:a}=s,p=Ee();if(a===void 0){let m;return e[0]===Symbol.for("react.memo_cache_sentinel")?(m=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=m):m=e[0],m}let b;e[1]!==a?(b=a.slice(0,8),e[1]=a,e[2]=b):b=e[2];const f=b;if(r===void 0){const m=`mt-instrument-trace-${l}`;let N;return e[3]!==f||e[4]!==m||e[5]!==a?(N=t("span",{className:"text-muted-foreground","data-testid":m,title:a,children:f}),e[3]=f,e[4]=m,e[5]=a,e[6]=N):N=e[6],N}const h=`mt-instrument-trace-${l}`;let g;e[7]!==r||e[8]!==a?(g=()=>{r(a)},e[7]=r,e[8]=a,e[9]=g):g=e[9];let v;e[10]!==p||e[11]!==a?(v=p("Open the exemplar trace {trace}",{trace:a}),e[10]=p,e[11]=a,e[12]=v):v=e[12];let u;return e[13]!==f||e[14]!==h||e[15]!==g||e[16]!==v?(u=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":h,onClick:g,title:v,type:"button",children:f}),e[13]=f,e[14]=h,e[15]=g,e[16]=v,e[17]=u):u=e[17],u},Lt=s=>{const e=Fe(105),{onOpenTrace:l,shardKey:r}=s,a=Ee();let p;e[0]===Symbol.for("react.memo_cache_sentinel")?(p={},e[0]=p):p=e[0];let b;e[1]!==r?(b={live:!0,shardKey:r},e[1]=r,e[2]=b):b=e[2];const{data:f,error:h,errorSource:g}=He(ze.getMetricSeries,p,b);let v;e[3]===Symbol.for("react.memo_cache_sentinel")?(v={},e[3]=v):v=e[3];let u;e[4]!==r?(u={live:!0,shardKey:r},e[4]=r,e[5]=u):u=e[5];const{data:m}=He(ze.getMetricHistory,v,u);let N,le,O,j,K,c,S,se,T,R,I,x,D;if(e[6]!==f||e[7]!==h||e[8]!==g||e[9]!==m||e[10]!==l||e[11]!==a){se=Symbol.for("react.early_return_sentinel");e:{const oe=Ct(f),de=ut(g)===Ot;if(h!==null&&!de){let o;e[25]!==a?(o=a("Instruments"),e[25]=a,e[26]=o):o=e[26];let F;e[27]!==o?(F=t("h3",{className:"text-sm font-semibold text-foreground",children:o}),e[27]=o,e[28]=F):F=e[28];let A;e[29]!==h||e[30]!==a?(A=a("Instruments unavailable: {error}",{error:h}),e[29]=h,e[30]=a,e[31]=A):A=e[31];let z;e[32]!==A?(z=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:A}),e[32]=A,e[33]=z):z=e[33];let re;e[34]!==F||e[35]!==z?(re=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[F,z]}),e[34]=F,e[35]=z,e[36]=re):re=e[36],se=re;break e}if(oe.length===0){se=null;break e}const me=Tt(m);let P;e[37]!==a?(P=o=>a(o==="counter"?"Counter":o==="gauge"?"Gauge":"Histogram"),e[37]=a,e[38]=P):P=e[38];const i=P;K="flex flex-col gap-2",c="mt-instruments";let k;e[39]!==a?(k=a("Instruments"),e[39]=a,e[40]=k):k=e[40],e[41]!==k?(S=t("h3",{className:"text-sm font-semibold text-foreground",children:k}),e[41]=k,e[42]=S):S=e[42],j=he,D="overflow-hidden py-0",O=fe,x="px-0",le=Ye,R="mt-instruments-table";let y;e[43]!==a?(y=a("name"),e[43]=a,e[44]=y):y=e[44];let w;e[45]!==y?(w=t(ie,{children:y}),e[45]=y,e[46]=w):w=e[46];let U;e[47]!==a?(U=a("kind"),e[47]=a,e[48]=U):U=e[48];let J;e[49]!==U?(J=t(ie,{children:U}),e[49]=U,e[50]=J):J=e[50];let Q;e[51]!==a?(Q=a("value"),e[51]=a,e[52]=Q):Q=e[52];let H;e[53]!==Q?(H=t(ie,{className:"text-right",children:Q}),e[53]=Q,e[54]=H):H=e[54];let W;e[55]!==a?(W=a("count"),e[55]=a,e[56]=W):W=e[56];let B;e[57]!==W?(B=t(ie,{className:"text-right",children:W}),e[57]=W,e[58]=B):B=e[58];let V;e[59]!==a?(V=a("range"),e[59]=a,e[60]=V):V=e[60];let G;e[61]!==V?(G=t(ie,{className:"text-right",children:V}),e[61]=V,e[62]=G):G=e[62];let X;e[63]!==a?(X=a("trend"),e[63]=a,e[64]=X):X=e[64];let Y;e[65]!==X?(Y=t(ie,{children:X}),e[65]=X,e[66]=Y):Y=e[66];let Z;e[67]!==a?(Z=a("trace"),e[67]=a,e[68]=Z):Z=e[68];let ee;e[69]!==Z?(ee=t(ie,{children:Z}),e[69]=Z,e[70]=ee):ee=e[70];let ce;e[71]!==a?(ce=a("dimensions"),e[71]=a,e[72]=ce):ce=e[72];let te;e[73]!==ce?(te=t(ie,{children:ce}),e[73]=ce,e[74]=te):te=e[74],e[75]!==w||e[76]!==J||e[77]!==H||e[78]!==B||e[79]!==G||e[80]!==Y||e[81]!==ee||e[82]!==te?(I=t(Xe,{children:n(Ae,{children:[w,J,H,B,G,Y,ee,te]})}),e[75]=w,e[76]=J,e[77]=H,e[78]=B,e[79]=G,e[80]=Y,e[81]=ee,e[82]=te,e[83]=I):I=e[83],N=Ze,T=oe.map(o=>{const F=vt(o.attributes),A=rt(o.kind,o.name,o.attributes),z=(me.get(A)??[]).map(re=>It(o.kind,re));return n(Ae,{"data-testid":`mt-instrument-${o.name}`,children:[t(ae,{className:"font-mono text-xs",title:o.functionPath,children:o.name}),t(ae,{children:t(et,{variant:Rt[o.kind],children:i(o.kind)})}),t(ae,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${o.name}`,children:Je(Ft(o))}),t(ae,{className:"text-right tabular-nums text-muted-foreground",children:o.count.toLocaleString()}),t(ae,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:o.min===o.max?"—":`${Je(o.min)}–${Je(o.max)}`}),t(ae,{children:z.length>=2?t(tt,{ariaLabel:a("{name} trend",{name:o.name}),className:"h-6 w-24 text-foreground",series:z,testId:`mt-instrument-trend-${o.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(ae,{className:"font-mono text-xs",children:t(Dt,{name:o.name,onOpenTrace:l,traceId:o.exemplarTraceId})}),t(ae,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:F,children:F===""?"—":F})]},A)})}e[6]=f,e[7]=h,e[8]=g,e[9]=m,e[10]=l,e[11]=a,e[12]=N,e[13]=le,e[14]=O,e[15]=j,e[16]=K,e[17]=c,e[18]=S,e[19]=se,e[20]=T,e[21]=R,e[22]=I,e[23]=x,e[24]=D}else N=e[12],le=e[13],O=e[14],j=e[15],K=e[16],c=e[17],S=e[18],se=e[19],T=e[20],R=e[21],I=e[22],x=e[23],D=e[24];if(se!==Symbol.for("react.early_return_sentinel"))return se;let E;e[84]!==N||e[85]!==T?(E=t(N,{children:T}),e[84]=N,e[85]=T,e[86]=E):E=e[86];let M;e[87]!==le||e[88]!==E||e[89]!==R||e[90]!==I?(M=n(le,{"data-testid":R,children:[I,E]}),e[87]=le,e[88]=E,e[89]=R,e[90]=I,e[91]=M):M=e[91];let L;e[92]!==O||e[93]!==M||e[94]!==x?(L=t(O,{className:x,children:M}),e[92]=O,e[93]=M,e[94]=x,e[95]=L):L=e[95];let $;e[96]!==j||e[97]!==L||e[98]!==D?($=t(j,{className:D,children:L}),e[96]=j,e[97]=L,e[98]=D,e[99]=$):$=e[99];let q;return e[100]!==K||e[101]!==c||e[102]!==S||e[103]!==$?(q=n("section",{className:K,"data-testid":c,children:[S,$]}),e[100]=K,e[101]=c,e[102]=S,e[103]=$,e[104]=q):q=e[104],q},je=s=>s>=100?"critical":s>=50?"warning":"good",Qe=s=>s<1?`${(s*1e3).toFixed(0)}μs`:s<1e3?`${s.toFixed(1)}ms`:`${(s/1e3).toFixed(2)}s`,Le=s=>s>=1e9?`${(s/1e9).toFixed(1)}B`:s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:s.toLocaleString(),At=s=>{const e=Fe(3),{level:l}=s;if(l==="critical"){let a;return e[0]===Symbol.for("react.memo_cache_sentinel")?(a=t(et,{variant:"destructive",children:"Slow"}),e[0]=a):a=e[0],a}if(l==="warning"){let a;return e[1]===Symbol.for("react.memo_cache_sentinel")?(a=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]=a):a=e[1],a}let r;return e[2]===Symbol.for("react.memo_cache_sentinel")?(r=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]=r):r=e[2],r},zt=s=>{const e=Fe(152),{queryStats:l}=s,r=Ee(),[a,p]=ge("totalTime");let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=new Set,e[0]=b):b=e[0];const[f,h]=ge(b);let g;e[1]===Symbol.for("react.memo_cache_sentinel")?(g=d=>{d!==null&&p(d)},e[1]=g):g=e[1];const v=g;let u;if(e[2]!==l||e[3]!==a){u=[...l];let d;e[5]!==a?(d=(C,_)=>{switch(a){case"avgTime":return _.avgDurationMs-C.avgDurationMs;case"execCount":return _.execCount-C.execCount;case"rowsRead":return _.rowsRead-C.rowsRead;default:return _.totalDurationMs-C.totalDurationMs}},e[5]=a,e[6]=d):d=e[6],u.sort(d),e[2]=l,e[3]=a,e[4]=u}else u=e[4];const m=u;let N;e[7]!==l?(N=l.filter(Et),e[7]=l,e[8]=N):N=e[8];const le=N.length;let O;e[9]!==l?(O=l.filter(jt),e[9]=l,e[10]=O):O=e[10];const j=O.length;let K;e[11]!==l?(K=l.filter(Kt),e[11]=l,e[12]=K):K=e[12];const c=K.length;let S;e[13]===Symbol.for("react.memo_cache_sentinel")?(S=d=>{h(C=>{const _=new Set(C);return _.has(d)?_.delete(d):_.add(d),_})},e[13]=S):S=e[13];const se=S;if(l.length===0){let d;e[14]!==r?(d=r("No query insights yet"),e[14]=r,e[15]=d):d=e[15];let C;e[16]!==d?(C=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:d}),e[16]=d,e[17]=C):C=e[17];let _;e[18]!==r?(_=r("Query insights appear once statements are executed against this shard."),e[18]=r,e[19]=_):_=e[19];let ue;e[20]!==_?(ue=t("p",{className:"mt-1 text-sm",children:_}),e[20]=_,e[21]=ue):ue=e[21];let Oe;return e[22]!==ue||e[23]!==C?(Oe=t(he,{children:t(fe,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[C,ue]})})}),e[22]=ue,e[23]=C,e[24]=Oe):Oe=e[24],Oe}let T;e[25]!==r?(T=r("Critical queries"),e[25]=r,e[26]=T):T=e[26];let R;e[27]!==T?(R=t(Te,{className:"pb-2",children:t(Re,{className:"text-sm font-medium",children:T})}),e[27]=T,e[28]=R):R=e[28];let I;e[29]!==le?(I=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:le}),e[29]=le,e[30]=I):I=e[30];let x;e[31]!==r?(x=r(">100ms avg execution"),e[31]=r,e[32]=x):x=e[32];let D;e[33]!==x?(D=t("p",{className:"text-xs text-muted-foreground",children:x}),e[33]=x,e[34]=D):D=e[34];let E;e[35]!==D||e[36]!==I?(E=n(fe,{children:[I,D]}),e[35]=D,e[36]=I,e[37]=E):E=e[37];let M;e[38]!==E||e[39]!==R?(M=n(he,{children:[R,E]}),e[38]=E,e[39]=R,e[40]=M):M=e[40];let L;e[41]!==r?(L=r("Moderate queries"),e[41]=r,e[42]=L):L=e[42];let $;e[43]!==L?($=t(Te,{className:"pb-2",children:t(Re,{className:"text-sm font-medium",children:L})}),e[43]=L,e[44]=$):$=e[44];let q;e[45]!==j?(q=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:j}),e[45]=j,e[46]=q):q=e[46];let oe;e[47]!==r?(oe=r("50–100ms avg execution"),e[47]=r,e[48]=oe):oe=e[48];let de;e[49]!==oe?(de=t("p",{className:"text-xs text-muted-foreground",children:oe}),e[49]=oe,e[50]=de):de=e[50];let me;e[51]!==q||e[52]!==de?(me=n(fe,{children:[q,de]}),e[51]=q,e[52]=de,e[53]=me):me=e[53];let P;e[54]!==$||e[55]!==me?(P=n(he,{children:[$,me]}),e[54]=$,e[55]=me,e[56]=P):P=e[56];let i;e[57]!==r?(i=r("Fast queries"),e[57]=r,e[58]=i):i=e[58];let k;e[59]!==i?(k=t(Te,{className:"pb-2",children:t(Re,{className:"text-sm font-medium",children:i})}),e[59]=i,e[60]=k):k=e[60];let y;e[61]!==c?(y=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:c}),e[61]=c,e[62]=y):y=e[62];let w;e[63]!==r?(w=r("<50ms avg execution"),e[63]=r,e[64]=w):w=e[64];let U;e[65]!==w?(U=t("p",{className:"text-xs text-muted-foreground",children:w}),e[65]=w,e[66]=U):U=e[66];let J;e[67]!==y||e[68]!==U?(J=n(fe,{children:[y,U]}),e[67]=y,e[68]=U,e[69]=J):J=e[69];let Q;e[70]!==k||e[71]!==J?(Q=n(he,{children:[k,J]}),e[70]=k,e[71]=J,e[72]=Q):Q=e[72];let H;e[73]!==M||e[74]!==P||e[75]!==Q?(H=n("div",{className:"grid gap-4 md:grid-cols-3",children:[M,P,Q]}),e[73]=M,e[74]=P,e[75]=Q,e[76]=H):H=e[76];let W;e[77]!==r?(W=r("Query leaderboard"),e[77]=r,e[78]=W):W=e[78];let B;e[79]!==W?(B=t("h3",{className:"text-lg font-semibold",children:W}),e[79]=W,e[80]=B):B=e[80];let V;e[81]!==a||e[82]!==r?(V=r("Slow queries sorted by {sortField}",{sortField:r(a)}),e[81]=a,e[82]=r,e[83]=V):V=e[83];let G;e[84]!==V?(G=t("p",{className:"text-sm text-muted-foreground",children:V}),e[84]=V,e[85]=G):G=e[85];let X;e[86]!==B||e[87]!==G?(X=n("div",{children:[B,G]}),e[86]=B,e[87]=G,e[88]=X):X=e[88];let Y;e[89]!==r?(Y=r("Sort by"),e[89]=r,e[90]=Y):Y=e[90];let Z;e[91]!==Y?(Z=t("span",{className:"text-sm text-muted-foreground",children:Y}),e[91]=Y,e[92]=Z):Z=e[92];let ee;e[93]!==r?(ee=r("Sort queries by"),e[93]=r,e[94]=ee):ee=e[94];let ce;e[95]===Symbol.for("react.memo_cache_sentinel")?(ce=t(St,{}),e[95]=ce):ce=e[95];let te;e[96]!==ee?(te=t(qt,{"aria-label":ee,className:"w-[140px]","data-testid":"qi-sort",children:ce}),e[96]=ee,e[97]=te):te=e[97];let o;e[98]!==r?(o=r("Total time"),e[98]=r,e[99]=o):o=e[99];let F;e[100]!==o?(F=t(De,{value:"totalTime",children:o}),e[100]=o,e[101]=F):F=e[101];let A;e[102]!==r?(A=r("Avg time"),e[102]=r,e[103]=A):A=e[103];let z;e[104]!==A?(z=t(De,{value:"avgTime",children:A}),e[104]=A,e[105]=z):z=e[105];let re;e[106]!==r?(re=r("Execution count"),e[106]=r,e[107]=re):re=e[107];let xe;e[108]!==re?(xe=t(De,{value:"execCount",children:re}),e[108]=re,e[109]=xe):xe=e[109];let pe;e[110]!==r?(pe=r("Rows read"),e[110]=r,e[111]=pe):pe=e[111];let be;e[112]!==pe?(be=t(De,{value:"rowsRead",children:pe}),e[112]=pe,e[113]=be):be=e[113];let ve;e[114]!==F||e[115]!==z||e[116]!==xe||e[117]!==be?(ve=n(kt,{children:[F,z,xe,be]}),e[114]=F,e[115]=z,e[116]=xe,e[117]=be,e[118]=ve):ve=e[118];let Ne;e[119]!==a||e[120]!==te||e[121]!==ve?(Ne=n(_t,{onValueChange:v,value:a,children:[te,ve]}),e[119]=a,e[120]=te,e[121]=ve,e[122]=Ne):Ne=e[122];let ye;e[123]!==Z||e[124]!==Ne?(ye=n("div",{className:"flex items-center gap-2",children:[Z,Ne]}),e[123]=Z,e[124]=Ne,e[125]=ye):ye=e[125];let $e;e[126]!==X||e[127]!==ye?($e=n("div",{className:"flex items-center justify-between",children:[X,ye]}),e[126]=X,e[127]=ye,e[128]=$e):$e=e[128];let we;e[129]!==r?(we=r("Statements"),e[129]=r,e[130]=we):we=e[130];let Se;e[131]!==we?(Se=t(Re,{children:we}),e[131]=we,e[132]=Se):Se=e[132];let qe;e[133]!==m.length||e[134]!==r?(qe=r("{count} tracked statements",{count:m.length}),e[133]=m.length,e[134]=r,e[135]=qe):qe=e[135];let ke;e[136]!==qe?(ke=t(ct,{children:qe}),e[136]=qe,e[137]=ke):ke=e[137];let _e;e[138]!==Se||e[139]!==ke?(_e=n(Te,{children:[Se,ke]}),e[138]=Se,e[139]=ke,e[140]=_e):_e=e[140];let Me;e[141]!==f||e[142]!==m||e[143]!==r?(Me=t(fe,{children:t("div",{className:"space-y-2",children:m.map(d=>{const C=d.normalizedSql,_=f.has(C),ue=je(d.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":_,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{se(C)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(At,{level:ue}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:d.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:Qe(d.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:r("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Qe(d.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:r("avg")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Le(d.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:r("calls")})]})]})]}),_&&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:r("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:d.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:Le(d.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Qe(d.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:Le(d.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:Le(d.rowsWritten)})]})]})]})]},C)})})}),e[141]=f,e[142]=m,e[143]=r,e[144]=Me):Me=e[144];let Ie;e[145]!==_e||e[146]!==Me?(Ie=n(he,{children:[_e,Me]}),e[145]=_e,e[146]=Me,e[147]=Ie):Ie=e[147];let Ce;return e[148]!==H||e[149]!==$e||e[150]!==Ie?(Ce=n("div",{className:"space-y-4","data-testid":"qi-root",children:[H,$e,Ie]}),e[148]=H,e[149]=$e,e[150]=Ie,e[151]=Ce):Ce=e[151],Ce};function Et(s){return je(s.avgDurationMs)==="critical"}function jt(s){return je(s.avgDurationMs)==="warning"}function Kt(s){return je(s.avgDurationMs)==="good"}const Pt=ft(ze.getMetrics),Ut=s=>{const e=Math.floor(s/1e3),l=Math.floor(e/3600),r=Math.floor(e%3600/60),a=e%60;return l>0?`${l.toString()}h ${r.toString()}m`:r>0?`${r.toString()}m ${a.toString()}s`:`${a.toString()}s`},Jt=(s,e)=>s?e:"overview",Qt=(s,e)=>{const l=s+e;return l===0?"—":`${(s/l*100).toFixed(1)}%`},ne=s=>{const e=Fe(16),{chart:l,footer:r,label:a,testId:p,value:b}=s;let f;e[0]!==a?(f=t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a}),e[0]=a,e[1]=f):f=e[1];let h;e[2]!==p||e[3]!==b?(h=t("span",{className:"truncate text-2xl font-semibold tabular-nums text-foreground","data-testid":p,children:b}),e[2]=p,e[3]=b,e[4]=h):h=e[4];let g;e[5]!==l||e[6]!==h?(g=n("div",{className:"flex items-center justify-between gap-3",children:[h,l]}),e[5]=l,e[6]=h,e[7]=g):g=e[7];let v;e[8]!==f||e[9]!==g?(v=n("div",{className:"flex flex-col gap-2.5 p-4",children:[f,g]}),e[8]=f,e[9]=g,e[10]=v):v=e[10];let u;e[11]!==r?(u=r!=null&&t("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:r}),e[11]=r,e[12]=u):u=e[12];let m;return e[13]!==v||e[14]!==u?(m=n(he,{className:"justify-between gap-0 py-0",children:[v,u]}),e[13]=v,e[14]=u,e[15]=m):m=e[15],m},fr=({initialShardKey:s})=>{const e=lt(),l=Ee(),r=st(),[a,p]=ge(s??""),[b,f]=ge("overview"),[h,g]=ge([]),v=Ke(null),u=Ke(null),m=Ke(!0);Be(()=>(m.current=!0,()=>{m.current=!1}),[]);const N=dt(a.trim(),400),le=i=>{bt({shardKey:N,traceId:i}),Ge(r({to:"/traces"}))},{data:O,error:j,liveError:K}=He(ze.getMetrics,{},{live:!0,shardKey:N}),c=O??null;Be(()=>{if(O===void 0)return;xt(N);const i=O,k=v.current,y=u.current!==null&&u.current!==i.shard;if(u.current=i.shard,v.current=i.requests,y){g([]);return}k!==null&&i.requests>=k&&g(w=>[...w,i.requests-k].slice(-30))},[O,N]);const[S,se]=ge(null),[T,R]=ge(!1),I=async()=>{R(!0);const i=wt(a,pt());try{const k=await Promise.all(i.map(async y=>{try{const w=await e.query(Pt,{},ht(y));return{error:null,metrics:w,shard:y===""?w.shard:y}}catch(w){return{error:gt(w),metrics:null,shard:y===""?"__root__":y}}}));m.current&&se(k)}finally{m.current&&R(!1)}},x=S===null?null:Nt(S),D=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,E=h.length>0?h.at(-1):0,M=c?yt(c):{p90:0,p95:0},L=i=>i<=0?"—":i<1?`${(i*1e3).toFixed(0)}μs`:i<1e3?`${i.toFixed(1)}ms`:`${(i/1e3).toFixed(2)}s`,$=nt(()=>{if(!c||!("queryStats"in c))return;const i=c.queryStats;if(!(!i||!Array.isArray(i)))return $t(i)},[c]),q=Jt($!==void 0,b),oe=()=>{Ge(I())},de=()=>{se(null)},me=()=>{f("overview")},P=()=>{f("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(ot,{onChange:p,testId:"mt-shard-input",value:a}),t(it,{message:K,prefix:"mt"}),t(Ve,{"data-testid":"mt-aggregate",disabled:T,onClick:oe,size:"sm",type:"button",variant:"secondary",children:l(T?"Aggregating…":"All shards")}),S!==null&&t(Ve,{"data-testid":"mt-aggregate-clear",onClick:de,size:"sm",type:"button",variant:"ghost",children:l("Hide")}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:mt,rel:"noreferrer",target:"_blank",children:l("Open in Cloudflare")})]}),j!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:j}),$!==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 ${q==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:me,type:"button",children:l("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${q==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:P,type:"button",children:[l("Query insights"),$.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:$.length})]})]}),q==="query-insights"&&$!==void 0&&t(zt,{queryStats:$}),q==="overview"&&c!==null&&n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[t(ne,{chart:h.length>=2?t(tt,{ariaLabel:l("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:h,testId:"mt-sparkline"}):void 0,footer:h.length>=2?n(Ue,{children:[t("span",{className:"font-semibold text-foreground",children:`+${E.toLocaleString()}`})," ",l("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:l("collecting samples…")}),label:l("Requests"),testId:"mt-requests",value:c.requests}),t(ne,{footer:l("{rate} error rate",{rate:D}),label:l("Errors"),testId:"mt-errors",value:n(Ue,{children:[c.errors," (",D,")"]})}),t(ne,{footer:M.p90>0?`P90 ${L(M.p90)}`:void 0,label:l("P95 latency"),testId:"mt-p95",value:M.p95>0?L(M.p95):"—"}),t(ne,{footer:c.cache===null?void 0:`${c.cache.entries.toLocaleString()} ${l("cache entries")}`,label:l("Database size"),testId:"mt-db-size",value:Pe(c.databaseSize)}),t(ne,{label:l("Shard"),testId:"mt-shard",value:c.shard}),t(ne,{label:l("Uptime"),testId:"mt-uptime",value:Ut(c.uptimeMs)}),t(ne,{label:l("Cache hit rate"),testId:"mt-cache",value:c.cache===null?l("no cache configured"):l("{rate} ({count} entries)",{count:c.cache.entries,rate:Qt(c.cache.hits,c.cache.misses)})})]}),q==="overview"&&c===null&&null,q==="overview"&&t(Lt,{onOpenTrace:le,shardKey:N}),q==="overview"&&x!==null&&S!==null&&n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[t(ne,{label:l("Shards"),testId:"mt-agg-shards",value:x.failed>0?l("{reachable} reachable, {failed} unreachable",{failed:x.failed,reachable:x.reachable}):l("{reachable} reachable",{reachable:x.reachable})}),t(ne,{label:l("Total requests"),testId:"mt-agg-requests",value:x.totalRequests}),t(ne,{label:l("Total errors"),testId:"mt-agg-errors",value:x.totalErrors}),t(ne,{label:l("Total database size"),testId:"mt-agg-db-size",value:Pe(x.totalDatabaseSize)}),t(ne,{label:l("Combined cache hit rate"),testId:"mt-agg-cache",value:x.hitRate===null?l("no cache configured"):`${(x.hitRate*100).toFixed(1)}%`})]}),t(he,{className:"overflow-hidden py-0",children:t(fe,{className:"px-0",children:n(Ye,{"data-testid":"mt-agg-table",children:[t(Xe,{children:n(Ae,{children:[t(ie,{children:l("shard")}),t(ie,{children:l("requests")}),t(ie,{children:l("errors")}),t(ie,{children:l("db size")})]})}),t(Ze,{children:S.map(i=>n(Ae,{"data-testid":`mt-agg-row-${i.shard}`,children:[t(ae,{children:i.shard}),i.metrics===null?t(ae,{className:"text-destructive",colSpan:3,children:i.error??l("unreachable")}):n(Ue,{children:[t(ae,{className:"tabular-nums",children:i.metrics.requests}),t(ae,{className:"tabular-nums",children:i.metrics.errors}),t(ae,{className:"tabular-nums",children:Pe(i.metrics.databaseSize)})]})]},i.shard))})]})})})]})]})};export{fr as MetricsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useLunora as z}from"@lunora/react";import{useState as a,useEffect as O}from"react";import{ConfirmButton as P}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{E as q}from"../packem_shared/error-alert-B59DnrDI.js";import{L as H}from"../packem_shared/live-status-CGW2JHf_.js";import{ShardInput as U}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as W}from"../packem_shared/badge-BbuuAio7.js";import{u as _}from"../packem_shared/button-BkCrNcAs.js";import{c as G,u as J}from"../packem_shared/card-CIDGUN6K.js";import{E as Q}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as $}from"../packem_shared/label-6uP1obNF.js";import{n as X,d as Y,m as k,p as n,f as Z,u as o}from"../packem_shared/table-DdJBrClo.js";import{K as rr}from"../packem_shared/use-admin-query-Di3fLE8H.js";import er from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as tr}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as R}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as ir,f as ar,c as nr,e as or,a as dr}from"../packem_shared/internal-AtZ4bTal.js";import{r as sr}from"../packem_shared/shard-history-DMEW5VBE.js";import{jsxs as i,jsx as r}from"react/jsx-runtime";const lr=dr(R.runMigration),Er=({initialShardKey:C})=>{const L=z(),e=tr(),[c,M]=a(C??""),[v,S]=a(""),[x,E]=a("up"),[h,I]=a(!0),[m,y]=a(!1),[s,p]=a(null),[b,g]=a(null),u=er(c.trim(),400),w=c.trim()===u,d=rr(R.migrationStatus,{},{live:!0,shardKey:u}),l=d.data?.migrations??null,D=d.error,{errorSource:A,liveError:j}=d;O(()=>{d.data!==void 0&&sr(u)},[d.data,u]);const K=async()=>{const t=v.trim();if(t===""){g(e("Enter a migration id")),p(null);return}y(!0),g(null);try{const f=await L.query(lr,{direction:x,dryRun:h,id:t},nr(c));p(f),d.refetch()}catch(f){p(null),g(or(f))}finally{y(!1)}},N=()=>{ar(K())},T=t=>{S(t.target.value)},B=t=>{E(t.target.value==="down"?"down":"up")},F=t=>{I(t.target.checked)};return i("div",{className:"flex flex-col gap-3","data-testid":"lunora-migrations",children:[i("div",{className:"flex flex-wrap items-center gap-2",children:[r(U,{onChange:M,testId:"mg-shard-input",value:c}),r(H,{message:j,prefix:"mg"})]}),D!==null&&r(q,{error:A,testId:"mg-status-error"}),l!==null&&l.length===0&&r(Q,{description:e("Data migrations you run against this shard will be tracked here."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M4 12a8 8 0 0 1 13.7-5.6L20 8M20 4v4h-4M20 12a8 8 0 0 1-13.7 5.6L4 16m0 4v-4h4"})}),testId:"mg-empty",title:e("No migrations have run on this shard.")}),l!==null&&l.length>0&&r(G,{className:"overflow-hidden py-0",children:r(J,{className:"px-0",children:i(X,{"data-testid":"mg-table",children:[r(Y,{children:i(k,{children:[r(n,{children:e("id")}),r(n,{children:e("direction")}),r(n,{children:e("status")}),r(n,{children:e("processed")}),r(n,{children:e("changed")}),r(n,{children:e("updated")}),r(n,{children:e("error")})]})}),r(Z,{children:l.map(t=>i(k,{"data-testid":`mg-row-${t.id}`,children:[r(o,{children:t.id}),r(o,{children:t.direction}),r(o,{children:r(W,{variant:"secondary",children:t.status})}),r(o,{children:t.processed}),r(o,{children:t.changed}),r(o,{children:ir(t.updatedAt)}),r(o,{children:t.error??""})]},t.id))})]})})}),i("div",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-3 shadow-xs",children:[r($,{children:e("Run migration")}),i("div",{className:"flex flex-wrap items-center gap-2",children:[r(V,{"aria-label":e("Migration id"),className:"w-auto","data-testid":"mg-id-input",onChange:T,placeholder:e("migration id"),value:v}),i("select",{"aria-label":e("Direction"),className:"flex h-9 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","data-testid":"mg-direction",onChange:B,value:x,children:[r("option",{value:"up",children:e("up")}),r("option",{value:"down",children:e("down")})]}),i($,{className:"flex items-center gap-1.5",htmlFor:"mg-dry-run",children:[r("input",{checked:h,className:"size-4 accent-primary","data-testid":"mg-dry-run",id:"mg-dry-run",onChange:F,type:"checkbox"}),e("Dry run")]}),h?r(_,{"data-testid":"mg-run",disabled:m||!w,onClick:N,size:"sm",type:"button",children:e(m?"Running…":"Run")}):r(P,{confirmLabel:e(m?"Running…":"Run migration?"),disabled:m||!w,onConfirm:N,testId:"mg-run",children:e("Run")})]})]}),b!==null&&r("pre",{className:"text-sm text-destructive whitespace-pre-wrap","data-testid":"mg-run-error",role:"alert",children:b}),s!==null&&i("p",{className:"text-sm text-muted-foreground","data-testid":"mg-run-result",children:[s.dryRun?e("Dry run: "):"",e("{status} — processed",{status:s.status}),s.processed,e(", changed"),s.changed]})]})};export{Er as MigrationsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as W}from"react/compiler-runtime";import{useState as T}from"react";import{E as B}from"../packem_shared/error-alert-B59DnrDI.js";import{g as _}from"../packem_shared/badge-BbuuAio7.js";import{u as z}from"../packem_shared/button-BkCrNcAs.js";import{c as K,u as O}from"../packem_shared/card-CIDGUN6K.js";import{E as U}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as q}from"../packem_shared/input-JHu63lTv.js";import{n as G,d as J,m as F,p as h,f as Q,u as f}from"../packem_shared/table-DdJBrClo.js";import{K as X}from"../packem_shared/use-admin-query-Di3fLE8H.js";import{useT as Y}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js";import{i as ee}from"../packem_shared/internal-AtZ4bTal.js";import{jsx as t,jsxs as x}from"react/jsx-runtime";const te=e=>e==="ok"?"success":e==="failed"?"destructive":e==="expired"?"warning":"secondary",P=e=>e.endpoint??e.id,ve=()=>{const e=W(38),r=Y(),[i,R]=T("all"),[s,V]=T("");let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g={},e[0]=g):g=e[0];const{data:S,error:o,errorSource:p,isLoading:C,refetch:v}=X(Z.listPushSubscriptions,g);let N;if(e[1]!==S?.subscriptions||e[2]!==o||e[3]!==p||e[4]!==C||e[5]!==i||e[6]!==v||e[7]!==s||e[8]!==r){const A=S?.subscriptions??[],j=s.trim().toLowerCase(),E=A.filter(a=>i!=="all"&&a.kind!==i?!1:j===""?!0:`${P(a)} ${a.userId??""}`.toLowerCase().includes(j));let b;e[10]===Symbol.for("react.memo_cache_sentinel")?(b=a=>{V(a.target.value)},e[10]=b):b=e[10];const D=b;let w;e[11]!==v?(w=()=>{v()},e[11]=v,e[12]=w):w=e[12];const I=w;let y;e[13]===Symbol.for("react.memo_cache_sentinel")?(y=["all","web-push","fcm"],e[13]=y):y=e[13];const H=y;let l;e[14]!==i||e[15]!==r?(l=t("div",{className:"flex items-center gap-1","data-testid":"nt-kind-filter",role:"tablist",children:H.map(a=>t(z,{"aria-selected":i===a,"data-testid":`nt-kind-${a}`,onClick:()=>{R(a)},role:"tab",size:"sm",type:"button",variant:i===a?"secondary":"ghost",children:a==="all"?r("All"):a},a))}),e[14]=i,e[15]=r,e[16]=l):l=e[16];let n;e[17]!==r?(n=r("Filter devices"),e[17]=r,e[18]=n):n=e[18];let c;e[19]!==r?(c=r("filter endpoint, user"),e[19]=r,e[20]=c):c=e[20];let d;e[21]!==s||e[22]!==n||e[23]!==c?(d=t(q,{"aria-label":n,className:"h-8 w-56","data-testid":"nt-search",onChange:D,placeholder:c,value:s}),e[21]=s,e[22]=n,e[23]=c,e[24]=d):d=e[24];let m;e[25]!==r?(m=r("Refresh"),e[25]=r,e[26]=m):m=e[26];let u;e[27]!==I||e[28]!==m?(u=t(z,{className:"ml-auto","data-testid":"nt-refresh",onClick:I,size:"sm",type:"button",variant:"outline",children:m}),e[27]=I,e[28]=m,e[29]=u):u=e[29];const L=A.length>0&&t(_,{"data-testid":"nt-count",variant:"secondary",children:r("{count} devices",{count:A.length})});let $;e[30]!==u||e[31]!==L||e[32]!==l||e[33]!==d?($=x("div",{className:"flex flex-wrap items-center gap-2",children:[l,d,u,L]}),e[30]=u,e[31]=L,e[32]=l,e[33]=d,e[34]=$):$=e[34];let k;e[35]!==o||e[36]!==p?(k=o!==null&&t(B,{error:p,testId:"nt-error"}),e[35]=o,e[36]=p,e[37]=k):k=e[37],N=x("div",{className:"flex flex-col gap-4","data-testid":"lunora-notifications",children:[$,k,o===null&&!C&&E.length===0&&t(U,{description:r("Registered Web Push / FCM devices appear here. Configure lunora/notify.ts with defineNotify({ store }) and register a device with ctx.push.register(...)."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M15 17h5l-1.4-1.4A2 2 0 0 1 18 14.2V11a6 6 0 0 0-4-5.7V5a2 2 0 1 0-4 0v.3A6 6 0 0 0 6 11v3.2a2 2 0 0 1-.6 1.4L4 17h5m6 0v1a3 3 0 1 1-6 0v-1m6 0H9"})}),testId:"nt-empty",title:r("No registered devices.")}),E.length>0&&t(K,{className:"overflow-hidden py-0",children:t(O,{className:"max-h-[30rem] overflow-auto px-0",children:x(G,{"data-testid":"nt-table",children:[t(J,{children:x(F,{children:[t(h,{children:r("kind")}),t(h,{children:r("endpoint")}),t(h,{children:r("user")}),t(h,{children:r("last seen")}),t(h,{children:r("status")}),t(h,{children:r("error")})]})}),t(Q,{children:E.map(a=>{const M=P(a);return x(F,{"data-testid":"nt-row",children:[t(f,{children:t(_,{variant:"outline",children:a.kind})}),t(f,{className:"max-w-[28ch] truncate font-mono text-xs",title:M,children:M}),t(f,{className:"max-w-[16ch] truncate font-mono text-xs",children:a.userId??t("span",{className:"text-muted-foreground",children:"—"})}),t(f,{className:"text-muted-foreground tabular-nums",children:ee(a.lastSeenAt,"—")}),t(f,{children:t(_,{"data-testid":`nt-status-${a.id}`,variant:te(a.lastStatus),children:a.lastStatus??r("n/a")})}),t(f,{className:"max-w-[28ch] truncate font-mono text-xs text-muted-foreground",title:a.lastError??void 0,children:a.lastError??t("span",{className:"text-muted-foreground",children:"—"})})]},a.id)})})]})})})]}),e[1]=S?.subscriptions,e[2]=o,e[3]=p,e[4]=C,e[5]=i,e[6]=v,e[7]=s,e[8]=r,e[9]=N}else N=e[9];return N};export{ve as NotificationsPanel};
|