plum-e2e 2.10.0 → 2.12.0
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/.env +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +7 -7
- package/backend/app.js +1 -1
- package/backend/lib/csv.js +21 -0
- package/backend/lib/exportResponse.js +37 -0
- package/backend/lib/serverBootstrap.js +2 -2
- package/backend/lib/serverConfig.js +5 -3
- package/backend/mcp/server.js +44 -0
- package/backend/middleware/runnerOrAdmin.js +1 -1
- package/backend/package.json +1 -1
- package/backend/routes/reports.routes.js +19 -0
- package/backend/routes/runners.routes.js +1 -1
- package/backend/routes/test-cases.routes.js +12 -0
- package/backend/routes/test-runs.routes.js +17 -0
- package/backend/routes/test-suites.routes.js +34 -0
- package/backend/scripts/{manage-runners.mjs → manage-nodes.mjs} +67 -52
- package/backend/services/exportService.js +339 -0
- package/backend/services/testImportService.js +87 -0
- package/bin/plum.js +174 -68
- package/docker-compose.yml +1 -1
- package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +48 -40
- package/frontend/.svelte-kit/{output/server/_app/immutable/assets/Toast.DENwYn3g.css → adapter-node/_app/immutable/assets/Button.C1zsJAUG.css} +1 -1
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/ExportMenu.DsJQ1Qua.css +6 -0
- package/frontend/{build/client/_app/immutable/assets/_layout.HkPnpRl9.css → .svelte-kit/adapter-node/_app/immutable/assets/_layout.B4TT3qNx.css} +1 -1
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.4bPj83tb.css +6 -0
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BwgtEi_a.css +6 -0
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.DOC8fPSI.css +6 -0
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Dm1nSEgE.css +6 -0
- package/frontend/.svelte-kit/adapter-node/chunks/{Toast.js → Button.js} +2 -17
- package/frontend/.svelte-kit/adapter-node/chunks/ConfirmModal.js +1 -1
- package/frontend/.svelte-kit/adapter-node/chunks/EmptyState.js +1 -1
- package/frontend/.svelte-kit/adapter-node/chunks/common.js +11 -4
- package/frontend/.svelte-kit/adapter-node/chunks/constants.js +1 -1
- package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -1
- package/frontend/.svelte-kit/adapter-node/chunks/repository.js +21 -17
- package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +2 -0
- package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_id_/_page.svelte.js +11 -2
- package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +2 -5
- package/frontend/.svelte-kit/adapter-node/entries/pages/settings/_page.svelte.js +300 -253
- package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/_page.svelte.js +55 -36
- package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/runs/_id_/_page.svelte.js +3 -6
- package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/suites/_id_/_page.svelte.js +15 -17
- package/frontend/.svelte-kit/adapter-node/manifest-full.js +1 -1
- package/frontend/.svelte-kit/adapter-node/manifest.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/0.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/10.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/11.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/12.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/2.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/3.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/4.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/5.js +1 -1
- package/frontend/.svelte-kit/adapter-node/nodes/6.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/7.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/8.js +2 -2
- package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -1
- package/frontend/.svelte-kit/generated/server/internal.js +1 -1
- package/frontend/.svelte-kit/output/client/.vite/manifest.json +459 -412
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/{0.CmJTG5mP.css → 0.BEqlRAtD.css} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/10.DC0wD6w_.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.Dm1nSEgE.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.DdQVxyZK.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.DOC8fPSI.css +6 -0
- package/frontend/.svelte-kit/{adapter-node/_app/immutable/assets/Toast.DENwYn3g.css → output/client/_app/immutable/assets/Button.C1zsJAUG.css} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/ExportMenu.DsJQ1Qua.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/{_layout.HkPnpRl9.css → _layout.B4TT3qNx.css} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.4bPj83tb.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BwgtEi_a.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.DOC8fPSI.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Dm1nSEgE.css +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{C2_rQ4aY.js → 3MBVX4Yb.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/CfkUW1vA.js → .svelte-kit/output/client/_app/immutable/chunks/6VDMVB5U.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/B0_HKFXV.js → .svelte-kit/output/client/_app/immutable/chunks/B2lVGNml.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/CboYYxrf.js → .svelte-kit/output/client/_app/immutable/chunks/BCh31ecr.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BDb8hZHu.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CeH-RgMb.js → BIf7lHIm.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BIjh3jiU.js +8 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BTV7EXZb.js +11 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DAmOMhaf.js → BWGoOYU0.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BdBJfKUi.js +6 -0
- package/frontend/{build/client/_app/immutable/chunks/BAvTKHxT.js → .svelte-kit/output/client/_app/immutable/chunks/BnXsGCy3.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BtTNggoY.js +8 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C4Z3p6jE.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CNpD-yNH.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CUPWZLIN.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{Ck6C3Fl0.js → CXQhSK1T.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/C00jnSU2.js → .svelte-kit/output/client/_app/immutable/chunks/CtgCYzu5.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/D72giPTu.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{GDjpV3r7.js → DDx3no2z.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/D_thT6pZ.js +6 -0
- package/frontend/{build/client/_app/immutable/chunks/C8S7qQjQ.js → .svelte-kit/output/client/_app/immutable/chunks/DeiVAbyn.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DiexacSB.js +6 -0
- package/frontend/{build/client/_app/immutable/chunks/d2K3c8Kx.js → .svelte-kit/output/client/_app/immutable/chunks/Dlymnwnf.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/Cgw8TOOy.js → .svelte-kit/output/client/_app/immutable/chunks/gCgJ3Cwu.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/BJ_ypKl3.js → .svelte-kit/output/client/_app/immutable/chunks/htkwR9b-.js} +1 -1
- package/frontend/{build/client/_app/immutable/chunks/C7uEQ-LH.js → .svelte-kit/output/client/_app/immutable/chunks/iL4SCrvY.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CoTEzvLa.js → kFFd6Oo5.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/pNZogwkM.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DWzEJYIF.js → prk8PJfA.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/qvxlSGpD.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/r_d1Iu0W.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{B00vxw57.js → tsOANt55.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/zXSLr47H.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.DgdSwPuN.js +7 -0
- package/frontend/{build/client/_app/immutable/entry/start.BXOLyf9R.js → .svelte-kit/output/client/_app/immutable/entry/start.D_lhI48n.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.D2F-i1I5.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{1.BI97il3r.js → 1.JIF2GfHq.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/10.A0AHLfOt.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/11.CVSPxlqY.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.CnAR0AQb.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{2.Dr6yugXz.js → 2.Bno00fr8.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.B6KwaCsM.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{4.DDADylfF.js → 4.BX70m3v6.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.UIFh06yr.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DZ1OV24V.js +10 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.B_XntBZ1.js +6 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.CVHgJw-E.js +9 -0
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.BOK0GNF_.js → 9.DDDQPmMj.js} +1 -1
- package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
- package/frontend/.svelte-kit/output/server/.vite/manifest.json +48 -40
- package/frontend/{build/client/_app/immutable/assets/Toast.DENwYn3g.css → .svelte-kit/output/server/_app/immutable/assets/Button.C1zsJAUG.css} +1 -1
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/ExportMenu.DsJQ1Qua.css +6 -0
- package/frontend/.svelte-kit/{adapter-node/_app/immutable/assets/_layout.HkPnpRl9.css → output/server/_app/immutable/assets/_layout.B4TT3qNx.css} +1 -1
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.4bPj83tb.css +6 -0
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BwgtEi_a.css +6 -0
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.DOC8fPSI.css +6 -0
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Dm1nSEgE.css +6 -0
- package/frontend/.svelte-kit/output/server/chunks/{Toast.js → Button.js} +2 -17
- package/frontend/.svelte-kit/output/server/chunks/ConfirmModal.js +1 -1
- package/frontend/.svelte-kit/output/server/chunks/EmptyState.js +1 -1
- package/frontend/.svelte-kit/output/server/chunks/common.js +11 -4
- package/frontend/.svelte-kit/output/server/chunks/constants.js +1 -1
- package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -1
- package/frontend/.svelte-kit/output/server/chunks/repository.js +21 -17
- package/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -0
- package/frontend/.svelte-kit/output/server/entries/pages/reports/_id_/_page.svelte.js +11 -2
- package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +2 -5
- package/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js +300 -253
- package/frontend/.svelte-kit/output/server/entries/pages/test-repository/_page.svelte.js +55 -36
- package/frontend/.svelte-kit/output/server/entries/pages/test-repository/runs/_id_/_page.svelte.js +3 -6
- package/frontend/.svelte-kit/output/server/entries/pages/test-repository/suites/_id_/_page.svelte.js +15 -17
- package/frontend/.svelte-kit/output/server/manifest-full.js +1 -1
- package/frontend/.svelte-kit/output/server/manifest.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/0.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/1.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/10.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/11.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/12.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/2.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/3.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/4.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/5.js +1 -1
- package/frontend/.svelte-kit/output/server/nodes/6.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/7.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/8.js +2 -2
- package/frontend/.svelte-kit/output/server/nodes/9.js +1 -1
- package/frontend/build/client/_app/immutable/assets/{0.CmJTG5mP.css → 0.BEqlRAtD.css} +1 -1
- package/frontend/build/client/_app/immutable/assets/0.BEqlRAtD.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/0.BEqlRAtD.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/10.DC0wD6w_.css +6 -0
- package/frontend/build/client/_app/immutable/assets/10.DC0wD6w_.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/10.DC0wD6w_.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/12.Dm1nSEgE.css +6 -0
- package/frontend/build/client/_app/immutable/assets/12.Dm1nSEgE.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/12.Dm1nSEgE.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/6.DdQVxyZK.css +6 -0
- package/frontend/build/client/_app/immutable/assets/6.DdQVxyZK.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/6.DdQVxyZK.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/8.DOC8fPSI.css +6 -0
- package/frontend/build/client/_app/immutable/assets/8.DOC8fPSI.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/8.DOC8fPSI.css.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/assets/Toast.DENwYn3g.css → build/client/_app/immutable/assets/Button.C1zsJAUG.css} +1 -1
- package/frontend/build/client/_app/immutable/assets/Button.C1zsJAUG.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/Button.C1zsJAUG.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/ExportMenu.DsJQ1Qua.css +6 -0
- package/frontend/build/client/_app/immutable/assets/ExportMenu.DsJQ1Qua.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/ExportMenu.DsJQ1Qua.css.gz +0 -0
- package/frontend/{.svelte-kit/output/server/_app/immutable/assets/_layout.HkPnpRl9.css → build/client/_app/immutable/assets/_layout.B4TT3qNx.css} +1 -1
- package/frontend/build/client/_app/immutable/assets/_layout.B4TT3qNx.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_layout.B4TT3qNx.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.4bPj83tb.css +6 -0
- package/frontend/build/client/_app/immutable/assets/_page.4bPj83tb.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.4bPj83tb.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.BwgtEi_a.css +6 -0
- package/frontend/build/client/_app/immutable/assets/_page.BwgtEi_a.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.BwgtEi_a.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.DOC8fPSI.css +6 -0
- package/frontend/build/client/_app/immutable/assets/_page.DOC8fPSI.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.DOC8fPSI.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.Dm1nSEgE.css +6 -0
- package/frontend/build/client/_app/immutable/assets/_page.Dm1nSEgE.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.Dm1nSEgE.css.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{C2_rQ4aY.js → 3MBVX4Yb.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/3MBVX4Yb.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/3MBVX4Yb.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CfkUW1vA.js → build/client/_app/immutable/chunks/6VDMVB5U.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/6VDMVB5U.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/6VDMVB5U.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/B0_HKFXV.js → build/client/_app/immutable/chunks/B2lVGNml.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/B2lVGNml.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/B2lVGNml.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CboYYxrf.js → build/client/_app/immutable/chunks/BCh31ecr.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/BCh31ecr.js.br +6 -0
- package/frontend/build/client/_app/immutable/chunks/BCh31ecr.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BDb8hZHu.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/BDb8hZHu.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BDb8hZHu.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{CeH-RgMb.js → BIf7lHIm.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/BIf7lHIm.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/{CeH-RgMb.js.gz → BIf7lHIm.js.gz} +0 -0
- package/frontend/build/client/_app/immutable/chunks/BIjh3jiU.js +8 -0
- package/frontend/build/client/_app/immutable/chunks/BIjh3jiU.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BIjh3jiU.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BTV7EXZb.js +11 -0
- package/frontend/build/client/_app/immutable/chunks/BTV7EXZb.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BTV7EXZb.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{DAmOMhaf.js → BWGoOYU0.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/BWGoOYU0.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BWGoOYU0.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BdBJfKUi.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/BdBJfKUi.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BdBJfKUi.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/BAvTKHxT.js → build/client/_app/immutable/chunks/BnXsGCy3.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/BnXsGCy3.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BnXsGCy3.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BtTNggoY.js +8 -0
- package/frontend/build/client/_app/immutable/chunks/BtTNggoY.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BtTNggoY.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/C4Z3p6jE.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/C4Z3p6jE.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/C4Z3p6jE.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CNpD-yNH.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/CNpD-yNH.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CNpD-yNH.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CUPWZLIN.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/CUPWZLIN.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CUPWZLIN.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{Ck6C3Fl0.js → CXQhSK1T.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/CXQhSK1T.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CXQhSK1T.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C00jnSU2.js → build/client/_app/immutable/chunks/CtgCYzu5.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/CtgCYzu5.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CtgCYzu5.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/D72giPTu.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/D72giPTu.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/D72giPTu.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{GDjpV3r7.js → DDx3no2z.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/DDx3no2z.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DDx3no2z.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/D_thT6pZ.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/D_thT6pZ.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/D_thT6pZ.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C8S7qQjQ.js → build/client/_app/immutable/chunks/DeiVAbyn.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/DeiVAbyn.js.br +6 -0
- package/frontend/build/client/_app/immutable/chunks/DeiVAbyn.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DiexacSB.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/DiexacSB.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DiexacSB.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/d2K3c8Kx.js → build/client/_app/immutable/chunks/Dlymnwnf.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/Dlymnwnf.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Dlymnwnf.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/Cgw8TOOy.js → build/client/_app/immutable/chunks/gCgJ3Cwu.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/gCgJ3Cwu.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/gCgJ3Cwu.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/BJ_ypKl3.js → build/client/_app/immutable/chunks/htkwR9b-.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/htkwR9b-.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/htkwR9b-.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C7uEQ-LH.js → build/client/_app/immutable/chunks/iL4SCrvY.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/iL4SCrvY.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/iL4SCrvY.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{CoTEzvLa.js → kFFd6Oo5.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/kFFd6Oo5.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/kFFd6Oo5.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/pNZogwkM.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/pNZogwkM.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/pNZogwkM.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{DWzEJYIF.js → prk8PJfA.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/prk8PJfA.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/prk8PJfA.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/qvxlSGpD.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/qvxlSGpD.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/qvxlSGpD.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/r_d1Iu0W.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/r_d1Iu0W.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/r_d1Iu0W.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/{B00vxw57.js → tsOANt55.js} +1 -1
- package/frontend/build/client/_app/immutable/chunks/tsOANt55.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/tsOANt55.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/zXSLr47H.js +6 -0
- package/frontend/build/client/_app/immutable/chunks/zXSLr47H.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/zXSLr47H.js.gz +0 -0
- package/frontend/build/client/_app/immutable/entry/app.DgdSwPuN.js +7 -0
- package/frontend/build/client/_app/immutable/entry/app.DgdSwPuN.js.br +0 -0
- package/frontend/build/client/_app/immutable/entry/app.DgdSwPuN.js.gz +0 -0
- package/frontend/{.svelte-kit/output/client/_app/immutable/entry/start.BXOLyf9R.js → build/client/_app/immutable/entry/start.D_lhI48n.js} +1 -1
- package/frontend/build/client/_app/immutable/entry/{start.BXOLyf9R.js.br → start.D_lhI48n.js.br} +1 -1
- package/frontend/build/client/_app/immutable/entry/{start.BXOLyf9R.js.gz → start.D_lhI48n.js.gz} +0 -0
- package/frontend/build/client/_app/immutable/nodes/0.D2F-i1I5.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/0.D2F-i1I5.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/0.D2F-i1I5.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/{1.BI97il3r.js → 1.JIF2GfHq.js} +1 -1
- package/frontend/build/client/_app/immutable/nodes/1.JIF2GfHq.js.br +5 -0
- package/frontend/build/client/_app/immutable/nodes/1.JIF2GfHq.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/10.A0AHLfOt.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/10.A0AHLfOt.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/10.A0AHLfOt.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/11.CVSPxlqY.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/11.CVSPxlqY.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/11.CVSPxlqY.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/12.CnAR0AQb.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/12.CnAR0AQb.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/12.CnAR0AQb.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/{2.Dr6yugXz.js → 2.Bno00fr8.js} +1 -1
- package/frontend/build/client/_app/immutable/nodes/2.Bno00fr8.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/2.Bno00fr8.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/3.B6KwaCsM.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/3.B6KwaCsM.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/3.B6KwaCsM.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/{4.DDADylfF.js → 4.BX70m3v6.js} +1 -1
- package/frontend/build/client/_app/immutable/nodes/4.BX70m3v6.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/4.BX70m3v6.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/5.UIFh06yr.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/5.UIFh06yr.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/5.UIFh06yr.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/6.DZ1OV24V.js +10 -0
- package/frontend/build/client/_app/immutable/nodes/6.DZ1OV24V.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/6.DZ1OV24V.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/7.B_XntBZ1.js +6 -0
- package/frontend/build/client/_app/immutable/nodes/7.B_XntBZ1.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/7.B_XntBZ1.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/8.CVHgJw-E.js +9 -0
- package/frontend/build/client/_app/immutable/nodes/8.CVHgJw-E.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/8.CVHgJw-E.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/{9.BOK0GNF_.js → 9.DDDQPmMj.js} +1 -1
- package/frontend/build/client/_app/immutable/nodes/9.DDDQPmMj.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/9.DDDQPmMj.js.gz +0 -0
- package/frontend/build/client/_app/version.json +1 -1
- package/frontend/build/client/_app/version.json.br +0 -0
- package/frontend/build/client/_app/version.json.gz +0 -0
- package/frontend/build/server/chunks/0-38cvTs44.js +22 -0
- package/frontend/build/server/chunks/0-38cvTs44.js.map +5 -0
- package/frontend/build/server/chunks/{1-B3HpigzL.js → 1-CcYsajvR.js} +2 -2
- package/frontend/build/server/chunks/{1-B3HpigzL.js.map → 1-CcYsajvR.js.map} +1 -1
- package/frontend/build/server/chunks/10-CFR2MUJt.js +14 -0
- package/frontend/build/server/chunks/10-CFR2MUJt.js.map +5 -0
- package/frontend/build/server/chunks/11-BmkiRQ9D.js +14 -0
- package/frontend/build/server/chunks/11-BmkiRQ9D.js.map +5 -0
- package/frontend/build/server/chunks/12-BphJAwnL.js +14 -0
- package/frontend/build/server/chunks/12-BphJAwnL.js.map +5 -0
- package/frontend/build/server/chunks/2-Dalgd2D4.js +14 -0
- package/frontend/build/server/chunks/{2-DioMbKbC.js.map → 2-Dalgd2D4.js.map} +1 -1
- package/frontend/build/server/chunks/3-BvsmdXCj.js +14 -0
- package/frontend/build/server/chunks/{3-CgiZg_9v.js.map → 3-BvsmdXCj.js.map} +1 -1
- package/frontend/build/server/chunks/4-CN18WCEn.js +14 -0
- package/frontend/build/server/chunks/{4-BM-49dbE.js.map → 4-CN18WCEn.js.map} +1 -1
- package/frontend/build/server/chunks/5-BwLYF3xL.js +14 -0
- package/frontend/build/server/chunks/{5-Brx_KOzy.js.map → 5-BwLYF3xL.js.map} +1 -1
- package/frontend/build/server/chunks/6-DTM2N_k3.js +14 -0
- package/frontend/build/server/chunks/6-DTM2N_k3.js.map +5 -0
- package/frontend/build/server/chunks/7-DTNbErSe.js +14 -0
- package/frontend/build/server/chunks/7-DTNbErSe.js.map +5 -0
- package/frontend/build/server/chunks/8-BfCbb7pl.js +14 -0
- package/frontend/build/server/chunks/8-BfCbb7pl.js.map +5 -0
- package/frontend/build/server/chunks/9-CQKepnMw.js +14 -0
- package/frontend/build/server/chunks/{9-BMAKiAem.js.map → 9-CQKepnMw.js.map} +1 -1
- package/frontend/build/server/chunks/{Toast-CHB87F8k.js → Button-B9h9viZX.js} +3 -17
- package/frontend/build/server/chunks/Button-B9h9viZX.js.map +5 -0
- package/frontend/build/server/chunks/{ConfirmModal-CtGWHl0v.js → ConfirmModal-C6Cz898n.js} +2 -2
- package/frontend/build/server/chunks/{ConfirmModal-CtGWHl0v.js.map → ConfirmModal-C6Cz898n.js.map} +1 -1
- package/frontend/build/server/chunks/{EmptyState-Zpm9tJe1.js → EmptyState-CRtsJIv6.js} +2 -2
- package/frontend/build/server/chunks/{EmptyState-Zpm9tJe1.js.map → EmptyState-CRtsJIv6.js.map} +1 -1
- package/frontend/build/server/chunks/{_layout.svelte-C_6nsIpT.js → _layout.svelte-B8vZGefg.js} +6 -7
- package/frontend/build/server/chunks/_layout.svelte-B8vZGefg.js.map +5 -0
- package/frontend/build/server/chunks/{_page.svelte-CTebwzwy.js → _page.svelte-BrnXHxJ4.js} +14 -7
- package/frontend/build/server/chunks/_page.svelte-BrnXHxJ4.js.map +5 -0
- package/frontend/build/server/chunks/_page.svelte-C2WqvInJ.js +898 -0
- package/frontend/build/server/chunks/_page.svelte-C2WqvInJ.js.map +5 -0
- package/frontend/build/server/chunks/{_page.svelte-Bamoq11m.js → _page.svelte-CP6jA1ex.js} +6 -6
- package/frontend/build/server/chunks/{_page.svelte-Bamoq11m.js.map → _page.svelte-CP6jA1ex.js.map} +1 -1
- package/frontend/build/server/chunks/{_page.svelte-CbTrCeeX.js → _page.svelte-D6b-klLK.js} +9 -9
- package/frontend/build/server/chunks/{_page.svelte-CbTrCeeX.js.map → _page.svelte-D6b-klLK.js.map} +1 -1
- package/frontend/build/server/chunks/{_page.svelte-CmJKt3-H.js → _page.svelte-DBjTpquQ.js} +18 -21
- package/frontend/build/server/chunks/_page.svelte-DBjTpquQ.js.map +5 -0
- package/frontend/build/server/chunks/{_page.svelte-DHZhNTPg.js → _page.svelte-DM1_y4Oq.js} +60 -42
- package/frontend/build/server/chunks/_page.svelte-DM1_y4Oq.js.map +5 -0
- package/frontend/build/server/chunks/{_page.svelte-DObTHQe2.js → _page.svelte-Mo-O3HJ5.js} +7 -7
- package/frontend/build/server/chunks/{_page.svelte-DObTHQe2.js.map → _page.svelte-Mo-O3HJ5.js.map} +1 -1
- package/frontend/build/server/chunks/{_page.svelte-CAlhaCzS.js → _page.svelte-mZF4NrfU.js} +9 -12
- package/frontend/build/server/chunks/_page.svelte-mZF4NrfU.js.map +5 -0
- package/frontend/build/server/chunks/{_page.svelte-BNwU9zza.js → _page.svelte-nrlgIFaU.js} +8 -11
- package/frontend/build/server/chunks/_page.svelte-nrlgIFaU.js.map +5 -0
- package/frontend/build/server/chunks/{common-DYYTVHPw.js → common-DS-Z0UFe.js} +7 -2
- package/frontend/build/server/chunks/common-DS-Z0UFe.js.map +5 -0
- package/frontend/build/server/chunks/{constants-BYVkTZ-O.js → constants-OmHysD51.js} +2 -2
- package/frontend/build/server/chunks/{constants-BYVkTZ-O.js.map → constants-OmHysD51.js.map} +1 -1
- package/frontend/build/server/chunks/{format-2pqy61MU.js → format-Bqb0as15.js} +2 -2
- package/frontend/build/server/chunks/{format-2pqy61MU.js.map → format-Bqb0as15.js.map} +1 -1
- package/frontend/build/server/chunks/{reports-WuXG6tj3.js → reports-chCHCDzB.js} +2 -2
- package/frontend/build/server/chunks/{reports-WuXG6tj3.js.map → reports-chCHCDzB.js.map} +1 -1
- package/frontend/build/server/chunks/{reports2-CCpI0xkQ.js → reports2-Dr3zu9CD.js} +2 -2
- package/frontend/build/server/chunks/{reports2-CCpI0xkQ.js.map → reports2-Dr3zu9CD.js.map} +1 -1
- package/frontend/build/server/chunks/{repository-TYWcFuWP.js → repository-DSsWVKEb.js} +5 -3
- package/frontend/build/server/chunks/repository-DSsWVKEb.js.map +5 -0
- package/frontend/build/server/chunks/{runner-D5yCWOsy.js → runner-aaUtOqck.js} +3 -3
- package/frontend/build/server/chunks/{runner-D5yCWOsy.js.map → runner-aaUtOqck.js.map} +1 -1
- package/frontend/build/server/index.js +1 -1
- package/frontend/build/server/index.js.map +1 -1
- package/frontend/build/server/manifest.js +14 -14
- package/frontend/build/server/manifest.js.map +1 -1
- package/frontend/package-lock.json +14 -0
- package/frontend/package.json +2 -0
- package/frontend/src/lib/api/reports.js +7 -0
- package/frontend/src/lib/api/repository.js +28 -0
- package/frontend/src/lib/components/layout/RunnerPanel.svelte +2 -1
- package/frontend/src/lib/components/reports/RecordingPlayer.svelte +172 -2
- package/frontend/src/lib/components/ui/ExportMenu.svelte +154 -0
- package/frontend/src/lib/components/ui/NotificationStack.svelte +177 -0
- package/frontend/src/lib/constants.js +1 -1
- package/frontend/src/lib/copy/common.js +9 -0
- package/frontend/src/lib/copy/reports.js +20 -0
- package/frontend/src/lib/copy/repository.js +4 -0
- package/frontend/src/lib/copy/settings.js +15 -0
- package/frontend/src/lib/stores/notifications.js +23 -0
- package/frontend/src/lib/stores/replayVideo.js +51 -0
- package/frontend/src/lib/utils/download.js +28 -0
- package/frontend/src/lib/utils/replayCapture.js +91 -0
- package/frontend/src/lib/utils/replayVideo.js +111 -0
- package/frontend/src/routes/+layout.svelte +2 -0
- package/frontend/src/routes/reports/[id]/+page.svelte +38 -3
- package/frontend/src/routes/scheduled-tests/+page.svelte +9 -17
- package/frontend/src/routes/settings/+page.svelte +140 -56
- package/frontend/src/routes/test-repository/+page.svelte +44 -16
- package/frontend/src/routes/test-repository/runs/[id]/+page.svelte +14 -23
- package/frontend/src/routes/test-repository/suites/[id]/+page.svelte +38 -22
- package/package.json +1 -1
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.5IJAEAjc.css +0 -6
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.B9H_IpSU.css +0 -6
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.COwSGmmy.css +0 -6
- package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Dp6vaGRc.css +0 -6
- package/frontend/.svelte-kit/generated/client/nodes/13.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/10.CdaQUS6U.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.B9H_IpSU.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.BN5XbLUX.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.COwSGmmy.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.B9H_IpSU.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.COwSGmmy.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Dp6vaGRc.css +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/2-KCkWZO.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BbYY_TzB.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Beula-TH.js +0 -11
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CZWchtW8.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CegSvdD-.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cfmt4_tJ.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DB3YXVFP.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DgQy0SB2.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DiVmSEJa.js +0 -8
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Dl-F6VCo.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DuAVKaL3.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/chunks/K1h4wprj.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.DRjRA71t.js +0 -7
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.CRb8Nyce.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/10.kyazROhw.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/11.B3vMgT2v.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.DkPcIrgW.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.DUiL7fb5.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.N4CeDeoD.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DWd93Bv5.js +0 -10
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.c8d1cQQM.js +0 -6
- package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.Cvd3MauU.js +0 -9
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.5IJAEAjc.css +0 -6
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.B9H_IpSU.css +0 -6
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.COwSGmmy.css +0 -6
- package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Dp6vaGRc.css +0 -6
- package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css +0 -6
- package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css +0 -6
- package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css +0 -6
- package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css +0 -6
- package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -6
- package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -6
- package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css +0 -6
- package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css +0 -6
- package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.gz +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css +0 -6
- package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.br +0 -0
- package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/Beula-TH.js +0 -11
- package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.br +0 -6
- package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.br +0 -7
- package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js +0 -8
- package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js +0 -6
- package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.gz +0 -0
- package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.br +0 -0
- package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.gz +0 -0
- package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js +0 -7
- package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.br +0 -0
- package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js +0 -10
- package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js +0 -6
- package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js +0 -9
- package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.gz +0 -0
- package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.br +0 -0
- package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.gz +0 -0
- package/frontend/build/server/chunks/0-_rljpEay.js +0 -22
- package/frontend/build/server/chunks/0-_rljpEay.js.map +0 -5
- package/frontend/build/server/chunks/10-BQBBYpxV.js +0 -14
- package/frontend/build/server/chunks/10-BQBBYpxV.js.map +0 -5
- package/frontend/build/server/chunks/11-10xw0TIP.js +0 -14
- package/frontend/build/server/chunks/11-10xw0TIP.js.map +0 -5
- package/frontend/build/server/chunks/12-CZ3_Uw3c.js +0 -14
- package/frontend/build/server/chunks/12-CZ3_Uw3c.js.map +0 -5
- package/frontend/build/server/chunks/2-DioMbKbC.js +0 -14
- package/frontend/build/server/chunks/3-CgiZg_9v.js +0 -14
- package/frontend/build/server/chunks/4-BM-49dbE.js +0 -14
- package/frontend/build/server/chunks/5-Brx_KOzy.js +0 -14
- package/frontend/build/server/chunks/6-C5swINND.js +0 -14
- package/frontend/build/server/chunks/6-C5swINND.js.map +0 -5
- package/frontend/build/server/chunks/7-B8e4y3CB.js +0 -14
- package/frontend/build/server/chunks/7-B8e4y3CB.js.map +0 -5
- package/frontend/build/server/chunks/8-BZtkZMIZ.js +0 -14
- package/frontend/build/server/chunks/8-BZtkZMIZ.js.map +0 -5
- package/frontend/build/server/chunks/9-BMAKiAem.js +0 -14
- package/frontend/build/server/chunks/Toast-CHB87F8k.js.map +0 -5
- package/frontend/build/server/chunks/_layout.svelte-C_6nsIpT.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-BNwU9zza.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-CAlhaCzS.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-CTebwzwy.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-CmJKt3-H.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-DHZhNTPg.js.map +0 -5
- package/frontend/build/server/chunks/_page.svelte-ywHy9KCh.js +0 -852
- package/frontend/build/server/chunks/_page.svelte-ywHy9KCh.js.map +0 -5
- package/frontend/build/server/chunks/common-DYYTVHPw.js.map +0 -5
- package/frontend/build/server/chunks/repository-TYWcFuWP.js.map +0 -5
- package/frontend/src/lib/components/ui/Toast.svelte +0 -24
package/bin/plum.js
CHANGED
|
@@ -146,6 +146,47 @@ function cancelAndExit() {
|
|
|
146
146
|
|
|
147
147
|
const VALID_BROWSERS = ['chromium', 'firefox'];
|
|
148
148
|
|
|
149
|
+
// A bare host:port silently breaks link generation and CORS, so require a scheme.
|
|
150
|
+
async function promptPublicUrl(message, initial) {
|
|
151
|
+
for (;;) {
|
|
152
|
+
const v = await clack.text({
|
|
153
|
+
message: `${message} — include the http:// or https:// prefix`,
|
|
154
|
+
placeholder: initial,
|
|
155
|
+
defaultValue: initial
|
|
156
|
+
});
|
|
157
|
+
if (clack.isCancel(v)) cancelAndExit();
|
|
158
|
+
const val = (v || initial).trim();
|
|
159
|
+
if (/^https?:\/\//i.test(val)) return val.replace(/\/+$/, '');
|
|
160
|
+
clack.log.warn('That needs a full URL starting with http:// or https://');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// onFree() fires when the user agrees to free an in-use port — lets the caller flag it for clearing.
|
|
165
|
+
async function promptPort(message, initial, onFree) {
|
|
166
|
+
const { findPidOnPort } = runnerProcessLib();
|
|
167
|
+
for (;;) {
|
|
168
|
+
const v = await clack.text({
|
|
169
|
+
message,
|
|
170
|
+
placeholder: String(initial),
|
|
171
|
+
defaultValue: String(initial)
|
|
172
|
+
});
|
|
173
|
+
if (clack.isCancel(v)) cancelAndExit();
|
|
174
|
+
const port = (v || String(initial)).trim();
|
|
175
|
+
const pid = findPidOnPort(Number(port));
|
|
176
|
+
if (!pid) return port;
|
|
177
|
+
const free = await clack.confirm({
|
|
178
|
+
message: `Port ${port} is in use (pid ${pid}) — free it when Plum starts?`,
|
|
179
|
+
initialValue: true
|
|
180
|
+
});
|
|
181
|
+
if (clack.isCancel(free)) cancelAndExit();
|
|
182
|
+
if (free) {
|
|
183
|
+
onFree();
|
|
184
|
+
return port;
|
|
185
|
+
}
|
|
186
|
+
clack.log.warn('Pick a different port, or stop that process yourself.');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
149
190
|
/* -----------------------------------------------------
|
|
150
191
|
* Server flow
|
|
151
192
|
* ------------------------------------------------------ */
|
|
@@ -176,12 +217,14 @@ async function configureServer({ force }) {
|
|
|
176
217
|
|
|
177
218
|
const overrides = {
|
|
178
219
|
headless: getFlag(args, '--headless'),
|
|
220
|
+
mode: getFlag(args, '--mode'),
|
|
179
221
|
backendPort: getFlag(args, '--backend-port'),
|
|
180
222
|
frontendPort: getFlag(args, '--frontend-port'),
|
|
181
223
|
apiUrl: getFlag(args, '--api-url'),
|
|
182
224
|
uiUrl: getFlag(args, '--ui-url')
|
|
183
225
|
};
|
|
184
226
|
if (overrides.headless !== undefined) cfg.headless = overrides.headless === 'true';
|
|
227
|
+
if (overrides.mode !== undefined) cfg.mode = overrides.mode;
|
|
185
228
|
if (overrides.backendPort !== undefined) cfg.backendPort = overrides.backendPort;
|
|
186
229
|
if (overrides.frontendPort !== undefined) cfg.frontendPort = overrides.frontendPort;
|
|
187
230
|
if (overrides.apiUrl !== undefined) cfg.apiUrl = overrides.apiUrl;
|
|
@@ -189,6 +232,7 @@ async function configureServer({ force }) {
|
|
|
189
232
|
|
|
190
233
|
const hasFlags = anyFlags(args, [
|
|
191
234
|
'--headless',
|
|
235
|
+
'--mode',
|
|
192
236
|
'--backend-port',
|
|
193
237
|
'--frontend-port',
|
|
194
238
|
'--api-url',
|
|
@@ -197,47 +241,63 @@ async function configureServer({ force }) {
|
|
|
197
241
|
const interactive = force || (interactiveAllowed() && !hasFlags);
|
|
198
242
|
|
|
199
243
|
if (interactive) {
|
|
244
|
+
const mode = await clack.select({
|
|
245
|
+
message: 'Where are you setting up Plum?',
|
|
246
|
+
options: [
|
|
247
|
+
{ value: 'production', label: 'Production / Network server' },
|
|
248
|
+
{ value: 'local', label: 'Local machine' }
|
|
249
|
+
],
|
|
250
|
+
initialValue: cfg.mode === 'production' ? 'production' : 'local'
|
|
251
|
+
});
|
|
252
|
+
if (clack.isCancel(mode)) cancelAndExit();
|
|
253
|
+
cfg.mode = mode;
|
|
254
|
+
|
|
255
|
+
const useDefaults = await clack.confirm({
|
|
256
|
+
message:
|
|
257
|
+
'Use the default ports (backend 3001, frontend 3002)? ' +
|
|
258
|
+
'Any process already using those ports will be stopped.'
|
|
259
|
+
});
|
|
260
|
+
if (clack.isCancel(useDefaults)) cancelAndExit();
|
|
261
|
+
|
|
262
|
+
if (useDefaults) {
|
|
263
|
+
cfg.backendPort = '3001';
|
|
264
|
+
cfg.frontendPort = '3002';
|
|
265
|
+
cfg.clearPorts = true;
|
|
266
|
+
clack.log.warn(
|
|
267
|
+
'Ports 3001 and 3002 will be freed before Plum starts. ' +
|
|
268
|
+
'The database runs inside Docker and is not affected.'
|
|
269
|
+
);
|
|
270
|
+
} else {
|
|
271
|
+
cfg.backendPort = await promptPort('Backend port', cfg.backendPort, () => {
|
|
272
|
+
cfg.clearPorts = true;
|
|
273
|
+
});
|
|
274
|
+
cfg.frontendPort = await promptPort('Frontend (UI) port', cfg.frontendPort, () => {
|
|
275
|
+
cfg.clearPorts = true;
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (mode === 'production') {
|
|
280
|
+
cfg.apiUrl = await promptPublicUrl(
|
|
281
|
+
'Public URL of the Plum backend / API',
|
|
282
|
+
cfg.apiUrl || `http://localhost:${cfg.backendPort}`
|
|
283
|
+
);
|
|
284
|
+
cfg.uiUrl = await promptPublicUrl(
|
|
285
|
+
'Public URL of the Plum UI (frontend)',
|
|
286
|
+
cfg.uiUrl || `http://localhost:${cfg.frontendPort}`
|
|
287
|
+
);
|
|
288
|
+
} else {
|
|
289
|
+
cfg.apiUrl = `http://localhost:${cfg.backendPort}`;
|
|
290
|
+
cfg.uiUrl = `http://localhost:${cfg.frontendPort}`;
|
|
291
|
+
}
|
|
292
|
+
|
|
200
293
|
const headless = await clack.confirm({
|
|
201
294
|
message: 'Run browsers headless?',
|
|
202
295
|
initialValue: cfg.headless
|
|
203
296
|
});
|
|
204
297
|
if (clack.isCancel(headless)) cancelAndExit();
|
|
205
298
|
cfg.headless = headless;
|
|
206
|
-
|
|
207
|
-
const backendPort = await clack.text({
|
|
208
|
-
message: 'Backend port',
|
|
209
|
-
placeholder: String(cfg.backendPort),
|
|
210
|
-
defaultValue: String(cfg.backendPort)
|
|
211
|
-
});
|
|
212
|
-
if (clack.isCancel(backendPort)) cancelAndExit();
|
|
213
|
-
cfg.backendPort = backendPort || cfg.backendPort;
|
|
214
|
-
|
|
215
|
-
const frontendPort = await clack.text({
|
|
216
|
-
message: 'Frontend (UI) port',
|
|
217
|
-
placeholder: String(cfg.frontendPort),
|
|
218
|
-
defaultValue: String(cfg.frontendPort)
|
|
219
|
-
});
|
|
220
|
-
if (clack.isCancel(frontendPort)) cancelAndExit();
|
|
221
|
-
cfg.frontendPort = frontendPort || cfg.frontendPort;
|
|
222
|
-
|
|
223
|
-
const defaultApiUrl = `http://localhost:${cfg.backendPort}`;
|
|
224
|
-
const apiUrl = await clack.text({
|
|
225
|
-
message: 'Public URL for the API (only if reverse-proxying behind a domain)',
|
|
226
|
-
placeholder: cfg.apiUrl || defaultApiUrl,
|
|
227
|
-
defaultValue: cfg.apiUrl || defaultApiUrl
|
|
228
|
-
});
|
|
229
|
-
if (clack.isCancel(apiUrl)) cancelAndExit();
|
|
230
|
-
cfg.apiUrl = apiUrl || defaultApiUrl;
|
|
231
|
-
|
|
232
|
-
const defaultUiUrl = `http://localhost:${cfg.frontendPort}`;
|
|
233
|
-
const uiUrl = await clack.text({
|
|
234
|
-
message: 'Public URL for the UI (only if reverse-proxying behind a domain)',
|
|
235
|
-
placeholder: cfg.uiUrl || defaultUiUrl,
|
|
236
|
-
defaultValue: cfg.uiUrl || defaultUiUrl
|
|
237
|
-
});
|
|
238
|
-
if (clack.isCancel(uiUrl)) cancelAndExit();
|
|
239
|
-
cfg.uiUrl = uiUrl || defaultUiUrl;
|
|
240
299
|
} else {
|
|
300
|
+
if (!cfg.mode) cfg.mode = 'local';
|
|
241
301
|
if (!cfg.apiUrl) cfg.apiUrl = `http://localhost:${cfg.backendPort}`;
|
|
242
302
|
if (!cfg.uiUrl) cfg.uiUrl = `http://localhost:${cfg.frontendPort}`;
|
|
243
303
|
}
|
|
@@ -371,6 +431,19 @@ async function runFirstUserSetup(apiBase, uiUrl) {
|
|
|
371
431
|
}
|
|
372
432
|
}
|
|
373
433
|
|
|
434
|
+
// A stale process on the backend/frontend port fails the whole stack with a
|
|
435
|
+
// bind error — clear it before `docker compose up`.
|
|
436
|
+
async function clearServerPorts(cfg) {
|
|
437
|
+
const { findPidOnPort, killPort } = runnerProcessLib();
|
|
438
|
+
for (const port of [cfg.backendPort, cfg.frontendPort]) {
|
|
439
|
+
const p = Number(port);
|
|
440
|
+
if (findPidOnPort(p)) {
|
|
441
|
+
clack.log.step(`Freeing port ${port}…`);
|
|
442
|
+
await killPort(p);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
374
447
|
// docker compose failures (port conflicts, daemon not running, etc.) must not
|
|
375
448
|
// crash the process with a raw stack trace — that would abort serverStart()
|
|
376
449
|
// before it ever reaches the first-user prompt, with no indication why.
|
|
@@ -402,6 +475,8 @@ async function serverStart() {
|
|
|
402
475
|
applyServerConfig(cfg);
|
|
403
476
|
clack.log.info(`UI: ${pc.cyan(cfg.uiUrl)}`);
|
|
404
477
|
|
|
478
|
+
if (cfg.clearPorts) await clearServerPorts(cfg);
|
|
479
|
+
|
|
405
480
|
if (!runDockerComposeUp(cfg)) {
|
|
406
481
|
clack.outro(pc.red('Plum did not start.'));
|
|
407
482
|
process.exitCode = 1;
|
|
@@ -623,9 +698,10 @@ async function configureNode({ force, name: nameArg }) {
|
|
|
623
698
|
!name &&
|
|
624
699
|
!anyFlags(args, ['--primary', '--url', '--port', '--token', '--browser']));
|
|
625
700
|
|
|
701
|
+
// Name first — the saved config for that name seeds the other defaults.
|
|
626
702
|
if (!name && interactive) {
|
|
627
703
|
const v = await clack.text({
|
|
628
|
-
message: '
|
|
704
|
+
message: 'Node name or alias — call it whatever you like',
|
|
629
705
|
placeholder: 'node-1',
|
|
630
706
|
defaultValue: 'node-1'
|
|
631
707
|
});
|
|
@@ -636,6 +712,7 @@ async function configureNode({ force, name: nameArg }) {
|
|
|
636
712
|
|
|
637
713
|
const saved = loadNodeByName(name);
|
|
638
714
|
|
|
715
|
+
let mode = getFlag(args, '--mode') ?? saved.mode ?? 'local';
|
|
639
716
|
let primary = getFlag(args, '--primary') ?? process.env.PRIMARY_URL ?? saved.primary ?? '';
|
|
640
717
|
// Not 3001 — that's the primary's default; a co-located node must not collide.
|
|
641
718
|
let port = getFlag(args, '--port') ?? saved.port ?? '3002';
|
|
@@ -644,32 +721,58 @@ async function configureNode({ force, name: nameArg }) {
|
|
|
644
721
|
let url = getFlag(args, '--url') ?? saved.url ?? '';
|
|
645
722
|
|
|
646
723
|
if (interactive) {
|
|
647
|
-
const
|
|
648
|
-
message: '
|
|
649
|
-
|
|
650
|
-
|
|
724
|
+
const modeVal = await clack.select({
|
|
725
|
+
message: 'Is this node for a production / network setup, or this local machine?',
|
|
726
|
+
options: [
|
|
727
|
+
{ value: 'production', label: 'Production / Network' },
|
|
728
|
+
{ value: 'local', label: 'Local machine' }
|
|
729
|
+
],
|
|
730
|
+
initialValue: mode === 'production' ? 'production' : 'local'
|
|
651
731
|
});
|
|
652
|
-
if (clack.isCancel(
|
|
653
|
-
|
|
732
|
+
if (clack.isCancel(modeVal)) cancelAndExit();
|
|
733
|
+
mode = modeVal;
|
|
734
|
+
|
|
735
|
+
if (mode === 'production') {
|
|
736
|
+
primary = await promptPublicUrl(
|
|
737
|
+
'Plum server backend URL or IP address (include the port)',
|
|
738
|
+
primary || 'https://plum.example.com'
|
|
739
|
+
);
|
|
740
|
+
} else {
|
|
741
|
+
const bp = await clack.text({
|
|
742
|
+
message:
|
|
743
|
+
'Port your Plum backend runs on (default 3001 — if you changed it or are unsure, ' +
|
|
744
|
+
'run `docker compose ps` or check Docker Desktop on the server machine)',
|
|
745
|
+
placeholder: '3001',
|
|
746
|
+
defaultValue: '3001'
|
|
747
|
+
});
|
|
748
|
+
if (clack.isCancel(bp)) cancelAndExit();
|
|
749
|
+
primary = `http://localhost:${(bp || '3001').trim()}`;
|
|
750
|
+
}
|
|
654
751
|
|
|
655
752
|
const portVal = await clack.text({
|
|
656
|
-
message:
|
|
753
|
+
message:
|
|
754
|
+
'Port this node will listen on — it runs there, and any process already using ' +
|
|
755
|
+
'that port is stopped when the node starts',
|
|
657
756
|
placeholder: port,
|
|
658
757
|
defaultValue: port
|
|
659
758
|
});
|
|
660
759
|
if (clack.isCancel(portVal)) cancelAndExit();
|
|
661
|
-
port = portVal || port;
|
|
760
|
+
port = (portVal || port).trim();
|
|
662
761
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
|
|
762
|
+
if (mode === 'production') {
|
|
763
|
+
url = await promptPublicUrl(
|
|
764
|
+
'URL your Plum server uses to reach this node (e.g. https://node-1.example.com)',
|
|
765
|
+
url && !url.includes('host.docker.internal') ? url : 'https://node-1.example.com'
|
|
766
|
+
);
|
|
767
|
+
} else {
|
|
768
|
+
// Local primary runs in Docker — it reaches a host node via
|
|
769
|
+
// host.docker.internal, not localhost.
|
|
770
|
+
url = `http://host.docker.internal:${port}`;
|
|
771
|
+
clack.log.info(`This node will register with the server as ${pc.cyan(url)}`);
|
|
772
|
+
}
|
|
671
773
|
}
|
|
672
774
|
|
|
775
|
+
// Flag path with no --url: fall back to the LAN-IP guess (interactive already set it).
|
|
673
776
|
if (!url) url = `http://${detectLanIp()}:${port}`;
|
|
674
777
|
|
|
675
778
|
if (!VALID_BROWSERS.includes(browser)) {
|
|
@@ -680,6 +783,7 @@ async function configureNode({ force, name: nameArg }) {
|
|
|
680
783
|
saveNodeByName(name, {
|
|
681
784
|
id: saved.id ?? null,
|
|
682
785
|
name,
|
|
786
|
+
mode,
|
|
683
787
|
url,
|
|
684
788
|
token,
|
|
685
789
|
primary,
|
|
@@ -688,7 +792,7 @@ async function configureNode({ force, name: nameArg }) {
|
|
|
688
792
|
pid: saved.pid ?? null
|
|
689
793
|
});
|
|
690
794
|
globalRegistryLib().registerInstall('node', nodeHome(name));
|
|
691
|
-
return { primary, port, browser, token, name, url };
|
|
795
|
+
return { primary, port, browser, token, name, url, mode };
|
|
692
796
|
}
|
|
693
797
|
|
|
694
798
|
async function registerNode({ primary, name, url, token, browser, port }) {
|
|
@@ -725,7 +829,7 @@ async function registerNode({ primary, name, url, token, browser, port }) {
|
|
|
725
829
|
}
|
|
726
830
|
|
|
727
831
|
// Register a node with the primary and start its process here — this is the one
|
|
728
|
-
// path both `plum node start` and manage-
|
|
832
|
+
// path both `plum node start` and manage-nodes' "Add new node" run.
|
|
729
833
|
async function bringNodeUp(cfg) {
|
|
730
834
|
const { prepareEnv, startNode, findPidOnPort, killPort, nodeReachable } = runnerProcessLib();
|
|
731
835
|
|
|
@@ -773,7 +877,7 @@ async function bringNodeUp(cfg) {
|
|
|
773
877
|
}
|
|
774
878
|
|
|
775
879
|
async function nodeStart({ reconfig, name }) {
|
|
776
|
-
clack.intro(pc.bgMagenta(pc.white(' 🟣 Plum — Node
|
|
880
|
+
clack.intro(pc.bgMagenta(pc.white(' 🟣 Plum — Node ')));
|
|
777
881
|
migrateLegacyNodes();
|
|
778
882
|
const cfg = await configureNode({ force: reconfig, name });
|
|
779
883
|
await bringNodeUp(cfg);
|
|
@@ -917,8 +1021,8 @@ function readRunnerTokenFromPrimary() {
|
|
|
917
1021
|
return null;
|
|
918
1022
|
}
|
|
919
1023
|
|
|
920
|
-
async function
|
|
921
|
-
const manageScript = path.join(plumRoot, 'backend', 'scripts', 'manage-
|
|
1024
|
+
async function openManageNodesMenu(primaryUrl) {
|
|
1025
|
+
const manageScript = path.join(plumRoot, 'backend', 'scripts', 'manage-nodes.mjs');
|
|
922
1026
|
const apiUrl = primaryUrl || 'http://localhost:3001';
|
|
923
1027
|
const env = { ...process.env, PLUM_API_URL: apiUrl };
|
|
924
1028
|
if (!env.PLUM_RUNNER_TOKEN) {
|
|
@@ -1059,7 +1163,7 @@ switch (command) {
|
|
|
1059
1163
|
' ```bash',
|
|
1060
1164
|
' plum start',
|
|
1061
1165
|
' ```',
|
|
1062
|
-
' On first run, Plum asks you to create an admin account. Then open **http://localhost:
|
|
1166
|
+
' On first run, Plum asks you to create an admin account. Then open **http://localhost:3002** and sign in.',
|
|
1063
1167
|
'',
|
|
1064
1168
|
'---',
|
|
1065
1169
|
'',
|
|
@@ -1075,7 +1179,7 @@ switch (command) {
|
|
|
1075
1179
|
'| `plum server reconfig` | Change server URL/ports without starting |',
|
|
1076
1180
|
'| `plum stop` | Stop the server |',
|
|
1077
1181
|
'| `plum create-step` | Interactively generate a new step definition |',
|
|
1078
|
-
'| `plum node start <name>` | Register a
|
|
1182
|
+
'| `plum node start <name>` | Register a node and start it here |',
|
|
1079
1183
|
'| `plum node list` | List this machine’s nodes |',
|
|
1080
1184
|
'',
|
|
1081
1185
|
'---',
|
|
@@ -1201,14 +1305,14 @@ switch (command) {
|
|
|
1201
1305
|
|
|
1202
1306
|
case 'start':
|
|
1203
1307
|
console.log(
|
|
1204
|
-
`\nSpecify what to start:\n ${pc.cyan('plum server start')} — start the web UI stack (Docker)\n ${pc.cyan('plum node start')} — start a
|
|
1308
|
+
`\nSpecify what to start:\n ${pc.cyan('plum server start')} — start the web UI stack (Docker)\n ${pc.cyan('plum node start')} — start a node\n`
|
|
1205
1309
|
);
|
|
1206
1310
|
process.exit(1);
|
|
1207
1311
|
break;
|
|
1208
1312
|
|
|
1209
1313
|
case 'restart':
|
|
1210
1314
|
console.log(
|
|
1211
|
-
`\nSpecify what to restart:\n ${pc.cyan('plum server restart')} — rebuild and restart the server\n ${pc.cyan('plum node restart')} — restart the
|
|
1315
|
+
`\nSpecify what to restart:\n ${pc.cyan('plum server restart')} — rebuild and restart the server\n ${pc.cyan('plum node restart')} — restart the node\n`
|
|
1212
1316
|
);
|
|
1213
1317
|
process.exit(1);
|
|
1214
1318
|
break;
|
|
@@ -1309,7 +1413,7 @@ switch (command) {
|
|
|
1309
1413
|
|
|
1310
1414
|
case 'stop':
|
|
1311
1415
|
console.log(
|
|
1312
|
-
`\nSpecify what to stop:\n ${pc.cyan('plum server stop')} — stop the web UI stack\n ${pc.cyan('plum node stop')} — stop the
|
|
1416
|
+
`\nSpecify what to stop:\n ${pc.cyan('plum server stop')} — stop the web UI stack\n ${pc.cyan('plum node stop')} — stop the node\n`
|
|
1313
1417
|
);
|
|
1314
1418
|
process.exit(1);
|
|
1315
1419
|
break;
|
|
@@ -1329,7 +1433,7 @@ switch (command) {
|
|
|
1329
1433
|
' delete <name> stop it, delete its config, unregister it from the primary',
|
|
1330
1434
|
' reconfig [name] re-enter settings and re-register, without starting',
|
|
1331
1435
|
'',
|
|
1332
|
-
' Options for start: --primary <url> --url <url> --port <n> --token <s> --browser <chromium|firefox>',
|
|
1436
|
+
' Options for start: --mode <local|production> --primary <url> --url <url> --port <n> --token <s> --browser <chromium|firefox>',
|
|
1333
1437
|
''
|
|
1334
1438
|
].join('\n')
|
|
1335
1439
|
);
|
|
@@ -1368,7 +1472,7 @@ switch (command) {
|
|
|
1368
1472
|
break;
|
|
1369
1473
|
}
|
|
1370
1474
|
|
|
1371
|
-
case 'manage-
|
|
1475
|
+
case 'manage-nodes': {
|
|
1372
1476
|
const { listNodeNames, loadNodeByName } = nodeRegisterLib();
|
|
1373
1477
|
const firstNode = listNodeNames()
|
|
1374
1478
|
.map(loadNodeByName)
|
|
@@ -1378,7 +1482,7 @@ switch (command) {
|
|
|
1378
1482
|
process.env.PLUM_API_URL ??
|
|
1379
1483
|
firstNode?.primary ??
|
|
1380
1484
|
'http://localhost:3001';
|
|
1381
|
-
await
|
|
1485
|
+
await openManageNodesMenu(primaryUrl);
|
|
1382
1486
|
break;
|
|
1383
1487
|
}
|
|
1384
1488
|
|
|
@@ -1415,8 +1519,9 @@ switch (command) {
|
|
|
1415
1519
|
console.log(' init Set up a new Plum project');
|
|
1416
1520
|
console.log(' server start Start the full UI stack (interactive)');
|
|
1417
1521
|
console.log(' --headless <bool> Run browsers headless (true/false)');
|
|
1522
|
+
console.log(' --mode <m> local | production (default: local)');
|
|
1418
1523
|
console.log(' --backend-port <n> Host port for the backend/API (default: 3001)');
|
|
1419
|
-
console.log(' --frontend-port <n> Host port for the UI (default:
|
|
1524
|
+
console.log(' --frontend-port <n> Host port for the UI (default: 3002)');
|
|
1420
1525
|
console.log(
|
|
1421
1526
|
' --api-url <url> Public URL for the API (only if reverse-proxying; default: http://localhost:<backend-port>)'
|
|
1422
1527
|
);
|
|
@@ -1430,10 +1535,11 @@ switch (command) {
|
|
|
1430
1535
|
' update Update Plum and restart whichever is running (server/node)'
|
|
1431
1536
|
);
|
|
1432
1537
|
console.log(' node start [name] Register a node with the primary and start it here');
|
|
1538
|
+
console.log(' --mode <m> local | production (default: local)');
|
|
1433
1539
|
console.log(' --primary <url> Primary Plum server to register with');
|
|
1434
|
-
console.log(' --url <url> Address the primary calls back (default:
|
|
1540
|
+
console.log(' --url <url> Address the primary calls back (default, local mode:');
|
|
1435
1541
|
console.log(
|
|
1436
|
-
'
|
|
1542
|
+
' http://host.docker.internal:<port>; production: pass a domain)'
|
|
1437
1543
|
);
|
|
1438
1544
|
console.log(' --port <n> Local HTTP port the node listens on (default: 3002)');
|
|
1439
1545
|
console.log(' --token <secret> Auth token (auto-generated + saved if omitted)');
|
|
@@ -1447,7 +1553,7 @@ switch (command) {
|
|
|
1447
1553
|
console.log(
|
|
1448
1554
|
' node reconfig [name] Re-enter a node’s settings and re-register, without starting'
|
|
1449
1555
|
);
|
|
1450
|
-
console.log(' manage-
|
|
1556
|
+
console.log(' manage-nodes Open the node management menu');
|
|
1451
1557
|
console.log(
|
|
1452
1558
|
' --primary <url> Primary server URL (default: saved config or localhost:3001)'
|
|
1453
1559
|
);
|
package/docker-compose.yml
CHANGED
|
@@ -39,6 +39,21 @@
|
|
|
39
39
|
"_app/immutable/assets/Badge.D1SV0Gv7.css"
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
|
+
"_Button.C1zsJAUG.css": {
|
|
43
|
+
"file": "_app/immutable/assets/Button.C1zsJAUG.css",
|
|
44
|
+
"src": "_Button.C1zsJAUG.css"
|
|
45
|
+
},
|
|
46
|
+
"_Button.js": {
|
|
47
|
+
"file": "chunks/Button.js",
|
|
48
|
+
"name": "Button",
|
|
49
|
+
"imports": [
|
|
50
|
+
"_index.js",
|
|
51
|
+
"_attributes.js"
|
|
52
|
+
],
|
|
53
|
+
"css": [
|
|
54
|
+
"_app/immutable/assets/Button.C1zsJAUG.css"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
42
57
|
"_ConfirmModal.Dd3uP-Sk.css": {
|
|
43
58
|
"file": "_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css",
|
|
44
59
|
"src": "_ConfirmModal.Dd3uP-Sk.css"
|
|
@@ -74,6 +89,10 @@
|
|
|
74
89
|
"_app/immutable/assets/EmptyState.DUDM4P19.css"
|
|
75
90
|
]
|
|
76
91
|
},
|
|
92
|
+
"_ExportMenu.DsJQ1Qua.css": {
|
|
93
|
+
"file": "_app/immutable/assets/ExportMenu.DsJQ1Qua.css",
|
|
94
|
+
"src": "_ExportMenu.DsJQ1Qua.css"
|
|
95
|
+
},
|
|
77
96
|
"_Modal.BuaCfdLj.css": {
|
|
78
97
|
"file": "_app/immutable/assets/Modal.BuaCfdLj.css",
|
|
79
98
|
"src": "_Modal.BuaCfdLj.css"
|
|
@@ -94,22 +113,6 @@
|
|
|
94
113
|
"file": "_app/immutable/assets/Pagination.DZmi2Po-.css",
|
|
95
114
|
"src": "_Pagination.DZmi2Po-.css"
|
|
96
115
|
},
|
|
97
|
-
"_Toast.DENwYn3g.css": {
|
|
98
|
-
"file": "_app/immutable/assets/Toast.DENwYn3g.css",
|
|
99
|
-
"src": "_Toast.DENwYn3g.css"
|
|
100
|
-
},
|
|
101
|
-
"_Toast.js": {
|
|
102
|
-
"file": "chunks/Toast.js",
|
|
103
|
-
"name": "Toast",
|
|
104
|
-
"imports": [
|
|
105
|
-
"_index.js",
|
|
106
|
-
"_attributes.js",
|
|
107
|
-
"_escaping.js"
|
|
108
|
-
],
|
|
109
|
-
"css": [
|
|
110
|
-
"_app/immutable/assets/Toast.DENwYn3g.css"
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
116
|
"_attributes.js": {
|
|
114
117
|
"file": "chunks/attributes.js",
|
|
115
118
|
"name": "attributes",
|
|
@@ -273,7 +276,7 @@
|
|
|
273
276
|
"_format.js"
|
|
274
277
|
],
|
|
275
278
|
"css": [
|
|
276
|
-
"_app/immutable/assets/_layout.
|
|
279
|
+
"_app/immutable/assets/_layout.B4TT3qNx.css",
|
|
277
280
|
"_app/immutable/assets/Modal.BuaCfdLj.css",
|
|
278
281
|
"_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css",
|
|
279
282
|
"_app/immutable/assets/Badge.D1SV0Gv7.css"
|
|
@@ -375,12 +378,13 @@
|
|
|
375
378
|
"_stores.js",
|
|
376
379
|
"_format.js",
|
|
377
380
|
"_reports2.js",
|
|
378
|
-
"
|
|
379
|
-
"
|
|
381
|
+
"_escaping.js",
|
|
382
|
+
"_BackLink.js"
|
|
380
383
|
],
|
|
381
384
|
"css": [
|
|
382
|
-
"_app/immutable/assets/_page.
|
|
383
|
-
"_app/immutable/assets/Badge.D1SV0Gv7.css"
|
|
385
|
+
"_app/immutable/assets/_page.4bPj83tb.css",
|
|
386
|
+
"_app/immutable/assets/Badge.D1SV0Gv7.css",
|
|
387
|
+
"_app/immutable/assets/ExportMenu.DsJQ1Qua.css"
|
|
384
388
|
]
|
|
385
389
|
},
|
|
386
390
|
"src/routes/scheduled-tests/+page.svelte": {
|
|
@@ -395,13 +399,13 @@
|
|
|
395
399
|
"_runner.js",
|
|
396
400
|
"_common.js",
|
|
397
401
|
"_format.js",
|
|
398
|
-
"
|
|
402
|
+
"_Button.js",
|
|
399
403
|
"_Badge.js",
|
|
400
404
|
"_Modal.js",
|
|
401
405
|
"_ConfirmModal.js",
|
|
406
|
+
"_attributes.js",
|
|
402
407
|
"_EmptyState.js",
|
|
403
|
-
"_escaping.js"
|
|
404
|
-
"_attributes.js"
|
|
408
|
+
"_escaping.js"
|
|
405
409
|
],
|
|
406
410
|
"css": [
|
|
407
411
|
"_app/immutable/assets/_page.CBHi6pzT.css"
|
|
@@ -415,11 +419,13 @@
|
|
|
415
419
|
"imports": [
|
|
416
420
|
"_index.js",
|
|
417
421
|
"_client.js",
|
|
422
|
+
"_stores.js",
|
|
418
423
|
"_constants.js",
|
|
419
424
|
"_auth.js",
|
|
420
425
|
"_runner.js",
|
|
421
426
|
"_theme.js",
|
|
422
|
-
"
|
|
427
|
+
"_Button.js",
|
|
428
|
+
"_index2.js",
|
|
423
429
|
"_ConfirmModal.js",
|
|
424
430
|
"_Badge.js",
|
|
425
431
|
"_common.js",
|
|
@@ -427,7 +433,7 @@
|
|
|
427
433
|
"_attributes.js"
|
|
428
434
|
],
|
|
429
435
|
"css": [
|
|
430
|
-
"_app/immutable/assets/_page.
|
|
436
|
+
"_app/immutable/assets/_page.DOC8fPSI.css"
|
|
431
437
|
]
|
|
432
438
|
},
|
|
433
439
|
"src/routes/setup/+page.svelte": {
|
|
@@ -457,18 +463,19 @@
|
|
|
457
463
|
"_index.js",
|
|
458
464
|
"_constants.js",
|
|
459
465
|
"_auth.js",
|
|
466
|
+
"_common.js",
|
|
467
|
+
"_attributes.js",
|
|
468
|
+
"_escaping.js",
|
|
469
|
+
"_repository.js",
|
|
460
470
|
"_runner.js",
|
|
461
471
|
"_EmptyState.js",
|
|
462
472
|
"_ConfirmModal.js",
|
|
463
473
|
"_Modal.js",
|
|
464
|
-
"
|
|
465
|
-
"_common.js",
|
|
466
|
-
"_repository.js",
|
|
467
|
-
"_escaping.js",
|
|
468
|
-
"_attributes.js"
|
|
474
|
+
"_Button.js"
|
|
469
475
|
],
|
|
470
476
|
"css": [
|
|
471
|
-
"_app/immutable/assets/_page.
|
|
477
|
+
"_app/immutable/assets/_page.BwgtEi_a.css",
|
|
478
|
+
"_app/immutable/assets/ExportMenu.DsJQ1Qua.css",
|
|
472
479
|
"_app/immutable/assets/Pagination.DZmi2Po-.css"
|
|
473
480
|
]
|
|
474
481
|
},
|
|
@@ -482,12 +489,12 @@
|
|
|
482
489
|
"_stores.js",
|
|
483
490
|
"_auth.js",
|
|
484
491
|
"_runner.js",
|
|
485
|
-
"
|
|
492
|
+
"_Button.js",
|
|
486
493
|
"_Modal.js",
|
|
494
|
+
"_attributes.js",
|
|
487
495
|
"_common.js",
|
|
488
496
|
"_repository.js",
|
|
489
|
-
"_escaping.js"
|
|
490
|
-
"_attributes.js"
|
|
497
|
+
"_escaping.js"
|
|
491
498
|
],
|
|
492
499
|
"css": [
|
|
493
500
|
"_app/immutable/assets/_page.BWAH0Beh.css",
|
|
@@ -505,15 +512,16 @@
|
|
|
505
512
|
"_constants.js",
|
|
506
513
|
"_auth.js",
|
|
507
514
|
"_common.js",
|
|
515
|
+
"_repository.js",
|
|
508
516
|
"_ConfirmModal.js",
|
|
509
517
|
"_Modal.js",
|
|
510
|
-
"
|
|
511
|
-
"
|
|
512
|
-
"_escaping.js"
|
|
513
|
-
"_attributes.js"
|
|
518
|
+
"_attributes.js",
|
|
519
|
+
"_Button.js",
|
|
520
|
+
"_escaping.js"
|
|
514
521
|
],
|
|
515
522
|
"css": [
|
|
516
|
-
"_app/immutable/assets/_page.
|
|
523
|
+
"_app/immutable/assets/_page.Dm1nSEgE.css",
|
|
524
|
+
"_app/immutable/assets/ExportMenu.DsJQ1Qua.css",
|
|
517
525
|
"_app/immutable/assets/EmptyState.DUDM4P19.css",
|
|
518
526
|
"_app/immutable/assets/Pagination.DZmi2Po-.css"
|
|
519
527
|
]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Licensed under the MIT License. See LICENSE file in the project root for details.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
.btn.svelte-m1euen{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font-family:var(--font-body);font-weight:400;border-radius:var(--radius-md);border:1px solid transparent;cursor:pointer;white-space:nowrap;text-decoration:none;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out),opacity var(--duration-fast)}.btn.svelte-m1euen:active:not(:disabled){transform:scale(.97)}.btn.svelte-m1euen:disabled{opacity:.38;cursor:not-allowed}.sm.svelte-m1euen{font-size:.75rem;padding:.3rem .75rem;border-radius:var(--radius-sm)}.md.svelte-m1euen{font-size:.875rem;padding:.55rem 1.25rem}.primary.svelte-m1euen{background:var(--accent);color:var(--white);border-color:var(--accent)}.primary.svelte-m1euen:hover:not(:disabled){filter:brightness(1.12);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 30%,transparent)}.ghost.svelte-m1euen{background:transparent;color:var(--text-muted);border-color:var(--border)}.ghost.svelte-m1euen:hover:not(:disabled){background:var(--bg-subtle);color:var(--text);border-color:var(--text-muted)}.danger.svelte-m1euen{background:transparent;color:var(--fail);border-color:var(--fail)}.danger.svelte-m1euen:hover:not(:disabled){background:var(--fail-soft)}.outline.svelte-m1euen{background:transparent;color:var(--accent);border-color:var(--accent)}.outline.svelte-m1euen:hover:not(:disabled){background:var(--accent-soft)}
|
|
6
|
+
.btn.svelte-m1euen{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font-family:var(--font-body);font-weight:400;border-radius:var(--radius-md);border:1px solid transparent;cursor:pointer;white-space:nowrap;text-decoration:none;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out),opacity var(--duration-fast)}.btn.svelte-m1euen:active:not(:disabled){transform:scale(.97)}.btn.svelte-m1euen:disabled{opacity:.38;cursor:not-allowed}.sm.svelte-m1euen{font-size:.75rem;padding:.3rem .75rem;border-radius:var(--radius-sm)}.md.svelte-m1euen{font-size:.875rem;padding:.55rem 1.25rem}.primary.svelte-m1euen{background:var(--accent);color:var(--white);border-color:var(--accent)}.primary.svelte-m1euen:hover:not(:disabled){filter:brightness(1.12);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 30%,transparent)}.ghost.svelte-m1euen{background:transparent;color:var(--text-muted);border-color:var(--border)}.ghost.svelte-m1euen:hover:not(:disabled){background:var(--bg-subtle);color:var(--text);border-color:var(--text-muted)}.danger.svelte-m1euen{background:transparent;color:var(--fail);border-color:var(--fail)}.danger.svelte-m1euen:hover:not(:disabled){background:var(--fail-soft)}.outline.svelte-m1euen{background:transparent;color:var(--accent);border-color:var(--accent)}.outline.svelte-m1euen:hover:not(:disabled){background:var(--accent-soft)}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of Plum.
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root for details.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.export-menu.svelte-uuhpp9{position:relative;display:inline-flex}.trigger.svelte-uuhpp9{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-body);font-size:.875rem;padding:.55rem 1rem;background:transparent;color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out)}.trigger.svelte-uuhpp9:hover:not(:disabled),.trigger.open.svelte-uuhpp9{background:var(--bg-subtle);color:var(--text);border-color:var(--text-muted)}.trigger.svelte-uuhpp9:disabled{opacity:.38;cursor:not-allowed}.popover.svelte-uuhpp9{position:absolute;top:calc(100% + 6px);right:0;min-width:12rem;padding:.3rem;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:0 8px 28px #00000021;z-index:50;display:flex;flex-direction:column;gap:1px}.popover.left.svelte-uuhpp9{right:auto;left:0}.item.svelte-uuhpp9{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;width:100%;padding:.5rem .65rem;background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;text-align:left}.item.svelte-uuhpp9:hover{background:var(--bg-subtle)}.item-label.svelte-uuhpp9{font-size:.85rem;color:var(--text)}.item-hint.svelte-uuhpp9{font-size:.72rem;color:var(--text-muted)}
|