@lunora/studio 1.0.0-alpha.106 → 1.0.0-alpha.108
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/dist/index.d.ts +15 -2
- package/dist/index.js +1 -1
- package/dist/mount.js +1 -1
- package/dist/packem_chunks/AdvisorHealthPanel.js +1 -1
- package/dist/packem_chunks/ApiTab.js +1 -1
- package/dist/packem_chunks/AuditPanel.js +1 -1
- package/dist/packem_chunks/DeploymentHealthPanel.js +1 -1
- package/dist/packem_chunks/ExportImportPanel.js +3 -3
- package/dist/packem_chunks/FileBrowser.js +4 -4
- package/dist/packem_chunks/FunctionRunner.js +1 -1
- package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
- package/dist/packem_chunks/HealthPanel.js +1 -1
- package/dist/packem_chunks/InsightsPanel.js +1 -1
- package/dist/packem_chunks/LogsPanel.js +1 -1
- package/dist/packem_chunks/MailPanel.js +1 -1
- package/dist/packem_chunks/MetricsPanel.js +1 -1
- package/dist/packem_chunks/NotificationsPanel.js +1 -1
- package/dist/packem_chunks/PitrPanel.js +1 -1
- package/dist/packem_chunks/SchemaViewer.js +1 -1
- package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
- package/dist/packem_chunks/SettingsPanel.js +1 -1
- package/dist/packem_chunks/SqlEditorPanel.js +6 -6
- package/dist/packem_chunks/TableEditor.js +1 -1
- package/dist/packem_chunks/agents-panel.js +1 -1
- package/dist/packem_chunks/analytics-panel.js +1 -1
- package/dist/packem_chunks/auth-audit-panel.js +1 -1
- package/dist/packem_chunks/auth-config-panel.js +1 -1
- package/dist/packem_chunks/auth-sessions-panel.js +1 -1
- package/dist/packem_chunks/containers-panel.js +1 -1
- package/dist/packem_chunks/dashboards-panel.js +1 -1
- package/dist/packem_chunks/evals-panel.js +1 -1
- package/dist/packem_chunks/fanout-panel.js +1 -1
- package/dist/packem_chunks/flags-panel.js +1 -1
- package/dist/packem_chunks/issues-panel.js +1 -1
- package/dist/packem_chunks/kv-browser.js +1 -1
- package/dist/packem_chunks/log-drains-panel.js +4 -4
- package/dist/packem_chunks/migrations-route.js +1 -1
- package/dist/packem_chunks/organizations-panel.js +1 -1
- package/dist/packem_chunks/payments-panel.js +1 -1
- package/dist/packem_chunks/permissions-panel.js +1 -1
- package/dist/packem_chunks/queues-panel.js +1 -1
- package/dist/packem_chunks/rls-panel.js +1 -1
- package/dist/packem_chunks/schedule-panel.js +1 -1
- package/dist/packem_chunks/sparkline.js +1 -1
- package/dist/packem_chunks/storage-rules-panel.js +1 -1
- package/dist/packem_chunks/subscriptions-panel.js +1 -1
- package/dist/packem_chunks/sync-client-panel.js +1 -1
- package/dist/packem_chunks/traces-panel.js +1 -1
- package/dist/packem_chunks/users-panel.js +1 -1
- package/dist/packem_chunks/vector-browser.js +1 -1
- package/dist/packem_chunks/workflows-panel.js +1 -1
- package/dist/packem_shared/ApiDocsPanel-BQ79UVEg.js +2 -0
- package/dist/packem_shared/ApiReferencePanel-CkCFMCBb.js +1 -0
- package/dist/packem_shared/CommandPalette-B5yLEABs.js +1 -0
- package/dist/packem_shared/ConfirmButton-Cj2SOapE.js +1 -0
- package/dist/packem_shared/ConnectionBadge-Bh16X9-u.js +1 -0
- package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.js +1 -0
- package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-1Lrg55IV.js +1 -0
- package/dist/packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js +1 -0
- package/dist/packem_shared/DataBrowser-BnDIFN-S.js +1 -0
- package/dist/packem_shared/DataFilters-3nbW0uax.js +1 -0
- package/dist/packem_shared/ErrorBoundary-BWNF98VF.js +1 -0
- package/dist/packem_shared/GlobalDataBrowser-DusjXzRF.js +1 -0
- package/dist/packem_shared/HomePanel-BcaHVBJh.js +1 -0
- package/dist/packem_shared/MigrationsPanel-CCOENX4X.js +1 -0
- package/dist/packem_shared/OpenRpcReferencePanel-21OWMH45.js +1 -0
- package/dist/packem_shared/ScheduledJobs-CiO3eXgI.js +1 -0
- package/dist/packem_shared/ShardInput-XumEzeT0.js +1 -0
- package/dist/packem_shared/Studio-CHmLCjBR.js +1 -0
- package/dist/packem_shared/StudioApp-DCdbsciH.js +1 -0
- package/dist/packem_shared/StudioI18nProvider-Bl547evf.js +1 -0
- package/dist/packem_shared/advisor-view-C1KFTXSH.js +1 -0
- package/dist/packem_shared/aggregateMetrics-A-Y7OH6R.js +1 -0
- package/dist/packem_shared/alert-C2SEhYS9.js +1 -0
- package/dist/packem_shared/{badge-BbuuAio7.js → badge-cAk9Di1Q.js} +1 -1
- package/dist/packem_shared/bar-chart-CCyO67Uf.js +6 -0
- package/dist/packem_shared/browser-storage-Br_bLeBt.js +1 -0
- package/dist/packem_shared/{button-BkCrNcAs.js → button-BOPLD1un.js} +1 -1
- package/dist/packem_shared/card-BGlQzQY-.js +1 -0
- package/dist/packem_shared/cf-links-CBJ5SywP.js +1 -0
- package/dist/packem_shared/{checkbox-StT4Gob6.js → checkbox-C5w53W-E.js} +1 -1
- package/dist/packem_shared/data-grid-BFTQnkXq.js +1 -0
- package/dist/packem_shared/data-view-params-qoSTqjAj.js +1 -0
- package/dist/packem_shared/dropdown-menu-D_ewqsUU.js +2 -0
- package/dist/packem_shared/empty-state-B939z6K2.js +1 -0
- package/dist/packem_shared/error-alert-TYdKetJd.js +1 -0
- package/dist/packem_shared/grid-features-C_yXlMc_.js +6 -0
- package/dist/packem_shared/home-panel-BiJHXeDC.js +3 -0
- package/dist/packem_shared/input-CY5W3wzv.js +1 -0
- package/dist/packem_shared/internal-CwaF9YNk.js +2 -0
- package/dist/packem_shared/label-BOUo-DP0.js +1 -0
- package/dist/packem_shared/live-status-Bf7rR8o8.js +1 -0
- package/dist/packem_shared/{log-fields-CoL3hsIQ.js → log-fields-SBxKyBug.js} +1 -1
- package/dist/packem_shared/log-line-UnE93Ovi.js +1 -0
- package/dist/packem_shared/modal-shell-wGW4CKEW.js +1 -0
- package/dist/packem_shared/operation-console-provider-DoloEvon.js +1 -0
- package/dist/packem_shared/recording-client-CKn4-vUx.js +1 -0
- package/dist/packem_shared/reference-view-CUIDzLf0.js +12 -0
- package/dist/packem_shared/result-chart-Ca3YLzt8.js +1 -0
- package/dist/packem_shared/schema-diagram-DHD13TjS.js +2 -0
- package/dist/packem_shared/scroll-area-DSJftwu_.js +2 -0
- package/dist/packem_shared/select-BPISLTcv.js +2 -0
- package/dist/packem_shared/shard-history-QcjcMnCA.js +1 -0
- package/dist/packem_shared/skeleton-DFBBaJU6.js +1 -0
- package/dist/packem_shared/sparkline-BreIqzDO.js +1 -0
- package/dist/packem_shared/stat-card-B9uIvAHg.js +1 -0
- package/dist/packem_shared/{storage-tier-DznqOf-q.js → storage-tier-C2mKwYRj.js} +1 -1
- package/dist/packem_shared/studio-B3eEcBK0.js +2 -0
- package/dist/packem_shared/table-BMsuYFhk.js +2 -0
- package/dist/packem_shared/table-list-sidebar-Bluzd1_2.js +1 -0
- package/dist/packem_shared/textarea-DpO3i-Qo.js +1 -0
- package/dist/packem_shared/{trace-handoff-Dw7mwjxu.js → trace-handoff-C0CFV2ix.js} +1 -1
- package/dist/packem_shared/use-admin-query-P0RJrjsD.js +1 -0
- package/dist/packem_shared/use-async-submit-DdLd0MdK.js +1 -0
- package/dist/packem_shared/use-auth-config-z3KRWAqD.js +1 -0
- package/dist/packem_shared/use-open-trace-4tIa0SXZ.js +1 -0
- package/dist/packem_shared/use-shard-key-BsP3o5wT.js +1 -0
- package/dist/packem_shared/use-sql-assistant-CP90nLLh.js +1 -0
- package/dist/packem_shared/useDebounced-DVeQ5-oW.js +1 -0
- package/dist/packem_shared/virtual-rect-D_j7aLxX.js +1 -0
- package/dist/packem_shared/wire-codec-Dl3VeNrd.js +1 -0
- package/dist/standalone/chunk-25OIGX2A.js +1 -0
- package/dist/standalone/{chunk-OBMNLQWG.js → chunk-26VREVWU.js} +1 -1
- package/dist/standalone/chunk-2BDM6HNL.js +1 -0
- package/dist/standalone/{chunk-6WB63KTN.js → chunk-2DC6F7NH.js} +1 -1
- package/dist/standalone/chunk-3F5I435D.js +1 -0
- package/dist/standalone/{chunk-RJS7UD5U.js → chunk-3QB5JI32.js} +1 -1
- package/dist/standalone/chunk-3RYEUXY2.js +1 -0
- package/dist/standalone/chunk-44WNSIGQ.js +1 -0
- package/dist/standalone/chunk-45YWYMD5.js +1 -0
- package/dist/standalone/chunk-4MAJFNON.js +1 -0
- package/dist/standalone/chunk-4YTSKL4R.js +1 -0
- package/dist/standalone/chunk-57VX76PR.js +1 -0
- package/dist/standalone/chunk-5JLIP2HH.js +1 -0
- package/dist/standalone/chunk-5NRQIDQA.js +1 -0
- package/dist/standalone/{chunk-2ZG23BA5.js → chunk-5T7KRUPX.js} +1 -1
- package/dist/standalone/chunk-6FWN26RH.js +1 -0
- package/dist/standalone/chunk-6JGXSMKV.js +1 -0
- package/dist/standalone/{chunk-HX7IXD7I.js → chunk-6NJAHOGO.js} +1 -1
- package/dist/standalone/chunk-6SAAMM4S.js +1 -0
- package/dist/standalone/{chunk-IUYFXK4X.js → chunk-6ZPTNC34.js} +6 -6
- package/dist/standalone/chunk-74ASA4WU.js +1 -0
- package/dist/standalone/{chunk-6ST5ECQA.js → chunk-7PIHTTND.js} +1 -1
- package/dist/standalone/{chunk-GMR677FL.js → chunk-7SROZWKL.js} +1 -1
- package/dist/standalone/chunk-AECDJKXB.js +1 -0
- package/dist/standalone/{chunk-2PJNAWB3.js → chunk-AFKLFS74.js} +1 -1
- package/dist/standalone/chunk-AOAJGSYZ.js +2 -0
- package/dist/standalone/chunk-AOE75NAT.js +1 -0
- package/dist/standalone/{chunk-HFRJMPXJ.js → chunk-APRVSWBH.js} +27 -27
- package/dist/standalone/{chunk-LWE6NWQX.js → chunk-BELLXCN7.js} +1 -1
- package/dist/standalone/chunk-BORG7WUC.js +1 -0
- package/dist/standalone/{chunk-AVAC26HJ.js → chunk-BQK2C2Z4.js} +1 -1
- package/dist/standalone/chunk-BRHTM6FU.js +1 -0
- package/dist/standalone/{chunk-MWIKAR7F.js → chunk-BWEXJENB.js} +1 -1
- package/dist/standalone/chunk-C5E5PLJT.js +4 -0
- package/dist/standalone/chunk-C7E4I7JZ.js +1 -0
- package/dist/standalone/{chunk-QWGT25SE.js → chunk-CAOUXOL7.js} +1 -1
- package/dist/standalone/chunk-CEPMQS24.js +6 -0
- package/dist/standalone/chunk-CKTKI4IY.js +1 -0
- package/dist/standalone/{chunk-IC4L6G56.js → chunk-CN2AINNY.js} +1 -1
- package/dist/standalone/chunk-CP4ZFBVW.js +1 -0
- package/dist/standalone/chunk-CYX3OHJ3.js +1 -0
- package/dist/standalone/{chunk-7P7NURTD.js → chunk-D7DUQS2Y.js} +1 -1
- package/dist/standalone/{chunk-QBWRC5YX.js → chunk-DKSLOJDQ.js} +1 -1
- package/dist/standalone/chunk-DL3UOEWN.js +1 -0
- package/dist/standalone/chunk-DPNEFSEC.js +1 -0
- package/dist/standalone/{chunk-BGBLQ563.js → chunk-DUDQV6XJ.js} +1 -1
- package/dist/standalone/chunk-EDHW2EEG.js +1 -0
- package/dist/standalone/chunk-EYGF6TQS.js +1 -0
- package/dist/standalone/chunk-F7JOSNAT.js +1 -0
- package/dist/standalone/{chunk-7QOXFLZB.js → chunk-FBAZHG35.js} +1 -1
- package/dist/standalone/chunk-FLCK2WWQ.js +1 -0
- package/dist/standalone/chunk-FSWPREH3.js +1 -0
- package/dist/standalone/{chunk-ZCNMXKF2.js → chunk-GIRZD3UB.js} +2 -2
- package/dist/standalone/chunk-GZMBMNL3.js +6 -0
- package/dist/standalone/chunk-HPX3IM45.js +13 -0
- package/dist/standalone/{chunk-KUVMORDQ.js → chunk-INBA3473.js} +1 -1
- package/dist/standalone/{chunk-T6VMSOBB.js → chunk-INQICZYC.js} +1 -1
- package/dist/standalone/chunk-IWNVQHF7.js +1 -0
- package/dist/standalone/chunk-IWOZGUI2.js +1 -0
- package/dist/standalone/chunk-IYWVSMAY.js +1 -0
- package/dist/standalone/chunk-JURAVSE7.js +1 -0
- package/dist/standalone/chunk-JUWOEHDD.js +1 -0
- package/dist/standalone/{chunk-4UOFSGUS.js → chunk-JV7KTJPY.js} +1 -1
- package/dist/standalone/{chunk-XVD7HWY7.js → chunk-JVAYDDMK.js} +1 -1
- package/dist/standalone/chunk-KEKIGANB.js +1 -0
- package/dist/standalone/chunk-KFZ37KQP.js +1 -0
- package/dist/standalone/chunk-KQIHXYE6.js +1 -0
- package/dist/standalone/chunk-L4EZAHCD.js +1 -0
- package/dist/standalone/chunk-L7CJ5PGH.js +1 -0
- package/dist/standalone/{chunk-5MJ3G4DY.js → chunk-LT4XQDD2.js} +1 -1
- package/dist/standalone/chunk-M3NNNOD5.js +1 -0
- package/dist/standalone/chunk-MBEIKVJH.js +1 -0
- package/dist/standalone/chunk-MCLM2QJI.js +1 -0
- package/dist/standalone/chunk-METRMDIQ.js +1 -0
- package/dist/standalone/{chunk-OKQ3NJOW.js → chunk-MGC6PRMV.js} +1 -1
- package/dist/standalone/chunk-MOUI44OT.js +1 -0
- package/dist/standalone/{chunk-DRR3KV5L.js → chunk-MSFUDXBA.js} +1 -1
- package/dist/standalone/chunk-NIX2QSSN.js +1 -0
- package/dist/standalone/chunk-NXXGISFB.js +1 -0
- package/dist/standalone/{chunk-SBZXUGZ7.js → chunk-OE4KGVJW.js} +4 -4
- package/dist/standalone/chunk-OG57FC7W.js +1 -0
- package/dist/standalone/chunk-OLQWBGKT.js +1 -0
- package/dist/standalone/{chunk-F2I4JLFR.js → chunk-OOBJFXYB.js} +1 -1
- package/dist/standalone/chunk-P52BY657.js +1 -0
- package/dist/standalone/chunk-PHHMPYEP.js +1 -0
- package/dist/standalone/{chunk-6KWKX3RH.js → chunk-PJDKRUWT.js} +1 -1
- package/dist/standalone/chunk-PZ4QDWTI.js +1 -0
- package/dist/standalone/chunk-QZ55OWAB.js +4 -0
- package/dist/standalone/chunk-R5ZTCHCE.js +1 -0
- package/dist/standalone/chunk-RBUVNO22.js +1 -0
- package/dist/standalone/{chunk-XBDKZZ67.js → chunk-RCZTUWG3.js} +1 -1
- package/dist/standalone/chunk-S77D4SHR.js +1 -0
- package/dist/standalone/chunk-SL5R7WBN.js +1 -0
- package/dist/standalone/chunk-SMKRXJUC.js +1 -0
- package/dist/standalone/{chunk-THIXMMZD.js → chunk-SPDZUX4P.js} +1 -1
- package/dist/standalone/chunk-T2LDA6WP.js +1 -0
- package/dist/standalone/{chunk-5UY7MLRC.js → chunk-T6HLABZW.js} +1 -1
- package/dist/standalone/{chunk-BDHAGUAY.js → chunk-TBXK3FKP.js} +4 -4
- package/dist/standalone/{chunk-7QIFDWQV.js → chunk-TFMQSCGC.js} +1 -1
- package/dist/standalone/chunk-TLPWZ5NI.js +3 -0
- package/dist/standalone/chunk-TNKECJW4.js +1 -0
- package/dist/standalone/{chunk-XQCVZAGU.js → chunk-UANVABQG.js} +1 -1
- package/dist/standalone/chunk-UIF57LBO.js +1 -0
- package/dist/standalone/chunk-V6QPVFDL.js +1 -0
- package/dist/standalone/chunk-VNTEQQPP.js +1 -0
- package/dist/standalone/chunk-VR3UJA7B.js +1 -0
- package/dist/standalone/{chunk-5DVJR52Z.js → chunk-VYW2PAWC.js} +3 -3
- package/dist/standalone/chunk-VZCS5GXZ.js +1 -0
- package/dist/standalone/{chunk-XYV7TMYI.js → chunk-WHRG6S5P.js} +1 -1
- package/dist/standalone/{chunk-CKG2DTZ2.js → chunk-WIG3HCUJ.js} +1 -1
- package/dist/standalone/chunk-WUW4ZHRL.js +1 -0
- package/dist/standalone/chunk-X6Q5DWLZ.js +1 -0
- package/dist/standalone/{chunk-Z2IF3TEX.js → chunk-XGIG4EDG.js} +4 -4
- package/dist/standalone/chunk-XJSWM47N.js +1 -0
- package/dist/standalone/chunk-XQS7KSHL.js +1 -0
- package/dist/standalone/chunk-YS7HEZC2.js +1 -0
- package/dist/standalone/chunk-YUWMB6EV.js +1 -0
- package/dist/standalone/{chunk-TMGHRD6W.js → chunk-ZPGNTTQ3.js} +1 -1
- package/dist/standalone/chunk-ZQLIKKIY.js +1 -0
- package/dist/standalone/chunk-ZSOLGJFC.js +1 -0
- package/dist/standalone/studio.js +6 -6
- package/package.json +9 -9
- package/dist/packem_shared/ApiDocsPanel-Cu_QmzO0.js +0 -2
- package/dist/packem_shared/ApiReferencePanel-DuIU1P8B.js +0 -1
- package/dist/packem_shared/CommandPalette-mPR8-vIm.js +0 -1
- package/dist/packem_shared/ConfirmButton-CTL3f3kr.js +0 -1
- package/dist/packem_shared/ConnectionBadge-DOk0CQWo.js +0 -1
- package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js +0 -1
- package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js +0 -1
- package/dist/packem_shared/DEFAULT_LOCALE-BZ4NojpD.js +0 -1
- package/dist/packem_shared/DataBrowser-CPNKM0KZ.js +0 -1
- package/dist/packem_shared/DataFilters-B26ZeqBZ.js +0 -1
- package/dist/packem_shared/ErrorBoundary-DvzYskH7.js +0 -1
- package/dist/packem_shared/GlobalDataBrowser-BSmyOO0n.js +0 -1
- package/dist/packem_shared/HomePanel-BUO6BcYQ.js +0 -1
- package/dist/packem_shared/MigrationsPanel-BAnvY79E.js +0 -1
- package/dist/packem_shared/OpenRpcReferencePanel-DXeffPFr.js +0 -1
- package/dist/packem_shared/ScheduledJobs-pHVlh2xU.js +0 -1
- package/dist/packem_shared/ShardInput-BVn2iCU0.js +0 -1
- package/dist/packem_shared/Studio-CD66AkL1.js +0 -1
- package/dist/packem_shared/StudioApp-0Vaayv2I.js +0 -1
- package/dist/packem_shared/StudioI18nProvider-CZ5h4nrV.js +0 -1
- package/dist/packem_shared/advisor-view-CGcwvlMo.js +0 -1
- package/dist/packem_shared/aggregateMetrics-BNfajLa2.js +0 -1
- package/dist/packem_shared/alert-CVcOFuDR.js +0 -1
- package/dist/packem_shared/bar-chart-B8oDHgnw.js +0 -6
- package/dist/packem_shared/browser-storage-xjTyMKY0.js +0 -1
- package/dist/packem_shared/card-BMKx5UdA.js +0 -1
- package/dist/packem_shared/cf-links-Dmg86v1D.js +0 -1
- package/dist/packem_shared/data-grid-Ci4-tZkk.js +0 -1
- package/dist/packem_shared/data-view-params-ClrV7XgF.js +0 -1
- package/dist/packem_shared/dropdown-menu-BgS2zw1i.js +0 -2
- package/dist/packem_shared/empty-state-Cg7t_8qu.js +0 -1
- package/dist/packem_shared/error-alert-_2q2VtVG.js +0 -1
- package/dist/packem_shared/grid-features-Y2YSjhCf.js +0 -6
- package/dist/packem_shared/home-panel-Ir3YHReO.js +0 -3
- package/dist/packem_shared/input-JHu63lTv.js +0 -1
- package/dist/packem_shared/internal-zkEvTqy8.js +0 -2
- package/dist/packem_shared/label-6uP1obNF.js +0 -1
- package/dist/packem_shared/live-status-CmuRLFKf.js +0 -1
- package/dist/packem_shared/log-line-BDI826X-.js +0 -1
- package/dist/packem_shared/modal-shell-CUwwWC2o.js +0 -1
- package/dist/packem_shared/operation-console-provider-BMJNtiyB.js +0 -1
- package/dist/packem_shared/recording-client-DtUxwVNY.js +0 -1
- package/dist/packem_shared/reference-view-DncEStdm.js +0 -12
- package/dist/packem_shared/result-chart-0VgP_3FP.js +0 -1
- package/dist/packem_shared/schema-diagram-GVgnLWTf.js +0 -2
- package/dist/packem_shared/scroll-area-DTEq6Jec.js +0 -2
- package/dist/packem_shared/select-BssZMiFY.js +0 -2
- package/dist/packem_shared/shard-history-DMEW5VBE.js +0 -1
- package/dist/packem_shared/skeleton-C1wQ9M5t.js +0 -1
- package/dist/packem_shared/sparkline-BNvxiJj_.js +0 -1
- package/dist/packem_shared/stat-card-BGJdhfm6.js +0 -1
- package/dist/packem_shared/studio-CUXq5VSB.js +0 -2
- package/dist/packem_shared/table-DZAB8cs3.js +0 -2
- package/dist/packem_shared/table-list-sidebar-fz0m_4I4.js +0 -1
- package/dist/packem_shared/textarea-Bu2-jKAs.js +0 -1
- package/dist/packem_shared/use-admin-query-CnnyWJXM.js +0 -1
- package/dist/packem_shared/use-async-submit-B32whHJO.js +0 -1
- package/dist/packem_shared/use-auth-config-0EnNCdLu.js +0 -1
- package/dist/packem_shared/use-open-trace-CniEgUdp.js +0 -1
- package/dist/packem_shared/use-shard-key-B2JtNa5m.js +0 -1
- package/dist/packem_shared/use-sql-assistant-Dtw55kKM.js +0 -1
- package/dist/packem_shared/useDebounced-CU-uftxO.js +0 -1
- package/dist/packem_shared/virtual-rect-1o1veP7R.js +0 -1
- package/dist/packem_shared/wire-codec-DkrdsFXO.js +0 -1
- package/dist/standalone/chunk-25IDU7IW.js +0 -1
- package/dist/standalone/chunk-2OUPA2WJ.js +0 -1
- package/dist/standalone/chunk-2QSHLBCO.js +0 -1
- package/dist/standalone/chunk-3C3CG7ZK.js +0 -1
- package/dist/standalone/chunk-3CWGJYBB.js +0 -1
- package/dist/standalone/chunk-3DH35OZ5.js +0 -1
- package/dist/standalone/chunk-3SCGCJYS.js +0 -1
- package/dist/standalone/chunk-3XIESWL4.js +0 -1
- package/dist/standalone/chunk-54MMVNPT.js +0 -1
- package/dist/standalone/chunk-5RIKPDDA.js +0 -1
- package/dist/standalone/chunk-5Y3QLNWX.js +0 -1
- package/dist/standalone/chunk-63D4ABMW.js +0 -1
- package/dist/standalone/chunk-6QBOXH2I.js +0 -1
- package/dist/standalone/chunk-7CZI2HNL.js +0 -1
- package/dist/standalone/chunk-7T7UOTYK.js +0 -1
- package/dist/standalone/chunk-7UP7OQJG.js +0 -1
- package/dist/standalone/chunk-AXQU7ULF.js +0 -1
- package/dist/standalone/chunk-BCOT3QRZ.js +0 -1
- package/dist/standalone/chunk-BG5ELOW6.js +0 -1
- package/dist/standalone/chunk-BXJPPINU.js +0 -1
- package/dist/standalone/chunk-BZDIRP7L.js +0 -1
- package/dist/standalone/chunk-C3YACIEE.js +0 -1
- package/dist/standalone/chunk-CAOA5AM4.js +0 -1
- package/dist/standalone/chunk-CFPZYHPY.js +0 -2
- package/dist/standalone/chunk-CZZWYUTR.js +0 -1
- package/dist/standalone/chunk-DJZYD5I5.js +0 -1
- package/dist/standalone/chunk-DNEIBTLL.js +0 -1
- package/dist/standalone/chunk-EF5J67J3.js +0 -1
- package/dist/standalone/chunk-EJWTF334.js +0 -1
- package/dist/standalone/chunk-EP4JQH5X.js +0 -1
- package/dist/standalone/chunk-ESVP44Y3.js +0 -1
- package/dist/standalone/chunk-EXL35M7T.js +0 -1
- package/dist/standalone/chunk-F3J6ER2V.js +0 -13
- package/dist/standalone/chunk-FURI47Z2.js +0 -1
- package/dist/standalone/chunk-FZ2N52BV.js +0 -1
- package/dist/standalone/chunk-GG6PIGQO.js +0 -1
- package/dist/standalone/chunk-GRL5MG3Z.js +0 -1
- package/dist/standalone/chunk-HBSEWNIR.js +0 -1
- package/dist/standalone/chunk-HLENOQDN.js +0 -1
- package/dist/standalone/chunk-HPFLBYRI.js +0 -1
- package/dist/standalone/chunk-HUF7RMS3.js +0 -1
- package/dist/standalone/chunk-I6A5C46N.js +0 -1
- package/dist/standalone/chunk-IBPWTHHW.js +0 -1
- package/dist/standalone/chunk-IGCNMZSB.js +0 -1
- package/dist/standalone/chunk-IVFHIQOT.js +0 -1
- package/dist/standalone/chunk-KZRWBSYQ.js +0 -1
- package/dist/standalone/chunk-LEDWUPXM.js +0 -1
- package/dist/standalone/chunk-MLT5MMMY.js +0 -1
- package/dist/standalone/chunk-OENUM3OW.js +0 -1
- package/dist/standalone/chunk-QLQADHFE.js +0 -1
- package/dist/standalone/chunk-RA5DW5MU.js +0 -1
- package/dist/standalone/chunk-RFSPHFKM.js +0 -1
- package/dist/standalone/chunk-RMN2JN4S.js +0 -1
- package/dist/standalone/chunk-S23KCFVU.js +0 -1
- package/dist/standalone/chunk-S4665UG5.js +0 -4
- package/dist/standalone/chunk-SD4BERSA.js +0 -1
- package/dist/standalone/chunk-SFDOII3B.js +0 -1
- package/dist/standalone/chunk-SMIESS7P.js +0 -1
- package/dist/standalone/chunk-SY6ANTKE.js +0 -1
- package/dist/standalone/chunk-TCV7MMYR.js +0 -1
- package/dist/standalone/chunk-UFESYXCE.js +0 -6
- package/dist/standalone/chunk-UKI2ZYB2.js +0 -1
- package/dist/standalone/chunk-UTK6JUTY.js +0 -1
- package/dist/standalone/chunk-V53KNYRN.js +0 -1
- package/dist/standalone/chunk-VIJLMIC3.js +0 -1
- package/dist/standalone/chunk-VOY5EALQ.js +0 -1
- package/dist/standalone/chunk-VR3OBMGZ.js +0 -1
- package/dist/standalone/chunk-WJCKVELA.js +0 -1
- package/dist/standalone/chunk-WJQLNYGX.js +0 -1
- package/dist/standalone/chunk-WPK2Q33V.js +0 -6
- package/dist/standalone/chunk-WQH3LT2P.js +0 -1
- package/dist/standalone/chunk-WZ65AZKA.js +0 -1
- package/dist/standalone/chunk-XEGWCG5S.js +0 -1
- package/dist/standalone/chunk-XFGE43TZ.js +0 -1
- package/dist/standalone/chunk-XNSCEAHM.js +0 -4
- package/dist/standalone/chunk-XXQUMVWH.js +0 -1
- package/dist/standalone/chunk-Y32QIKBS.js +0 -1
- package/dist/standalone/chunk-YJ25NVR2.js +0 -3
- package/dist/standalone/chunk-ZJGP6EKR.js +0 -1
- /package/dist/standalone/{chunk-XF2B7P5A.js → chunk-W2JBKQNU.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as I}from"react/compiler-runtime";import{useState as j,useEffect as D}from"react";import{S as Q}from"../packem_shared/result-chart-Ca3YLzt8.js";import{A as P}from"../packem_shared/alert-C2SEhYS9.js";import{B as F}from"../packem_shared/button-BOPLD1un.js";import{b as U,c as V,a as z,C as B}from"../packem_shared/card-BGlQzQY-.js";import{E as H}from"../packem_shared/empty-state-B939z6K2.js";import{useT as W}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{u as Y,n as G}from"../packem_shared/browser-storage-Br_bLeBt.js";import{useLunora as Z}from"@lunora/react";import{ADMIN_FUNCTIONS as J}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{c as X,d as ee,b as te,f as se}from"../packem_shared/internal-CwaF9YNk.js";import{jsx as f,jsxs as $}from"react/jsx-runtime";const ie=X(J.runSql),le=(M,e)=>{const t=I(11),c=Z(),[s,i]=j(void 0),[o,l]=j(void 0),[d,L]=j(!0);let n;t[0]!==c||t[1]!==e||t[2]!==M?(n=async h=>{L(!0);try{const k=await c.query(ie,{sql:M},ee(e));h.cancelled||(i(k),l(void 0))}catch(k){const K=k;h.cancelled||(i(void 0),l(te(K)))}h.cancelled||L(!1)},t[0]=c,t[1]=e,t[2]=M,t[3]=n):n=t[3];const w=n;let y,N;t[4]!==w?(y=()=>{const h={cancelled:!1};return se(w(h)),()=>{h.cancelled=!0}},N=[w],t[4]=w,t[5]=y,t[6]=N):(y=t[5],N=t[6]),D(y,N);let m;return t[7]!==o||t[8]!==d||t[9]!==s?(m={error:o,loading:d,result:s},t[7]=o,t[8]=d,t[9]=s,t[10]=m):m=t[10],m},oe="lunora-studio-dashboards",O={shardKey:"",sql:"",title:""},re=M=>{const e=I(54),{onEdit:t,onRemove:c,widget:s}=M,i=W(),{error:o,loading:l,result:d}=le(s.sql,s.shardKey??"");let L;e[0]!==t||e[1]!==s.id?(L=()=>{t(s.id)},e[0]=t,e[1]=s.id,e[2]=L):L=e[2];const n=L;let w;e[3]!==c||e[4]!==s.id?(w=()=>{c(s.id)},e[3]=c,e[4]=s.id,e[5]=w):w=e[5];const y=w,N=`dashboards-widget-${s.id}`;let m;e[6]!==s.title?(m=f(U,{className:"min-w-0 truncate",title:s.title,children:s.title}),e[6]=s.title,e[7]=m):m=e[7];let h;e[8]!==i?(h=i("Edit widget"),e[8]=i,e[9]=h):h=e[9];const k=`dashboards-widget-edit-${s.id}`;let K;e[10]!==i?(K=i("Edit widget"),e[10]=i,e[11]=K):K=e[11];let E;e[12]===Symbol.for("react.memo_cache_sentinel")?(E=f("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:f("path",{d:"M4 20h4L18 10l-4-4L4 16v4ZM14 6l4 4"})}),e[12]=E):E=e[12];let q;e[13]!==n||e[14]!==h||e[15]!==k||e[16]!==K?(q=f(F,{"aria-label":h,"data-testid":k,onClick:n,size:"icon-xs",title:K,type:"button",variant:"ghost",children:E}),e[13]=n,e[14]=h,e[15]=k,e[16]=K,e[17]=q):q=e[17];let x;e[18]!==i?(x=i("Remove widget"),e[18]=i,e[19]=x):x=e[19];const A=`dashboards-widget-remove-${s.id}`;let u;e[20]!==i?(u=i("Remove widget"),e[20]=i,e[21]=u):u=e[21];let C;e[22]===Symbol.for("react.memo_cache_sentinel")?(C=f("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:f("path",{d:"M5 7h14M9 7V5h6v2m-1 0v12H10V7M7 7v13h10V7"})}),e[22]=C):C=e[22];let g;e[23]!==y||e[24]!==x||e[25]!==A||e[26]!==u?(g=f(F,{"aria-label":x,"data-testid":A,onClick:y,size:"icon-xs",title:u,type:"button",variant:"ghost",children:C}),e[23]=y,e[24]=x,e[25]=A,e[26]=u,e[27]=g):g=e[27];let b;e[28]!==g||e[29]!==q?(b=$("div",{className:"flex shrink-0 items-center gap-1",children:[q,g]}),e[28]=g,e[29]=q,e[30]=b):b=e[30];let p;e[31]!==b||e[32]!==m?(p=$(V,{className:"flex flex-row items-start justify-between gap-2 border-b pb-3",children:[m,b]}),e[31]=b,e[32]=m,e[33]=p):p=e[33];let v;e[34]!==o||e[35]!==s.id?(v=o!==void 0&&f(P,{className:"font-mono text-xs",testId:`dashboards-widget-error-${s.id}`,variant:"destructive",children:o}),e[34]=o,e[35]=s.id,e[36]=v):v=e[36];let R;e[37]!==o||e[38]!==l||e[39]!==d||e[40]!==i||e[41]!==s.id?(R=o===void 0&&l&&d===void 0&&f("p",{className:"p-4 text-sm text-muted-foreground","data-testid":`dashboards-widget-loading-${s.id}`,children:i("Running…")}),e[37]=o,e[38]=l,e[39]=d,e[40]=i,e[41]=s.id,e[42]=R):R=e[42];let r;e[43]!==o||e[44]!==d?(r=o===void 0&&d!==void 0&&f(Q,{result:d}),e[43]=o,e[44]=d,e[45]=r):r=e[45];let a;e[46]!==v||e[47]!==R||e[48]!==r?(a=$(z,{className:"min-h-32 py-2",children:[v,R,r]}),e[46]=v,e[47]=R,e[48]=r,e[49]=a):a=e[49];let S;return e[50]!==p||e[51]!==a||e[52]!==N?(S=$(B,{"data-testid":N,children:[p,a]}),e[50]=p,e[51]=a,e[52]=N,e[53]=S):S=e[53],S},de=M=>{const e=I(58),{draft:t,editing:c,onCancel:s,onChange:i,onSubmit:o}=M,l=W();let d;e[0]!==t||e[1]!==i?(d=T=>{i({...t,title:T.target.value})},e[0]=t,e[1]=i,e[2]=d):d=e[2];const L=d;let n;e[3]!==t||e[4]!==i?(n=T=>{i({...t,sql:T.target.value})},e[3]=t,e[4]=i,e[5]=n):n=e[5];const w=n;let y;e[6]!==t||e[7]!==i?(y=T=>{i({...t,shardKey:T.target.value})},e[6]=t,e[7]=i,e[8]=y):y=e[8];const N=y;let m;e[9]!==o?(m=()=>{o()},e[9]=o,e[10]=m):m=e[10];const h=m;let k;e[11]!==t.sql||e[12]!==t.title?(k=t.title.trim()!==""&&t.sql.trim()!=="",e[11]=t.sql,e[12]=t.title,e[13]=k):k=e[13];const K=k;let E;e[14]!==l?(E=l("Widget title"),e[14]=l,e[15]=E):E=e[15];let q;e[16]!==l?(q=l("Widget title"),e[16]=l,e[17]=q):q=e[17];let x;e[18]!==t.title||e[19]!==L||e[20]!==E||e[21]!==q?(x=f("input",{"aria-label":E,className:"h-8 rounded-md border border-border bg-background px-2 text-xs outline-none focus-visible:border-ring","data-testid":"dashboards-form-title",onChange:L,placeholder:q,type:"text",value:t.title}),e[18]=t.title,e[19]=L,e[20]=E,e[21]=q,e[22]=x):x=e[22];let A;e[23]!==l?(A=l("SQL query"),e[23]=l,e[24]=A):A=e[24];let u;e[25]!==t.sql||e[26]!==w||e[27]!==A?(u=f("textarea",{"aria-label":A,className:"min-h-24 resize-y rounded-md border border-border bg-background p-2 font-mono text-xs leading-5 outline-none focus-visible:border-ring","data-testid":"dashboards-form-sql",onChange:w,placeholder:"SELECT author, COUNT(*) AS messages FROM …",spellCheck:!1,value:t.sql}),e[25]=t.sql,e[26]=w,e[27]=A,e[28]=u):u=e[28];let C;e[29]!==l?(C=l("Shard key (optional)"),e[29]=l,e[30]=C):C=e[30];let g;e[31]!==l?(g=l("Shard key (optional)"),e[31]=l,e[32]=g):g=e[32];let b;e[33]!==t.shardKey||e[34]!==N||e[35]!==C||e[36]!==g?(b=f("input",{"aria-label":C,className:"h-8 rounded-md border border-border bg-background px-2 font-mono text-xs outline-none focus-visible:border-ring","data-testid":"dashboards-form-shard",onChange:N,placeholder:g,type:"text",value:t.shardKey}),e[33]=t.shardKey,e[34]=N,e[35]=C,e[36]=g,e[37]=b):b=e[37];let p;e[38]!==l?(p=l("Cancel"),e[38]=l,e[39]=p):p=e[39];let v;e[40]!==s||e[41]!==p?(v=f(F,{"data-testid":"dashboards-form-cancel",onClick:s,size:"sm",type:"button",variant:"outline",children:p}),e[40]=s,e[41]=p,e[42]=v):v=e[42];const R=!K;let r;e[43]!==c||e[44]!==l?(r=l(c?"Save widget":"Add widget"),e[43]=c,e[44]=l,e[45]=r):r=e[45];let a;e[46]!==h||e[47]!==R||e[48]!==r?(a=f(F,{"data-testid":"dashboards-form-save",disabled:R,onClick:h,size:"sm",type:"button",children:r}),e[46]=h,e[47]=R,e[48]=r,e[49]=a):a=e[49];let S;e[50]!==v||e[51]!==a?(S=$("div",{className:"flex items-center justify-end gap-2",children:[v,a]}),e[50]=v,e[51]=a,e[52]=S):S=e[52];let _;return e[53]!==u||e[54]!==b||e[55]!==S||e[56]!==x?(_=f(B,{"data-testid":"dashboards-form",children:$(z,{className:"flex flex-col gap-3 py-4",children:[x,u,b,S]})}),e[53]=u,e[54]=b,e[55]=S,e[56]=x,e[57]=_):_=e[57],_},Ce=M=>{const e=I(39),{initialShardKey:t}=M,c=W(),[s,i]=Y(oe),[o,l]=j(O),[d,L]=j(null),[n,w]=j(!1);let y;e[0]!==t?(y=()=>{L(null),l({...O,shardKey:t??""}),w(!0)},e[0]=t,e[1]=y):y=e[1];const N=y;let m;e[2]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{w(!1),L(null),l(O)},e[2]=m):m=e[2];const h=m;let k;e[3]!==s?(k=r=>{const a=s.find(S=>S.id===r);a!==void 0&&(L(r),l({shardKey:a.shardKey??"",sql:a.sql,title:a.title}),w(!0))},e[3]=s,e[4]=k):k=e[4];const K=k;let E;e[5]!==i?(E=r=>{i(a=>a.filter(S=>S.id!==r))},e[5]=i,e[6]=E):E=e[6];const q=E;let x;e[7]!==o.shardKey||e[8]!==o.sql||e[9]!==o.title||e[10]!==d||e[11]!==i?(x=()=>{const r=o.title.trim(),a=o.sql.trim();if(r===""||a==="")return;const S=o.shardKey.trim();i(d===null?_=>[..._,{id:G("w"),shardKey:S,sql:a,title:r}]:_=>_.map(T=>T.id===d?{...T,shardKey:S,sql:a,title:r}:T)),h()},e[7]=o.shardKey,e[8]=o.sql,e[9]=o.title,e[10]=d,e[11]=i,e[12]=x):x=e[12];const A=x;let u;e[13]!==c?(u=c("Chart widgets backed by saved read-only SQL queries."),e[13]=c,e[14]=u):u=e[14];let C;e[15]!==u?(C=f("p",{className:"text-sm text-muted-foreground",children:u}),e[15]=u,e[16]=C):C=e[16];let g;e[17]!==n||e[18]!==N||e[19]!==c?(g=!n&&f(F,{"data-testid":"dashboards-add",onClick:N,size:"sm",type:"button",children:c("Add widget")}),e[17]=n,e[18]=N,e[19]=c,e[20]=g):g=e[20];let b;e[21]!==C||e[22]!==g?(b=$("div",{className:"flex items-center justify-between",children:[C,g]}),e[21]=C,e[22]=g,e[23]=b):b=e[23];let p;e[24]!==o||e[25]!==d||e[26]!==n||e[27]!==A?(p=n&&f(de,{draft:o,editing:d!==null,onCancel:h,onChange:l,onSubmit:A}),e[24]=o,e[25]=d,e[26]=n,e[27]=A,e[28]=p):p=e[28];let v;e[29]!==n||e[30]!==K||e[31]!==q||e[32]!==c||e[33]!==s?(v=s.length===0&&!n?f(H,{description:c("Add a widget to chart a saved SQL query on this browser."),testId:"dashboards-empty",title:c("No widgets yet")}):f("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3","data-testid":"dashboards-grid",children:s.map(r=>f(re,{onEdit:K,onRemove:q,widget:r},r.id))}),e[29]=n,e[30]=K,e[31]=q,e[32]=c,e[33]=s,e[34]=v):v=e[34];let R;return e[35]!==p||e[36]!==v||e[37]!==b?(R=$("div",{className:"flex flex-col gap-4","data-testid":"lunora-dashboards",children:[b,p,v]}),e[35]=p,e[36]=v,e[37]=b,e[38]=R):R=e[38],R};export{Ce as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as I}from"react/compiler-runtime";import{E as K}from"../packem_shared/error-alert-TYdKetJd.js";import{ShardInput as O}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as w}from"../packem_shared/badge-cAk9Di1Q.js";import{C as M,a as $}from"../packem_shared/card-BGlQzQY-.js";import{E as j}from"../packem_shared/empty-state-B939z6K2.js";import{u as T}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{u as A}from"../packem_shared/use-open-trace-4tIa0SXZ.js";import{u as k}from"../packem_shared/use-shard-key-BsP3o5wT.js";import{useT as C}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as E}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as R}from"../packem_shared/internal-CwaF9YNk.js";import{S as B}from"../packem_shared/sparkline-BreIqzDO.js";import{jsxs as g,jsx as c}from"react/jsx-runtime";const F=n=>n.length===0?void 0:{max:Math.max(...n),mean:n.reduce((e,t)=>e+t,0)/n.length,min:Math.min(...n)},_=/^gen_ai\.evaluation\.(.+)\.score$/u,q=n=>{const e=[];for(const t of n)for(const r of t.spans)for(const[a,l]of Object.entries(r.attributes??{})){const o=_.exec(a);if(!o||typeof l!="number")continue;const i=o[1],m=r.attributes?.[`gen_ai.evaluation.${i}.label`];e.push({...typeof m=="string"?{label:m}:{},name:i,score:l,spanName:r.name,startTs:t.startTs+r.offsetMs,traceId:t.traceId})}return e.toSorted((t,r)=>r.startTs-t.startTs)},D=n=>{const e=[];for(const t of n?.series??[]){const r=_.exec(t.name);r&&e.push({name:r[1],points:t.points})}return e},H=(n,e)=>{const t=new Set([...n.map(a=>a.name),...e.map(a=>a.name)]),r=[];for(const a of t){const l=n.filter(s=>s.name===a),o=e.find(s=>s.name===a)?.points??[],i=o.at(-1)?.last??l[0]?.score,m=o.length>0?{max:Math.max(...o.map(s=>s.max)),mean:o.reduce((s,d)=>s+d.sum,0)/o.reduce((s,d)=>s+d.count,0),min:Math.min(...o.map(s=>s.min))}:F(l.map(s=>s.score));r.push({...i===void 0?{}:{latest:i},...m,name:a,points:o,runs:l})}return r.toSorted((a,l)=>a.name.localeCompare(l.name))},L=n=>Array.isArray(n?.traces)?n.traces:[],y=n=>n===void 0?"—":n.toFixed(2),P=n=>{const e=I(34),{card:t,onOpenTrace:r}=n,a=C();let l;e[0]!==t.name?(l=c("h3",{className:"font-mono text-sm font-semibold text-foreground","data-testid":"ev-name",children:t.name}),e[0]=t.name,e[1]=l):l=e[1];let o;e[2]!==t.latest?(o=y(t.latest),e[2]=t.latest,e[3]=o):o=e[3];let i;e[4]!==o?(i=c("span",{className:"font-mono text-lg text-foreground","data-testid":"ev-latest",children:o}),e[4]=o,e[5]=i):i=e[5];let m;e[6]!==l||e[7]!==i?(m=g("div",{className:"flex items-baseline justify-between gap-3",children:[l,i]}),e[6]=l,e[7]=i,e[8]=m):m=e[8];let s;e[9]!==t.max||e[10]!==t.mean||e[11]!==t.min||e[12]!==a?(s=a("min {min} · mean {mean} · max {max}",{max:y(t.max),mean:y(t.mean),min:y(t.min)}),e[9]=t.max,e[10]=t.mean,e[11]=t.min,e[12]=a,e[13]=s):s=e[13];let d;e[14]!==s?(d=c("p",{className:"font-mono text-xs text-muted-foreground","data-testid":"ev-summary",children:s}),e[14]=s,e[15]=d):d=e[15];let f;e[16]!==t.name||e[17]!==t.points||e[18]!==a?(f=t.points.length>1?c(B,{ariaLabel:a("Score trend for {name}",{name:t.name}),className:"h-10 w-full",series:t.points.map(Q),testId:"ev-trend"}):c("p",{className:"text-xs text-muted-foreground","data-testid":"ev-no-trend",children:a("No durable history yet — pass ctx.metrics to recordEvaluation to chart a trend.")}),e[16]=t.name,e[17]=t.points,e[18]=a,e[19]=f):f=e[19];let u;if(e[20]!==t.runs||e[21]!==r||e[22]!==a){let x;e[24]!==r||e[25]!==a?(x=p=>g("div",{className:"flex items-center justify-between gap-2 font-mono text-xs","data-testid":"ev-run",children:[g("span",{className:"truncate text-muted-foreground",children:[R(p.startTs)," · ",p.spanName]}),g("span",{className:"flex items-center gap-2",children:[p.label===void 0?null:c(w,{variant:"outline",children:p.label}),c("span",{className:"text-foreground",children:y(p.score)}),r===void 0?null:c("button",{className:"text-muted-foreground underline-offset-2 hover:underline",onClick:()=>{r(p.traceId)},title:a("Open the trace {trace}",{trace:p.traceId}),type:"button",children:p.traceId.slice(0,8)})]})]},`${p.traceId}:${p.spanName}`),e[24]=r,e[25]=a,e[26]=x):x=e[26],u=t.runs.slice(0,5).map(x),e[20]=t.runs,e[21]=r,e[22]=a,e[23]=u}else u=e[23];let h;e[27]!==u?(h=c("div",{className:"flex flex-col gap-1",children:u}),e[27]=u,e[28]=h):h=e[28];let v;return e[29]!==m||e[30]!==d||e[31]!==f||e[32]!==h?(v=c(M,{"data-testid":"ev-card",children:g($,{className:"flex flex-col gap-3 p-4",children:[m,d,f,h]})}),e[29]=m,e[30]=d,e[31]=f,e[32]=h,e[33]=v):v=e[33],v},re=n=>{const e=I(19),{initialShardKey:t}=n,r=C(),{queryShardKey:a,setShardKey:l,shardKey:o}=k(t),i=A(a);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m={},e[0]=m):m=e[0];let s;e[1]!==a?(s={live:!0,shardKey:a},e[1]=a,e[2]=s):s=e[2];const{data:d,error:f}=T(E.getTraces,m,s);let u;e[3]===Symbol.for("react.memo_cache_sentinel")?(u={},e[3]=u):u=e[3];let h;e[4]!==a?(h={live:!0,shardKey:a},e[4]=a,e[5]=h):h=e[5];const{data:v}=T(E.getMetricHistory,u,h);let x;if(e[6]!==d||e[7]!==f||e[8]!==v||e[9]!==i||e[10]!==l||e[11]!==o||e[12]!==r){const p=H(q(L(d)),D(v));let N;e[14]!==l||e[15]!==o?(N=c(O,{onChange:l,testId:"ev-shard-input",value:o}),e[14]=l,e[15]=o,e[16]=N):N=e[16];let b;e[17]!==f?(b=f===null?null:c(K,{error:f,testId:"ev-error"}),e[17]=f,e[18]=b):b=e[18],x=g("section",{className:"flex flex-col gap-4","data-testid":"ev-panel",children:[N,b,p.length===0?c(j,{description:r("Call recordEvaluation from a graded run and its score shows up here."),testId:"ev-empty",title:r("No evals recorded")}):c("div",{className:"grid gap-3 md:grid-cols-2",children:p.map(S=>c(P,{card:S,onOpenTrace:i},S.name))})]}),e[6]=d,e[7]=f,e[8]=v,e[9]=i,e[10]=l,e[11]=o,e[12]=r,e[13]=x}else x=e[13];return x};function Q(n){return n.last}export{re as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as F}from"react/compiler-runtime";import{E as B}from"../packem_shared/error-alert-TYdKetJd.js";import{ShardInput as E}from"../packem_shared/ShardInput-XumEzeT0.js";import{S as $}from"../packem_shared/stat-card-B9uIvAHg.js";import{B as R}from"../packem_shared/badge-cAk9Di1Q.js";import{C as _}from"../packem_shared/card-BGlQzQY-.js";import{E as j}from"../packem_shared/empty-state-B939z6K2.js";import{T as H,a as L,b as A,c as w,d as W,e as K}from"../packem_shared/table-BMsuYFhk.js";import{u as q}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{useAutoRefresh as O}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.js";import{u as Q}from"../packem_shared/use-shard-key-BsP3o5wT.js";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as z}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsxs as x,jsx as s,Fragment as G}from"react/jsx-runtime";const P=n=>`${n.toString()} ms`,J=n=>n.totalConnections===0&&n.shapePoke.passes===0&&n.whisper.passes===0,D=n=>{const e=F(48),{counters:o,includeTiming:a,prefix:r,t:l,title:I}=n,v=`${r}-section`;let f;e[0]!==I?(f=s("h3",{className:"text-sm font-medium text-foreground",children:I}),e[0]=I,e[1]=f):f=e[1];const t=`${r}-stats`;let i;e[2]!==l?(i=l("Passes"),e[2]=l,e[3]=i):i=e[3];const S=`${r}-passes`;let b;e[4]!==o.passes||e[5]!==i||e[6]!==S?(b=s($,{label:i,testId:S,value:o.passes}),e[4]=o.passes,e[5]=i,e[6]=S,e[7]=b):b=e[7];let p;e[8]!==l?(p=l("Sockets iterated"),e[8]=l,e[9]=p):p=e[9];const y=`${r}-iterated`;let c;e[10]!==o.socketsIterated||e[11]!==p||e[12]!==y?(c=s($,{label:p,testId:y,value:o.socketsIterated}),e[10]=o.socketsIterated,e[11]=p,e[12]=y,e[13]=c):c=e[13];let d;e[14]!==l?(d=l("Delivered"),e[14]=l,e[15]=d):d=e[15];const k=`${r}-delivered`;let u;e[16]!==o.socketsDelivered||e[17]!==d||e[18]!==k?(u=s($,{label:d,testId:k,value:o.socketsDelivered}),e[16]=o.socketsDelivered,e[17]=d,e[18]=k,e[19]=u):u=e[19];let m;e[20]!==l?(m=l("Peak width"),e[20]=l,e[21]=m):m=e[21];const g=`${r}-peak`;let h;e[22]!==o.peakSocketsIterated||e[23]!==m||e[24]!==g?(h=s($,{label:m,testId:g,value:o.peakSocketsIterated}),e[22]=o.peakSocketsIterated,e[23]=m,e[24]=g,e[25]=h):h=e[25];let C;e[26]!==o.totalMs||e[27]!==a||e[28]!==r||e[29]!==l?(C=a&&s($,{label:l("Total time"),testId:`${r}-total-ms`,value:P(o.totalMs)}),e[26]=o.totalMs,e[27]=a,e[28]=r,e[29]=l,e[30]=C):C=e[30];let N;e[31]!==o.maxMs||e[32]!==a||e[33]!==r||e[34]!==l?(N=a&&s($,{label:l("Max time"),testId:`${r}-max-ms`,value:P(o.maxMs)}),e[31]=o.maxMs,e[32]=a,e[33]=r,e[34]=l,e[35]=N):N=e[35];let T;e[36]!==u||e[37]!==h||e[38]!==C||e[39]!==N||e[40]!==t||e[41]!==b||e[42]!==c?(T=x("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":t,children:[b,c,u,h,C,N]}),e[36]=u,e[37]=h,e[38]=C,e[39]=N,e[40]=t,e[41]=b,e[42]=c,e[43]=T):T=e[43];let M;return e[44]!==v||e[45]!==T||e[46]!==f?(M=x("section",{className:"flex flex-col gap-2","data-testid":v,children:[f,T]}),e[44]=v,e[45]=T,e[46]=f,e[47]=M):M=e[47],M},ue=n=>{const e=F(31),{initialShardKey:o}=n,a=U(),{queryShardKey:r,setShardKey:l,shardKey:I}=Q(o);let v;e[0]===Symbol.for("react.memo_cache_sentinel")?(v={},e[0]=v):v=e[0];let f;e[1]!==r?(f={keepPreviousData:!0,shardKey:r},e[1]=r,e[2]=f):f=e[2];const{data:t,error:i,errorSource:S,refetch:b}=q(z.getFanoutMetrics,v,f);O(b,!0);let p;e[3]!==t?(p=t!==void 0&&J(t),e[3]=t,e[4]=p):p=e[4];const y=p;let c;e[5]!==l||e[6]!==I?(c=s(E,{onChange:l,testId:"fanout-shard-input",value:I}),e[5]=l,e[6]=I,e[7]=c):c=e[7];let d;e[8]!==t||e[9]!==a?(d=t!==void 0&&x("div",{className:"ml-auto flex items-center gap-2 text-sm text-muted-foreground","data-testid":"fanout-count",children:[t.promoted&&s(R,{"data-testid":"fanout-promoted",variant:t.relayCount>=t.maxRelays?"destructive":"default",children:t.relayCount>=t.maxRelays?a("auto-scaled: {relayCount}/{maxRelays} relays (at ceiling)",{maxRelays:t.maxRelays,relayCount:t.relayCount}):a("auto-scaled: {relayCount}/{maxRelays} relays",{maxRelays:t.maxRelays,relayCount:t.relayCount})}),s(R,{variant:"secondary",children:a("{count} connections",{count:t.totalConnections})}),s(R,{variant:"secondary",children:a("peak {count} subscribers",{count:t.peakSubscribers})})]}),e[8]=t,e[9]=a,e[10]=d):d=e[10];let k;e[11]!==c||e[12]!==d?(k=x("div",{className:"flex flex-wrap items-center gap-2",children:[c,d]}),e[11]=c,e[12]=d,e[13]=k):k=e[13];let u;e[14]!==i||e[15]!==S?(u=i!==null&&s(B,{error:S,testId:"fanout-error"}),e[14]=i,e[15]=S,e[16]=u):u=e[16];let m;e[17]!==i||e[18]!==y||e[19]!==a?(m=i===null&&y&&s(j,{description:a("Realtime fan-out cost and per-topic subscriber counts for this shard."),icon:s("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:s("path",{d:"M4 12h4l3 7 4-14 3 7h2"})}),testId:"fanout-empty",title:a("No fan-out activity yet.")}),e[17]=i,e[18]=y,e[19]=a,e[20]=m):m=e[20];let g;e[21]!==i||e[22]!==y||e[23]!==t||e[24]!==a?(g=i===null&&t!==void 0&&!y&&x(G,{children:[t.topics.length>0&&x("section",{className:"flex flex-col gap-2","data-testid":"fanout-topics-section",children:[s("h3",{className:"text-sm font-medium text-foreground",children:a("Hot topics")}),s(_,{className:"overflow-hidden py-0",children:x(H,{"data-testid":"fanout-topics-table",children:[s(L,{children:x(A,{children:[s(w,{children:a("Topic")}),s(w,{children:a("Kind")}),s(w,{className:"text-right",children:a("Subscribers")})]})}),s(W,{children:t.topics.map(V)})]})})]}),x("section",{className:"flex flex-col gap-3","data-testid":"fanout-cost",children:[s("h2",{className:"text-sm font-medium text-muted-foreground",children:a("Fan-out cost since this instance woke")}),s(D,{counters:t.shapePoke,includeTiming:!0,prefix:"fanout-poke",t:a,title:a("Shape pokes")}),s(D,{counters:t.whisper,includeTiming:!1,prefix:"fanout-whisper",t:a,title:a("Whisper broadcasts")})]})]}),e[21]=i,e[22]=y,e[23]=t,e[24]=a,e[25]=g):g=e[25];let h;return e[26]!==k||e[27]!==u||e[28]!==m||e[29]!==g?(h=x("div",{className:"flex flex-col gap-4","data-testid":"fanout-panel",children:[k,u,m,g]}),e[26]=k,e[27]=u,e[28]=m,e[29]=g,e[30]=h):h=e[30],h};function V(n){return x(A,{"data-testid":"fanout-topic-row",children:[s(K,{className:"font-mono text-xs",children:n.topic}),s(K,{children:s(R,{variant:"outline",children:n.kind})}),s(K,{className:"text-right font-medium tabular-nums",children:n.subscribers})]},`${n.kind}:${n.topic}`)}export{ue as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as
|
|
1
|
+
import{useState as C}from"react";import{E as S}from"../packem_shared/error-alert-TYdKetJd.js";import{B as w}from"../packem_shared/badge-cAk9Di1Q.js";import{C as A,a as k}from"../packem_shared/card-BGlQzQY-.js";import{E as g}from"../packem_shared/empty-state-B939z6K2.js";import{L as E}from"../packem_shared/label-BOUo-DP0.js";import{T as O,a as F,b as x,c as s,d as j,e as n}from"../packem_shared/table-BMsuYFhk.js";import{T as I}from"../packem_shared/textarea-DpO3i-Qo.js";import{u as J}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{useT as L}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as B}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{jsx as e,jsxs as l}from"react/jsx-runtime";const H=a=>{const t=a.trim();if(t.length===0)return{context:void 0,error:null};try{const o=JSON.parse(t);return o===null||typeof o!="object"||Array.isArray(o)?{context:void 0,error:"Targeting context must be a JSON object."}:{context:o,error:null}}catch{return{context:void 0,error:"Targeting context is not valid JSON."}}},K='{ "targetingKey": "user-123", "plan": "premium" }',R=a=>a.type==="object"?JSON.stringify(a.value):String(a.value),W=({initialShardKey:a=""})=>{const t=L(),[o,p]=C(""),{context:c,error:f}=H(o),h=c===void 0?{}:{context:c},{data:i,error:y,errorSource:v,liveError:N}=J(B.listFlags,h,{live:!0,shardKey:a}),m=i!==void 0,b=i?.configured??!1,u=Array.isArray(i?.flags)?[...i.flags].toSorted((r,T)=>r.key.localeCompare(T.key)):[];let d;return m&&!b?d=e(g,{description:t("No @lunora/flags provider is wired in this deployment. Add lunora/flags.ts with defineFlags({ provider }) to gate code paths on feature flags."),testId:"flags-unconfigured",title:t("No flags provider configured")}):m&&u.length===0?d=e(g,{description:t('A flags provider is configured, but no handler reads a flag yet. Call ctx.flags.boolean("key", false) in a query, mutation, or action.'),testId:"flags-empty",title:t("No flags read")}):d=e(A,{className:"overflow-hidden py-0",children:e(k,{className:"px-0",children:l(O,{"data-testid":"flags-table",children:[e(F,{children:l(x,{children:[e(s,{children:t("Key")}),e(s,{children:t("Type")}),e(s,{children:t("Value")}),e(s,{children:t("Reason")}),e(s,{children:t("Variant")})]})}),e(j,{children:u.map(r=>l(x,{"data-testid":`flags-row-${r.key}`,children:[e(n,{className:"font-mono text-xs",children:r.key}),e(n,{className:"font-mono text-xs text-muted-foreground",children:r.type}),e(n,{className:"font-mono text-xs",children:R(r)}),e(n,{children:r.errorCode===void 0?e("span",{className:"font-mono text-xs text-muted-foreground",children:r.reason??"—"}):e(w,{"data-testid":`flags-error-${r.key}`,variant:"destructive",children:r.errorCode})}),e(n,{className:"font-mono text-xs text-muted-foreground",children:r.variant??"—"})]},r.key))})]})})}),l("div",{className:"flex flex-col gap-6","data-testid":"lunora-flags-panel",children:[y!==null&&e(S,{error:v,testId:"flags-error"}),e("p",{className:"text-sm text-muted-foreground",children:t('Feature flags are read in code with ctx.flags.<type>("key", default). They evaluate through the OpenFeature provider configured in lunora/flags.ts; edit the targeting context below to see how each flag resolves for a given audience.')}),l("div",{className:"flex flex-col gap-2",children:[e(E,{htmlFor:"flags-targeting-context",children:t("Targeting context (JSON)")}),e(I,{className:"font-mono text-xs","data-testid":"flags-context-input",id:"flags-targeting-context",onChange:r=>{p(r.target.value)},placeholder:K,rows:3,value:o}),f!==null&&e("p",{className:"text-xs text-destructive","data-testid":"flags-context-error",role:"alert",children:t(f)}),N!==void 0&&e("p",{className:"text-xs text-amber-600 dark:text-amber-500","data-testid":"flags-live-error",role:"alert",children:t("Live updates unavailable; showing the last evaluation.")})]}),d]})};export{W as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as xe}from"react/compiler-runtime";import{findIssueSolution as Se,flattenHint as Ie}from"@lunora/errors";import{useLunora as $e}from"@lunora/react";import{useState as le}from"react";import{L as ke}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as Me}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as ge}from"../packem_shared/badge-BbuuAio7.js";import{u as ne}from"../packem_shared/button-BkCrNcAs.js";import{c as Ae,f as Ce}from"../packem_shared/card-BMKx5UdA.js";import{E as Ke}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as _e}from"../packem_shared/input-JHu63lTv.js";import{w as Te,z as Ee,S as ze,_ as be,x as Le}from"../packem_shared/select-BssZMiFY.js";import{d as Re,n as Fe,f as ve,m as O,b as je,p as q}from"../packem_shared/table-DZAB8cs3.js";import{N as qe}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{_ as Oe}from"../packem_shared/use-async-submit-B32whHJO.js";import{S as Ve}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as ye}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as ae}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as We,f as re,g as oe,d as we,b as De}from"../packem_shared/internal-zkEvTqy8.js";import{jsx as s,jsxs as S,Fragment as Ge}from"react/jsx-runtime";const fe="none",Be=["all","open","resolved","ignored"],He=["critical","high","medium","low"],Je=oe(ae.resolveIssue),Qe=oe(ae.ignoreIssue),Ne=oe(ae.assignIssue),Ue=oe(ae.setIssueSeverity),Xe=oe(ae.explainIssue),Ye=n=>Array.isArray(n?.issues)?n.issues:[],Ze=n=>n==="resolved"?"success":n==="ignored"?"secondary":"warning",Pe=n=>n==="critical"?"destructive":n==="high"?"warning":n==="medium"?"info":"secondary",et=n=>{const e=xe(44),{expanded:c,issue:t,shardKey:I}=n,i=$e(),l=ye(),[a,o]=le(void 0),{busy:E,error:C,run:L}=Oe();let K;e[0]!==i||e[1]!==t||e[2]!==L||e[3]!==I?(K=()=>{o(void 0),L(async()=>{const p={culprit:t.culprit,sampleMessage:t.sampleMessage,title:t.title},w=await i.query(Xe,p,we(I));o(w)})},e[0]=i,e[1]=t,e[2]=L,e[3]=I,e[4]=K):K=e[4];const z=K;if(!c)return null;let k;if(e[5]!==t.sampleMessage){const p=Se(t.sampleMessage);k=p===void 0?void 0:Ie(p.body),e[5]=t.sampleMessage,e[6]=k}else k=e[6];const _=k,T=`issues-detail-${t.hash}`;let d;e[7]!==t.sampleMessage?(d=s("p",{className:"whitespace-pre-wrap font-mono text-xs text-muted-foreground",children:t.sampleMessage}),e[7]=t.sampleMessage,e[8]=d):d=e[8];let f;e[9]!==l?(f=l("Suggested fix"),e[9]=l,e[10]=f):f=e[10];let M;e[11]!==f?(M=s("div",{className:"text-xs font-medium text-muted-foreground",children:f}),e[11]=f,e[12]=M):M=e[12];let x;e[13]!==_||e[14]!==t.hash||e[15]!==l?(x=_===void 0?s("p",{className:"mt-1 text-sm text-muted-foreground","data-testid":`issues-hint-empty-${t.hash}`,children:l("No known fix for this error yet.")}):s("p",{className:"mt-1 whitespace-pre-wrap text-sm","data-testid":`issues-hint-${t.hash}`,children:_}),e[13]=_,e[14]=t.hash,e[15]=l,e[16]=x):x=e[16];let v;e[17]!==M||e[18]!==x?(v=S("div",{children:[M,x]}),e[17]=M,e[18]=x,e[19]=v):v=e[19];const N=`issues-explain-${t.hash}`;let $;e[20]!==E||e[21]!==l?($=l(E?"Explaining…":"Explain in plain language"),e[20]=E,e[21]=l,e[22]=$):$=e[22];let u;e[23]!==E||e[24]!==z||e[25]!==$||e[26]!==N?(u=s("div",{children:s(ne,{"data-testid":N,disabled:E,onClick:z,size:"sm",type:"button",variant:"outline",children:$})}),e[23]=E,e[24]=z,e[25]=$,e[26]=N,e[27]=u):u=e[27];let g;e[28]!==C||e[29]!==t.hash?(g=C!==null&&s("p",{className:"text-xs text-destructive","data-testid":`issues-explain-error-${t.hash}`,role:"alert",children:C}),e[28]=C,e[29]=t.hash,e[30]=g):g=e[30];let m;e[31]!==a||e[32]!==t.hash||e[33]!==l?(m=a!==void 0&&(a.degraded?s("p",{className:"text-xs text-muted-foreground","data-testid":`issues-degraded-${t.hash}`,children:a.reason==="no-ai-binding"?l("No AI binding is configured. Wire an AI binding to enable plain-language explanations — the suggested fix above is always available."):l("The AI model could not explain this error right now. The suggested fix above still applies.")}):S("div",{"data-testid":`issues-explanation-${t.hash}`,children:[s("div",{className:"text-xs font-medium text-muted-foreground",children:l("AI explanation")}),s("p",{className:"mt-1 whitespace-pre-wrap text-sm",children:a.explanation}),a.groundedId===void 0&&s("p",{className:"mt-1 text-xs text-muted-foreground","data-testid":`issues-ungrounded-${t.hash}`,children:l("No catalog fix matched this error, so this explanation is the model's own reading of the message. Verify before acting on it.")}),s("p",{className:"mt-1 text-[0.7rem] text-muted-foreground",children:l("Generated by {model}",{model:a.model})})]})),e[31]=a,e[32]=t.hash,e[33]=l,e[34]=m):m=e[34];let h;e[35]!==u||e[36]!==g||e[37]!==m||e[38]!==d||e[39]!==v?(h=s(q,{className:"bg-muted/30",colSpan:7,children:S("div",{className:"flex flex-col gap-3 py-1",children:[d,v,u,g,m]})}),e[35]=u,e[36]=g,e[37]=m,e[38]=d,e[39]=v,e[40]=h):h=e[40];let b;return e[41]!==h||e[42]!==T?(b=s(ve,{"data-testid":T,children:h}),e[41]=h,e[42]=T,e[43]=b):b=e[43],b},tt=n=>{const e=xe(119),{busy:c,issue:t,rowError:I,runTriage:i,shardKey:l}=n,a=ye(),[o,E]=le(!1);let C;e[0]===Symbol.for("react.memo_cache_sentinel")?(C=()=>{E(st)},e[0]=C):C=e[0];const L=C;let K;e[1]!==t.hash||e[2]!==i?(K=se=>{const ce=se===null||se===fe?null:se;re(i(t.hash,Ue,{severity:ce}))},e[1]=t.hash,e[2]=i,e[3]=K):K=e[3];const z=K;let k;e[4]!==t.hash||e[5]!==i?(k=se=>{if(se.key!=="Enter")return;const ce=se.currentTarget.value.trim();re(i(t.hash,Ne,{assignee:ce===""?null:ce}))},e[4]=t.hash,e[5]=i,e[6]=k):k=e[6];const _=k,T=`issues-row-${t.hash}`;let d;e[7]!==a?(d=a("Toggle issue details"),e[7]=a,e[8]=d):d=e[8];const f=`issues-toggle-${t.hash}`,M=`mt-1 size-3 shrink-0 text-muted-foreground transition-transform ${o?"rotate-90":""}`;let x;e[9]===Symbol.for("react.memo_cache_sentinel")?(x=s("path",{d:"m9 6 6 6-6 6"}),e[9]=x):x=e[9];let v;e[10]!==M?(v=s("svg",{"aria-hidden":"true",className:M,fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 24 24",children:x}),e[10]=M,e[11]=v):v=e[11];let N;e[12]!==t.title?(N=s("span",{className:"block truncate font-medium",title:t.title,children:t.title}),e[12]=t.title,e[13]=N):N=e[13];let $;e[14]!==t.culprit?($=s("span",{className:"block truncate font-mono text-xs text-muted-foreground",title:t.culprit,children:t.culprit}),e[14]=t.culprit,e[15]=$):$=e[15];let u;e[16]!==N||e[17]!==$?(u=S("span",{className:"min-w-0",children:[N,$]}),e[16]=N,e[17]=$,e[18]=u):u=e[18];let g;e[19]!==o||e[20]!==u||e[21]!==d||e[22]!==f||e[23]!==v?(g=S("button",{"aria-expanded":o,"aria-label":d,className:"flex w-full items-start gap-2 text-left","data-testid":f,onClick:L,type:"button",children:[v,u]}),e[19]=o,e[20]=u,e[21]=d,e[22]=f,e[23]=v,e[24]=g):g=e[24];let m;e[25]!==t.hash||e[26]!==I?(m=I!==void 0&&s("p",{className:"mt-1 text-xs text-destructive","data-testid":`issues-action-error-${t.hash}`,role:"alert",children:I}),e[25]=t.hash,e[26]=I,e[27]=m):m=e[27];let h;e[28]!==g||e[29]!==m?(h=S(q,{className:"max-w-80",children:[g,m]}),e[28]=g,e[29]=m,e[30]=h):h=e[30];const b=`issues-status-${t.hash}`;let p;e[31]!==t.status?(p=Ze(t.status),e[31]=t.status,e[32]=p):p=e[32];let w;e[33]!==t.status||e[34]!==b||e[35]!==p?(w=s(q,{children:s(ge,{"data-testid":b,variant:p,children:t.status})}),e[33]=t.status,e[34]=b,e[35]=p,e[36]=w):w=e[36];const R=t.severity??fe;let r;e[37]!==a?(r=a("Set severity"),e[37]=a,e[38]=r):r=e[38];const ie=`issues-severity-${t.hash}`;let F;e[39]!==a?(F=a("—"),e[39]=a,e[40]=F):F=e[40];let y;e[41]!==t.severity||e[42]!==a?(y=t.severity===void 0?s("span",{className:"text-muted-foreground",children:a("—")}):s(ge,{variant:Pe(t.severity),children:t.severity}),e[41]=t.severity,e[42]=a,e[43]=y):y=e[43];let A;e[44]!==F||e[45]!==y?(A=s(Te,{placeholder:F,children:y}),e[44]=F,e[45]=y,e[46]=A):A=e[46];let j;e[47]!==r||e[48]!==ie||e[49]!==A?(j=s(Ee,{"aria-label":r,className:"h-7 w-[110px]","data-testid":ie,children:A}),e[47]=r,e[48]=ie,e[49]=A,e[50]=j):j=e[50];let de;e[51]===Symbol.for("react.memo_cache_sentinel")?(de=He.map(at),e[51]=de):de=e[51];let V;e[52]!==a?(V=a("Clear"),e[52]=a,e[53]=V):V=e[53];let W;e[54]!==V?(W=S(ze,{children:[de,s(be,{value:fe,children:V})]}),e[54]=V,e[55]=W):W=e[55];let D;e[56]!==c||e[57]!==z||e[58]!==R||e[59]!==j||e[60]!==W?(D=s(q,{children:S(Le,{disabled:c,onValueChange:z,value:R,children:[j,W]})}),e[56]=c,e[57]=z,e[58]=R,e[59]=j,e[60]=W,e[61]=D):D=e[61];let G;e[62]!==a?(G=a("Assignee"),e[62]=a,e[63]=G):G=e[63];const ue=`issues-assignee-${t.hash}`,me=t.assignee??"",pe=t.assignee??"";let B;e[64]!==a?(B=a("Unassigned"),e[64]=a,e[65]=B):B=e[65];let H;e[66]!==c||e[67]!==_||e[68]!==G||e[69]!==ue||e[70]!==me||e[71]!==pe||e[72]!==B?(H=s(q,{children:s(_e,{"aria-label":G,className:"h-7 w-32","data-testid":ue,defaultValue:me,disabled:c,onKeyDown:_,placeholder:B},pe)}),e[66]=c,e[67]=_,e[68]=G,e[69]=ue,e[70]=me,e[71]=pe,e[72]=B,e[73]=H):H=e[73];let J;e[74]!==t.count?(J=s(q,{className:"text-right",children:s(ge,{variant:"secondary",children:t.count})}),e[74]=t.count,e[75]=J):J=e[75];let Q;e[76]!==t.lastSeen?(Q=We(t.lastSeen),e[76]=t.lastSeen,e[77]=Q):Q=e[77];let U;e[78]!==Q?(U=s(q,{className:"text-xs tabular-nums text-muted-foreground",children:Q}),e[78]=Q,e[79]=U):U=e[79];let X;e[80]!==c||e[81]!==t.hash||e[82]!==t.status||e[83]!==i||e[84]!==a?(X=t.status!=="resolved"&&s(ne,{"data-testid":`issues-resolve-${t.hash}`,disabled:c,onClick:()=>{re(i(t.hash,Je,{}))},size:"xs",variant:"outline",children:a("Resolve")}),e[80]=c,e[81]=t.hash,e[82]=t.status,e[83]=i,e[84]=a,e[85]=X):X=e[85];let Y;e[86]!==c||e[87]!==t.hash||e[88]!==t.status||e[89]!==i||e[90]!==a?(Y=t.status!=="ignored"&&s(ne,{"data-testid":`issues-ignore-${t.hash}`,disabled:c,onClick:()=>{re(i(t.hash,Qe,{}))},size:"xs",variant:"ghost",children:a("Ignore")}),e[86]=c,e[87]=t.hash,e[88]=t.status,e[89]=i,e[90]=a,e[91]=Y):Y=e[91];let Z;e[92]!==c||e[93]!==t.assignee||e[94]!==t.hash||e[95]!==t.status||e[96]!==i||e[97]!==a?(Z=t.status!=="open"&&s(ne,{"data-testid":`issues-reopen-${t.hash}`,disabled:c,onClick:()=>{re(i(t.hash,Ne,{assignee:t.assignee??null}))},size:"xs",variant:"ghost",children:a("Reopen")}),e[92]=c,e[93]=t.assignee,e[94]=t.hash,e[95]=t.status,e[96]=i,e[97]=a,e[98]=Z):Z=e[98];let P;e[99]!==X||e[100]!==Y||e[101]!==Z?(P=s(q,{className:"text-right",children:S("div",{className:"flex justify-end gap-1",children:[X,Y,Z]})}),e[99]=X,e[100]=Y,e[101]=Z,e[102]=P):P=e[102];let ee;e[103]!==h||e[104]!==w||e[105]!==D||e[106]!==H||e[107]!==J||e[108]!==U||e[109]!==T||e[110]!==P?(ee=S(ve,{"data-testid":T,children:[h,w,D,H,J,U,P]}),e[103]=h,e[104]=w,e[105]=D,e[106]=H,e[107]=J,e[108]=U,e[109]=T,e[110]=P,e[111]=ee):ee=e[111];let te;e[112]!==o||e[113]!==t||e[114]!==l?(te=s(et,{expanded:o,issue:t,shardKey:l},t.sampleMessage),e[112]=o,e[113]=t,e[114]=l,e[115]=te):te=e[115];let he;return e[116]!==ee||e[117]!==te?(he=S(Ge,{children:[ee,te]}),e[116]=ee,e[117]=te,e[118]=he):he=e[118],he},kt=n=>{const e=xe(38),{initialShardKey:c}=n,t=ye(),I=$e(),{queryShardKey:i,setShardKey:l,shardKey:a}=Ve(c),[o,E]=le("all"),[C,L]=le(it),[K,z]=le(rt);let k;e[0]!==o?(k=o==="all"?{}:{status:o},e[0]=o,e[1]=k):k=e[1];let _;e[2]!==i?(_={live:!0,shardKey:i},e[2]=i,e[3]=_):_=e[3];const{data:T,error:d,liveError:f}=qe(ae.getIssues,k,_),M=T!==void 0;let x;if(e[4]!==K||e[5]!==C||e[6]!==I||e[7]!==T||e[8]!==d||e[9]!==f||e[10]!==M||e[11]!==i||e[12]!==l||e[13]!==a||e[14]!==o||e[15]!==t){const v=Ye(T);let N;e[17]!==I||e[18]!==i?(N=async(r,ie,F)=>{z(y=>{if(!y.has(r))return y;const A=new Map(y);return A.delete(r),A}),L(y=>new Set(y).add(r));try{await I.query(ie,{...F,hash:r},we(i))}catch(y){const A=De(y);z(j=>new Map(j).set(r,A))}L(y=>{const A=new Set(y);return A.delete(r),A})},e[17]=I,e[18]=i,e[19]=N):N=e[19];const $=N;let u;e[20]!==t?(u=r=>t(r==="all"?"All":r==="open"?"Open":r==="resolved"?"Resolved":"Ignored"),e[20]=t,e[21]=u):u=e[21];const g=u;let m;e[22]!==d?(m=d!==null&&s("p",{className:"text-sm text-destructive","data-testid":"issues-error",role:"alert",children:d}),e[22]=d,e[23]=m):m=e[23];let h;e[24]!==l||e[25]!==a?(h=s(Me,{onChange:l,testId:"issues-shard-input",value:a}),e[24]=l,e[25]=a,e[26]=h):h=e[26];let b;e[27]!==f?(b=s(ke,{message:f,prefix:"issues"}),e[27]=f,e[28]=b):b=e[28];let p;e[29]!==o||e[30]!==g?(p=Be.map(r=>s(ne,{"data-active":o===r?"":void 0,"data-testid":`issues-filter-${r}`,onClick:()=>{E(r)},size:"xs",variant:o===r?"default":"outline",children:g(r)},r)),e[29]=o,e[30]=g,e[31]=p):p=e[31];let w;e[32]!==p?(w=s("div",{className:"ms-auto flex items-center gap-1","data-testid":"issues-status-filter",role:"group",children:p}),e[32]=p,e[33]=w):w=e[33];let R;e[34]!==w||e[35]!==h||e[36]!==b?(R=S("div",{className:"flex flex-wrap items-center gap-2",children:[h,b,w]}),e[34]=w,e[35]=h,e[36]=b,e[37]=R):R=e[37],x=S("div",{className:"flex flex-col gap-6","data-testid":"lunora-issues-panel",children:[m,R,M&&v.length===0?s(Ke,{description:t("No grouped errors yet. When a function throws or a container crashes, matching errors fold into a single issue here."),testId:"issues-empty",title:t("No issues")}):s(Ae,{className:"overflow-hidden py-0",children:s(Ce,{className:"px-0",children:S(Re,{"data-testid":"issues-table",children:[s(Fe,{children:S(ve,{children:[s(O,{children:t("Issue")}),s(O,{children:t("Status")}),s(O,{children:t("Severity")}),s(O,{children:t("Assignee")}),s(O,{className:"text-right",children:t("Events")}),s(O,{children:t("Last seen")}),s(O,{className:"text-right",children:t("Actions")})]})}),s(je,{children:v.map(r=>s(tt,{busy:C.has(r.hash),issue:r,rowError:K.get(r.hash),runTriage:$,shardKey:i},r.hash))})]})})})]}),e[4]=K,e[5]=C,e[6]=I,e[7]=T,e[8]=d,e[9]=f,e[10]=M,e[11]=i,e[12]=l,e[13]=a,e[14]=o,e[15]=t,e[16]=x}else x=e[16];return x};function st(n){return!n}function at(n){return s(be,{value:n,children:n},n)}function it(){return new Set}function rt(){return new Map}export{kt as default};
|
|
1
|
+
import{c as xe}from"react/compiler-runtime";import{findIssueSolution as we,flattenHint as Ee}from"@lunora/errors";import{useLunora as Ne}from"@lunora/react";import{useState as ne}from"react";import{L as Te}from"../packem_shared/live-status-Bf7rR8o8.js";import{ShardInput as $e}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as pe}from"../packem_shared/badge-cAk9Di1Q.js";import{B as oe}from"../packem_shared/button-BOPLD1un.js";import{C as Ae,a as Ce}from"../packem_shared/card-BGlQzQY-.js";import{E as _e}from"../packem_shared/empty-state-B939z6K2.js";import{I as ke}from"../packem_shared/input-CY5W3wzv.js";import{S as Me,a as Re,b as Ke,c as be,d as Le}from"../packem_shared/select-BPISLTcv.js";import{T as Ve,a as Oe,b as ye,c as F,d as Ue,e as B}from"../packem_shared/table-BMsuYFhk.js";import{u as Be}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{u as Fe}from"../packem_shared/use-async-submit-DdLd0MdK.js";import{u as ze}from"../packem_shared/use-shard-key-BsP3o5wT.js";import{useT as ve}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as ie}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as He,f as re,c as de,d as Ie,b as je}from"../packem_shared/internal-CwaF9YNk.js";import{jsx as s,jsxs as w,Fragment as De}from"react/jsx-runtime";const ge="none",qe=["all","open","resolved","ignored"],Ge=["critical","high","medium","low"],Pe=de(ie.resolveIssue),We=de(ie.ignoreIssue),Se=de(ie.assignIssue),Ye=de(ie.setIssueSeverity),Qe=de(ie.explainIssue),Xe=n=>Array.isArray(n?.issues)?n.issues:[],Je=n=>n==="resolved"?"success":n==="ignored"?"secondary":"warning",Ze=n=>n==="critical"?"destructive":n==="high"?"warning":n==="medium"?"info":"secondary",et=n=>{const e=xe(44),{expanded:h,issue:t,shardKey:E}=n,i=Ne(),r=ve(),[a,o]=ne(void 0),{busy:R,error:A,run:L}=Fe();let C;e[0]!==i||e[1]!==t||e[2]!==L||e[3]!==E?(C=()=>{o(void 0),L(async()=>{const f={culprit:t.culprit,sampleMessage:t.sampleMessage,title:t.title},I=await i.query(Qe,f,Ie(E));o(I)})},e[0]=i,e[1]=t,e[2]=L,e[3]=E,e[4]=C):C=e[4];const K=C;if(!h)return null;let T;if(e[5]!==t.sampleMessage){const f=we(t.sampleMessage);T=f===void 0?void 0:Ee(f.body),e[5]=t.sampleMessage,e[6]=T}else T=e[6];const _=T,M=`issues-detail-${t.hash}`;let d;e[7]!==t.sampleMessage?(d=s("p",{className:"whitespace-pre-wrap font-mono text-xs text-muted-foreground",children:t.sampleMessage}),e[7]=t.sampleMessage,e[8]=d):d=e[8];let g;e[9]!==r?(g=r("Suggested fix"),e[9]=r,e[10]=g):g=e[10];let $;e[11]!==g?($=s("div",{className:"text-xs font-medium text-muted-foreground",children:g}),e[11]=g,e[12]=$):$=e[12];let x;e[13]!==_||e[14]!==t.hash||e[15]!==r?(x=_===void 0?s("p",{className:"mt-1 text-sm text-muted-foreground","data-testid":`issues-hint-empty-${t.hash}`,children:r("No known fix for this error yet.")}):s("p",{className:"mt-1 whitespace-pre-wrap text-sm","data-testid":`issues-hint-${t.hash}`,children:_}),e[13]=_,e[14]=t.hash,e[15]=r,e[16]=x):x=e[16];let y;e[17]!==$||e[18]!==x?(y=w("div",{children:[$,x]}),e[17]=$,e[18]=x,e[19]=y):y=e[19];const S=`issues-explain-${t.hash}`;let N;e[20]!==R||e[21]!==r?(N=r(R?"Explaining…":"Explain in plain language"),e[20]=R,e[21]=r,e[22]=N):N=e[22];let u;e[23]!==R||e[24]!==K||e[25]!==N||e[26]!==S?(u=s("div",{children:s(oe,{"data-testid":S,disabled:R,onClick:K,size:"sm",type:"button",variant:"outline",children:N})}),e[23]=R,e[24]=K,e[25]=N,e[26]=S,e[27]=u):u=e[27];let p;e[28]!==A||e[29]!==t.hash?(p=A!==null&&s("p",{className:"text-xs text-destructive","data-testid":`issues-explain-error-${t.hash}`,role:"alert",children:A}),e[28]=A,e[29]=t.hash,e[30]=p):p=e[30];let m;e[31]!==a||e[32]!==t.hash||e[33]!==r?(m=a!==void 0&&(a.degraded?s("p",{className:"text-xs text-muted-foreground","data-testid":`issues-degraded-${t.hash}`,children:a.reason==="no-ai-binding"?r("No AI binding is configured. Wire an AI binding to enable plain-language explanations — the suggested fix above is always available."):r("The AI model could not explain this error right now. The suggested fix above still applies.")}):w("div",{"data-testid":`issues-explanation-${t.hash}`,children:[s("div",{className:"text-xs font-medium text-muted-foreground",children:r("AI explanation")}),s("p",{className:"mt-1 whitespace-pre-wrap text-sm",children:a.explanation}),a.groundedId===void 0&&s("p",{className:"mt-1 text-xs text-muted-foreground","data-testid":`issues-ungrounded-${t.hash}`,children:r("No catalog fix matched this error, so this explanation is the model's own reading of the message. Verify before acting on it.")}),s("p",{className:"mt-1 text-[0.7rem] text-muted-foreground",children:r("Generated by {model}",{model:a.model})})]})),e[31]=a,e[32]=t.hash,e[33]=r,e[34]=m):m=e[34];let c;e[35]!==u||e[36]!==p||e[37]!==m||e[38]!==d||e[39]!==y?(c=s(B,{className:"bg-muted/30",colSpan:7,children:w("div",{className:"flex flex-col gap-3 py-1",children:[d,y,u,p,m]})}),e[35]=u,e[36]=p,e[37]=m,e[38]=d,e[39]=y,e[40]=c):c=e[40];let b;return e[41]!==c||e[42]!==M?(b=s(ye,{"data-testid":M,children:c}),e[41]=c,e[42]=M,e[43]=b):b=e[43],b},tt=n=>{const e=xe(119),{busy:h,issue:t,rowError:E,runTriage:i,shardKey:r}=n,a=ve(),[o,R]=ne(!1);let A;e[0]===Symbol.for("react.memo_cache_sentinel")?(A=()=>{R(st)},e[0]=A):A=e[0];const L=A;let C;e[1]!==t.hash||e[2]!==i?(C=ae=>{const he=ae===null||ae===ge?null:ae;re(i(t.hash,Ye,{severity:he}))},e[1]=t.hash,e[2]=i,e[3]=C):C=e[3];const K=C;let T;e[4]!==t.hash||e[5]!==i?(T=ae=>{if(ae.key!=="Enter")return;const he=ae.currentTarget.value.trim();re(i(t.hash,Se,{assignee:he===""?null:he}))},e[4]=t.hash,e[5]=i,e[6]=T):T=e[6];const _=T,M=`issues-row-${t.hash}`;let d;e[7]!==a?(d=a("Toggle issue details"),e[7]=a,e[8]=d):d=e[8];const g=`issues-toggle-${t.hash}`,$=`mt-1 size-3 shrink-0 text-muted-foreground transition-transform ${o?"rotate-90":""}`;let x;e[9]===Symbol.for("react.memo_cache_sentinel")?(x=s("path",{d:"m9 6 6 6-6 6"}),e[9]=x):x=e[9];let y;e[10]!==$?(y=s("svg",{"aria-hidden":"true",className:$,fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 24 24",children:x}),e[10]=$,e[11]=y):y=e[11];let S;e[12]!==t.title?(S=s("span",{className:"block truncate font-medium",title:t.title,children:t.title}),e[12]=t.title,e[13]=S):S=e[13];let N;e[14]!==t.culprit?(N=s("span",{className:"block truncate font-mono text-xs text-muted-foreground",title:t.culprit,children:t.culprit}),e[14]=t.culprit,e[15]=N):N=e[15];let u;e[16]!==S||e[17]!==N?(u=w("span",{className:"min-w-0",children:[S,N]}),e[16]=S,e[17]=N,e[18]=u):u=e[18];let p;e[19]!==o||e[20]!==u||e[21]!==d||e[22]!==g||e[23]!==y?(p=w("button",{"aria-expanded":o,"aria-label":d,className:"flex w-full items-start gap-2 text-left","data-testid":g,onClick:L,type:"button",children:[y,u]}),e[19]=o,e[20]=u,e[21]=d,e[22]=g,e[23]=y,e[24]=p):p=e[24];let m;e[25]!==t.hash||e[26]!==E?(m=E!==void 0&&s("p",{className:"mt-1 text-xs text-destructive","data-testid":`issues-action-error-${t.hash}`,role:"alert",children:E}),e[25]=t.hash,e[26]=E,e[27]=m):m=e[27];let c;e[28]!==p||e[29]!==m?(c=w(B,{className:"max-w-80",children:[p,m]}),e[28]=p,e[29]=m,e[30]=c):c=e[30];const b=`issues-status-${t.hash}`;let f;e[31]!==t.status?(f=Je(t.status),e[31]=t.status,e[32]=f):f=e[32];let I;e[33]!==t.status||e[34]!==b||e[35]!==f?(I=s(B,{children:s(pe,{"data-testid":b,variant:f,children:t.status})}),e[33]=t.status,e[34]=b,e[35]=f,e[36]=I):I=e[36];const V=t.severity??ge;let l;e[37]!==a?(l=a("Set severity"),e[37]=a,e[38]=l):l=e[38];const le=`issues-severity-${t.hash}`;let O;e[39]!==a?(O=a("—"),e[39]=a,e[40]=O):O=e[40];let v;e[41]!==t.severity||e[42]!==a?(v=t.severity===void 0?s("span",{className:"text-muted-foreground",children:a("—")}):s(pe,{variant:Ze(t.severity),children:t.severity}),e[41]=t.severity,e[42]=a,e[43]=v):v=e[43];let k;e[44]!==O||e[45]!==v?(k=s(Me,{placeholder:O,children:v}),e[44]=O,e[45]=v,e[46]=k):k=e[46];let U;e[47]!==l||e[48]!==le||e[49]!==k?(U=s(Re,{"aria-label":l,className:"h-7 w-[110px]","data-testid":le,children:k}),e[47]=l,e[48]=le,e[49]=k,e[50]=U):U=e[50];let z;e[51]===Symbol.for("react.memo_cache_sentinel")?(z=Ge.map(at),e[51]=z):z=e[51];let H;e[52]!==a?(H=a("Clear"),e[52]=a,e[53]=H):H=e[53];let j;e[54]!==H?(j=w(Ke,{children:[z,s(be,{value:ge,children:H})]}),e[54]=H,e[55]=j):j=e[55];let D;e[56]!==h||e[57]!==K||e[58]!==V||e[59]!==U||e[60]!==j?(D=s(B,{children:w(Le,{disabled:h,onValueChange:K,value:V,children:[U,j]})}),e[56]=h,e[57]=K,e[58]=V,e[59]=U,e[60]=j,e[61]=D):D=e[61];let q;e[62]!==a?(q=a("Assignee"),e[62]=a,e[63]=q):q=e[63];const ue=`issues-assignee-${t.hash}`,me=t.assignee??"",fe=t.assignee??"";let G;e[64]!==a?(G=a("Unassigned"),e[64]=a,e[65]=G):G=e[65];let P;e[66]!==h||e[67]!==_||e[68]!==q||e[69]!==ue||e[70]!==me||e[71]!==fe||e[72]!==G?(P=s(B,{children:s(ke,{"aria-label":q,className:"h-7 w-32","data-testid":ue,defaultValue:me,disabled:h,onKeyDown:_,placeholder:G},fe)}),e[66]=h,e[67]=_,e[68]=q,e[69]=ue,e[70]=me,e[71]=fe,e[72]=G,e[73]=P):P=e[73];let W;e[74]!==t.count?(W=s(B,{className:"text-right",children:s(pe,{variant:"secondary",children:t.count})}),e[74]=t.count,e[75]=W):W=e[75];let Y;e[76]!==t.lastSeen?(Y=He(t.lastSeen),e[76]=t.lastSeen,e[77]=Y):Y=e[77];let Q;e[78]!==Y?(Q=s(B,{className:"text-xs tabular-nums text-muted-foreground",children:Y}),e[78]=Y,e[79]=Q):Q=e[79];let X;e[80]!==h||e[81]!==t.hash||e[82]!==t.status||e[83]!==i||e[84]!==a?(X=t.status!=="resolved"&&s(oe,{"data-testid":`issues-resolve-${t.hash}`,disabled:h,onClick:()=>{re(i(t.hash,Pe,{}))},size:"xs",variant:"outline",children:a("Resolve")}),e[80]=h,e[81]=t.hash,e[82]=t.status,e[83]=i,e[84]=a,e[85]=X):X=e[85];let J;e[86]!==h||e[87]!==t.hash||e[88]!==t.status||e[89]!==i||e[90]!==a?(J=t.status!=="ignored"&&s(oe,{"data-testid":`issues-ignore-${t.hash}`,disabled:h,onClick:()=>{re(i(t.hash,We,{}))},size:"xs",variant:"ghost",children:a("Ignore")}),e[86]=h,e[87]=t.hash,e[88]=t.status,e[89]=i,e[90]=a,e[91]=J):J=e[91];let Z;e[92]!==h||e[93]!==t.assignee||e[94]!==t.hash||e[95]!==t.status||e[96]!==i||e[97]!==a?(Z=t.status!=="open"&&s(oe,{"data-testid":`issues-reopen-${t.hash}`,disabled:h,onClick:()=>{re(i(t.hash,Se,{assignee:t.assignee??null}))},size:"xs",variant:"ghost",children:a("Reopen")}),e[92]=h,e[93]=t.assignee,e[94]=t.hash,e[95]=t.status,e[96]=i,e[97]=a,e[98]=Z):Z=e[98];let ee;e[99]!==X||e[100]!==J||e[101]!==Z?(ee=s(B,{className:"text-right",children:w("div",{className:"flex justify-end gap-1",children:[X,J,Z]})}),e[99]=X,e[100]=J,e[101]=Z,e[102]=ee):ee=e[102];let te;e[103]!==c||e[104]!==I||e[105]!==D||e[106]!==P||e[107]!==W||e[108]!==Q||e[109]!==M||e[110]!==ee?(te=w(ye,{"data-testid":M,children:[c,I,D,P,W,Q,ee]}),e[103]=c,e[104]=I,e[105]=D,e[106]=P,e[107]=W,e[108]=Q,e[109]=M,e[110]=ee,e[111]=te):te=e[111];let se;e[112]!==o||e[113]!==t||e[114]!==r?(se=s(et,{expanded:o,issue:t,shardKey:r},t.sampleMessage),e[112]=o,e[113]=t,e[114]=r,e[115]=se):se=e[115];let ce;return e[116]!==te||e[117]!==se?(ce=w(De,{children:[te,se]}),e[116]=te,e[117]=se,e[118]=ce):ce=e[118],ce},Tt=n=>{const e=xe(38),{initialShardKey:h}=n,t=ve(),E=Ne(),{queryShardKey:i,setShardKey:r,shardKey:a}=ze(h),[o,R]=ne("all"),[A,L]=ne(it),[C,K]=ne(lt);let T;e[0]!==o?(T=o==="all"?{}:{status:o},e[0]=o,e[1]=T):T=e[1];let _;e[2]!==i?(_={live:!0,shardKey:i},e[2]=i,e[3]=_):_=e[3];const{data:M,error:d,liveError:g}=Be(ie.getIssues,T,_),$=M!==void 0;let x;if(e[4]!==C||e[5]!==A||e[6]!==E||e[7]!==M||e[8]!==d||e[9]!==g||e[10]!==$||e[11]!==i||e[12]!==r||e[13]!==a||e[14]!==o||e[15]!==t){const y=Xe(M);let S;e[17]!==E||e[18]!==i?(S=async(l,le,O)=>{K(v=>{if(!v.has(l))return v;const k=new Map(v);return k.delete(l),k}),L(v=>new Set(v).add(l));try{await E.query(le,{...O,hash:l},Ie(i))}catch(v){const U=je(v);K(z=>new Map(z).set(l,U))}L(v=>{const k=new Set(v);return k.delete(l),k})},e[17]=E,e[18]=i,e[19]=S):S=e[19];const N=S;let u;e[20]!==t?(u=l=>t(l==="all"?"All":l==="open"?"Open":l==="resolved"?"Resolved":"Ignored"),e[20]=t,e[21]=u):u=e[21];const p=u;let m;e[22]!==d?(m=d!==null&&s("p",{className:"text-sm text-destructive","data-testid":"issues-error",role:"alert",children:d}),e[22]=d,e[23]=m):m=e[23];let c;e[24]!==r||e[25]!==a?(c=s($e,{onChange:r,testId:"issues-shard-input",value:a}),e[24]=r,e[25]=a,e[26]=c):c=e[26];let b;e[27]!==g?(b=s(Te,{message:g,prefix:"issues"}),e[27]=g,e[28]=b):b=e[28];let f;e[29]!==o||e[30]!==p?(f=qe.map(l=>s(oe,{"data-active":o===l?"":void 0,"data-testid":`issues-filter-${l}`,onClick:()=>{R(l)},size:"xs",variant:o===l?"default":"outline",children:p(l)},l)),e[29]=o,e[30]=p,e[31]=f):f=e[31];let I;e[32]!==f?(I=s("div",{className:"ms-auto flex items-center gap-1","data-testid":"issues-status-filter",role:"group",children:f}),e[32]=f,e[33]=I):I=e[33];let V;e[34]!==I||e[35]!==c||e[36]!==b?(V=w("div",{className:"flex flex-wrap items-center gap-2",children:[c,b,I]}),e[34]=I,e[35]=c,e[36]=b,e[37]=V):V=e[37],x=w("div",{className:"flex flex-col gap-6","data-testid":"lunora-issues-panel",children:[m,V,$&&y.length===0?s(_e,{description:t("No grouped errors yet. When a function throws or a container crashes, matching errors fold into a single issue here."),testId:"issues-empty",title:t("No issues")}):s(Ae,{className:"overflow-hidden py-0",children:s(Ce,{className:"px-0",children:w(Ve,{"data-testid":"issues-table",children:[s(Oe,{children:w(ye,{children:[s(F,{children:t("Issue")}),s(F,{children:t("Status")}),s(F,{children:t("Severity")}),s(F,{children:t("Assignee")}),s(F,{className:"text-right",children:t("Events")}),s(F,{children:t("Last seen")}),s(F,{className:"text-right",children:t("Actions")})]})}),s(Ue,{children:y.map(l=>s(tt,{busy:A.has(l.hash),issue:l,rowError:C.get(l.hash),runTriage:N,shardKey:i},l.hash))})]})})})]}),e[4]=C,e[5]=A,e[6]=E,e[7]=M,e[8]=d,e[9]=g,e[10]=$,e[11]=i,e[12]=r,e[13]=a,e[14]=o,e[15]=t,e[16]=x}else x=e[16];return x};function st(n){return!n}function at(n){return s(be,{value:n,children:n},n)}function it(){return new Set}function lt(){return new Map}export{Tt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as ae,useEffect as le}from"react";import{c as ve,f as pe}from"../packem_shared/card-BMKx5UdA.js";import{E as Fe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{d as ye,n as he,f as X,m as Y,b as ke,p as Q}from"../packem_shared/table-DZAB8cs3.js";import{useT as q}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{f as z,b as H,l as Ee,c as ne}from"../packem_shared/internal-zkEvTqy8.js";import{u as B}from"../packem_shared/button-BkCrNcAs.js";import{f as de}from"../packem_shared/checkbox-StT4Gob6.js";import{u as re}from"../packem_shared/input-JHu63lTv.js";import{h as ie,u as se,y as oe,c as ce}from"../packem_shared/studio-CUXq5VSB.js";import{c as te}from"react/compiler-runtime";import{p as G}from"../packem_shared/label-6uP1obNF.js";import{l as fe}from"../packem_shared/textarea-Bu2-jKAs.js";import{w as Ke,z as Ve,_ as Me,S as Te,x as Ie}from"../packem_shared/select-BssZMiFY.js";import{jsx as r,jsxs as S,Fragment as be}from"react/jsx-runtime";import{g as Oe}from"../packem_shared/badge-BbuuAio7.js";const _e=l=>{const e=l.trim();if(e==="")return;const d=Number(e);return Number.isFinite(d)&&d>0?Math.floor(d):void 0},Je=l=>l===void 0?"—":new Date(l*1e3).toISOString(),De=l=>new TextEncoder().encode(l).length,ge=l=>{if(l.trim()!=="")try{return JSON.stringify(JSON.parse(l),void 0,2)}catch{return}},xe=l=>{if(l.trim()==="")return!0;try{return JSON.parse(l),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(l,e)=>{const d=l.trim();if(d==="")return"";const c=Number(d),i=Ne.find(m=>m.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*i)):d},Ce=l=>{const e=l.trim();if(e==="")return!0;const d=Number(e);return Number.isInteger(d)&&d>=60},we=(l,e,d,c)=>{const i=_e(l.ttl);return{expiration:i===void 0?c:void 0,expirationTtl:i,key:e,metadata:l.metadata.trim()===""?void 0:JSON.parse(l.metadata),namespace:d,value:l.value}},Se=l=>{const e=te(60),{helper:d,id:c,invalid:i,onChange:m,testId:s}=l,t=q(),[a,v]=Z(""),[o,g]=Z("seconds");let f;e[0]!==m||e[1]!==o?(f=b=>{v(b.target.value),m(ue(b.target.value,o))},e[0]=m,e[1]=o,e[2]=f):f=e[2];const I=f;let K;e[3]!==a||e[4]!==m?(K=b=>{b!==null&&(g(b),m(ue(a,b)))},e[3]=a,e[4]=m,e[5]=K):K=e[5];const O=K;let p;e[6]!==t?(p=t("days"),e[6]=t,e[7]=p):p=e[7];let u;e[8]!==t?(u=t("hours"),e[8]=t,e[9]=u):u=e[9];let y;e[10]!==t?(y=t("minutes"),e[10]=t,e[11]=y):y=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==p||e[15]!==u||e[16]!==y||e[17]!==x?(N={days:p,hours:u,minutes:y,seconds:x},e[14]=p,e[15]=u,e[16]=y,e[17]=x,e[18]=N):N=e[18];const C=N;let k;e[19]!==t?(k=t("Expires after"),e[19]=t,e[20]=k):k=e[20];let w;e[21]!==c||e[22]!==k?(w=r(G,{className:"text-xs",htmlFor:c,children:k}),e[21]=c,e[22]=k,e[23]=w):w=e[23];let E;e[24]!==t?(E=t("No expiration"),e[24]=t,e[25]=E):E=e[25];let J;e[26]!==a||e[27]!==c||e[28]!==i||e[29]!==I||e[30]!==E||e[31]!==s?(J=r(re,{"aria-invalid":i,className:"flex-1","data-testid":s,id:c,inputMode:"numeric",onChange:I,placeholder:E,value:a}),e[26]=a,e[27]=c,e[28]=i,e[29]=I,e[30]=E,e[31]=s,e[32]=J):J=e[32];let V;e[33]!==t?(V=t("TTL unit"),e[33]=t,e[34]=V):V=e[34];const L=`${s}-unit`;let D;e[35]===Symbol.for("react.memo_cache_sentinel")?(D=r(Ke,{}),e[35]=D):D=e[35];let M;e[36]!==V||e[37]!==L?(M=r(Ve,{"aria-label":V,className:"w-[7.5rem]","data-testid":L,children:D}),e[36]=V,e[37]=L,e[38]=M):M=e[38];let n;e[39]!==C?(n=Ne.map(b=>r(Me,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=n):n=e[40];let h;e[41]!==n?(h=r(Te,{children:n}),e[41]=n,e[42]=h):h=e[42];let $;e[43]!==O||e[44]!==M||e[45]!==h||e[46]!==o?($=S(Ie,{onValueChange:O,value:o,children:[M,h]}),e[43]=O,e[44]=M,e[45]=h,e[46]=o,e[47]=$):$=e[47];let T;e[48]!==J||e[49]!==$?(T=S("div",{className:"flex gap-2",children:[J,$]}),e[48]=J,e[49]=$,e[50]=T):T=e[50];let F;e[51]!==d||e[52]!==i||e[53]!==t||e[54]!==s?(F=i?r("p",{className:"text-xs text-destructive","data-testid":`${s}-invalid`,children:t("TTL must be at least 60 seconds.")}):d!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:d}),e[51]=d,e[52]=i,e[53]=t,e[54]=s,e[55]=F):F=e[55];let _;return e[56]!==T||e[57]!==F||e[58]!==w?(_=S("div",{className:"mb-3 grid gap-1",children:[w,T,F]}),e[56]=T,e[57]=F,e[58]=w,e[59]=_):_=e[59],_},$e=l=>{const e=te(36),{id:d,invalidTestId:c,onChange:i,testId:m,valid:s,value:t}=l,a=q();let v;e[0]!==t?(v=ge(t),e[0]=t,e[1]=v):v=e[1];const o=v;let g;e[2]!==a?(g=a("Metadata (JSON)"),e[2]=a,e[3]=g):g=e[3];let f;e[4]!==d||e[5]!==g?(f=r(G,{className:"text-xs",htmlFor:d,children:g}),e[4]=d,e[5]=g,e[6]=f):f=e[6];const I=`${m}-format`,K=o===void 0;let O;e[7]!==o||e[8]!==i?(O=()=>{o!==void 0&&i(o)},e[7]=o,e[8]=i,e[9]=O):O=e[9];let p;e[10]!==a?(p=a("Format JSON"),e[10]=a,e[11]=p):p=e[11];let u;e[12]!==I||e[13]!==K||e[14]!==O||e[15]!==p?(u=r(B,{"data-testid":I,disabled:K,onClick:O,size:"sm",variant:"outline",children:p}),e[12]=I,e[13]=K,e[14]=O,e[15]=p,e[16]=u):u=e[16];let y;e[17]!==f||e[18]!==u?(y=S("div",{className:"flex items-center justify-between gap-2",children:[f,u]}),e[17]=f,e[18]=u,e[19]=y):y=e[19];const x=!s;let N;e[20]!==i?(N=E=>{i(E.target.value)},e[20]=i,e[21]=N):N=e[21];let C;e[22]!==d||e[23]!==x||e[24]!==N||e[25]!==m||e[26]!==t?(C=r(fe,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":m,id:d,onChange:N,value:t}),e[22]=d,e[23]=x,e[24]=N,e[25]=m,e[26]=t,e[27]=C):C=e[27];let k;e[28]!==c||e[29]!==a||e[30]!==s?(k=!s&&r("p",{className:"text-xs text-destructive","data-testid":c,children:a("Metadata must be valid JSON.")}),e[28]=c,e[29]=a,e[30]=s,e[31]=k):k=e[31];let w;return e[32]!==C||e[33]!==k||e[34]!==y?(w=S("div",{className:"mb-3 grid gap-1",children:[y,C,k]}),e[32]=C,e[33]=k,e[34]=y,e[35]=w):w=e[35],w},Le={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Be=(l,e)=>{switch(e.type){case"setField":return{...l,[e.field]:e.value};case"submitFailed":return{...l,busy:!1,error:e.error};case"submitStart":return{...l,busy:!0,error:null};default:return l}},Pe=l=>{const e=te(73),{namespace:d,onCancel:c,onCreated:i}=l,m=ee(),s=q(),[t,a]=ae(Be,Le);let v;e[0]!==t.metadata?(v=xe(t.metadata),e[0]=t.metadata,e[1]=v):v=e[1];const o=v;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const f=g;let I;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==f?(I=t.name.trim()!==""&&o&&f&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=f,e[8]=I):I=e[8];const K=I;let O;e[9]!==K||e[10]!==m||e[11]!==d||e[12]!==i||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(O=()=>{K&&(a({type:"submitStart"}),z((async()=>{try{await m.putKvValue(we({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,d)),i()}catch(j){a({error:H(j),type:"submitFailed"})}})()))},e[9]=K,e[10]=m,e[11]=d,e[12]=i,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=O):O=e[17];const p=O;let u;e[18]!==s?(u=s("Key name"),e[18]=s,e[19]=u):u=e[19];let y;e[20]!==u?(y=r(G,{className:"text-xs",htmlFor:"kv-create-name",children:u}),e[20]=u,e[21]=y):y=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=j=>{a({field:"name",type:"setField",value:j.target.value})},e[22]=x):x=e[22];let N;e[23]!==s?(N=s("Key name"),e[23]=s,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let k;e[28]!==y||e[29]!==C?(k=S("div",{className:"grid gap-1",children:[y,C]}),e[28]=y,e[29]=C,e[30]=k):k=e[30];let w;e[31]!==s?(w=s("Value"),e[31]=s,e[32]=w):w=e[32];let E;e[33]!==w?(E=r(G,{className:"text-xs",htmlFor:"kv-create-value",children:w}),e[33]=w,e[34]=E):E=e[34];let J;e[35]===Symbol.for("react.memo_cache_sentinel")?(J=j=>{a({field:"value",type:"setField",value:j.target.value})},e[35]=J):J=e[35];let V;e[36]!==t.value?(V=r(fe,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:J,value:t.value}),e[36]=t.value,e[37]=V):V=e[37];let L;e[38]!==E||e[39]!==V?(L=S("div",{className:"grid gap-1",children:[E,V]}),e[38]=E,e[39]=V,e[40]=L):L=e[40];const D=!f;let M;e[41]===Symbol.for("react.memo_cache_sentinel")?(M=j=>{a({field:"ttl",type:"setField",value:j})},e[41]=M):M=e[41];let n;e[42]!==D?(n=r(Se,{id:"kv-create-ttl",invalid:D,onChange:M,testId:"kv-create-ttl"}),e[42]=D,e[43]=n):n=e[43];let h;e[44]===Symbol.for("react.memo_cache_sentinel")?(h=j=>{a({field:"metadata",type:"setField",value:j})},e[44]=h):h=e[44];let $;e[45]!==o||e[46]!==t.metadata?($=r($e,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:h,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=$):$=e[47];const T=!K;let F;e[48]!==t.busy||e[49]!==s?(F=t.busy?s("Creating…"):s("Create key"),e[48]=t.busy,e[49]=s,e[50]=F):F=e[50];let _;e[51]!==p||e[52]!==T||e[53]!==F?(_=r(B,{"data-testid":"kv-create-submit",disabled:T,onClick:p,children:F}),e[51]=p,e[52]=T,e[53]=F,e[54]=_):_=e[54];const b=t.busy;let P;e[55]!==s?(P=s("Cancel"),e[55]=s,e[56]=P):P=e[56];let A;e[57]!==c||e[58]!==t.busy||e[59]!==P?(A=r(B,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:P}),e[57]=c,e[58]=t.busy,e[59]=P,e[60]=A):A=e[60];let R;e[61]!==_||e[62]!==A?(R=S("div",{className:"flex flex-wrap gap-2",children:[_,A]}),e[61]=_,e[62]=A,e[63]=R):R=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let W;return e[66]!==k||e[67]!==L||e[68]!==n||e[69]!==$||e[70]!==R||e[71]!==U?(W=S("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[k,L,n,$,R,U]}),e[66]=k,e[67]=L,e[68]=n,e[69]=$,e[70]=R,e[71]=U,e[72]=W):W=e[72],W},je={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},Ae=(l,e)=>{switch(e.type){case"deleteStart":return{...l,busy:"deleting",writeError:null};case"editMetadata":return{...l,editedMetadata:e.value};case"editTtl":return{...l,editedTtl:e.value};case"editValue":return{...l,editedValue:e.value};case"loaded":return{...l,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"saveOk":return{...l,busy:"",value:l.editedValue};case"saveStart":return{...l,busy:"saving",writeError:null};case"writeFailed":return{...l,busy:"",writeError:e.error};default:return l}},ze=l=>{const e=te(67),{expiration:d,keyName:c,namespace:i,onDeleted:m}=l,s=ee(),t=q(),[a,v]=ae(Ae,je);let o,g;e[0]!==s||e[1]!==c||e[2]!==i?(o=()=>{const b={cancelled:!1};return z((async()=>{try{const P=await s.getKvValue({key:c,namespace:i});b.cancelled||v({metadata:P.metadata,type:"loaded",value:P.value})}catch(P){const A=P;b.cancelled||v({error:H(A),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[s,i,c],e[0]=s,e[1]=c,e[2]=i,e[3]=o,e[4]=g):(o=e[3],g=e[4]),le(o,g);let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b=>{v({type:"editValue",value:b.target.value})},e[5]=f):f=e[5];const I=f;let K;e[6]===Symbol.for("react.memo_cache_sentinel")?(K=b=>{v({type:"editMetadata",value:b})},e[6]=K):K=e[6];const O=K;let p;e[7]!==a.editedValue?(p=ge(a.editedValue),e[7]=a.editedValue,e[8]=p):p=e[8];const u=p;let y;e[9]!==a.editedMetadata?(y=xe(a.editedMetadata),e[9]=a.editedMetadata,e[10]=y):y=e[10];const x=y;let N;e[11]!==a.editedTtl?(N=Ce(a.editedTtl),e[11]=a.editedTtl,e[12]=N):N=e[12];const C=N;let k;e[13]!==u?(k=()=>{u!==void 0&&v({type:"editValue",value:u})},e[13]=u,e[14]=k):k=e[14];const w=k;let E;e[15]!==s||e[16]!==d||e[17]!==c||e[18]!==x||e[19]!==i||e[20]!==a.editedMetadata||e[21]!==a.editedTtl||e[22]!==a.editedValue||e[23]!==t?(E=()=>{if(!x){v({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}v({type:"saveStart"}),z((async()=>{try{await s.putKvValue(we({metadata:a.editedMetadata,ttl:a.editedTtl,value:a.editedValue},c,i,d)),v({type:"saveOk"})}catch(b){v({error:H(b),type:"writeFailed"})}})())},e[15]=s,e[16]=d,e[17]=c,e[18]=x,e[19]=i,e[20]=a.editedMetadata,e[21]=a.editedTtl,e[22]=a.editedValue,e[23]=t,e[24]=E):E=e[24];const J=E;let V;e[25]!==s||e[26]!==c||e[27]!==i||e[28]!==m?(V=()=>{v({type:"deleteStart"}),z((async()=>{try{await s.deleteKvKey({key:c,namespace:i}),m(c)}catch(b){v({error:H(b),type:"writeFailed"})}})())},e[25]=s,e[26]=c,e[27]=i,e[28]=m,e[29]=V):V=e[29];const L=V;let D;e[30]!==c?(D=()=>{ne(c)},e[30]=c,e[31]=D):D=e[31];let M;e[32]!==t?(M=t("Copy key"),e[32]=t,e[33]=M):M=e[33];let n;e[34]!==D||e[35]!==M?(n=r("div",{className:"mb-2 flex justify-end",children:r(B,{"data-testid":"kv-copy-key-btn",onClick:D,size:"sm",variant:"outline",children:M})}),e[34]=D,e[35]=M,e[36]=n):n=e[36];let h;e[37]!==a.loadError?(h=a.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:a.loadError}),e[37]=a.loadError,e[38]=h):h=e[38];let $;e[39]!==a.loading||e[40]!==t?($=a.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=a.loading,e[40]=t,e[41]=$):$=e[41];let T;e[42]!==u||e[43]!==x||e[44]!==L||e[45]!==w||e[46]!==J||e[47]!==a.busy||e[48]!==a.editedMetadata||e[49]!==a.editedValue||e[50]!==a.loading||e[51]!==a.value||e[52]!==a.writeError||e[53]!==t||e[54]!==C?(T=!a.loading&&a.value!==null&&S(be,{children:[S("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(G,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),u!==void 0&&r(Oe,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Ee(De(a.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:I,value:a.editedValue}),S("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-format-btn",disabled:u===void 0,onClick:w,size:"sm",variant:"outline",children:t("Format JSON")}),r(B,{"data-testid":"kv-copy-value-btn",onClick:()=>{ne(a.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r(Se,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{v({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r($e,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:O,testId:"kv-metadata-editor",valid:x,value:a.editedMetadata}),S("div",{className:"flex flex-wrap gap-2",children:[r(B,{"data-testid":"kv-save-btn",disabled:a.busy!==""||!x||!C,onClick:J,children:a.busy==="saving"?t("Saving…"):t("Save")}),r(B,{"data-testid":"kv-delete-btn",disabled:a.busy!=="",onClick:L,variant:"destructive",children:a.busy==="deleting"?t("Deleting…"):t("Delete")})]}),a.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:a.writeError})]}),e[42]=u,e[43]=x,e[44]=L,e[45]=w,e[46]=J,e[47]=a.busy,e[48]=a.editedMetadata,e[49]=a.editedValue,e[50]=a.loading,e[51]=a.value,e[52]=a.writeError,e[53]=t,e[54]=C,e[55]=T):T=e[55];let F;e[56]!==a.loadError||e[57]!==a.loading||e[58]!==a.value||e[59]!==t?(F=!a.loading&&a.value===null&&a.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=a.loadError,e[57]=a.loading,e[58]=a.value,e[59]=t,e[60]=F):F=e[60];let _;return e[61]!==n||e[62]!==h||e[63]!==$||e[64]!==T||e[65]!==F?(_=S("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[n,h,$,T,F]}),e[61]=n,e[62]=h,e[63]=$,e[64]=T,e[65]=F,e[66]=_):_=e[66],_},me=100,He={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},Re=(l,e)=>{switch(e.type){case"appendPage":return{...l,cursor:e.cursor,keys:[...l.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...l,appliedPrefix:l.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,selectedKey:null};case"bulkDeleted":{const d=new Set(e.deleted);return{...l,bulk:l.bulk.filter(c=>!d.has(c)),bulkBusy:!1,bulkError:e.error,keys:l.keys===null?null:l.keys.filter(c=>!d.has(c.name)),selectedKey:l.selectedKey!==null&&d.has(l.selectedKey)?null:l.selectedKey}}case"bulkDeleteStart":return{...l,bulkBusy:!0,bulkError:null};case"firstPage":return{...l,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...l,bulk:l.bulk.filter(d=>d!==e.name),keys:l.keys===null?null:l.keys.filter(d=>d.name!==e.name),selectedKey:null};case"loadFailed":return{...l,loadError:e.error,loading:!1};case"loadStart":return{...l,loadError:null,loading:!0};case"prefixInput":return{...l,prefixInput:e.value};case"reload":return{...l,bulk:[],bulkError:null,reloadNonce:l.reloadNonce+1,selectedKey:null};case"selectKey":return{...l,selectedKey:e.name};case"toggleAllBulk":return{...l,bulk:e.names};case"toggleBulk":return{...l,bulk:l.bulk.includes(e.name)?l.bulk.filter(d=>d!==e.name):[...l.bulk,e.name]};default:return l}},Ue=({namespace:l})=>{const e=ee(),d=q(),[c,i]=ae(Re,He),{appliedPrefix:m,bulk:s,bulkBusy:t,bulkError:a,cursor:v,keys:o,listComplete:g,loadError:f,loading:I,prefixInput:K,reloadNonce:O,selectedKey:p}=c,[u,y]=Z(!1);le(()=>{const n={cancelled:!1};return z((async()=>{i({type:"loadStart"});try{const h=await e.listKvKeys({limit:me,namespace:l,prefix:m===""?void 0:m});n.cancelled||i({cursor:h.cursor??null,keys:h.keys,listComplete:h.listComplete,type:"firstPage"})}catch(h){n.cancelled||i({error:H(h),type:"loadFailed"})}})()),()=>{n.cancelled=!0}},[e,l,m,O]);const x=n=>{i({type:"prefixInput",value:n.target.value})},N=()=>{i({type:"applyFilter"})},C=n=>{i({name:n.currentTarget.dataset.key??null,type:"selectKey"})},k=()=>{v!==null&&(i({type:"loadStart"}),z((async()=>{try{const n=await e.listKvKeys({cursor:v,limit:me,namespace:l,prefix:m===""?void 0:m});i({cursor:n.cursor??null,keys:n.keys,listComplete:n.listComplete,type:"appendPage"})}catch(n){i({error:H(n),type:"loadFailed"})}})()))},w=n=>{i({name:n,type:"keyDeleted"})},E=n=>{i({name:n,type:"toggleBulk"})},J=n=>{i({names:n&&o!==null?o.map(h=>h.name):[],type:"toggleAllBulk"})},V=()=>{if(s.length===0)return;const n=[...s];i({type:"bulkDeleteStart"}),z((async()=>{const h=await Promise.allSettled(n.map(F=>e.deleteKvKey({key:F,namespace:l}))),$=n.filter((F,_)=>h[_]?.status==="fulfilled"),T=n.length-$.length;i({deleted:$,error:T>0?d("Failed to delete {count} keys.",{count:T}):null,type:"bulkDeleted"})})())},L=()=>{y(!1),i({type:"reload"})},D=o!==null&&o.length>0&&s.length===o.length,M=new Set(s);return S(be,{children:[S("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[S("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":d("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:d("Filter by prefix…"),value:K}),r(B,{"data-testid":"kv-filter-btn",disabled:I,onClick:N,children:d("Filter")}),r(B,{"data-testid":"kv-new-key-btn",onClick:()=>{y(n=>!n)},variant:"outline",children:d("New key")}),s.length>0&&r(B,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:V,variant:"destructive",children:t?d("Deleting…"):d("Delete {count}",{count:s.length})})]}),a!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:a}),f!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:f}),o!==null&&o.length===0&&!I&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:d("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:S(ye,{"data-testid":"kv-key-table",children:[r(he,{children:S(X,{children:[r(Y,{className:"w-10",children:r(de,{"aria-label":d("Select all"),checked:D,"data-testid":"kv-select-all",onCheckedChange:J})}),r(Y,{children:d("Key")}),r(Y,{children:d("Expiration")})]})}),r(ke,{children:o.map(n=>S(X,{className:n.name===p?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":n.name,"data-testid":`kv-key-row-${n.name}`,onClick:C,children:[r(Q,{onClick:h=>{h.stopPropagation()},children:r(de,{"aria-label":d("Select {name}",{name:n.name}),checked:M.has(n.name),"data-testid":`kv-select-${n.name}`,onCheckedChange:()=>{E(n.name)}})}),r(Q,{className:"font-mono text-xs",children:n.name}),r(Q,{className:"tabular-nums text-xs",children:Je(n.expiration)})]},n.name))})]})})}),!g&&v!==null&&r("div",{className:"mt-2",children:r(B,{"data-testid":"kv-load-more",disabled:I,onClick:k,variant:"outline",children:d(I?"Loading…":"Load more")})})]}),r(ie,{onOpenChange:n=>{n||y(!1)},open:u,children:S(se,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:d("New key")})}),r(Pe,{namespace:l,onCancel:()=>{y(!1)},onCreated:L})]})}),r(ie,{onOpenChange:n=>{n||i({name:null,type:"selectKey"})},open:p!==null,children:S(se,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:p})}),p!==null&&r(ze,{expiration:o?.find(n=>n.name===p)?.expiration,keyName:p,namespace:l,onDeleted:w},`${l}:${p}`)]})})]})},ct=({loadNamespaces:l}={})=>{const e=ee(),d=q(),[c,i]=Z(null),[m,s]=Z(null),[t,a]=Z(null);le(()=>{const o={cancelled:!1};return z((async()=>{try{const g=await(l??(()=>e.listKvNamespaces()))();o.cancelled||(i(g),s(null),a(f=>f??g[0]?.binding??null))}catch(g){o.cancelled||(i(null),s(H(g)))}})()),()=>{o.cancelled=!0}},[e,l]);const v=o=>{a(o.currentTarget.dataset.ns??null)};return S("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[m!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:m}),c!==null&&c.length===0&&r(Fe,{description:d("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),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:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:d("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(pe,{className:"px-0",children:S(ye,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(Y,{children:d("Namespace")})})}),r(ke,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:v,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ct as KvBrowser};
|
|
1
|
+
import{useLunora as ee}from"@lunora/react";import{useState as Z,useReducer as le,useEffect as ae}from"react";import{C as ve,a as fe}from"../packem_shared/card-BGlQzQY-.js";import{E as Ee}from"../packem_shared/empty-state-B939z6K2.js";import{T as pe,a as he,b as X,c as q,d as ye,e as Q}from"../packem_shared/table-BMsuYFhk.js";import{useT as G}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{f as H,b as R,l as Fe,g as se}from"../packem_shared/internal-CwaF9YNk.js";import{B as P}from"../packem_shared/button-BOPLD1un.js";import{C as ne}from"../packem_shared/checkbox-C5w53W-E.js";import{I as re}from"../packem_shared/input-CY5W3wzv.js";import{b as ie,c as de,d as oe,e as ce}from"../packem_shared/studio-B3eEcBK0.js";import{c as te}from"react/compiler-runtime";import{L as W}from"../packem_shared/label-BOUo-DP0.js";import{T as ke}from"../packem_shared/textarea-DpO3i-Qo.js";import{c as Ke,S as Ve,a as Ie,b as _e,d as Me}from"../packem_shared/select-BPISLTcv.js";import{jsx as r,jsxs as w,Fragment as be}from"react/jsx-runtime";import{B as Le}from"../packem_shared/badge-cAk9Di1Q.js";const Be=a=>{const e=a.trim();if(e==="")return;const n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):void 0},Oe=a=>a===void 0?"—":new Date(a*1e3).toISOString(),Ae=a=>new TextEncoder().encode(a).length,ge=a=>{if(a.trim()!=="")try{return JSON.stringify(JSON.parse(a),void 0,2)}catch{return}},xe=a=>{if(a.trim()==="")return!0;try{return JSON.parse(a),!0}catch{return!1}},Ne=[{key:"seconds",seconds:1},{key:"minutes",seconds:60},{key:"hours",seconds:3600},{key:"days",seconds:86400}],ue=(a,e)=>{const n=a.trim();if(n==="")return"";const c=Number(n),i=Ne.find(m=>m.key===e)?.seconds??1;return Number.isFinite(c)&&c>0?String(Math.round(c*i)):n},Ce=a=>{const e=a.trim();if(e==="")return!0;const n=Number(e);return Number.isInteger(n)&&n>=60},Se=(a,e,n,c)=>{const i=Be(a.ttl);return{expiration:i===void 0?c:void 0,expirationTtl:i,key:e,metadata:a.metadata.trim()===""?void 0:JSON.parse(a.metadata),namespace:n,value:a.value}},we=a=>{const e=te(60),{helper:n,id:c,invalid:i,onChange:m,testId:d}=a,t=G(),[l,v]=Z(""),[o,g]=Z("seconds");let k;e[0]!==m||e[1]!==o?(k=b=>{v(b.target.value),m(ue(b.target.value,o))},e[0]=m,e[1]=o,e[2]=k):k=e[2];const M=k;let K;e[3]!==l||e[4]!==m?(K=b=>{b!==null&&(g(b),m(ue(l,b)))},e[3]=l,e[4]=m,e[5]=K):K=e[5];const L=K;let f;e[6]!==t?(f=t("days"),e[6]=t,e[7]=f):f=e[7];let u;e[8]!==t?(u=t("hours"),e[8]=t,e[9]=u):u=e[9];let p;e[10]!==t?(p=t("minutes"),e[10]=t,e[11]=p):p=e[11];let x;e[12]!==t?(x=t("seconds"),e[12]=t,e[13]=x):x=e[13];let N;e[14]!==f||e[15]!==u||e[16]!==p||e[17]!==x?(N={days:f,hours:u,minutes:p,seconds:x},e[14]=f,e[15]=u,e[16]=p,e[17]=x,e[18]=N):N=e[18];const C=N;let y;e[19]!==t?(y=t("Expires after"),e[19]=t,e[20]=y):y=e[20];let S;e[21]!==c||e[22]!==y?(S=r(W,{className:"text-xs",htmlFor:c,children:y}),e[21]=c,e[22]=y,e[23]=S):S=e[23];let F;e[24]!==t?(F=t("No expiration"),e[24]=t,e[25]=F):F=e[25];let O;e[26]!==l||e[27]!==c||e[28]!==i||e[29]!==M||e[30]!==F||e[31]!==d?(O=r(re,{"aria-invalid":i,className:"flex-1","data-testid":d,id:c,inputMode:"numeric",onChange:M,placeholder:F,value:l}),e[26]=l,e[27]=c,e[28]=i,e[29]=M,e[30]=F,e[31]=d,e[32]=O):O=e[32];let V;e[33]!==t?(V=t("TTL unit"),e[33]=t,e[34]=V):V=e[34];const D=`${d}-unit`;let A;e[35]===Symbol.for("react.memo_cache_sentinel")?(A=r(Ve,{}),e[35]=A):A=e[35];let I;e[36]!==V||e[37]!==D?(I=r(Ie,{"aria-label":V,className:"w-[7.5rem]","data-testid":D,children:A}),e[36]=V,e[37]=D,e[38]=I):I=e[38];let s;e[39]!==C?(s=Ne.map(b=>r(Ke,{value:b.key,children:C[b.key]},b.key)),e[39]=C,e[40]=s):s=e[40];let h;e[41]!==s?(h=r(_e,{children:s}),e[41]=s,e[42]=h):h=e[42];let T;e[43]!==L||e[44]!==I||e[45]!==h||e[46]!==o?(T=w(Me,{onValueChange:L,value:o,children:[I,h]}),e[43]=L,e[44]=I,e[45]=h,e[46]=o,e[47]=T):T=e[47];let _;e[48]!==O||e[49]!==T?(_=w("div",{className:"flex gap-2",children:[O,T]}),e[48]=O,e[49]=T,e[50]=_):_=e[50];let E;e[51]!==n||e[52]!==i||e[53]!==t||e[54]!==d?(E=i?r("p",{className:"text-xs text-destructive","data-testid":`${d}-invalid`,children:t("TTL must be at least 60 seconds.")}):n!==void 0&&r("p",{className:"text-xs text-muted-foreground",children:n}),e[51]=n,e[52]=i,e[53]=t,e[54]=d,e[55]=E):E=e[55];let B;return e[56]!==_||e[57]!==E||e[58]!==S?(B=w("div",{className:"mb-3 grid gap-1",children:[S,_,E]}),e[56]=_,e[57]=E,e[58]=S,e[59]=B):B=e[59],B},Te=a=>{const e=te(36),{id:n,invalidTestId:c,onChange:i,testId:m,valid:d,value:t}=a,l=G();let v;e[0]!==t?(v=ge(t),e[0]=t,e[1]=v):v=e[1];const o=v;let g;e[2]!==l?(g=l("Metadata (JSON)"),e[2]=l,e[3]=g):g=e[3];let k;e[4]!==n||e[5]!==g?(k=r(W,{className:"text-xs",htmlFor:n,children:g}),e[4]=n,e[5]=g,e[6]=k):k=e[6];const M=`${m}-format`,K=o===void 0;let L;e[7]!==o||e[8]!==i?(L=()=>{o!==void 0&&i(o)},e[7]=o,e[8]=i,e[9]=L):L=e[9];let f;e[10]!==l?(f=l("Format JSON"),e[10]=l,e[11]=f):f=e[11];let u;e[12]!==M||e[13]!==K||e[14]!==L||e[15]!==f?(u=r(P,{"data-testid":M,disabled:K,onClick:L,size:"sm",variant:"outline",children:f}),e[12]=M,e[13]=K,e[14]=L,e[15]=f,e[16]=u):u=e[16];let p;e[17]!==k||e[18]!==u?(p=w("div",{className:"flex items-center justify-between gap-2",children:[k,u]}),e[17]=k,e[18]=u,e[19]=p):p=e[19];const x=!d;let N;e[20]!==i?(N=F=>{i(F.target.value)},e[20]=i,e[21]=N):N=e[21];let C;e[22]!==n||e[23]!==x||e[24]!==N||e[25]!==m||e[26]!==t?(C=r(ke,{"aria-invalid":x,className:"min-h-[4rem] font-mono text-xs","data-testid":m,id:n,onChange:N,value:t}),e[22]=n,e[23]=x,e[24]=N,e[25]=m,e[26]=t,e[27]=C):C=e[27];let y;e[28]!==c||e[29]!==l||e[30]!==d?(y=!d&&r("p",{className:"text-xs text-destructive","data-testid":c,children:l("Metadata must be valid JSON.")}),e[28]=c,e[29]=l,e[30]=d,e[31]=y):y=e[31];let S;return e[32]!==C||e[33]!==y||e[34]!==p?(S=w("div",{className:"mb-3 grid gap-1",children:[p,C,y]}),e[32]=C,e[33]=y,e[34]=p,e[35]=S):S=e[35],S},De={busy:!1,error:null,metadata:"",name:"",ttl:"",value:""},Je=(a,e)=>{switch(e.type){case"setField":return{...a,[e.field]:e.value};case"submitFailed":return{...a,busy:!1,error:e.error};case"submitStart":return{...a,busy:!0,error:null};default:return a}},Pe=a=>{const e=te(73),{namespace:n,onCancel:c,onCreated:i}=a,m=ee(),d=G(),[t,l]=le(Je,De);let v;e[0]!==t.metadata?(v=xe(t.metadata),e[0]=t.metadata,e[1]=v):v=e[1];const o=v;let g;e[2]!==t.ttl?(g=Ce(t.ttl),e[2]=t.ttl,e[3]=g):g=e[3];const k=g;let M;e[4]!==o||e[5]!==t.busy||e[6]!==t.name||e[7]!==k?(M=t.name.trim()!==""&&o&&k&&!t.busy,e[4]=o,e[5]=t.busy,e[6]=t.name,e[7]=k,e[8]=M):M=e[8];const K=M;let L;e[9]!==K||e[10]!==m||e[11]!==n||e[12]!==i||e[13]!==t.metadata||e[14]!==t.name||e[15]!==t.ttl||e[16]!==t.value?(L=()=>{K&&(l({type:"submitStart"}),H((async()=>{try{await m.putKvValue(Se({metadata:t.metadata,ttl:t.ttl,value:t.value},t.name,n)),i()}catch($){l({error:R($),type:"submitFailed"})}})()))},e[9]=K,e[10]=m,e[11]=n,e[12]=i,e[13]=t.metadata,e[14]=t.name,e[15]=t.ttl,e[16]=t.value,e[17]=L):L=e[17];const f=L;let u;e[18]!==d?(u=d("Key name"),e[18]=d,e[19]=u):u=e[19];let p;e[20]!==u?(p=r(W,{className:"text-xs",htmlFor:"kv-create-name",children:u}),e[20]=u,e[21]=p):p=e[21];let x;e[22]===Symbol.for("react.memo_cache_sentinel")?(x=$=>{l({field:"name",type:"setField",value:$.target.value})},e[22]=x):x=e[22];let N;e[23]!==d?(N=d("Key name"),e[23]=d,e[24]=N):N=e[24];let C;e[25]!==t.name||e[26]!==N?(C=r(re,{autoFocus:!0,"data-testid":"kv-create-name",id:"kv-create-name",onChange:x,placeholder:N,value:t.name}),e[25]=t.name,e[26]=N,e[27]=C):C=e[27];let y;e[28]!==p||e[29]!==C?(y=w("div",{className:"grid gap-1",children:[p,C]}),e[28]=p,e[29]=C,e[30]=y):y=e[30];let S;e[31]!==d?(S=d("Value"),e[31]=d,e[32]=S):S=e[32];let F;e[33]!==S?(F=r(W,{className:"text-xs",htmlFor:"kv-create-value",children:S}),e[33]=S,e[34]=F):F=e[34];let O;e[35]===Symbol.for("react.memo_cache_sentinel")?(O=$=>{l({field:"value",type:"setField",value:$.target.value})},e[35]=O):O=e[35];let V;e[36]!==t.value?(V=r(ke,{className:"min-h-[6rem] font-mono text-xs","data-testid":"kv-create-value",id:"kv-create-value",onChange:O,value:t.value}),e[36]=t.value,e[37]=V):V=e[37];let D;e[38]!==F||e[39]!==V?(D=w("div",{className:"grid gap-1",children:[F,V]}),e[38]=F,e[39]=V,e[40]=D):D=e[40];const A=!k;let I;e[41]===Symbol.for("react.memo_cache_sentinel")?(I=$=>{l({field:"ttl",type:"setField",value:$})},e[41]=I):I=e[41];let s;e[42]!==A?(s=r(we,{id:"kv-create-ttl",invalid:A,onChange:I,testId:"kv-create-ttl"}),e[42]=A,e[43]=s):s=e[43];let h;e[44]===Symbol.for("react.memo_cache_sentinel")?(h=$=>{l({field:"metadata",type:"setField",value:$})},e[44]=h):h=e[44];let T;e[45]!==o||e[46]!==t.metadata?(T=r(Te,{id:"kv-create-metadata",invalidTestId:"kv-create-metadata-invalid",onChange:h,testId:"kv-create-metadata",valid:o,value:t.metadata}),e[45]=o,e[46]=t.metadata,e[47]=T):T=e[47];const _=!K;let E;e[48]!==t.busy||e[49]!==d?(E=t.busy?d("Creating…"):d("Create key"),e[48]=t.busy,e[49]=d,e[50]=E):E=e[50];let B;e[51]!==f||e[52]!==_||e[53]!==E?(B=r(P,{"data-testid":"kv-create-submit",disabled:_,onClick:f,children:E}),e[51]=f,e[52]=_,e[53]=E,e[54]=B):B=e[54];const b=t.busy;let J;e[55]!==d?(J=d("Cancel"),e[55]=d,e[56]=J):J=e[56];let j;e[57]!==c||e[58]!==t.busy||e[59]!==J?(j=r(P,{"data-testid":"kv-create-cancel",disabled:b,onClick:c,variant:"outline",children:J}),e[57]=c,e[58]=t.busy,e[59]=J,e[60]=j):j=e[60];let z;e[61]!==B||e[62]!==j?(z=w("div",{className:"flex flex-wrap gap-2",children:[B,j]}),e[61]=B,e[62]=j,e[63]=z):z=e[63];let U;e[64]!==t.error?(U=t.error!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-create-error",role:"alert",children:t.error}),e[64]=t.error,e[65]=U):U=e[65];let Y;return e[66]!==y||e[67]!==D||e[68]!==s||e[69]!==T||e[70]!==z||e[71]!==U?(Y=w("div",{className:"grid gap-3 px-4 pb-4","data-testid":"kv-create-form",children:[y,D,s,T,z,U]}),e[66]=y,e[67]=D,e[68]=s,e[69]=T,e[70]=z,e[71]=U,e[72]=Y):Y=e[72],Y},$e={busy:"",editedMetadata:"",editedTtl:"",editedValue:"",loadError:null,loading:!0,value:null,writeError:null},je=(a,e)=>{switch(e.type){case"deleteStart":return{...a,busy:"deleting",writeError:null};case"editMetadata":return{...a,editedMetadata:e.value};case"editTtl":return{...a,editedTtl:e.value};case"editValue":return{...a,editedValue:e.value};case"loaded":return{...a,editedMetadata:e.metadata===null||e.metadata===void 0?"":JSON.stringify(e.metadata,null,2),editedValue:e.value??"",loading:!1,value:e.value};case"loadFailed":return{...a,loadError:e.error,loading:!1};case"saveOk":return{...a,busy:"",value:a.editedValue};case"saveStart":return{...a,busy:"saving",writeError:null};case"writeFailed":return{...a,busy:"",writeError:e.error};default:return a}},He=a=>{const e=te(67),{expiration:n,keyName:c,namespace:i,onDeleted:m}=a,d=ee(),t=G(),[l,v]=le(je,$e);let o,g;e[0]!==d||e[1]!==c||e[2]!==i?(o=()=>{const b={cancelled:!1};return H((async()=>{try{const J=await d.getKvValue({key:c,namespace:i});b.cancelled||v({metadata:J.metadata,type:"loaded",value:J.value})}catch(J){const j=J;b.cancelled||v({error:R(j),type:"loadFailed"})}})()),()=>{b.cancelled=!0}},g=[d,i,c],e[0]=d,e[1]=c,e[2]=i,e[3]=o,e[4]=g):(o=e[3],g=e[4]),ae(o,g);let k;e[5]===Symbol.for("react.memo_cache_sentinel")?(k=b=>{v({type:"editValue",value:b.target.value})},e[5]=k):k=e[5];const M=k;let K;e[6]===Symbol.for("react.memo_cache_sentinel")?(K=b=>{v({type:"editMetadata",value:b})},e[6]=K):K=e[6];const L=K;let f;e[7]!==l.editedValue?(f=ge(l.editedValue),e[7]=l.editedValue,e[8]=f):f=e[8];const u=f;let p;e[9]!==l.editedMetadata?(p=xe(l.editedMetadata),e[9]=l.editedMetadata,e[10]=p):p=e[10];const x=p;let N;e[11]!==l.editedTtl?(N=Ce(l.editedTtl),e[11]=l.editedTtl,e[12]=N):N=e[12];const C=N;let y;e[13]!==u?(y=()=>{u!==void 0&&v({type:"editValue",value:u})},e[13]=u,e[14]=y):y=e[14];const S=y;let F;e[15]!==d||e[16]!==n||e[17]!==c||e[18]!==x||e[19]!==i||e[20]!==l.editedMetadata||e[21]!==l.editedTtl||e[22]!==l.editedValue||e[23]!==t?(F=()=>{if(!x){v({error:t("Metadata must be valid JSON."),type:"writeFailed"});return}v({type:"saveStart"}),H((async()=>{try{await d.putKvValue(Se({metadata:l.editedMetadata,ttl:l.editedTtl,value:l.editedValue},c,i,n)),v({type:"saveOk"})}catch(b){v({error:R(b),type:"writeFailed"})}})())},e[15]=d,e[16]=n,e[17]=c,e[18]=x,e[19]=i,e[20]=l.editedMetadata,e[21]=l.editedTtl,e[22]=l.editedValue,e[23]=t,e[24]=F):F=e[24];const O=F;let V;e[25]!==d||e[26]!==c||e[27]!==i||e[28]!==m?(V=()=>{v({type:"deleteStart"}),H((async()=>{try{await d.deleteKvKey({key:c,namespace:i}),m(c)}catch(b){v({error:R(b),type:"writeFailed"})}})())},e[25]=d,e[26]=c,e[27]=i,e[28]=m,e[29]=V):V=e[29];const D=V;let A;e[30]!==c?(A=()=>{se(c)},e[30]=c,e[31]=A):A=e[31];let I;e[32]!==t?(I=t("Copy key"),e[32]=t,e[33]=I):I=e[33];let s;e[34]!==A||e[35]!==I?(s=r("div",{className:"mb-2 flex justify-end",children:r(P,{"data-testid":"kv-copy-key-btn",onClick:A,size:"sm",variant:"outline",children:I})}),e[34]=A,e[35]=I,e[36]=s):s=e[36];let h;e[37]!==l.loadError?(h=l.loadError!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-value-error",role:"alert",children:l.loadError}),e[37]=l.loadError,e[38]=h):h=e[38];let T;e[39]!==l.loading||e[40]!==t?(T=l.loading&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-value-loading",children:t("Loading…")}),e[39]=l.loading,e[40]=t,e[41]=T):T=e[41];let _;e[42]!==u||e[43]!==x||e[44]!==D||e[45]!==S||e[46]!==O||e[47]!==l.busy||e[48]!==l.editedMetadata||e[49]!==l.editedValue||e[50]!==l.loading||e[51]!==l.value||e[52]!==l.writeError||e[53]!==t||e[54]!==C?(_=!l.loading&&l.value!==null&&w(be,{children:[w("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[r(W,{className:"text-xs",htmlFor:"kv-value-editor",children:t("Value")}),u!==void 0&&r(Le,{variant:"secondary",children:t("JSON")}),r("span",{className:"ml-auto text-xs tabular-nums text-muted-foreground","data-testid":"kv-value-size",children:Fe(Ae(l.editedValue))})]}),r("textarea",{"aria-label":t("KV value"),className:"mb-2 min-h-[8rem] w-full rounded border border-border bg-muted/30 p-2 font-mono text-xs","data-testid":"kv-value-editor",id:"kv-value-editor",onChange:M,value:l.editedValue}),w("div",{className:"mb-3 flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-format-btn",disabled:u===void 0,onClick:S,size:"sm",variant:"outline",children:t("Format JSON")}),r(P,{"data-testid":"kv-copy-value-btn",onClick:()=>{se(l.editedValue)},size:"sm",variant:"outline",children:t("Copy value")})]}),r(we,{helper:t("Leave blank to keep the current expiration."),id:"kv-ttl-input",invalid:!C,onChange:b=>{v({type:"editTtl",value:b})},testId:"kv-ttl-input"}),r(Te,{id:"kv-metadata-editor",invalidTestId:"kv-metadata-invalid",onChange:L,testId:"kv-metadata-editor",valid:x,value:l.editedMetadata}),w("div",{className:"flex flex-wrap gap-2",children:[r(P,{"data-testid":"kv-save-btn",disabled:l.busy!==""||!x||!C,onClick:O,children:l.busy==="saving"?t("Saving…"):t("Save")}),r(P,{"data-testid":"kv-delete-btn",disabled:l.busy!=="",onClick:D,variant:"destructive",children:l.busy==="deleting"?t("Deleting…"):t("Delete")})]}),l.writeError!==null&&r("p",{className:"mt-2 text-sm text-destructive","data-testid":"kv-save-error",role:"alert",children:l.writeError})]}),e[42]=u,e[43]=x,e[44]=D,e[45]=S,e[46]=O,e[47]=l.busy,e[48]=l.editedMetadata,e[49]=l.editedValue,e[50]=l.loading,e[51]=l.value,e[52]=l.writeError,e[53]=t,e[54]=C,e[55]=_):_=e[55];let E;e[56]!==l.loadError||e[57]!==l.loading||e[58]!==l.value||e[59]!==t?(E=!l.loading&&l.value===null&&l.loadError===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-absent",children:t("Key is absent or has no value.")}),e[56]=l.loadError,e[57]=l.loading,e[58]=l.value,e[59]=t,e[60]=E):E=e[60];let B;return e[61]!==s||e[62]!==h||e[63]!==T||e[64]!==_||e[65]!==E?(B=w("div",{className:"px-4 pb-4","data-testid":"kv-value-section",children:[s,h,T,_,E]}),e[61]=s,e[62]=h,e[63]=T,e[64]=_,e[65]=E,e[66]=B):B=e[66],B},me=100,Re={appliedPrefix:"",bulk:[],bulkBusy:!1,bulkError:null,cursor:null,keys:null,listComplete:!1,loadError:null,loading:!1,prefixInput:"",reloadNonce:0,selectedKey:null},ze=(a,e)=>{switch(e.type){case"appendPage":return{...a,cursor:e.cursor,keys:[...a.keys??[],...e.keys],listComplete:e.listComplete,loading:!1};case"applyFilter":return{...a,appliedPrefix:a.prefixInput,bulk:[],bulkError:null,cursor:null,keys:null,listComplete:!1,selectedKey:null};case"bulkDeleted":{const n=new Set(e.deleted);return{...a,bulk:a.bulk.filter(c=>!n.has(c)),bulkBusy:!1,bulkError:e.error,keys:a.keys===null?null:a.keys.filter(c=>!n.has(c.name)),selectedKey:a.selectedKey!==null&&n.has(a.selectedKey)?null:a.selectedKey}}case"bulkDeleteStart":return{...a,bulkBusy:!0,bulkError:null};case"firstPage":return{...a,cursor:e.cursor,keys:e.keys,listComplete:e.listComplete,loading:!1};case"keyDeleted":return{...a,bulk:a.bulk.filter(n=>n!==e.name),keys:a.keys===null?null:a.keys.filter(n=>n.name!==e.name),selectedKey:null};case"loadFailed":return{...a,loadError:e.error,loading:!1};case"loadStart":return{...a,loadError:null,loading:!0};case"prefixInput":return{...a,prefixInput:e.value};case"reload":return{...a,bulk:[],bulkError:null,reloadNonce:a.reloadNonce+1,selectedKey:null};case"selectKey":return{...a,selectedKey:e.name};case"toggleAllBulk":return{...a,bulk:e.names};case"toggleBulk":return{...a,bulk:a.bulk.includes(e.name)?a.bulk.filter(n=>n!==e.name):[...a.bulk,e.name]};default:return a}},Ue=({namespace:a})=>{const e=ee(),n=G(),[c,i]=le(ze,Re),{appliedPrefix:m,bulk:d,bulkBusy:t,bulkError:l,cursor:v,keys:o,listComplete:g,loadError:k,loading:M,prefixInput:K,reloadNonce:L,selectedKey:f}=c,[u,p]=Z(!1);ae(()=>{const s={cancelled:!1};return H((async()=>{i({type:"loadStart"});try{const h=await e.listKvKeys({limit:me,namespace:a,prefix:m===""?void 0:m});s.cancelled||i({cursor:h.cursor??null,keys:h.keys,listComplete:h.listComplete,type:"firstPage"})}catch(h){s.cancelled||i({error:R(h),type:"loadFailed"})}})()),()=>{s.cancelled=!0}},[e,a,m,L]);const x=s=>{i({type:"prefixInput",value:s.target.value})},N=()=>{i({type:"applyFilter"})},C=s=>{i({name:s.currentTarget.dataset.key??null,type:"selectKey"})},y=()=>{v!==null&&(i({type:"loadStart"}),H((async()=>{try{const s=await e.listKvKeys({cursor:v,limit:me,namespace:a,prefix:m===""?void 0:m});i({cursor:s.cursor??null,keys:s.keys,listComplete:s.listComplete,type:"appendPage"})}catch(s){i({error:R(s),type:"loadFailed"})}})()))},S=s=>{i({name:s,type:"keyDeleted"})},F=s=>{i({name:s,type:"toggleBulk"})},O=s=>{i({names:s&&o!==null?o.map(h=>h.name):[],type:"toggleAllBulk"})},V=()=>{if(d.length===0)return;const s=[...d];i({type:"bulkDeleteStart"}),H((async()=>{const h=await Promise.allSettled(s.map(E=>e.deleteKvKey({key:E,namespace:a}))),T=s.filter((E,B)=>h[B]?.status==="fulfilled"),_=s.length-T.length;i({deleted:T,error:_>0?n("Failed to delete {count} keys.",{count:_}):null,type:"bulkDeleted"})})())},D=()=>{p(!1),i({type:"reload"})},A=o!==null&&o.length>0&&d.length===o.length,I=new Set(d);return w(be,{children:[w("section",{className:"border border-border bg-card p-3","data-testid":"kv-keys-section",children:[w("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[r(re,{"aria-label":n("Filter keys by prefix"),className:"min-w-[16rem] flex-1","data-testid":"kv-prefix-input",onChange:x,placeholder:n("Filter by prefix…"),value:K}),r(P,{"data-testid":"kv-filter-btn",disabled:M,onClick:N,children:n("Filter")}),r(P,{"data-testid":"kv-new-key-btn",onClick:()=>{p(s=>!s)},variant:"outline",children:n("New key")}),d.length>0&&r(P,{"data-testid":"kv-bulk-delete-btn",disabled:t,onClick:V,variant:"destructive",children:t?n("Deleting…"):n("Delete {count}",{count:d.length})})]}),l!==null&&r("p",{className:"mb-2 text-sm text-destructive","data-testid":"kv-bulk-error",role:"alert",children:l}),k!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-keys-error",role:"alert",children:k}),o!==null&&o.length===0&&!M&&r("p",{className:"text-sm text-muted-foreground","data-testid":"kv-no-keys",children:n("No keys.")}),o!==null&&o.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-key-table",children:[r(he,{children:w(X,{children:[r(q,{className:"w-10",children:r(ne,{"aria-label":n("Select all"),checked:A,"data-testid":"kv-select-all",onCheckedChange:O})}),r(q,{children:n("Key")}),r(q,{children:n("Expiration")})]})}),r(ye,{children:o.map(s=>w(X,{className:s.name===f?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-key":s.name,"data-testid":`kv-key-row-${s.name}`,onClick:C,children:[r(Q,{onClick:h=>{h.stopPropagation()},children:r(ne,{"aria-label":n("Select {name}",{name:s.name}),checked:I.has(s.name),"data-testid":`kv-select-${s.name}`,onCheckedChange:()=>{F(s.name)}})}),r(Q,{className:"font-mono text-xs",children:s.name}),r(Q,{className:"tabular-nums text-xs",children:Oe(s.expiration)})]},s.name))})]})})}),!g&&v!==null&&r("div",{className:"mt-2",children:r(P,{"data-testid":"kv-load-more",disabled:M,onClick:y,variant:"outline",children:n(M?"Loading…":"Load more")})})]}),r(ie,{onOpenChange:s=>{s||p(!1)},open:u,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-create-sheet",side:"right",children:[r(oe,{children:r(ce,{children:n("New key")})}),r(Pe,{namespace:a,onCancel:()=>{p(!1)},onCreated:D})]})}),r(ie,{onOpenChange:s=>{s||i({name:null,type:"selectKey"})},open:f!==null,children:w(de,{className:"w-full gap-0 overflow-y-auto sm:max-w-md","data-testid":"kv-editor-sheet",side:"right",children:[r(oe,{children:r(ce,{className:"truncate font-mono text-xs",children:f})}),f!==null&&r(He,{expiration:o?.find(s=>s.name===f)?.expiration,keyName:f,namespace:a,onDeleted:S},`${a}:${f}`)]})})]})},ut=({loadNamespaces:a}={})=>{const e=ee(),n=G(),[c,i]=Z(null),[m,d]=Z(null),[t,l]=Z(null);ae(()=>{const o={cancelled:!1};return H((async()=>{try{const g=await(a??(()=>e.listKvNamespaces()))();o.cancelled||(i(g),d(null),l(k=>k??g[0]?.binding??null))}catch(g){o.cancelled||(i(null),d(R(g)))}})()),()=>{o.cancelled=!0}},[e,a]);const v=o=>{l(o.currentTarget.dataset.ns??null)};return w("div",{className:"flex flex-col gap-4","data-testid":"lunora-kv-browser",children:[m!==null&&r("p",{className:"text-sm text-destructive","data-testid":"kv-ns-error",role:"alert",children:m}),c!==null&&c.length===0&&r(Ee,{description:n("Add a kv_namespaces binding to wrangler.jsonc — it appears here automatically, no wiring needed."),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:"M5 5h14v4H5V5Zm0 5h14v4H5v-4Zm0 5h14v4H5v-4Z"})}),testId:"kv-empty",title:n("No KV namespaces.")}),c!==null&&c.length>0&&r(ve,{className:"overflow-hidden py-0",children:r(fe,{className:"px-0",children:w(pe,{"data-testid":"kv-namespace-table",children:[r(he,{children:r(X,{children:r(q,{children:n("Namespace")})})}),r(ye,{children:c.map(o=>r(X,{className:o.binding===t?"border-l-2 border-l-royal-amethyst bg-muted/50":"cursor-pointer","data-ns":o.binding,"data-testid":`kv-ns-row-${o.binding}`,onClick:v,children:r(Q,{className:"font-mono text-xs",children:o.binding})},o.binding))})]})})}),t!==null&&r(Ue,{namespace:t},t)]})};export{ut as KvBrowser};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as te}from"react/compiler-runtime";import{useState as
|
|
2
|
-
`);let
|
|
3
|
-
`);let
|
|
4
|
-
`);let
|
|
1
|
+
import{c as te}from"react/compiler-runtime";import{useState as Q}from"react";import{B as se}from"../packem_shared/button-BOPLD1un.js";import{C as le,a as ie}from"../packem_shared/card-BGlQzQY-.js";import{I as ce}from"../packem_shared/input-CY5W3wzv.js";import{useT as oe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{a as fe}from"../packem_shared/cf-links-CBJ5SywP.js";import{g as me,f as pe,b as ue}from"../packem_shared/internal-CwaF9YNk.js";import{jsx as l,jsxs as h}from"react/jsx-runtime";const he=e=>{const t=te(23),{destination:s}=e,u=oe();let g;t[0]!==s.snippet?(g=()=>{me(s.snippet)},t[0]=s.snippet,t[1]=g):g=t[1];const f=g;let i;t[2]!==s.title?(i=l("h4",{className:"text-sm font-semibold",children:s.title}),t[2]=s.title,t[3]=i):i=t[3];let o;t[4]!==s.description?(o=l("p",{className:"text-sm text-muted-foreground",children:s.description}),t[4]=s.description,t[5]=o):o=t[5];let d;t[6]!==i||t[7]!==o?(d=h("div",{children:[i,o]}),t[6]=i,t[7]=o,t[8]=d):d=t[8];const F=`drain-copy-${s.id}`;let r;t[9]!==u?(r=u("Copy"),t[9]=u,t[10]=r):r=t[10];let n;t[11]!==f||t[12]!==F||t[13]!==r?(n=l(se,{"data-testid":F,onClick:f,size:"sm",variant:"outline",children:r}),t[11]=f,t[12]=F,t[13]=r,t[14]=n):n=t[14];let a;t[15]!==d||t[16]!==n?(a=h("div",{className:"flex items-start justify-between gap-3",children:[d,n]}),t[15]=d,t[16]=n,t[17]=a):a=t[17];let c;t[18]!==s.snippet?(c=l("pre",{className:"mt-2 overflow-x-auto rounded bg-muted p-2 font-mono text-xs",children:s.snippet}),t[18]=s.snippet,t[19]=c):c=t[19];let x;return t[20]!==a||t[21]!==c?(x=l(le,{className:"py-0","data-testid":"drain-card",children:h(ie,{className:"p-3",children:[a,c]})}),t[20]=a,t[21]=c,t[22]=x):x=t[22],x},Te=()=>{const e=te(88),t=oe();let s;e[0]!==t?(s=t("Stream every request log to R2, a SIEM, or a third-party log service."),e[0]=t,e[1]=s):s=e[1];let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=["{",' "logpush": true',"}"],e[2]=u):u=e[2];const g=u.join(`
|
|
2
|
+
`);let f;e[3]!==t?(f=t("Logpush"),e[3]=t,e[4]=f):f=e[4];let i;e[5]!==s||e[6]!==f?(i={description:s,id:"logpush",snippet:g,title:f},e[5]=s,e[6]=f,e[7]=i):i=e[7];let o;e[8]!==t?(o=t("Send logs programmatically to a Worker for custom capture and forwarding."),e[8]=t,e[9]=o):o=e[9];let d;e[10]===Symbol.for("react.memo_cache_sentinel")?(d=["{",' "tail_consumers": [{ "service": "my-log-forwarder" }]',"}"],e[10]=d):d=e[10];const F=d.join(`
|
|
3
|
+
`);let r;e[11]!==t?(r=t("Tail Workers"),e[11]=t,e[12]=r):r=e[12];let n;e[13]!==o||e[14]!==r?(n={description:o,id:"tail-worker",snippet:F,title:r},e[13]=o,e[14]=r,e[15]=n):n=e[15];let a;e[16]!==t?(a=t("Retain and query recent request logs directly in Cloudflare's dashboard."),e[16]=t,e[17]=a):a=e[17];let c;e[18]===Symbol.for("react.memo_cache_sentinel")?(c=["{",' "observability": { "enabled": true }',"}"],e[18]=c):c=e[18];const x=c.join(`
|
|
4
|
+
`);let b;e[19]!==t?(b=t("Workers Logs"),e[19]=t,e[20]=b):b=e[20];let y;e[21]!==a||e[22]!==b?(y={description:a,id:"workers-logs",snippet:x,title:b},e[21]=a,e[22]=b,e[23]=y):y=e[23];let P;e[24]!==y||e[25]!==i||e[26]!==n?(P=[i,n,y],e[24]=y,e[25]=i,e[26]=n,e[27]=P):P=e[27];const Y=P,[m,re]=Q(""),[k,X]=Q(!1),[p,$]=Q(null);let z;if(e[28]!==t||e[29]!==m){const H=async()=>{const Z=m.trim();if(Z==="")return;const ee="fetch"in globalThis?globalThis.fetch:void 0;if(ee===void 0){$({kind:"error",message:t("fetch is unavailable in this environment.")});return}const ae={durationMs:12,function:"messages:list",outcome:"ok",shard:"root",source:"lunora",tablesRead:["messages"],tablesWritten:[],ts:new Date().toISOString(),type:"request"};X(!0),$(null);const de=performance.now();try{const K=await ee(Z,{body:JSON.stringify(ae),headers:{"Content-Type":"application/json"},method:"POST"});$({kind:"success",latencyMs:Math.round(performance.now()-de),status:K.status})}catch(K){$({kind:"error",message:ue(K)})}X(!1)};z=()=>{pe(H())},e[28]=t,e[29]=m,e[30]=z}else z=e[30];const G=z;let J;e[31]===Symbol.for("react.memo_cache_sentinel")?(J=H=>{re(H.target.value)},e[31]=J):J=e[31];const ne=J;let v;e[32]!==t?(v=t("Open in Cloudflare"),e[32]=t,e[33]=v):v=e[33];let w;e[34]!==v?(w=l("div",{className:"flex flex-wrap items-center gap-3",children:l("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"drain-cf-link",href:fe,rel:"noreferrer",target:"_blank",children:v})}),e[34]=v,e[35]=w):w=e[35];let N;e[36]!==t?(N=t("Lunora does not ship logs itself — forwarding is handled by Cloudflare. Configure a destination below, then test your collector."),e[36]=t,e[37]=N):N=e[37];let C;e[38]!==N?(C=l("p",{className:"text-sm text-muted-foreground","data-testid":"drain-readonly-note",children:N}),e[38]=N,e[39]=C):C=e[39];let S;e[40]!==t?(S=t("Cloudflare destinations"),e[40]=t,e[41]=S):S=e[41];let _;e[42]!==S?(_=l("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:S}),e[42]=S,e[43]=_):_=e[43];let T;e[44]!==Y?(T=Y.map(ge),e[44]=Y,e[45]=T):T=e[45];let L;e[46]!==_||e[47]!==T?(L=h("section",{className:"flex flex-col gap-3","data-testid":"drain-destinations",children:[_,T]}),e[46]=_,e[47]=T,e[48]=L):L=e[48];let R;e[49]!==t?(R=t("Webhook test"),e[49]=t,e[50]=R):R=e[50];let j;e[51]!==R?(j=l("h3",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:R}),e[51]=R,e[52]=j):j=e[52];let O;e[53]!==t?(O=t("POST a sample Lunora request-log envelope to your collector to confirm it is reachable."),e[53]=t,e[54]=O):O=e[54];let W;e[55]!==O?(W=l("p",{className:"mb-2 text-sm text-muted-foreground",children:O}),e[55]=O,e[56]=W):W=e[56];let I;e[57]!==t?(I=t("https://example.com/logs"),e[57]=t,e[58]=I):I=e[58];let M;e[59]!==I||e[60]!==m?(M=l(ce,{className:"min-w-[20rem] flex-1","data-testid":"drain-webhook-url",onChange:ne,placeholder:I,type:"url",value:m}),e[59]=I,e[60]=m,e[61]=M):M=e[61];let q;e[62]!==k||e[63]!==m?(q=k||m.trim()==="",e[62]=k,e[63]=m,e[64]=q):q=e[64];let D;e[65]!==k||e[66]!==t?(D=t(k?"Sending…":"Send test event"),e[65]=k,e[66]=t,e[67]=D):D=e[67];let U;e[68]!==G||e[69]!==q||e[70]!==D?(U=l(se,{"data-testid":"drain-webhook-test",disabled:q,onClick:G,children:D}),e[68]=G,e[69]=q,e[70]=D,e[71]=U):U=e[71];let A;e[72]!==M||e[73]!==U?(A=h("div",{className:"flex flex-wrap items-center gap-2",children:[M,U]}),e[72]=M,e[73]=U,e[74]=A):A=e[74];let B;e[75]!==p||e[76]!==t?(B=p!==null&&l("p",{className:p.kind==="success"?"mt-2 text-sm text-muted-foreground":"mt-2 text-sm text-destructive","data-testid":"drain-webhook-result",role:p.kind==="error"?"alert":void 0,children:p.kind==="success"?t("Delivered — status {status} in {latency}ms",{latency:p.latencyMs,status:p.status}):t("Failed: {message}",{message:p.message})}),e[75]=p,e[76]=t,e[77]=B):B=e[77];let E;e[78]!==j||e[79]!==W||e[80]!==A||e[81]!==B?(E=l(le,{className:"py-0",children:l(ie,{className:"p-3",children:h("section",{"data-testid":"drain-webhook",children:[j,W,A,B]})})}),e[78]=j,e[79]=W,e[80]=A,e[81]=B,e[82]=E):E=e[82];let V;return e[83]!==w||e[84]!==C||e[85]!==L||e[86]!==E?(V=h("div",{className:"flex flex-col gap-4","data-testid":"log-drains",children:[w,C,L,E]}),e[83]=w,e[84]=C,e[85]=L,e[86]=E,e[87]=V):V=e[87],V};function ge(e){return l(he,{destination:e},e.id)}export{Te as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as w}from"react/compiler-runtime";import{useMemo as O,useState as D}from"react";import{useT as q}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{c as N}from"../packem_shared/utils-bhneXptQ.js";import{MigrationsPanel as J}from"../packem_shared/MigrationsPanel-BAnvY79E.js";import{useNavigate as E,useSearch as U}from"@tanstack/react-router";import{U as H}from"../packem_shared/error-alert-_2q2VtVG.js";import{E as P}from"../packem_shared/empty-state-Cg7t_8qu.js";import{N as S}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{ADMIN_FUNCTIONS as I}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as V,f as W}from"../packem_shared/internal-zkEvTqy8.js";import{S as _}from"../packem_shared/schema-diagram-GVgnLWTf.js";import{jsx as l,jsxs as g}from"react/jsx-runtime";const k=t=>typeof t=="object"&&t!==null,z=t=>k(t)&&k(t.fields)&&k(t.indexes)&&k(t.relations)&&typeof t.shardMode=="string",B=t=>{if(t===void 0||t.trim()==="")return{status:"absent"};let e;try{e=JSON.parse(t)}catch(a){return{error:`baseline is not valid JSON: ${a instanceof Error?a.message:String(a)}`,status:"invalid"}}if(!k(e)||e.version!==1||!k(e.tables))return{error:`baseline is malformed or written by an incompatible version (expected version ${String(1)})`,status:"invalid"};for(const[a,n]of Object.entries(e.tables))if(!z(n))return{error:`baseline table "${a}" has an invalid structure`,status:"invalid"};return{snapshot:{jurisdiction:typeof e.jurisdiction=="string"?e.jurisdiction:void 0,migrationIds:Array.isArray(e.migrationIds)?e.migrationIds:[],tables:e.tables,version:1},status:"ok"}},L=(t,e)=>t.unique===e.unique&&t.fields.length===e.fields.length&&t.fields.every((a,n)=>a===e.fields[n]),Q=(t,e,a,n)=>{const s=[];return a.kind!==n.kind&&s.push({severity:"breaking",summary:`field ${t}.${e} changed type: ${a.kind} → ${n.kind} — add a data migration to convert existing values`,table:t,scope:"table",type:"changedFieldKind"}),a.optional&&!n.optional?s.push({severity:"breaking",summary:`field ${t}.${e} became required — rows missing it would be invalid; add a data migration to backfill it`,table:t,scope:"table",type:"fieldOptionalToRequired"}):!a.optional&&n.optional&&s.push({scope:"table",severity:"safe",summary:`field ${t}.${e} became optional`,table:t,type:"fieldRequiredToOptional"}),s},G=(t,e,a)=>a.optional?{scope:"table",severity:"safe",summary:`added optional field ${t}.${e}`,table:t,type:"addedOptionalField"}:{severity:"breaking",summary:`added required field ${t}.${e} — existing rows have no value; add a data migration to backfill it`,table:t,scope:"table",type:"addedRequiredField"},X=(t,e,a,n)=>{for(const[s,o]of Object.entries(a.fields)){const i=e.fields[s];i===void 0?n.push(G(t,s,o)):n.push(...Q(t,s,i,o))}for(const s of Object.keys(e.fields))a.fields[s]===void 0&&n.push({severity:"breaking",summary:`removed field ${t}.${s} — add a data migration if stored data must be cleaned up`,table:t,scope:"table",type:"removedField"})},Y=(t,e,a,n)=>{for(const[s,o]of Object.entries(a.indexes)){const i=e.indexes[s];if(i===void 0){n.push({scope:"table",severity:"safe",summary:`added index ${s} on ${t}`,table:t,type:"addedIndex"});continue}L(i,o)||n.push({severity:"breaking",summary:`index ${s} on ${t} changed shape — a query may have relied on the old index`,table:t,scope:"table",type:"changedIndex"})}for(const s of Object.keys(e.indexes))a.indexes[s]===void 0&&n.push({severity:"breaking",summary:`removed index ${s} on ${t} — a query that used \`.withIndex("${s}")\` would break`,table:t,scope:"table",type:"removedIndex"})},Z=(t,e,a,n)=>{for(const s of Object.keys(a.relations))e.relations[s]===void 0&&n.push({scope:"schema",severity:"safe",summary:`added relation ${t}.${s}`,table:t,type:"addedRelation"});for(const s of Object.keys(e.relations))a.relations[s]===void 0&&n.push({scope:"schema",severity:"breaking",summary:`removed relation ${t}.${s}`,table:t,type:"removedRelation"})},ee=(t,e,a,n)=>{e.shardMode!==a.shardMode&&n.push({severity:"breaking",summary:`table ${t} changed shard mode: ${e.shardMode} → ${a.shardMode} — its physical storage moves; add a data migration / re-shard plan`,table:t,scope:"table",type:"changedShardMode"}),X(t,e,a,n),Y(t,e,a,n),Z(t,e,a,n)},te=(t,e)=>{const a=[],n=t?.tables??{};for(const[s,o]of Object.entries(e.tables)){const i=n[s];if(i===void 0){a.push({scope:"table",severity:"safe",summary:`added table ${s}`,table:s,type:"addedTable"});continue}ee(s,i,o,a)}for(const s of Object.keys(n))e.tables[s]===void 0&&a.push({scope:"table",severity:"breaking",summary:`removed table ${s} — add a data migration if its data must be archived/cleaned up`,table:s,type:"removedTable"});if(t!==void 0&&t.jurisdiction!==e.jurisdiction){const s=t.jurisdiction??"(none)",o=e.jurisdiction??"(none)";a.push({scope:"schema",severity:"breaking",summary:`Durable Object jurisdiction changed from ${s} to ${o} — this re-homes every DO and strands all existing shard, scheduler, and session-DO data in the old region (no in-place migration; export then import to move it). Revert the change, or override the gate to proceed intentionally.`,type:"changedJurisdiction"})}return{changes:a}},T=t=>Object.entries(t.fields).map(([e,a])=>({name:e,optional:a.optional,ref:Object.values(t.relations).find(n=>n.field===e&&n.kind==="one")?.table,type:a.kind})),F=(t,e)=>{const a={},n=t?.fields??{},s=e?.fields??{};for(const[o,i]of Object.entries(s)){const r=n[o];r===void 0?a[o]=t===void 0?"unchanged":"added":a[o]=r.kind===i.kind&&r.optional===i.optional?"unchanged":"changed"}for(const o of Object.keys(n))s[o]===void 0&&(a[o]="removed");return a},ae=(t,e)=>{const{changes:a}=te(t,e),n=new Set(a.filter(i=>i.scope==="table"&&i.table!==void 0).map(i=>i.table)),s=[],o=(i,r)=>i?"added":n.has(r)?"changed":"context";for(const[i,r]of Object.entries(e.tables)){const c=t?.tables[i],u=o(c===void 0,i);s.push({columns:T(r),fieldStatus:F(c,r),name:i,shardMode:r.shardMode,status:u})}for(const[i,r]of Object.entries(t?.tables??{}))e.tables[i]===void 0&&s.push({columns:T(r),fieldStatus:F(r,void 0),name:i,shardMode:r.shardMode,status:"removed"});return s.sort((i,r)=>i.name.localeCompare(r.name)),{breakingCount:a.filter(i=>i.severity==="breaking").length,changes:a,tables:s}},K=t=>{const e=B(t);return e.status==="ok"?e.snapshot:void 0},ne={added:"ring-2 ring-emerald-500/60",changed:"ring-2 ring-amber-500/70",context:"opacity-55",removed:"opacity-70 ring-2 ring-destructive/60"},se=t=>t==="global"?"global":"shard",ie=t=>{const e=w(24),{appliedAt:a,hash:n,onSelect:s,selected:o,seq:i}=t,r=o?"border-s-primary bg-accent/60 text-foreground":"border-s-transparent text-muted-foreground hover:bg-accent/30 hover:text-foreground";let c;e[0]!==r?(c=N("flex w-full flex-col items-start gap-1 border-s-2 px-4 py-3 text-start outline-none transition-colors",r),e[0]=r,e[1]=c):c=e[1];const u=`sh-version-${n}`;let m;e[2]!==n||e[3]!==s?(m=()=>{s(n)},e[2]=n,e[3]=s,e[4]=m):m=e[4];let p;e[5]!==i?(p=g("span",{className:"font-mono text-[13px] tabular-nums",children:["v",i]}),e[5]=i,e[6]=p):p=e[6];let b;e[7]!==n?(b=n.slice(0,7),e[7]=n,e[8]=b):b=e[8];let h;e[9]!==b?(h=l("span",{className:"ms-auto font-mono text-[10px] tracking-wider text-muted-foreground/70 uppercase",children:b}),e[9]=b,e[10]=h):h=e[10];let f;e[11]!==p||e[12]!==h?(f=g("span",{className:"flex w-full items-baseline gap-2",children:[p,h]}),e[11]=p,e[12]=h,e[13]=f):f=e[13];let v;e[14]!==a?(v=V(a),e[14]=a,e[15]=v):v=e[15];let x;e[16]!==v?(x=l("span",{className:"font-mono text-[10px] tracking-wide text-muted-foreground/70",children:v}),e[16]=v,e[17]=x):x=e[17];let d;return e[18]!==x||e[19]!==c||e[20]!==u||e[21]!==m||e[22]!==f?(d=l("li",{children:g("button",{className:c,"data-testid":u,onClick:m,type:"button",children:[f,x]})}),e[18]=x,e[19]=c,e[20]=u,e[21]=m,e[22]=f,e[23]=d):d=e[23],d},re=t=>{const e=w(26),{breaking:a,count:n,first:s}=t,o=q();if(s){let h;e[0]!==n?(h=l("span",{className:"text-3xl leading-none font-light tracking-tight tabular-nums",children:n}),e[0]=n,e[1]=h):h=e[1];let f;e[2]!==o?(f=o("tables"),e[2]=o,e[3]=f):f=e[3];let v;e[4]!==f?(v=l("span",{className:"font-mono text-[11px] tracking-widest text-muted-foreground uppercase",children:f}),e[4]=f,e[5]=v):v=e[5];let x;return e[6]!==h||e[7]!==v?(x=g("div",{className:"flex items-baseline gap-3","data-testid":"sh-summary",children:[h,v]}),e[6]=h,e[7]=v,e[8]=x):x=e[8],x}const i=a>0&&"text-destructive";let r;e[9]!==i?(r=N("text-3xl leading-none font-light tracking-tight tabular-nums",i),e[9]=i,e[10]=r):r=e[10];let c;e[11]!==n||e[12]!==r?(c=l("span",{className:r,children:n}),e[11]=n,e[12]=r,e[13]=c):c=e[13];let u;e[14]!==n||e[15]!==o?(u=o(n===1?"change":"changes"),e[14]=n,e[15]=o,e[16]=u):u=e[16];let m;e[17]!==u?(m=l("span",{className:"font-mono text-[11px] tracking-widest text-muted-foreground uppercase",children:u}),e[17]=u,e[18]=m):m=e[18];let p;e[19]!==a||e[20]!==o?(p=a>0&&g("span",{className:"font-mono text-[11px] tracking-widest text-destructive uppercase",children:["· ",o("{count} breaking",{count:a})]}),e[19]=a,e[20]=o,e[21]=p):p=e[21];let b;return e[22]!==c||e[23]!==m||e[24]!==p?(b=g("div",{className:"flex items-baseline gap-3","data-testid":"sh-summary",children:[c,m,p]}),e[22]=c,e[23]=m,e[24]=p,e[25]=b):b=e[25],b},A={addedIndex:{action:"added",kind:"index"},addedOptionalField:{action:"added",kind:"field?"},addedRelation:{action:"added",kind:"relation"},addedRequiredField:{action:"added",kind:"field"},addedTable:{action:"added",kind:"table"},changedFieldKind:{action:"changed",kind:"field kind"},changedIndex:{action:"changed",kind:"index"},changedJurisdiction:{action:"changed",kind:"jurisdiction"},changedShardMode:{action:"changed",kind:"shard mode"},fieldOptionalToRequired:{action:"changed",kind:"field → required"},fieldRequiredToOptional:{action:"changed",kind:"field → optional"},removedField:{action:"removed",kind:"field"},removedIndex:{action:"removed",kind:"index"},removedRelation:{action:"removed",kind:"relation"},removedTable:{action:"removed",kind:"table"}},oe=(t,e)=>{const a=`${A[t.type].action} ${e} `;return t.summary.startsWith(a)?t.summary.slice(a.length):t.summary},de=t=>{const e=new Map;for(const n of t){const s=n.table??"",o=e.get(s);o===void 0?e.set(s,[n]):o.push(n)}const a=[...e].map(([n,s])=>({changes:s,table:n}));return[...a.filter(n=>n.table!==""),...a.filter(n=>n.table==="")]},le=t=>{const e=w(2),{children:a}=t;let n;return e[0]!==a?(n=l("div",{className:"px-4 pt-4 pb-2 font-mono text-[10px] tracking-widest text-muted-foreground/70 uppercase",children:a}),e[0]=a,e[1]=n):n=e[1],n},ce=({pane:t,shardKey:e=""})=>{const a=q(),n=E(),s=U({strict:!1}).version,o=d=>{W(n({search:{version:d},to:"/migrations"}))},i=S(I.schemaHistory,{},{shardKey:e}),r=i.data?.versions??[],c=s!==void 0&&r.some(d=>d.hash===s)?s:r[0]?.hash,u=r.findIndex(d=>d.hash===c),m=u===-1?void 0:r[u+1]?.hash,p=S(I.schemaVersion,{hash:c??""},{enabled:c!==void 0,shardKey:e}),b=S(I.schemaVersion,{hash:m??""},{enabled:m!==void 0,shardKey:e}),h=O(()=>{const d=K(p.data?.version?.snapshotJson);if(d!==void 0)return ae(K(b.data?.version?.snapshotJson),d)},[p.data,b.data]),f=O(()=>(h?.tables??[]).map(d=>({columns:d.columns,name:d.name,tier:se(d.shardMode)})),[h]),v=O(()=>{const d={};for(const $ of h?.tables??[])d[$.name]=ne[$.status];return d},[h]);if(i.error!==null)return l(H,{error:i.errorSource,testId:"sh-error"});if(r.length===0)return l(P,{description:a("Each distinct schema shape this shard runs is recorded here, so you can see what changed and when."),testId:"sh-empty",title:a("No schema versions recorded yet.")});const x=h?.changes??[];return g("div",{className:"flex min-h-0 flex-1 gap-4","data-testid":"lunora-schema-history",children:[g("nav",{className:"flex w-56 shrink-0 flex-col overflow-hidden border-e border-border","data-testid":"sh-timeline-rail",children:[l(le,{children:a("Schema versions")}),l("ul",{className:"min-h-0 flex-1 overflow-y-auto","data-testid":"sh-timeline",children:r.map(d=>l(ie,{appliedAt:d.appliedAt,hash:d.hash,onSelect:o,selected:d.hash===c,seq:d.seq},d.hash))})]}),g("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col gap-4 pe-1 pt-4",children:[l(re,{breaking:h?.breakingCount??0,count:m===void 0?f.length:x.length,first:m===void 0}),t==="diagram"?l("div",{className:"flex min-h-0 flex-1 flex-col",children:l(_,{fill:!0,nodeClasses:v,tables:f,testIdPrefix:"sh"})}):l("div",{className:"min-h-0 flex-1 overflow-y-auto","data-testid":"sh-changes",children:de(x).map(d=>{const $=(h?.tables??[]).find(y=>y.name===d.table);return g("section",{className:"mb-6",children:[g("div",{className:"flex items-baseline gap-3 border-b border-border/60 pb-1.5",children:[l("span",{className:"font-mono text-[13px] text-foreground",children:d.table===""?a("schema"):d.table}),$!==void 0&&l("span",{className:"font-mono text-[10px] tracking-widest text-muted-foreground/70 tabular-nums uppercase",children:a("{count} columns",{count:$.columns.length})}),d.changes.length>1&&l("span",{className:"ms-auto font-mono text-[10px] tracking-widest text-muted-foreground/70 tabular-nums",children:d.changes.length})]}),l("ul",{children:d.changes.map(y=>{const{action:C,kind:M}=A[y.type],j=y.severity==="breaking",R=oe(y,M);return g("li",{className:"flex items-baseline gap-4 border-s-2 py-1.5 ps-3 transition-colors hover:bg-accent/30",children:[l("span",{"aria-hidden":"true",className:N("-ms-3 h-3 w-0.5 shrink-0 self-center",j?"bg-destructive":"bg-transparent")}),g("span",{className:"w-44 shrink-0 font-mono text-[10px] tracking-widest text-muted-foreground/70 uppercase",children:[a(C)," ",M]}),R!==d.table&&l("span",{className:N("min-w-0 font-mono text-[13px]",j?"text-destructive":"text-foreground"),children:R}),j&&l("span",{className:"ms-auto shrink-0 font-mono text-[10px] tracking-widest text-destructive uppercase",children:a("breaking")})]},`${y.type}-${y.summary}`)})})]},d.table)})})]})]})},me=t=>N("-mb-px border-b-2 px-3 py-2.5 font-mono text-[11px] tracking-wider uppercase transition-colors outline-none","hover:bg-accent/40 focus-visible:bg-accent/40",t?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"),je=t=>{const e=w(11),{initialShardKey:a}=t,n=q(),[s,o]=D("diagram");let i;e[0]!==s?(i=(p,b,h,f)=>g("button",{"aria-selected":s===p,className:me(s===p),"data-testid":h,onClick:()=>{o(p)},role:"tab",type:"button",children:[b,f!==void 0&&l("span",{className:"ms-2 tabular-nums text-muted-foreground/70",children:f})]}),e[0]=s,e[1]=i):i=e[1];const r=i;let c;e[2]!==n||e[3]!==r?(c=g("div",{className:"flex shrink-0 items-center gap-1 border-b border-border px-3","data-testid":"mg-panes",role:"tablist",children:[r("diagram",n("Diagram"),"mg-pane-diagram"),r("changes",n("Changes"),"mg-pane-changes"),r("data",n("Data migrations"),"mg-pane-data")]}),e[2]=n,e[3]=r,e[4]=c):c=e[4];let u;e[5]!==a||e[6]!==s?(u=l("div",{className:"flex min-h-0 flex-1 flex-col",children:s==="data"?l("div",{className:"min-h-0 flex-1 overflow-y-auto px-4",children:l(J,{initialShardKey:a})}):l(ce,{pane:s,shardKey:a})}),e[5]=a,e[6]=s,e[7]=u):u=e[7];let m;return e[8]!==c||e[9]!==u?(m=g("div",{className:"flex min-h-0 flex-1 flex-col pt-4","data-testid":"lunora-migrations-route",children:[c,u]}),e[8]=c,e[9]=u,e[10]=m):m=e[10],m};export{je as default};
|
|
1
|
+
import{c as O}from"react/compiler-runtime";import{useMemo as N,useState as P}from"react";import{useT as R}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{c as w}from"../packem_shared/utils-bhneXptQ.js";import{MigrationsPanel as H}from"../packem_shared/MigrationsPanel-CCOENX4X.js";import{useNavigate as V,useSearch as Q}from"@tanstack/react-router";import{E as G}from"../packem_shared/error-alert-TYdKetJd.js";import{E as K}from"../packem_shared/empty-state-B939z6K2.js";import{u as T}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{ADMIN_FUNCTIONS as I}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as U,f as _}from"../packem_shared/internal-CwaF9YNk.js";import{S as B}from"../packem_shared/schema-diagram-DHD13TjS.js";import{jsx as c,jsxs as x}from"react/jsx-runtime";const M=1,$=t=>typeof t=="object"&&t!==null,L=t=>$(t)&&$(t.fields)&&$(t.indexes)&&$(t.relations)&&typeof t.shardMode=="string",W=t=>{if(t===void 0||t.trim()==="")return{status:"absent"};let e;try{e=JSON.parse(t)}catch(s){return{error:`baseline is not valid JSON: ${s instanceof Error?s.message:String(s)}`,status:"invalid"}}if(!$(e)||e.version!==M||!$(e.tables))return{error:`baseline is malformed or written by an incompatible version (expected version ${String(M)})`,status:"invalid"};for(const[s,a]of Object.entries(e.tables))if(!L(a))return{error:`baseline table "${s}" has an invalid structure`,status:"invalid"};return{snapshot:{jurisdiction:typeof e.jurisdiction=="string"?e.jurisdiction:void 0,migrationIds:Array.isArray(e.migrationIds)?e.migrationIds:[],tables:e.tables,version:M},status:"ok"}},z=(t,e)=>t.unique===e.unique&&t.fields.length===e.fields.length&&t.fields.every((n,s)=>n===e.fields[s]),X=(t,e,n,s)=>{const a=[];return n.kind!==s.kind&&a.push({severity:"breaking",summary:`field ${t}.${e} changed type: ${n.kind} → ${s.kind} — add a data migration to convert existing values`,table:t,scope:"table",type:"changedFieldKind"}),n.optional&&!s.optional?a.push({severity:"breaking",summary:`field ${t}.${e} became required — rows missing it would be invalid; add a data migration to backfill it`,table:t,scope:"table",type:"fieldOptionalToRequired"}):!n.optional&&s.optional&&a.push({scope:"table",severity:"safe",summary:`field ${t}.${e} became optional`,table:t,type:"fieldRequiredToOptional"}),a},Y=(t,e,n)=>n.optional?{scope:"table",severity:"safe",summary:`added optional field ${t}.${e}`,table:t,type:"addedOptionalField"}:{severity:"breaking",summary:`added required field ${t}.${e} — existing rows have no value; add a data migration to backfill it`,table:t,scope:"table",type:"addedRequiredField"},Z=(t,e,n,s)=>{for(const[a,o]of Object.entries(n.fields)){const i=e.fields[a];i===void 0?s.push(Y(t,a,o)):s.push(...X(t,a,i,o))}for(const a of Object.keys(e.fields))n.fields[a]===void 0&&s.push({severity:"breaking",summary:`removed field ${t}.${a} — add a data migration if stored data must be cleaned up`,table:t,scope:"table",type:"removedField"})},ee=(t,e,n,s)=>{for(const[a,o]of Object.entries(n.indexes)){const i=e.indexes[a];if(i===void 0){s.push({scope:"table",severity:"safe",summary:`added index ${a} on ${t}`,table:t,type:"addedIndex"});continue}z(i,o)||s.push({severity:"breaking",summary:`index ${a} on ${t} changed shape — a query may have relied on the old index`,table:t,scope:"table",type:"changedIndex"})}for(const a of Object.keys(e.indexes))n.indexes[a]===void 0&&s.push({severity:"breaking",summary:`removed index ${a} on ${t} — a query that used \`.withIndex("${a}")\` would break`,table:t,scope:"table",type:"removedIndex"})},te=(t,e,n,s)=>{for(const a of Object.keys(n.relations))e.relations[a]===void 0&&s.push({scope:"schema",severity:"safe",summary:`added relation ${t}.${a}`,table:t,type:"addedRelation"});for(const a of Object.keys(e.relations))n.relations[a]===void 0&&s.push({scope:"schema",severity:"breaking",summary:`removed relation ${t}.${a}`,table:t,type:"removedRelation"})},se=(t,e,n,s)=>{e.shardMode!==n.shardMode&&s.push({severity:"breaking",summary:`table ${t} changed shard mode: ${e.shardMode} → ${n.shardMode} — its physical storage moves; add a data migration / re-shard plan`,table:t,scope:"table",type:"changedShardMode"}),Z(t,e,n,s),ee(t,e,n,s),te(t,e,n,s)},ne=(t,e)=>{const n=[],s=t?.tables??{};for(const[a,o]of Object.entries(e.tables)){const i=s[a];if(i===void 0){n.push({scope:"table",severity:"safe",summary:`added table ${a}`,table:a,type:"addedTable"});continue}se(a,i,o,n)}for(const a of Object.keys(s))e.tables[a]===void 0&&n.push({scope:"table",severity:"breaking",summary:`removed table ${a} — add a data migration if its data must be archived/cleaned up`,table:a,type:"removedTable"});if(t!==void 0&&t.jurisdiction!==e.jurisdiction){const a=t.jurisdiction??"(none)",o=e.jurisdiction??"(none)";n.push({scope:"schema",severity:"breaking",summary:`Durable Object jurisdiction changed from ${a} to ${o} — this re-homes every DO and strands all existing shard, scheduler, and session-DO data in the old region (no in-place migration; export then import to move it). Revert the change, or override the gate to proceed intentionally.`,type:"changedJurisdiction"})}return{changes:n}},A=t=>Object.entries(t.fields).map(([e,n])=>({name:e,optional:n.optional,ref:Object.values(t.relations).find(s=>s.field===e&&s.kind==="one")?.table,type:n.kind})),C=(t,e)=>{const n={},s=t?.fields??{},a=e?.fields??{};for(const[o,i]of Object.entries(a)){const r=s[o];r===void 0?n[o]=t===void 0?"unchanged":"added":n[o]=r.kind===i.kind&&r.optional===i.optional?"unchanged":"changed"}for(const o of Object.keys(s))a[o]===void 0&&(n[o]="removed");return n},ae=(t,e)=>{const{changes:n}=ne(t,e),s=new Set(n.filter(i=>i.scope==="table"&&i.table!==void 0).map(i=>i.table)),a=[],o=(i,r)=>i?"added":s.has(r)?"changed":"context";for(const[i,r]of Object.entries(e.tables)){const d=t?.tables[i],m=o(d===void 0,i);a.push({columns:A(r),fieldStatus:C(d,r),name:i,shardMode:r.shardMode,status:m})}for(const[i,r]of Object.entries(t?.tables??{}))e.tables[i]===void 0&&a.push({columns:A(r),fieldStatus:C(r,void 0),name:i,shardMode:r.shardMode,status:"removed"});return a.sort((i,r)=>i.name.localeCompare(r.name)),{breakingCount:n.filter(i=>i.severity==="breaking").length,changes:n,tables:a}},E=t=>{const e=W(t);return e.status==="ok"?e.snapshot:void 0},ie={added:"ring-2 ring-emerald-500/60",changed:"ring-2 ring-amber-500/70",context:"opacity-55",removed:"opacity-70 ring-2 ring-destructive/60"},oe=t=>t==="global"?"global":"shard",re=t=>{const e=O(24),{appliedAt:n,hash:s,onSelect:a,selected:o,seq:i}=t,r=o?"border-s-primary bg-accent/60 text-foreground":"border-s-transparent text-muted-foreground hover:bg-accent/30 hover:text-foreground";let d;e[0]!==r?(d=w("flex w-full flex-col items-start gap-1 border-s-2 px-4 py-3 text-start outline-none transition-colors",r),e[0]=r,e[1]=d):d=e[1];const m=`sh-version-${s}`;let h;e[2]!==s||e[3]!==a?(h=()=>{a(s)},e[2]=s,e[3]=a,e[4]=h):h=e[4];let u;e[5]!==i?(u=x("span",{className:"font-mono text-[13px] tabular-nums",children:["v",i]}),e[5]=i,e[6]=u):u=e[6];let g;e[7]!==s?(g=s.slice(0,7),e[7]=s,e[8]=g):g=e[8];let p;e[9]!==g?(p=c("span",{className:"ms-auto font-mono text-[10px] tracking-wider text-muted-foreground/70 uppercase",children:g}),e[9]=g,e[10]=p):p=e[10];let f;e[11]!==u||e[12]!==p?(f=x("span",{className:"flex w-full items-baseline gap-2",children:[u,p]}),e[11]=u,e[12]=p,e[13]=f):f=e[13];let b;e[14]!==n?(b=U(n),e[14]=n,e[15]=b):b=e[15];let v;e[16]!==b?(v=c("span",{className:"font-mono text-[10px] tracking-wide text-muted-foreground/70",children:b}),e[16]=b,e[17]=v):v=e[17];let y;return e[18]!==v||e[19]!==d||e[20]!==m||e[21]!==h||e[22]!==f?(y=c("li",{children:x("button",{className:d,"data-testid":m,onClick:h,type:"button",children:[f,v]})}),e[18]=v,e[19]=d,e[20]=m,e[21]=h,e[22]=f,e[23]=y):y=e[23],y},de=t=>{const e=O(26),{breaking:n,count:s,first:a}=t,o=R();if(a){let p;e[0]!==s?(p=c("span",{className:"text-3xl leading-none font-light tracking-tight tabular-nums",children:s}),e[0]=s,e[1]=p):p=e[1];let f;e[2]!==o?(f=o("tables"),e[2]=o,e[3]=f):f=e[3];let b;e[4]!==f?(b=c("span",{className:"font-mono text-[11px] tracking-widest text-muted-foreground uppercase",children:f}),e[4]=f,e[5]=b):b=e[5];let v;return e[6]!==p||e[7]!==b?(v=x("div",{className:"flex items-baseline gap-3","data-testid":"sh-summary",children:[p,b]}),e[6]=p,e[7]=b,e[8]=v):v=e[8],v}const i=n>0&&"text-destructive";let r;e[9]!==i?(r=w("text-3xl leading-none font-light tracking-tight tabular-nums",i),e[9]=i,e[10]=r):r=e[10];let d;e[11]!==s||e[12]!==r?(d=c("span",{className:r,children:s}),e[11]=s,e[12]=r,e[13]=d):d=e[13];let m;e[14]!==s||e[15]!==o?(m=o(s===1?"change":"changes"),e[14]=s,e[15]=o,e[16]=m):m=e[16];let h;e[17]!==m?(h=c("span",{className:"font-mono text-[11px] tracking-widest text-muted-foreground uppercase",children:m}),e[17]=m,e[18]=h):h=e[18];let u;e[19]!==n||e[20]!==o?(u=n>0&&x("span",{className:"font-mono text-[11px] tracking-widest text-destructive uppercase",children:["· ",o("{count} breaking",{count:n})]}),e[19]=n,e[20]=o,e[21]=u):u=e[21];let g;return e[22]!==d||e[23]!==h||e[24]!==u?(g=x("div",{className:"flex items-baseline gap-3","data-testid":"sh-summary",children:[d,h,u]}),e[22]=d,e[23]=h,e[24]=u,e[25]=g):g=e[25],g},D={addedIndex:{action:"added",kind:"index"},addedOptionalField:{action:"added",kind:"field?"},addedRelation:{action:"added",kind:"relation"},addedRequiredField:{action:"added",kind:"field"},addedTable:{action:"added",kind:"table"},changedFieldKind:{action:"changed",kind:"field kind"},changedIndex:{action:"changed",kind:"index"},changedJurisdiction:{action:"changed",kind:"jurisdiction"},changedShardMode:{action:"changed",kind:"shard mode"},fieldOptionalToRequired:{action:"changed",kind:"field → required"},fieldRequiredToOptional:{action:"changed",kind:"field → optional"},removedField:{action:"removed",kind:"field"},removedIndex:{action:"removed",kind:"index"},removedRelation:{action:"removed",kind:"relation"},removedTable:{action:"removed",kind:"table"}},le=(t,e)=>{const n=`${D[t.type].action} ${e} `;return t.summary.startsWith(n)?t.summary.slice(n.length):t.summary},ce=t=>{const e=new Map;for(const s of t){const a=s.table??"",o=e.get(a);o===void 0?e.set(a,[s]):o.push(s)}const n=[...e].map(([s,a])=>({changes:a,table:s}));return[...n.filter(s=>s.table!==""),...n.filter(s=>s.table==="")]},me=t=>{const e=O(2),{children:n}=t;let s;return e[0]!==n?(s=c("div",{className:"px-4 pt-4 pb-2 font-mono text-[10px] tracking-widest text-muted-foreground/70 uppercase",children:n}),e[0]=n,e[1]=s):s=e[1],s},fe=({pane:t,shardKey:e=""})=>{const n=R(),s=V(),o=Q({strict:!1}).version,i=l=>{_(s({search:{version:l},to:"/migrations"}))},r=T(I.schemaHistory,{},{shardKey:e}),d=r.data?.versions??[],m=o!==void 0&&d.some(l=>l.hash===o)?o:d[0]?.hash,h=d.findIndex(l=>l.hash===m),u=h===-1?void 0:d[h+1]?.hash,g=T(I.schemaVersion,{hash:m??""},{enabled:m!==void 0,shardKey:e}),p=T(I.schemaVersion,{hash:u??""},{enabled:u!==void 0,shardKey:e}),f=N(()=>{const l=E(g.data?.version?.snapshotJson);if(l!==void 0)return ae(E(p.data?.version?.snapshotJson),l)},[g.data,p.data]),b=N(()=>(f?.tables??[]).map(l=>({columns:l.columns,name:l.name,tier:oe(l.shardMode)})),[f]),v=N(()=>{const l={};for(const S of f?.tables??[])l[S.name]=ie[S.status];return l},[f]);if(r.error!==null)return c(G,{error:r.errorSource,testId:"sh-error"});if(d.length===0)return c(K,{description:n("Each distinct schema shape this shard runs is recorded here, so you can see what changed and when."),testId:"sh-empty",title:n("No schema versions recorded yet.")});const y=f?.changes??[];return x("div",{className:"flex min-h-0 flex-1 gap-4","data-testid":"lunora-schema-history",children:[x("nav",{className:"flex w-56 shrink-0 flex-col overflow-hidden border-e border-border","data-testid":"sh-timeline-rail",children:[c(me,{children:n("Schema versions")}),c("ul",{className:"min-h-0 flex-1 overflow-y-auto","data-testid":"sh-timeline",children:d.map(l=>c(re,{appliedAt:l.appliedAt,hash:l.hash,onSelect:i,selected:l.hash===m,seq:l.seq},l.hash))})]}),x("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col gap-4 pe-1 pt-4",children:[c(de,{breaking:f?.breakingCount??0,count:u===void 0?b.length:y.length,first:u===void 0}),t==="diagram"?c("div",{className:"flex min-h-0 flex-1 flex-col",children:c(B,{fill:!0,nodeClasses:v,tables:b,testIdPrefix:"sh"})}):c("div",{className:"min-h-0 flex-1 overflow-y-auto","data-testid":"sh-changes",children:ce(y).map(l=>{const S=(f?.tables??[]).find(k=>k.name===l.table);return x("section",{className:"mb-6",children:[x("div",{className:"flex items-baseline gap-3 border-b border-border/60 pb-1.5",children:[c("span",{className:"font-mono text-[13px] text-foreground",children:l.table===""?n("schema"):l.table}),S!==void 0&&c("span",{className:"font-mono text-[10px] tracking-widest text-muted-foreground/70 tabular-nums uppercase",children:n("{count} columns",{count:S.columns.length})}),l.changes.length>1&&c("span",{className:"ms-auto font-mono text-[10px] tracking-widest text-muted-foreground/70 tabular-nums",children:l.changes.length})]}),c("ul",{children:l.changes.map(k=>{const{action:J,kind:q}=D[k.type],j=k.severity==="breaking",F=le(k,q);return x("li",{className:"flex items-baseline gap-4 border-s-2 py-1.5 ps-3 transition-colors hover:bg-accent/30",children:[c("span",{"aria-hidden":"true",className:w("-ms-3 h-3 w-0.5 shrink-0 self-center",j?"bg-destructive":"bg-transparent")}),x("span",{className:"w-44 shrink-0 font-mono text-[10px] tracking-widest text-muted-foreground/70 uppercase",children:[n(J)," ",q]}),F!==l.table&&c("span",{className:w("min-w-0 font-mono text-[13px]",j?"text-destructive":"text-foreground"),children:F}),j&&c("span",{className:"ms-auto shrink-0 font-mono text-[10px] tracking-widest text-destructive uppercase",children:n("breaking")})]},`${k.type}-${k.summary}`)})})]},l.table)})})]})]})},ue=t=>w("-mb-px border-b-2 px-3 py-2.5 font-mono text-[11px] tracking-wider uppercase transition-colors outline-none","hover:bg-accent/40 focus-visible:bg-accent/40",t?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"),Ne=t=>{const e=O(11),{initialShardKey:n}=t,s=R(),[a,o]=P("diagram");let i;e[0]!==a?(i=(u,g,p,f)=>x("button",{"aria-selected":a===u,className:ue(a===u),"data-testid":p,onClick:()=>{o(u)},role:"tab",type:"button",children:[g,f!==void 0&&c("span",{className:"ms-2 tabular-nums text-muted-foreground/70",children:f})]}),e[0]=a,e[1]=i):i=e[1];const r=i;let d;e[2]!==s||e[3]!==r?(d=x("div",{className:"flex shrink-0 items-center gap-1 border-b border-border px-3","data-testid":"mg-panes",role:"tablist",children:[r("diagram",s("Diagram"),"mg-pane-diagram"),r("changes",s("Changes"),"mg-pane-changes"),r("data",s("Data migrations"),"mg-pane-data")]}),e[2]=s,e[3]=r,e[4]=d):d=e[4];let m;e[5]!==n||e[6]!==a?(m=c("div",{className:"flex min-h-0 flex-1 flex-col",children:a==="data"?c("div",{className:"min-h-0 flex-1 overflow-y-auto px-4",children:c(H,{initialShardKey:n})}):c(fe,{pane:a,shardKey:n})}),e[5]=n,e[6]=a,e[7]=m):m=e[7];let h;return e[8]!==d||e[9]!==m?(h=x("div",{className:"flex min-h-0 flex-1 flex-col pt-4","data-testid":"lunora-migrations-route",children:[d,m]}),e[8]=d,e[9]=m,e[10]=h):h=e[10],h};export{Ne as default};
|