local-serverless-stack 0.9.0 → 0.11.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/CHANGELOG.md +21 -3
- package/dist/client/namespaces/lambdas.d.ts +1 -0
- package/dist/client/namespaces/lambdas.d.ts.map +1 -1
- package/dist/client/namespaces/lambdas.js.map +1 -1
- package/dist/server/engine/backends/self-backend.d.ts.map +1 -1
- package/dist/server/engine/backends/self-backend.js +4 -2
- package/dist/server/engine/backends/self-backend.js.map +1 -1
- package/dist/server/engine/emulators/dynamodb/index.d.ts +8 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/dynamodb/index.js +208 -7
- package/dist/server/engine/emulators/dynamodb/index.js.map +1 -1
- package/dist/server/engine/emulators/dynamodb/transactions.d.ts +35 -0
- package/dist/server/engine/emulators/dynamodb/transactions.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/transactions.js +153 -0
- package/dist/server/engine/emulators/dynamodb/transactions.js.map +1 -0
- package/dist/server/engine/emulators/events/index.js +2 -2
- package/dist/server/engine/emulators/events/index.js.map +1 -1
- package/dist/server/engine/emulators/lambda-ctl/index.js +5 -5
- package/dist/server/engine/emulators/lambda-ctl/index.js.map +1 -1
- package/dist/server/engine/emulators/opensearch/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/opensearch/index.js +5 -4
- package/dist/server/engine/emulators/opensearch/index.js.map +1 -1
- package/dist/server/engine/emulators/s3/index.d.ts +2 -0
- package/dist/server/engine/emulators/s3/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/s3/index.js +91 -5
- package/dist/server/engine/emulators/s3/index.js.map +1 -1
- package/dist/server/engine/emulators/s3/multipart.d.ts +9 -0
- package/dist/server/engine/emulators/s3/multipart.d.ts.map +1 -0
- package/dist/server/engine/emulators/s3/multipart.js +88 -0
- package/dist/server/engine/emulators/s3/multipart.js.map +1 -0
- package/dist/server/engine/emulators/secretsmanager/index.d.ts +29 -0
- package/dist/server/engine/emulators/secretsmanager/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/secretsmanager/index.js +450 -0
- package/dist/server/engine/emulators/secretsmanager/index.js.map +1 -0
- package/dist/server/engine/emulators/sns/index.js +2 -2
- package/dist/server/engine/emulators/sns/index.js.map +1 -1
- package/dist/server/engine/emulators/sqs/index.js +2 -2
- package/dist/server/engine/emulators/sqs/index.js.map +1 -1
- package/dist/server/engine/emulators/sts.js +2 -2
- package/dist/server/engine/emulators/sts.js.map +1 -1
- package/dist/server/engine/http/errors.d.ts +1 -0
- package/dist/server/engine/http/errors.d.ts.map +1 -1
- package/dist/server/engine/http/errors.js +12 -0
- package/dist/server/engine/http/errors.js.map +1 -1
- package/dist/server/engine/http/router.d.ts.map +1 -1
- package/dist/server/engine/http/router.js +4 -0
- package/dist/server/engine/http/router.js.map +1 -1
- package/dist/server/engine/types.d.ts +1 -1
- package/dist/server/engine/types.d.ts.map +1 -1
- package/dist/server/runtime/log-capture.d.ts +7 -0
- package/dist/server/runtime/log-capture.d.ts.map +1 -0
- package/dist/server/runtime/log-capture.js +206 -0
- package/dist/server/runtime/log-capture.js.map +1 -0
- package/dist/server/runtime/runtime-worker.js +23 -14
- package/dist/server/runtime/runtime-worker.js.map +1 -1
- package/dist/server/services/lambda-runtime-manager.d.ts +2 -0
- package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -1
- package/dist/server/services/lambda-runtime-manager.js +19 -1
- package/dist/server/services/lambda-runtime-manager.js.map +1 -1
- package/dist/ui/assets/{ApisPage-C0xaNFQW.js → ApisPage-DyjG-weG.js} +1 -1
- package/dist/ui/assets/{BucketDetailPage-Bnny8S04.js → BucketDetailPage-Bvrk1L6q.js} +1 -1
- package/dist/ui/assets/{BucketsPage-Dd3Y4-gU.js → BucketsPage-KgeLoK6e.js} +1 -1
- package/dist/ui/assets/{DynamoPage-JzSF-4VI.js → DynamoPage-C8rwaEIi.js} +1 -1
- package/dist/ui/assets/{DynamoTablePage-uM0DXGCo.js → DynamoTablePage-CN5P5f7S.js} +1 -1
- package/dist/ui/assets/{LambdaDetailPage-CoR9ZXdb.js → LambdaDetailPage-BPhEkF44.js} +3 -3
- package/dist/ui/assets/{LambdasPage-CNMX_O5P.js → LambdasPage-Dz4wxjVd.js} +1 -1
- package/dist/ui/assets/{OpenSearchCollectionPage-D5FaSCF1.js → OpenSearchCollectionPage-B3s964oC.js} +1 -1
- package/dist/ui/assets/{OpenSearchPage-FEzLxaej.js → OpenSearchPage-0fTJJovd.js} +1 -1
- package/dist/ui/assets/{OverviewPage-0xvjT7Q0.js → OverviewPage-B13l71G0.js} +1 -1
- package/dist/ui/assets/{QueueDetailPage-B2GaNLLe.js → QueueDetailPage-peLph1_v.js} +1 -1
- package/dist/ui/assets/{QueuesPage-Ch5kGwrp.js → QueuesPage-CF9yiBkq.js} +1 -1
- package/dist/ui/assets/{ServiceDetailPage-DKiz21oo.js → ServiceDetailPage-ZGLPswmY.js} +1 -1
- package/dist/ui/assets/{ServicesPage-Cmi3UIfM.js → ServicesPage-DsoZBBxo.js} +1 -1
- package/dist/ui/assets/{index-MF9fVrsr.js → index-BP9zQ9L-.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as w,W as F,l as T,o as j,m as o,e as c,U as a,t as m,Z as t,j as s,w as M,x as _,G as U,i as u,T as l,f as h,q as V,g as p,s as A,z as E,A as q,d as v,p as k,F as G,n as H,u as z,R as O,a0 as P,r as $,b as N,a as W}from"./index-
|
|
1
|
+
import{k as w,W as F,l as T,o as j,m as o,e as c,U as a,t as m,Z as t,j as s,w as M,x as _,G as U,i as u,T as l,f as h,q as V,g as p,s as A,z as E,A as q,d as v,p as k,F as G,n as H,u as z,R as O,a0 as P,r as $,b as N,a as W}from"./index-BP9zQ9L-.js";const Z={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},J=["onClick"],K={class:"muted mono",style:{"font-size":"0.75rem"}},Q={class:"mono",style:{"font-size":"0.78rem"}},X={key:1,class:"muted"},Y={style:{"font-size":"0.8rem"}},ee={key:0,class:"muted mono",style:{"font-size":"0.75rem"}},te=w({__name:"LambdasList",setup(C){const L=F(),r=$([]),d=$(!0),f=$(null);let y=null;const D=[{key:"name",label:"Function"},{key:"service",label:"Service"},{key:"runtime",label:"Runtime"},{key:"handler",label:"Handler"},{key:"triggers",label:"Triggers"},{key:"status",label:"Status"},{key:"invocations",label:"Invocations",align:"right"},{key:"last",label:"Last"}],I=N(()=>r.value.map(n=>({...n}))),g=N(()=>({total:r.value.length,online:r.value.filter(n=>n.status==="online").length,invocations:r.value.reduce((n,i)=>n+i.invocations,0),errors:r.value.reduce((n,i)=>n+i.errors,0)}));async function x(){try{r.value=await W.listLambdas(),f.value=null}catch(n){f.value=n.message||"Failed to load lambdas"}finally{d.value=!1}}function R(n){L.push(`/lambdas/${encodeURIComponent(n)}`)}function S(n){switch(n){case"online":return"success";case"starting":return"info";case"stopped":return"neutral";default:return"danger"}}function B(n){return n?new Date(n).toLocaleString():"—"}return T(()=>{x(),y=window.setInterval(x,1e4)}),j(()=>{y&&window.clearInterval(y)}),(n,i)=>(o(),c(a(m),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[s(a(M),{columns:4,gap:"1rem"},{default:t(()=>[s(a(_),{label:"Functions",value:g.value.total,tone:"info",loading:d.value},null,8,["value","loading"]),s(a(_),{label:"Online",value:g.value.online,tone:"success",loading:d.value},null,8,["value","loading"]),s(a(_),{label:"Invocations (session)",value:g.value.invocations,tone:"info",loading:d.value},null,8,["value","loading"]),s(a(_),{label:"Errors",value:g.value.errors,tone:g.value.errors>0?"warning":"neutral",loading:d.value},null,8,["value","tone","loading"])]),_:1}),f.value?(o(),c(a(U),{key:0,variant:"danger",dismissible:"",onDismiss:i[0]||(i[0]=e=>f.value=null)},{default:t(()=>[u(l(f.value),1)]),_:1})):h("",!0),s(a(V),{variant:"outline"},{header:t(()=>[s(a(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[...i[1]||(i[1]=[v("strong",null,"Lambda functions",-1),v("span",{class:"muted"},"Live · refreshes every 10s",-1)])]),_:1})]),default:t(()=>[d.value?(o(),p("div",Z,[s(a(A),{label:"Loading lambdas..."})])):r.value.length?(o(),c(a(q),{key:2,columns:D,rows:I.value},{"cell-name":t(({row:e})=>[s(a(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[v("a",{href:"#",style:{"text-decoration":"none","font-weight":"600"},onClick:P(b=>R(String(e.name)),["prevent"])},l(e.name),9,J),v("span",K,l(e.fullName),1)]),_:2},1024)]),"cell-service":t(({row:e})=>[s(a(O),{to:`/services/${encodeURIComponent(String(e.service))}`,style:{"text-decoration":"none"}},{default:t(()=>[s(a(z),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(l(e.service),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-runtime":t(({row:e})=>[u(l(e.runtime),1)]),"cell-handler":t(({row:e})=>[v("span",Q,l(e.handler),1)]),"cell-triggers":t(({row:e})=>[s(a(m),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:t(()=>[e.triggers.length?(o(!0),p(G,{key:0},H(e.triggers,b=>(o(),c(a(z),{key:b,size:"sm",variant:"soft"},{default:t(()=>[u(l(b),1)]),_:2},1024))),128)):(o(),p("span",X,"—"))]),_:2},1024)]),"cell-status":t(({row:e})=>[s(a(k),{tone:S(String(e.status)),variant:"soft"},{default:t(()=>[u(l(e.status),1)]),_:2},1032,["tone"])]),"cell-invocations":t(({row:e})=>[s(a(m),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:t(()=>[s(a(k),{tone:Number(e.invocations)>0?"info":"neutral",variant:"soft"},{default:t(()=>[u(l(e.invocations),1)]),_:2},1032,["tone"]),Number(e.errors)>0?(o(),c(a(k),{key:0,tone:"danger",variant:"soft"},{default:t(()=>[u(l(e.errors)+" err ",1)]),_:2},1024)):h("",!0)]),_:2},1024)]),"cell-last":t(({row:e})=>[s(a(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[v("span",Y,l(B(e.lastInvokedAt)),1),e.lastDurationMs!==void 0?(o(),p("span",ee,l(e.lastDurationMs)+"ms ",1)):h("",!0)]),_:2},1024)]),_:1},8,["rows"])):(o(),c(a(E),{key:1,title:"No functions registered",description:"Register a microservice that defines Lambda functions to see them here."}))]),_:1})]),_:1}))}}),ne=w({__name:"LambdasPage",setup(C){return(L,r)=>(o(),c(te))}});export{ne as default};
|
package/dist/ui/assets/{OpenSearchCollectionPage-D5FaSCF1.js → OpenSearchCollectionPage-B3s964oC.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as A,l as M,Y as P,e as m,U as l,t as g,Z as t,a as j,m as u,j as s,y as V,i as d,d as c,T as o,p as b,G as q,f as N,g as Q,s as W,z as R,A as U,q as I,D as O,L as E,E as Y,$ as Z,r as i,b as F,W as X}from"./index-
|
|
1
|
+
import{k as A,l as M,Y as P,e as m,U as l,t as g,Z as t,a as j,m as u,j as s,y as V,i as d,d as c,T as o,p as b,G as q,f as N,g as Q,s as W,z as R,A as U,q as I,D as O,L as E,E as Y,$ as Z,r as i,b as F,W as X}from"./index-BP9zQ9L-.js";const ee={style:{"font-size":"1.1rem"}},te={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},le={class:"muted",style:{"font-size":"0.75rem"}},ae={class:"mono",style:{"font-size":"0.78rem"}},ne={class:"mono",style:{"font-size":"0.78rem"}},se={class:"mono",style:{"white-space":"pre-wrap","word-break":"break-word","font-size":"0.78rem",background:"var(--tree-color-surface-muted, #f6f7f9)",padding:"0.5rem","border-radius":"6px","max-height":"280px",overflow:"auto",margin:"0"}},oe=A({__name:"OpenSearchCollectionView",props:{name:{}},emits:["back"],setup(y,{emit:_}){const f=y,D=_,r=i([]),x=i(!0),p=i(null),k=i(""),w=i(""),z=i("25"),S=i(!1),h=i(null),v=i(null),$=i(!1),H=[{key:"index",label:"Index"},{key:"docsCount",label:"Docs",align:"right"},{key:"health",label:"Health"},{key:"status",label:"Status"}],K=[{key:"index",label:"Index"},{key:"id",label:"ID"},{key:"source",label:"Source"}],L=F(()=>[{value:"",label:"All indices"},...r.value.map(n=>({value:n.index,label:n.index}))]),G=[{value:"10",label:"10 results"},{value:"25",label:"25 results"},{value:"50",label:"50 results"}],B=F(()=>{var n;return(((n=v.value)==null?void 0:n.hits.hits)||[]).map(e=>({index:e._index,id:e._id,source:JSON.stringify(e._source,null,2)}))});function J(n){return n==="green"?"success":n==="yellow"?"warning":n==="red"?"danger":"neutral"}async function C(){x.value=!0;try{const n=await j.listOpenSearchIndices(f.name);r.value=n.indices,p.value=null}catch(n){p.value=n.message||"Failed to load indices",r.value=[]}finally{x.value=!1}}async function T(){S.value=!0,h.value=null,$.value=!1;try{const n={size:Number(z.value)};k.value&&(n.index=k.value);const e=w.value.trim();e&&(n.q=e),v.value=await j.searchOpenSearch(f.name,n)}catch(n){/not[_ ]?found|no such index|does not exist|404/i.test(String((n==null?void 0:n.message)||""))?(v.value={took:0,hits:{total:{value:0},hits:[]}},$.value=!0):(v.value=null,h.value=n.message||"Search failed")}finally{S.value=!1}}return M(C),P(()=>f.name,C),(n,e)=>(u(),m(l(g),{direction:"vertical",gap:"1rem"},{default:t(()=>[s(l(g),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[s(l(g),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[s(l(V),{size:"sm",variant:"ghost",onClick:e[0]||(e[0]=a=>D("back"))},{default:t(()=>[...e[6]||(e[6]=[d("← Collections",-1)])]),_:1}),c("strong",ee,o(y.name),1),s(l(b),{tone:"info",variant:"soft"},{default:t(()=>[d(o(r.value.length)+" "+o(r.value.length===1?"index":"indices"),1)]),_:1})]),_:1}),s(l(V),{size:"sm",variant:"ghost",loading:x.value,onClick:C},{default:t(()=>[...e[7]||(e[7]=[d("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),p.value?(u(),m(l(q),{key:0,variant:"danger",dismissible:"",onDismiss:e[1]||(e[1]=a=>p.value=null)},{default:t(()=>[d(o(p.value),1)]),_:1})):N("",!0),s(l(I),{variant:"outline"},{header:t(()=>[...e[8]||(e[8]=[c("strong",null,"Indices",-1)])]),default:t(()=>[x.value&&!r.value.length?(u(),Q("div",te,[s(l(W),{label:"Loading indices..."})])):r.value.length?(u(),m(l(U),{key:2,columns:H,rows:r.value},{"cell-index":t(({row:a})=>[c("strong",null,o(a.index),1)]),"cell-docsCount":t(({row:a})=>[s(l(b),{tone:"info",variant:"soft"},{default:t(()=>[d(o(a.docsCount??0),1)]),_:2},1024)]),"cell-health":t(({row:a})=>[s(l(b),{tone:J(String(a.health)),variant:"soft"},{default:t(()=>[d(o(a.health||"—"),1)]),_:2},1032,["tone"])]),"cell-status":t(({row:a})=>[s(l(b),{tone:a.status==="open"?"success":"neutral",variant:"soft"},{default:t(()=>[d(o(a.status||"—"),1)]),_:2},1032,["tone"])]),_:1},8,["rows"])):(u(),m(l(R),{key:1,title:"No indices yet",description:"Indices are created when the first document is indexed into this collection."}))]),_:1}),s(l(I),{variant:"outline"},{header:t(()=>[...e[9]||(e[9]=[c("strong",null,"Search documents",-1)])]),default:t(()=>[s(l(g),{direction:"horizontal",gap:"1rem",align:"end"},{default:t(()=>[s(l(O),{label:"Index",style:{flex:"1"}},{default:t(()=>[s(l(E),{modelValue:k.value,"onUpdate:modelValue":e[2]||(e[2]=a=>k.value=a),options:L.value},null,8,["modelValue","options"])]),_:1}),s(l(O),{label:"Query",style:{flex:"2"}},{default:t(()=>[s(l(Y),{modelValue:w.value,"onUpdate:modelValue":e[3]||(e[3]=a=>w.value=a),placeholder:"Free-text query — leave empty to match all documents",onKeyup:Z(T,["enter"])},null,8,["modelValue"])]),_:1}),s(l(O),{label:"Size",style:{flex:"0.8","min-width":"8rem"}},{default:t(()=>[s(l(E),{modelValue:z.value,"onUpdate:modelValue":e[4]||(e[4]=a=>z.value=a),options:G},null,8,["modelValue"])]),_:1}),s(l(V),{variant:"solid",loading:S.value,onClick:T},{default:t(()=>[...e[10]||(e[10]=[d("Search",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),h.value?(u(),m(l(q),{key:1,variant:"danger",dismissible:"",onDismiss:e[5]||(e[5]=a=>h.value=null)},{default:t(()=>[d(o(h.value),1)]),_:1})):N("",!0),v.value?(u(),m(l(I),{key:2,variant:"outline"},{header:t(()=>[s(l(g),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[e[11]||(e[11]=c("strong",null,"Results",-1)),c("span",le,o(v.value.hits.total.value)+" hit"+o(v.value.hits.total.value===1?"":"s")+" · took "+o(v.value.took)+" ms ",1)]),_:1})]),default:t(()=>[B.value.length?(u(),m(l(U),{key:1,columns:K,rows:B.value},{"cell-index":t(({row:a})=>[c("span",ae,o(a.index),1)]),"cell-id":t(({row:a})=>[c("span",ne,o(a.id),1)]),"cell-source":t(({row:a})=>[c("pre",se,o(a.source),1)]),_:1},8,["rows"])):(u(),m(l(R),{key:0,title:"No documents found",description:$.value?"The index does not exist yet — it is created when the first document is indexed.":"No documents match this search."},null,8,["description"]))]),_:1})):N("",!0)]),_:1}))}}),ue=A({__name:"OpenSearchCollectionPage",props:{name:{}},setup(y){const _=X();function f(){_.push("/opensearch")}return(D,r)=>(u(),m(oe,{name:y.name,onBack:f},null,8,["name"]))}});export{ue as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as N,l as U,o as I,m as a,e as r,U as n,t as C,Z as o,j as s,w as j,x as O,G as q,i as w,T as g,f as D,q as A,g as z,s as E,z as B,A as F,y as P,d as y,R as T,u as W,E as G,r as u,b as $,a as R,W as M}from"./index-
|
|
1
|
+
import{k as N,l as U,o as I,m as a,e as r,U as n,t as C,Z as o,j as s,w as j,x as O,G as q,i as w,T as g,f as D,q as A,g as z,s as E,z as B,A as F,y as P,d as y,R as T,u as W,E as G,r as u,b as $,a as R,W as M}from"./index-BP9zQ9L-.js";const Z={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},H=["onClick"],J={key:1,class:"muted",style:{"font-size":"0.75rem"}},K={class:"muted mono",style:{"font-size":"0.75rem"}},Q=N({__name:"OpenSearchCollectionsList",emits:["open"],setup(V,{emit:_}){const d=_,i=u([]),m=u({}),v=u(!0),c=u(null),p=u("");let h=null;const L=[{key:"name",label:"Collection"},{key:"service",label:"Service"},{key:"endpoint",label:"Data-plane endpoint"},{key:"actions",label:"",align:"right"}],k=$(()=>i.value.map(l=>({...l,service:m.value[l.name]||""})).sort((l,e)=>l.name.localeCompare(e.name))),S=$(()=>{const l=p.value.trim().toLowerCase();return l?k.value.filter(e=>e.name.toLowerCase().includes(l)||(e.service||"").toLowerCase().includes(l)):k.value}),b=$(()=>({collections:i.value.length,services:new Set(i.value.map(l=>m.value[l.name]).filter(Boolean)).size}));async function x(){try{const[l,e]=await Promise.all([R.listOpenSearchCollections(),R.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);i.value=l.collections;const t={};for(const f of e.collections||[])t[f.name]=f.service;m.value=t,c.value=null}catch(l){c.value=l.message||"Failed to load OpenSearch collections"}finally{v.value=!1}}return U(()=>{x(),h=window.setInterval(x,15e3)}),I(()=>{h&&window.clearInterval(h)}),(l,e)=>(a(),r(n(C),{direction:"vertical",gap:"1.25rem"},{default:o(()=>[s(n(j),{columns:2,gap:"1rem"},{default:o(()=>[s(n(O),{label:"Collections",value:b.value.collections,tone:"info",loading:v.value},null,8,["value","loading"]),s(n(O),{label:"Owning services",value:b.value.services,tone:"success",loading:v.value},null,8,["value","loading"])]),_:1}),c.value?(a(),r(n(q),{key:0,variant:"danger",dismissible:"",onDismiss:e[0]||(e[0]=t=>c.value=null)},{default:o(()=>[w(g(c.value),1)]),_:1})):D("",!0),s(n(A),{variant:"outline"},{header:o(()=>[s(n(C),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:o(()=>[e[3]||(e[3]=y("strong",null,"OpenSearch collections",-1)),s(n(C),{direction:"horizontal",align:"center",gap:"1rem"},{default:o(()=>[s(n(G),{modelValue:p.value,"onUpdate:modelValue":e[1]||(e[1]=t=>p.value=t),placeholder:"Filter collections...",style:{"min-width":"16rem"}},null,8,["modelValue"]),e[2]||(e[2]=y("span",{class:"muted",style:{"font-size":"0.75rem"}},"Refreshes every 15s",-1))]),_:1})]),_:1})]),default:o(()=>[v.value?(a(),z("div",Z,[s(n(E),{label:"Loading collections..."})])):k.value.length?S.value.length?(a(),r(n(F),{key:3,columns:L,rows:S.value},{"cell-name":o(({row:t})=>[y("strong",{style:{cursor:"pointer","text-decoration":"underline","text-decoration-style":"dotted","text-underline-offset":"3px"},onClick:f=>d("open",String(t.name))},g(t.name),9,H)]),"cell-service":o(({row:t})=>[t.service?(a(),r(n(T),{key:0,to:`/services/${encodeURIComponent(String(t.service))}`,style:{"text-decoration":"none"}},{default:o(()=>[s(n(W),{size:"sm",variant:"soft",clickable:""},{default:o(()=>[w(g(t.service),1)]),_:2},1024)]),_:2},1032,["to"])):(a(),z("span",J,"unmanaged"))]),"cell-endpoint":o(({row:t})=>[y("span",K,g(t.endpoint),1)]),"cell-actions":o(({row:t})=>[s(n(P),{size:"sm",variant:"soft",onClick:f=>d("open",String(t.name))},{default:o(()=>[...e[4]||(e[4]=[w(" Browse ",-1)])]),_:1},8,["onClick"])]),_:1},8,["rows"])):(a(),r(n(B),{key:2,title:"No matching collections",description:`No collections match "${p.value}".`},null,8,["description"])):(a(),r(n(B),{key:1,title:"No OpenSearch collections",description:"Collections come from AWS::OpenSearchServerless::Collection resources — register a microservice that declares one."}))]),_:1})]),_:1}))}}),Y=N({__name:"OpenSearchPage",setup(V){const _=M();function d(i){_.push(`/opensearch/${encodeURIComponent(i)}`)}return(i,m)=>(a(),r(Q,{onOpen:d}))}});export{Y as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as W,l as G,o as J,e as m,Z as a,U as e,t as i,a as w,r as b,m as v,j as n,d as o,p,i as d,T as u,q as z,g as h,s as K,u as N,v as X,F as O,n as I,f as R,w as q,x as y,R as Y,y as ee,b as g}from"./index-MF9fVrsr.js";const te={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},ae={class:"mono"},ne={class:"mono",style:{"font-size":"0.8rem"}},se={class:"mono"},oe={class:"mono"},le={key:0,class:"muted"},re={class:"mono",style:{"font-size":"0.75rem"}},ie={class:"mono",style:{"font-size":"0.75rem"}},ue={style:{"font-size":"1.05rem"}},ce={class:"muted",style:{"font-size":"0.825rem"}},de=W({__name:"OverviewPage",setup($){const f=b(null),c=b(null),_=b([]),S=b([]),A=b([]),k=b({tables:[],queues:[],topics:[],buckets:[],collections:[]}),C=b(!0);let D=null;async function T(){try{const[r,t,s,l,L,B]=await Promise.all([w.checkHealth(),w.getConfig(),w.listServices(),w.listResources(),w.listLambdas().catch(()=>[]),w.listApis().catch(()=>[])]);f.value=r,c.value=t,_.value=s,k.value=l,S.value=L,A.value=B}catch(r){console.error("Overview load failed:",r)}finally{C.value=!1}}const F=g(()=>_.value.filter(r=>r.status==="running").length),V=g(()=>_.value.length),Q=g(()=>S.value.filter(r=>r.status==="online").length),M=g(()=>S.value.length),U=g(()=>A.value.reduce((r,t)=>r+t.routes.length,0)),Z=g(()=>{var r;return(r=f.value)!=null&&r.localstack?"success":"danger"}),E=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.enabled)}),j=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.running)}),x=g(()=>{var r;return!!((r=c.value)!=null&&r.autoPackage)}),P=g(()=>{var r;return!!((r=c.value)!=null&&r.persistence)}),H=[{type:"SNS Topics",description:"Pub/sub fan-out for cross-service events",status:"covered",to:null},{type:"SQS Queues",description:"Async message queues with consumer monitoring",status:"covered",to:"/queues"},{type:"DynamoDB Tables",description:"Tables, indexes, items explorer and seeds",status:"covered",to:"/dynamo"},{type:"S3 Buckets",description:"Buckets, objects browser, upload/download, Lambda notifications",status:"covered",to:"/buckets"}];return G(()=>{T(),D=window.setInterval(T,15e3)}),J(()=>{D&&window.clearInterval(D)}),(r,t)=>(v(),m(e(i),{direction:"vertical",gap:"1.5rem"},{default:a(()=>[n(e(z),{variant:"outline",class:"overview-hero"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"1rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",wrap:""},{default:a(()=>[t[1]||(t[1]=o("span",{style:{"font-size":"1.75rem"}},"⚡",-1)),n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[...t[0]||(t[0]=[o("strong",{style:{"font-size":"1.5rem"}},"Local Serverless Stack",-1),o("span",{class:"muted"},"One LocalStack. Every microservice. Zero docker juggling.",-1)])]),_:1})]),_:1}),t[3]||(t[3]=o("p",{style:{"max-width":"70ch","line-height":"1.55"}}," A single control plane for your local serverless workflow. Register a Serverless Framework project and LSS parses its CloudFormation template, provisions the resources in a shared LocalStack instance, wires up event-source mappings, and gives you live visibility into every queue, table, and topic — without spinning up a separate LocalStack per service. ",-1)),n(e(i),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:a(()=>[n(e(p),{tone:Z.value,variant:"soft"},{default:a(()=>{var s;return[d(" LocalStack "+u((s=f.value)!=null&&s.localstack?"running":"offline"),1)]}),_:1},8,["tone"]),E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>[d(" Dynamo Proxy "+u(j.value?"on":"enabled (not listening)"),1)]),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[2]||(t[2]=[d("Dynamo Proxy off",-1)])]),_:1})),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Auto-package "+u(x.value?"on":"off"),1)]),_:1},8,["tone"]),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Persistence "+u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),C.value&&!f.value?(v(),h("div",te,[n(e(K),{label:"Loading overview..."})])):(v(),h(O,{key:1},[n(e(q),{columns:2,gap:"1rem"},{default:a(()=>[n(e(z),{variant:"outline"},{header:a(()=>[...t[4]||(t[4]=[o("strong",null,"Server status",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s;return[t[5]||(t[5]=o("span",{class:"muted"},"LocalStack",-1)),n(e(p),{tone:(s=f.value)!=null&&s.localstack?"success":"danger",variant:"soft"},{default:a(()=>{var l;return[d(u((l=f.value)!=null&&l.localstack?"Running":"Offline"),1)]}),_:1},8,["tone"])]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[6]||(t[6]=o("span",{class:"muted"},"Endpoint",-1)),o("span",ae,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.endpoint)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[7]||(t[7]=o("span",{class:"muted"},"Image",-1)),o("span",ne,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.image)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[8]||(t[8]=o("span",{class:"muted"},"Mode",-1)),n(e(N),{size:"sm",variant:"soft"},{default:a(()=>{var s,l;return[d(u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.mode)||"—"),1)]}),_:1})]),_:1}),n(e(X)),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[10]||(t[10]=o("span",{class:"muted"},"Dynamo Proxy",-1)),n(e(i),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:a(()=>[E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>{var s,l;return[d(u(j.value?`Listening :${(l=(s=f.value)==null?void 0:s.dynamoProxy)==null?void 0:l.port}`:"Enabled, not listening"),1)]}),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[9]||(t[9]=[d("Disabled",-1)])]),_:1}))]),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[11]||(t[11]=o("span",{class:"muted"},"Auto-package",-1)),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(x.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[12]||(t[12]=o("span",{class:"muted"},"Persistence",-1)),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[...t[13]||(t[13]=[o("strong",null,"LESC configuration",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>{var s;return[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[14]||(t[14]=o("span",{class:"muted"},"Default region",-1)),o("span",se,u(((l=c.value)==null?void 0:l.region)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[15]||(t[15]=o("span",{class:"muted"},"Server port",-1)),o("span",oe,u(((l=c.value)==null?void 0:l.serverPort)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"start",wrap:""},{default:a(()=>[t[16]||(t[16]=o("span",{class:"muted"},"LocalStack services",-1)),n(e(i),{direction:"horizontal",gap:"0.25rem",wrap:"",justify:"flex-end"},{default:a(()=>{var l,L;return[(v(!0),h(O,null,I(((l=c.value)==null?void 0:l.services)||[],B=>(v(),m(e(N),{key:B,size:"sm",variant:"soft"},{default:a(()=>[d(u(B),1)]),_:2},1024))),128)),(((L=c.value)==null?void 0:L.services)||[]).length?R("",!0):(v(),h("span",le,"—"))]}),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[17]||(t[17]=o("span",{class:"muted"},"Seeds dir",-1)),o("span",re,u(((l=c.value)==null?void 0:l.seedsDir)||"—"),1)]}),_:1}),(s=c.value)!=null&&s.configPath?(v(),m(e(i),{key:0,direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[18]||(t[18]=o("span",{class:"muted"},"Config file",-1)),o("span",ie,u(c.value.configPath),1)]),_:1})):R("",!0)]}),_:1})]),_:1})]),_:1}),n(e(q),{columns:5,gap:"1rem"},{default:a(()=>{var s;return[n(e(y),{label:"Services running",value:`${F.value} / ${V.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"Lambdas online",value:`${Q.value} / ${M.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"API routes",value:U.value,tone:"info"},null,8,["value"]),n(e(y),{label:"DynamoDB tables",value:k.value.tables.length,tone:"info"},null,8,["value"]),n(e(y),{label:"SQS queues",value:k.value.queues.length,tone:"warning"},null,8,["value"]),n(e(y),{label:"SNS topics",value:k.value.topics.length,tone:"info"},null,8,["value"]),n(e(y),{label:"S3 buckets",value:k.value.buckets.length,tone:"neutral"},null,8,["value"]),n(e(y),{label:"OpenSearch collections",value:((s=k.value.collections)==null?void 0:s.length)??0,tone:"info"},null,8,["value"])]}),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[...t[19]||(t[19]=[o("strong",null,"What's covered",-1),o("span",{class:"muted",style:{"font-size":"0.75rem"}}," Resource types LSS understands today ",-1)])]),_:1})]),default:a(()=>[n(e(q),{columns:2,gap:"0.75rem"},{default:a(()=>[(v(),h(O,null,I(H,s=>n(e(z),{key:s.type,variant:"soft"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[o("span",ue,u(s.status==="covered"?"✓":"⏳"),1),o("strong",null,u(s.type),1),n(e(p),{tone:s.status==="covered"?"success":"neutral",variant:"soft"},{default:a(()=>[d(u(s.status==="covered"?"Supported":"Planned"),1)]),_:2},1032,["tone"])]),_:2},1024),o("span",ce,u(s.description),1)]),_:2},1024),s.to?(v(),m(e(Y),{key:0,to:s.to,style:{"text-decoration":"none"}},{default:a(()=>[n(e(ee),{size:"sm",variant:"ghost"},{default:a(()=>[...t[20]||(t[20]=[d("Open →",-1)])]),_:1})]),_:1},8,["to"])):R("",!0)]),_:2},1024)]),_:2},1024)),64))]),_:1})]),_:1})],64))]),_:1}))}}),ve=($,f)=>{const c=$.__vccOpts||$;for(const[_,S]of f)c[_]=S;return c},pe=ve(de,[["__scopeId","data-v-7b113cd8"]]);export{pe as default};
|
|
1
|
+
import{k as W,l as G,o as J,e as m,Z as a,U as e,t as i,a as w,r as b,m as v,j as n,d as o,p,i as d,T as u,q as z,g as h,s as K,u as N,v as X,F as O,n as I,f as R,w as q,x as y,R as Y,y as ee,b as g}from"./index-BP9zQ9L-.js";const te={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},ae={class:"mono"},ne={class:"mono",style:{"font-size":"0.8rem"}},se={class:"mono"},oe={class:"mono"},le={key:0,class:"muted"},re={class:"mono",style:{"font-size":"0.75rem"}},ie={class:"mono",style:{"font-size":"0.75rem"}},ue={style:{"font-size":"1.05rem"}},ce={class:"muted",style:{"font-size":"0.825rem"}},de=W({__name:"OverviewPage",setup($){const f=b(null),c=b(null),_=b([]),S=b([]),A=b([]),k=b({tables:[],queues:[],topics:[],buckets:[],collections:[]}),C=b(!0);let D=null;async function T(){try{const[r,t,s,l,L,B]=await Promise.all([w.checkHealth(),w.getConfig(),w.listServices(),w.listResources(),w.listLambdas().catch(()=>[]),w.listApis().catch(()=>[])]);f.value=r,c.value=t,_.value=s,k.value=l,S.value=L,A.value=B}catch(r){console.error("Overview load failed:",r)}finally{C.value=!1}}const F=g(()=>_.value.filter(r=>r.status==="running").length),V=g(()=>_.value.length),Q=g(()=>S.value.filter(r=>r.status==="online").length),M=g(()=>S.value.length),U=g(()=>A.value.reduce((r,t)=>r+t.routes.length,0)),Z=g(()=>{var r;return(r=f.value)!=null&&r.localstack?"success":"danger"}),E=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.enabled)}),j=g(()=>{var r,t;return!!((t=(r=f.value)==null?void 0:r.dynamoProxy)!=null&&t.running)}),x=g(()=>{var r;return!!((r=c.value)!=null&&r.autoPackage)}),P=g(()=>{var r;return!!((r=c.value)!=null&&r.persistence)}),H=[{type:"SNS Topics",description:"Pub/sub fan-out for cross-service events",status:"covered",to:null},{type:"SQS Queues",description:"Async message queues with consumer monitoring",status:"covered",to:"/queues"},{type:"DynamoDB Tables",description:"Tables, indexes, items explorer and seeds",status:"covered",to:"/dynamo"},{type:"S3 Buckets",description:"Buckets, objects browser, upload/download, Lambda notifications",status:"covered",to:"/buckets"}];return G(()=>{T(),D=window.setInterval(T,15e3)}),J(()=>{D&&window.clearInterval(D)}),(r,t)=>(v(),m(e(i),{direction:"vertical",gap:"1.5rem"},{default:a(()=>[n(e(z),{variant:"outline",class:"overview-hero"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"1rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",wrap:""},{default:a(()=>[t[1]||(t[1]=o("span",{style:{"font-size":"1.75rem"}},"⚡",-1)),n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[...t[0]||(t[0]=[o("strong",{style:{"font-size":"1.5rem"}},"Local Serverless Stack",-1),o("span",{class:"muted"},"One LocalStack. Every microservice. Zero docker juggling.",-1)])]),_:1})]),_:1}),t[3]||(t[3]=o("p",{style:{"max-width":"70ch","line-height":"1.55"}}," A single control plane for your local serverless workflow. Register a Serverless Framework project and LSS parses its CloudFormation template, provisions the resources in a shared LocalStack instance, wires up event-source mappings, and gives you live visibility into every queue, table, and topic — without spinning up a separate LocalStack per service. ",-1)),n(e(i),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:a(()=>[n(e(p),{tone:Z.value,variant:"soft"},{default:a(()=>{var s;return[d(" LocalStack "+u((s=f.value)!=null&&s.localstack?"running":"offline"),1)]}),_:1},8,["tone"]),E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>[d(" Dynamo Proxy "+u(j.value?"on":"enabled (not listening)"),1)]),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[2]||(t[2]=[d("Dynamo Proxy off",-1)])]),_:1})),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Auto-package "+u(x.value?"on":"off"),1)]),_:1},8,["tone"]),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(" Persistence "+u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),C.value&&!f.value?(v(),h("div",te,[n(e(K),{label:"Loading overview..."})])):(v(),h(O,{key:1},[n(e(q),{columns:2,gap:"1rem"},{default:a(()=>[n(e(z),{variant:"outline"},{header:a(()=>[...t[4]||(t[4]=[o("strong",null,"Server status",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s;return[t[5]||(t[5]=o("span",{class:"muted"},"LocalStack",-1)),n(e(p),{tone:(s=f.value)!=null&&s.localstack?"success":"danger",variant:"soft"},{default:a(()=>{var l;return[d(u((l=f.value)!=null&&l.localstack?"Running":"Offline"),1)]}),_:1},8,["tone"])]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[6]||(t[6]=o("span",{class:"muted"},"Endpoint",-1)),o("span",ae,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.endpoint)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var s,l;return[t[7]||(t[7]=o("span",{class:"muted"},"Image",-1)),o("span",ne,u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.image)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[8]||(t[8]=o("span",{class:"muted"},"Mode",-1)),n(e(N),{size:"sm",variant:"soft"},{default:a(()=>{var s,l;return[d(u(((l=(s=c.value)==null?void 0:s.localstack)==null?void 0:l.mode)||"—"),1)]}),_:1})]),_:1}),n(e(X)),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[10]||(t[10]=o("span",{class:"muted"},"Dynamo Proxy",-1)),n(e(i),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:a(()=>[E.value?(v(),m(e(p),{key:0,tone:j.value?"success":"warning",variant:"soft"},{default:a(()=>{var s,l;return[d(u(j.value?`Listening :${(l=(s=f.value)==null?void 0:s.dynamoProxy)==null?void 0:l.port}`:"Enabled, not listening"),1)]}),_:1},8,["tone"])):(v(),m(e(p),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...t[9]||(t[9]=[d("Disabled",-1)])]),_:1}))]),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[11]||(t[11]=o("span",{class:"muted"},"Auto-package",-1)),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(x.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[12]||(t[12]=o("span",{class:"muted"},"Persistence",-1)),n(e(p),{tone:P.value?"info":"neutral",variant:"soft"},{default:a(()=>[d(u(P.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[...t[13]||(t[13]=[o("strong",null,"LESC configuration",-1)])]),default:a(()=>[n(e(i),{direction:"vertical",gap:"0.75rem"},{default:a(()=>{var s;return[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[14]||(t[14]=o("span",{class:"muted"},"Default region",-1)),o("span",se,u(((l=c.value)==null?void 0:l.region)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[15]||(t[15]=o("span",{class:"muted"},"Server port",-1)),o("span",oe,u(((l=c.value)==null?void 0:l.serverPort)||"—"),1)]}),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"start",wrap:""},{default:a(()=>[t[16]||(t[16]=o("span",{class:"muted"},"LocalStack services",-1)),n(e(i),{direction:"horizontal",gap:"0.25rem",wrap:"",justify:"flex-end"},{default:a(()=>{var l,L;return[(v(!0),h(O,null,I(((l=c.value)==null?void 0:l.services)||[],B=>(v(),m(e(N),{key:B,size:"sm",variant:"soft"},{default:a(()=>[d(u(B),1)]),_:2},1024))),128)),(((L=c.value)==null?void 0:L.services)||[]).length?R("",!0):(v(),h("span",le,"—"))]}),_:1})]),_:1}),n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>{var l;return[t[17]||(t[17]=o("span",{class:"muted"},"Seeds dir",-1)),o("span",re,u(((l=c.value)==null?void 0:l.seedsDir)||"—"),1)]}),_:1}),(s=c.value)!=null&&s.configPath?(v(),m(e(i),{key:0,direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[t[18]||(t[18]=o("span",{class:"muted"},"Config file",-1)),o("span",ie,u(c.value.configPath),1)]),_:1})):R("",!0)]}),_:1})]),_:1})]),_:1}),n(e(q),{columns:5,gap:"1rem"},{default:a(()=>{var s;return[n(e(y),{label:"Services running",value:`${F.value} / ${V.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"Lambdas online",value:`${Q.value} / ${M.value}`,tone:"success"},null,8,["value"]),n(e(y),{label:"API routes",value:U.value,tone:"info"},null,8,["value"]),n(e(y),{label:"DynamoDB tables",value:k.value.tables.length,tone:"info"},null,8,["value"]),n(e(y),{label:"SQS queues",value:k.value.queues.length,tone:"warning"},null,8,["value"]),n(e(y),{label:"SNS topics",value:k.value.topics.length,tone:"info"},null,8,["value"]),n(e(y),{label:"S3 buckets",value:k.value.buckets.length,tone:"neutral"},null,8,["value"]),n(e(y),{label:"OpenSearch collections",value:((s=k.value.collections)==null?void 0:s.length)??0,tone:"info"},null,8,["value"])]}),_:1}),n(e(z),{variant:"outline"},{header:a(()=>[n(e(i),{direction:"horizontal",justify:"space-between",align:"center"},{default:a(()=>[...t[19]||(t[19]=[o("strong",null,"What's covered",-1),o("span",{class:"muted",style:{"font-size":"0.75rem"}}," Resource types LSS understands today ",-1)])]),_:1})]),default:a(()=>[n(e(q),{columns:2,gap:"0.75rem"},{default:a(()=>[(v(),h(O,null,I(H,s=>n(e(z),{key:s.type,variant:"soft"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:a(()=>[n(e(i),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[n(e(i),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[o("span",ue,u(s.status==="covered"?"✓":"⏳"),1),o("strong",null,u(s.type),1),n(e(p),{tone:s.status==="covered"?"success":"neutral",variant:"soft"},{default:a(()=>[d(u(s.status==="covered"?"Supported":"Planned"),1)]),_:2},1032,["tone"])]),_:2},1024),o("span",ce,u(s.description),1)]),_:2},1024),s.to?(v(),m(e(Y),{key:0,to:s.to,style:{"text-decoration":"none"}},{default:a(()=>[n(e(ee),{size:"sm",variant:"ghost"},{default:a(()=>[...t[20]||(t[20]=[d("Open →",-1)])]),_:1})]),_:1},8,["to"])):R("",!0)]),_:2},1024)]),_:2},1024)),64))]),_:1})]),_:1})],64))]),_:1}))}}),ve=($,f)=>{const c=$.__vccOpts||$;for(const[_,S]of f)c[_]=S;return c},pe=ve(de,[["__scopeId","data-v-7b113cd8"]]);export{pe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as te,m as i,e as c,U as e,t as m,Z as t,j as a,q as P,D as h,K as _e,E as A,f as b,d as f,y as w,i as r,g as k,F as D,n as J,L as we,T as d,p as x,G as ee,s as ae,z as le,A as $e,a0 as ze,v as Ve,C as Ie,r as p,b as Y,a as Q,c as se,l as qe,o as he,Y as Ce,x as H,w as xe,H as Ne,I as Z,J as X,u as K,N as Se,M as Me,V as Ae,W as ne}from"./index-MF9fVrsr.js";const De={key:0,class:"muted mono",style:{"font-size":"0.75rem"}},Pe={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},Ue=["onClick"],je={class:"mono",style:{"font-size":"0.8rem"}},Fe={class:"mono",style:{"font-size":"0.75rem"}},Te={class:"muted",style:{"font-size":"0.75rem"}},Oe={key:1,class:"muted",style:{"font-size":"0.75rem"}},Re={key:0,style:{padding:"0.75rem 1rem","border-top":"1px solid var(--tree-color-border, #e5e7eb)"}},Be={key:0},Qe={class:"mono",style:{"white-space":"pre-wrap","word-break":"break-word","font-size":"0.78rem",background:"var(--tree-color-surface-muted, #f6f7f9)",padding:"0.5rem","border-radius":"6px","max-height":"280px",overflow:"auto"}},Le=te({__name:"QueueSendReceivePanel",props:{queue:{}},emits:["refresh"],setup(O,{emit:L}){const $=O,U=L,z=se(),j=p(""),R=p(0),v=p("default"),C=p(""),V=p([]),N=p(!1),S=p(null),M=p(null),B=p(10),I=p(0),E=p(0),y=p([]),F=p(!1),o=p(null),n=p({}),g=p(!1),W=p(!1),G=p({}),ue=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Binary",label:"Binary"}],T=Y(()=>$.queue.fifo),ie=[{key:"preview",label:"Body preview"},{key:"messageId",label:"Message ID"},{key:"sentAt",label:"Sent at"},{key:"attrs",label:"Attrs",align:"right"},{key:"actions",label:"",align:"right"}],oe=Y(()=>y.value.map((u,l)=>{var s;return{__id:l,__raw:u,messageId:u.messageId||"—",preview:re(u.body),sentAt:de((s=u.attributes)==null?void 0:s.SentTimestamp),attrs:u.messageAttributes?Object.keys(u.messageAttributes).length:0}}));function re(u){if(!u)return"—";const l=u.replace(/\s+/g," ").trim();return l.length>80?`${l.slice(0,80)}…`:l}function de(u){if(!u)return"—";const l=Number(u);return l?new Date(l).toLocaleString():"—"}function me(){V.value.push({name:"",type:"String",value:""})}function fe(u){V.value.splice(u,1)}function ve(u){if(!u)return"";const l=u.trim();if(!(l.startsWith("{")||l.startsWith("[")))return u;try{return JSON.stringify(JSON.parse(l),null,2)}catch{return u}}function ge(u){G.value[u]=!G.value[u]}async function pe(){if(!j.value.trim()){S.value="Message body is required";return}N.value=!0,S.value=null;try{const u=V.value.filter(s=>s.name.trim()),l=await Q.sendQueueMessage($.queue.name,{body:j.value,delaySeconds:T.value?void 0:R.value||void 0,messageAttributes:u.length?u:void 0,messageGroupId:T.value?v.value||"default":void 0,messageDeduplicationId:T.value&&C.value?C.value:void 0});M.value={messageId:l.messageId,sequenceNumber:l.sequenceNumber},z.add({title:"Message sent",description:l.messageId,variant:"success"}),U("refresh")}catch(u){S.value=u.message||"Failed to send message"}finally{N.value=!1}}async function ce(){F.value=!0,o.value=null;try{const u=await Q.receiveQueueMessages($.queue.name,{maxNumberOfMessages:B.value,visibilityTimeout:E.value,waitTimeSeconds:I.value});y.value=u.messages,u.messages.length||z.add({title:"No messages available",description:"The queue returned an empty batch.",variant:"info"}),U("refresh")}catch(u){o.value=u.message||"Failed to poll messages"}finally{F.value=!1}}async function ye(u){if(!(!u.receiptHandle||!u.messageId)){n.value[u.messageId]=!0;try{await Q.deleteQueueMessage($.queue.name,u.receiptHandle),y.value=y.value.filter(l=>l.messageId!==u.messageId),z.add({title:"Message deleted",variant:"success"}),U("refresh")}catch(l){z.add({title:"Failed to delete message",description:l.message,variant:"danger"})}finally{delete n.value[u.messageId]}}}async function be(){W.value=!0;try{await Q.purgeQueue($.queue.name),y.value=[],z.add({title:"Queue purged",description:"All messages were removed. It can take up to 60s to fully clear.",variant:"warning"}),U("refresh")}catch(u){z.add({title:"Failed to purge queue",description:u.message,variant:"danger"})}finally{W.value=!1,g.value=!1}}function ke(u){var l;(l=navigator.clipboard)==null||l.writeText(u).then(()=>{z.add({title:"Copied to clipboard",variant:"info"})})}return(u,l)=>(i(),c(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[l[14]||(l[14]=f("strong",null,"Send a message",-1)),T.value?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...l[13]||(l[13]=[r("FIFO",-1)])]),_:1})):b("",!0)]),_:1})]),footer:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(w),{variant:"solid",loading:N.value,onClick:pe},{default:t(()=>[...l[18]||(l[18]=[r("Send message",-1)])]),_:1},8,["loading"]),a(e(w),{variant:"ghost",disabled:N.value,onClick:l[4]||(l[4]=s=>j.value="")},{default:t(()=>[...l[19]||(l[19]=[r("Clear",-1)])]),_:1},8,["disabled"])]),_:1}),M.value?(i(),k("span",De,[r(" Last sent: "+d(M.value.messageId)+" ",1),M.value.sequenceNumber?(i(),k(D,{key:0},[r(" · seq "+d(M.value.sequenceNumber),1)],64)):b("",!0)])):b("",!0)]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(h),{label:"Message body",hint:"Plain text or JSON"},{default:t(()=>[a(e(_e),{modelValue:j.value,"onUpdate:modelValue":l[0]||(l[0]=s=>j.value=s),rows:6,placeholder:'{"event": "order.created", "orderId": "abc-123"}'},null,8,["modelValue"])]),_:1}),a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[T.value?b("",!0):(i(),c(e(h),{key:0,label:"Delay (seconds)",hint:"0–900",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:R.value,"onUpdate:modelValue":l[1]||(l[1]=s=>R.value=s),modelModifiers:{number:!0},type:"number",min:"0",max:"900"},null,8,["modelValue"])]),_:1})),T.value?(i(),c(e(h),{key:1,label:"MessageGroupId",hint:"Required for FIFO. Defaults to 'default'.",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:v.value,"onUpdate:modelValue":l[2]||(l[2]=s=>v.value=s),placeholder:"default"},null,8,["modelValue"])]),_:1})):b("",!0),T.value?(i(),c(e(h),{key:2,label:"MessageDeduplicationId",hint:"Optional if content-based dedup is on",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:C.value,"onUpdate:modelValue":l[3]||(l[3]=s=>C.value=s),placeholder:"auto"},null,8,["modelValue"])]),_:1})):b("",!0)]),_:1}),a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[l[16]||(l[16]=f("strong",{style:{"font-size":"0.85rem"}},"Message attributes – optional",-1)),a(e(w),{size:"sm",variant:"outline",onClick:me},{default:t(()=>[...l[15]||(l[15]=[r("Add attribute",-1)])]),_:1})]),_:1}),(i(!0),k(D,null,J(V.value,(s,q)=>(i(),c(e(m),{key:`a-${q}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(h),{label:"Name",style:{flex:"1.4"}},{default:t(()=>[a(e(A),{modelValue:s.name,"onUpdate:modelValue":_=>s.name=_,placeholder:"contentType"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(h),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e(we),{modelValue:s.type,"onUpdate:modelValue":_=>s.type=_,options:ue},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(h),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(A),{modelValue:s.value,"onUpdate:modelValue":_=>s.value=_,placeholder:"application/json"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(w),{size:"sm",variant:"outline",onClick:_=>fe(q)},{default:t(()=>[...l[17]||(l[17]=[r("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),S.value?(i(),c(e(ee),{key:0,variant:"danger",dismissible:"",onDismiss:l[5]||(l[5]=s=>S.value=null)},{default:t(()=>[r(d(S.value),1)]),_:1})):b("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[l[21]||(l[21]=f("strong",null,"Poll for messages",-1)),a(e(x),{tone:"warning",variant:"soft"},{default:t(()=>[...l[20]||(l[20]=[r(" Messages become invisible during the visibility timeout ",-1)])]),_:1})]),_:1})]),footer:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(w),{variant:"solid",loading:F.value,onClick:ce},{default:t(()=>[...l[22]||(l[22]=[r("Poll messages",-1)])]),_:1},8,["loading"]),a(e(w),{variant:"ghost",disabled:!y.value.length,onClick:l[9]||(l[9]=s=>y.value=[])},{default:t(()=>[...l[23]||(l[23]=[r(" Clear results ",-1)])]),_:1},8,["disabled"])]),_:1}),a(e(w),{size:"sm",variant:"outline",tone:"danger",onClick:l[10]||(l[10]=s=>g.value=!0)},{default:t(()=>[...l[24]||(l[24]=[r(" Purge queue ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(h),{label:"Max messages",hint:"1–10",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:B.value,"onUpdate:modelValue":l[6]||(l[6]=s=>B.value=s),modelModifiers:{number:!0},type:"number",min:"1",max:"10"},null,8,["modelValue"])]),_:1}),a(e(h),{label:"Visibility timeout (s)",hint:"0 keeps messages visible",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:E.value,"onUpdate:modelValue":l[7]||(l[7]=s=>E.value=s),modelModifiers:{number:!0},type:"number",min:"0"},null,8,["modelValue"])]),_:1}),a(e(h),{label:"Wait time (s)",hint:"0–20 (long polling)",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:I.value,"onUpdate:modelValue":l[8]||(l[8]=s=>I.value=s),modelModifiers:{number:!0},type:"number",min:"0",max:"20"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),o.value?(i(),c(e(ee),{key:1,variant:"danger",dismissible:"",onDismiss:l[11]||(l[11]=s=>o.value=null)},{default:t(()=>[r(d(o.value),1)]),_:1})):b("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[f("strong",null,"Received messages ("+d(y.value.length)+")",1),l[25]||(l[25]=f("span",{class:"muted",style:{"font-size":"0.75rem"}}," Click a row to view the full body ",-1))]),_:1})]),default:t(()=>[F.value&&!y.value.length?(i(),k("div",Pe,[a(e(ae),{label:"Polling..."})])):y.value.length?(i(),c(e($e),{key:2,columns:ie,rows:oe.value},{"cell-preview":t(({row:s})=>[f("a",{href:"#",style:{"text-decoration":"none"},onClick:ze(q=>ge(String(s.messageId)),["prevent"])},[f("span",je,d(G.value[String(s.messageId)]?"▼":"▶")+" "+d(s.preview),1)],8,Ue)]),"cell-messageId":t(({row:s})=>[f("span",Fe,d(s.messageId),1)]),"cell-sentAt":t(({row:s})=>[f("span",Te,d(s.sentAt),1)]),"cell-attrs":t(({row:s})=>[Number(s.attrs)>0?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[r(d(s.attrs),1)]),_:2},1024)):(i(),k("span",Oe,"—"))]),"cell-actions":t(({row:s})=>[a(e(m),{direction:"horizontal",gap:"0.25rem",justify:"flex-end"},{default:t(()=>[a(e(w),{size:"sm",variant:"ghost",onClick:q=>ke(String(s.__raw.body||""))},{default:t(()=>[...l[26]||(l[26]=[r(" Copy ",-1)])]),_:1},8,["onClick"]),a(e(w),{size:"sm",variant:"outline",tone:"danger",loading:n.value[String(s.messageId)],onClick:q=>ye(s.__raw)},{default:t(()=>[...l[27]||(l[27]=[r(" Delete ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),c(e(le),{key:1,title:"No messages loaded",description:"Use Poll messages to fetch a batch from the queue."})),(i(!0),k(D,null,J(y.value,s=>(i(),k(D,{key:`detail-${s.messageId}`},[s.messageId&&G.value[s.messageId]?(i(),k("div",Re,[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(x),{tone:"neutral",variant:"soft"},{default:t(()=>[r("id: "+d(s.messageId),1)]),_:2},1024),s.md5OfBody?(i(),c(e(x),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[r(" md5: "+d(s.md5OfBody.slice(0,12))+"… ",1)]),_:2},1024)):b("",!0),(i(!0),k(D,null,J(s.attributes||{},(q,_)=>(i(),c(e(x),{key:_,tone:"info",variant:"soft"},{default:t(()=>[r(d(_)+": "+d(q),1)]),_:2},1024))),128))]),_:2},1024),s.messageAttributes&&Object.keys(s.messageAttributes).length?(i(),k("div",Be,[l[28]||(l[28]=f("strong",{style:{"font-size":"0.8rem"}},"Message attributes",-1)),a(e(m),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),k(D,null,J(s.messageAttributes,(q,_)=>(i(),c(e(x),{key:`ma-${_}`,tone:"success",variant:"soft"},{default:t(()=>[r(d(_)+" ("+d(q.type||"String")+"): "+d(q.value),1)]),_:2},1024))),128))]),_:2},1024)])):b("",!0),a(e(Ve)),f("pre",Qe,d(ve(s.body)),1)]),_:2},1024)])):b("",!0)],64))),128))]),_:1}),a(e(Ie),{open:g.value,"onUpdate:open":l[12]||(l[12]=s=>g.value=s),title:"Purge queue",description:`Delete every message in '${$.queue.name}'? AWS rate-limits PurgeQueue to once every 60 seconds.`,"confirm-label":"Purge","cancel-label":"Cancel",tone:"danger",loading:W.value,onConfirm:be},null,8,["open","description","loading"])]),_:1}))}}),Ee={style:{"font-size":"1.1rem"}},Je={key:1,style:{display:"flex","justify-content":"center",padding:"2rem"}},We={style:{"padding-top":"1rem"}},Ge={style:{"padding-top":"1rem"}},He={class:"mono"},Ke={class:"muted",style:{"font-size":"0.75rem"}},Ye={style:{"padding-top":"1rem"}},Ze={class:"mono",style:{"font-size":"0.78rem"}},Xe={class:"mono",style:{"font-size":"0.78rem"}},et={class:"muted",style:{"font-size":"0.75rem"}},tt={class:"mono"},at=te({__name:"QueueDetail",props:{queueName:{}},emits:["back"],setup(O,{emit:L}){const $=O,U=L,z=Ae(),j=ne(),R=se(),v=p(null),C=p(!0),V=p(null);let N=null;const S=["send-receive","consumers","attributes"],M=Y({get(){const o=String(z.query.tab||"");return S.includes(o)?o:"send-receive"},set(o){j.replace({query:{...z.query,tab:o==="send-receive"?void 0:o}})}}),B=Y(()=>{const o=v.value;if(!o)return 0;const n=o.available+o.inFlight+o.processed;return n?Math.round(o.processed/n*100):0});async function I(o=!0){o&&(C.value=!0);try{v.value=await Q.getQueue($.queueName),V.value=null}catch(n){V.value=n.message||"Failed to load queue",v.value=null}finally{C.value=!1}}async function E(){if(v.value)try{await Q.resetQueueProcessed(v.value.name),R.add({title:"Processed counter reset",variant:"info"}),await I(!1)}catch(o){R.add({title:"Failed to reset counter",description:o.message,variant:"danger"})}}function y(o){return o===void 0?"—":o<60?`${o}s`:o<3600?`${Math.round(o/60)}m`:o<86400?`${Math.round(o/3600)}h`:`${Math.round(o/86400)}d`}function F(o){return o?new Date(o).toLocaleString():"—"}return qe(()=>{I(),N=window.setInterval(()=>I(!1),4e3)}),he(()=>{N&&window.clearInterval(N)}),Ce(()=>$.queueName,()=>I()),(o,n)=>(i(),c(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var g;return[a(e(w),{size:"sm",variant:"ghost",onClick:n[0]||(n[0]=W=>U("back"))},{default:t(()=>[...n[5]||(n[5]=[r("← Queues",-1)])]),_:1}),f("strong",Ee,d(O.queueName),1),(g=v.value)!=null&&g.fifo?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...n[6]||(n[6]=[r("FIFO",-1)])]),_:1})):b("",!0)]}),_:1}),a(e(w),{size:"sm",variant:"ghost",loading:C.value,onClick:n[1]||(n[1]=g=>I())},{default:t(()=>[...n[7]||(n[7]=[r("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),V.value?(i(),c(e(ee),{key:0,variant:"danger",dismissible:"",onDismiss:n[2]||(n[2]=g=>V.value=null)},{default:t(()=>[r(d(V.value),1)]),_:1})):b("",!0),C.value&&!v.value?(i(),k("div",Je,[a(e(ae),{label:"Loading queue..."})])):v.value?(i(),k(D,{key:2},[a(e(xe),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(H),{label:"Available",value:v.value.available,tone:"warning"},null,8,["value"]),a(e(H),{label:"In flight",value:v.value.inFlight,tone:"info"},null,8,["value"]),a(e(H),{label:"Delayed",value:v.value.delayed,tone:"neutral"},null,8,["value"]),a(e(H),{label:"Processed (session)",value:v.value.processed,tone:"success"},null,8,["value"])]),_:1}),a(e(Me),{modelValue:M.value,"onUpdate:modelValue":n[4]||(n[4]=g=>M.value=g)},{default:t(()=>[a(e(Ne),null,{default:t(()=>[a(e(Z),{value:"send-receive"},{default:t(()=>[...n[8]||(n[8]=[r("Send & receive",-1)])]),_:1}),a(e(Z),{value:"consumers"},{default:t(()=>[...n[9]||(n[9]=[r("Consumers",-1)])]),_:1}),a(e(Z),{value:"attributes"},{default:t(()=>[...n[10]||(n[10]=[r("Attributes",-1)])]),_:1})]),_:1}),a(e(X),{value:"send-receive"},{default:t(()=>[f("div",We,[a(Le,{queue:v.value,onRefresh:n[3]||(n[3]=g=>I(!1))},null,8,["queue"])])]),_:1}),a(e(X),{value:"consumers"},{default:t(()=>[f("div",Ge,[a(e(P),{variant:"outline"},{header:t(()=>[...n[11]||(n[11]=[f("strong",null,"Lambda event-source mappings",-1)])]),default:t(()=>[v.value.consumers.length?(i(),c(e(m),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(i(!0),k(D,null,J(v.value.consumers,g=>(i(),c(e(P),{key:g.uuid||g.functionName,variant:"soft"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[f("span",He,d(g.functionName),1),f("span",Ke," UUID: "+d(g.uuid||"—")+" · batch size "+d(g.batchSize??"—"),1)]),_:2},1024),a(e(x),{tone:g.enabled?"success":"neutral",variant:"soft"},{default:t(()=>[r(d(g.state||(g.enabled?"Enabled":"Disabled")),1)]),_:2},1032,["tone"])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),c(e(le),{key:1,title:"No consumers attached",description:"No Lambda event-source mapping currently points at this queue."}))]),_:1})])]),_:1}),a(e(X),{value:"attributes"},{default:t(()=>[f("div",Ye,[a(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[...n[12]||(n[12]=[f("strong",null,"Identity",-1)])]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[n[13]||(n[13]=f("span",{class:"muted"},"Queue URL",-1)),f("span",Ze,d(v.value.url),1)]),_:1}),a(e(m),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[n[14]||(n[14]=f("span",{class:"muted"},"ARN",-1)),f("span",Xe,d(v.value.arn||"—"),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...n[15]||(n[15]=[f("strong",null,"Configuration",-1)])]),footer:t(()=>[f("span",et," Created "+d(F(v.value.createdAt))+" · last polled "+d(F(v.value.lastPolledAt)),1)]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" FIFO: "+d(v.value.fifo?"yes":"no"),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Visibility timeout: "+d(y(v.value.visibilityTimeout)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Retention: "+d(y(v.value.messageRetentionPeriod)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Delayed: "+d(v.value.delayed),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...n[16]||(n[16]=[f("strong",null,"Throughput",-1)])]),footer:t(()=>[a(e(m),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(w),{size:"sm",variant:"ghost",onClick:E},{default:t(()=>[...n[18]||(n[18]=[r(" Reset processed counter ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[n[17]||(n[17]=f("span",{class:"muted"},"Processed share (this session)",-1)),f("span",tt,d(B.value)+"%",1)]),_:1}),a(e(Se),{value:B.value},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):b("",!0)]),_:1}))}}),st=te({__name:"QueueDetailPage",props:{queueName:{}},setup(O){const L=ne();function $(){L.push("/queues")}return(U,z)=>(i(),c(at,{"queue-name":O.queueName,onBack:$},null,8,["queue-name"]))}});export{st as default};
|
|
1
|
+
import{k as te,m as i,e as c,U as e,t as m,Z as t,j as a,q as P,D as h,K as _e,E as A,f as b,d as f,y as w,i as r,g as k,F as D,n as J,L as we,T as d,p as x,G as ee,s as ae,z as le,A as $e,a0 as ze,v as Ve,C as Ie,r as p,b as Y,a as Q,c as se,l as qe,o as he,Y as Ce,x as H,w as xe,H as Ne,I as Z,J as X,u as K,N as Se,M as Me,V as Ae,W as ne}from"./index-BP9zQ9L-.js";const De={key:0,class:"muted mono",style:{"font-size":"0.75rem"}},Pe={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},Ue=["onClick"],je={class:"mono",style:{"font-size":"0.8rem"}},Fe={class:"mono",style:{"font-size":"0.75rem"}},Te={class:"muted",style:{"font-size":"0.75rem"}},Oe={key:1,class:"muted",style:{"font-size":"0.75rem"}},Re={key:0,style:{padding:"0.75rem 1rem","border-top":"1px solid var(--tree-color-border, #e5e7eb)"}},Be={key:0},Qe={class:"mono",style:{"white-space":"pre-wrap","word-break":"break-word","font-size":"0.78rem",background:"var(--tree-color-surface-muted, #f6f7f9)",padding:"0.5rem","border-radius":"6px","max-height":"280px",overflow:"auto"}},Le=te({__name:"QueueSendReceivePanel",props:{queue:{}},emits:["refresh"],setup(O,{emit:L}){const $=O,U=L,z=se(),j=p(""),R=p(0),v=p("default"),C=p(""),V=p([]),N=p(!1),S=p(null),M=p(null),B=p(10),I=p(0),E=p(0),y=p([]),F=p(!1),o=p(null),n=p({}),g=p(!1),W=p(!1),G=p({}),ue=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Binary",label:"Binary"}],T=Y(()=>$.queue.fifo),ie=[{key:"preview",label:"Body preview"},{key:"messageId",label:"Message ID"},{key:"sentAt",label:"Sent at"},{key:"attrs",label:"Attrs",align:"right"},{key:"actions",label:"",align:"right"}],oe=Y(()=>y.value.map((u,l)=>{var s;return{__id:l,__raw:u,messageId:u.messageId||"—",preview:re(u.body),sentAt:de((s=u.attributes)==null?void 0:s.SentTimestamp),attrs:u.messageAttributes?Object.keys(u.messageAttributes).length:0}}));function re(u){if(!u)return"—";const l=u.replace(/\s+/g," ").trim();return l.length>80?`${l.slice(0,80)}…`:l}function de(u){if(!u)return"—";const l=Number(u);return l?new Date(l).toLocaleString():"—"}function me(){V.value.push({name:"",type:"String",value:""})}function fe(u){V.value.splice(u,1)}function ve(u){if(!u)return"";const l=u.trim();if(!(l.startsWith("{")||l.startsWith("[")))return u;try{return JSON.stringify(JSON.parse(l),null,2)}catch{return u}}function ge(u){G.value[u]=!G.value[u]}async function pe(){if(!j.value.trim()){S.value="Message body is required";return}N.value=!0,S.value=null;try{const u=V.value.filter(s=>s.name.trim()),l=await Q.sendQueueMessage($.queue.name,{body:j.value,delaySeconds:T.value?void 0:R.value||void 0,messageAttributes:u.length?u:void 0,messageGroupId:T.value?v.value||"default":void 0,messageDeduplicationId:T.value&&C.value?C.value:void 0});M.value={messageId:l.messageId,sequenceNumber:l.sequenceNumber},z.add({title:"Message sent",description:l.messageId,variant:"success"}),U("refresh")}catch(u){S.value=u.message||"Failed to send message"}finally{N.value=!1}}async function ce(){F.value=!0,o.value=null;try{const u=await Q.receiveQueueMessages($.queue.name,{maxNumberOfMessages:B.value,visibilityTimeout:E.value,waitTimeSeconds:I.value});y.value=u.messages,u.messages.length||z.add({title:"No messages available",description:"The queue returned an empty batch.",variant:"info"}),U("refresh")}catch(u){o.value=u.message||"Failed to poll messages"}finally{F.value=!1}}async function ye(u){if(!(!u.receiptHandle||!u.messageId)){n.value[u.messageId]=!0;try{await Q.deleteQueueMessage($.queue.name,u.receiptHandle),y.value=y.value.filter(l=>l.messageId!==u.messageId),z.add({title:"Message deleted",variant:"success"}),U("refresh")}catch(l){z.add({title:"Failed to delete message",description:l.message,variant:"danger"})}finally{delete n.value[u.messageId]}}}async function be(){W.value=!0;try{await Q.purgeQueue($.queue.name),y.value=[],z.add({title:"Queue purged",description:"All messages were removed. It can take up to 60s to fully clear.",variant:"warning"}),U("refresh")}catch(u){z.add({title:"Failed to purge queue",description:u.message,variant:"danger"})}finally{W.value=!1,g.value=!1}}function ke(u){var l;(l=navigator.clipboard)==null||l.writeText(u).then(()=>{z.add({title:"Copied to clipboard",variant:"info"})})}return(u,l)=>(i(),c(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[l[14]||(l[14]=f("strong",null,"Send a message",-1)),T.value?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...l[13]||(l[13]=[r("FIFO",-1)])]),_:1})):b("",!0)]),_:1})]),footer:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(w),{variant:"solid",loading:N.value,onClick:pe},{default:t(()=>[...l[18]||(l[18]=[r("Send message",-1)])]),_:1},8,["loading"]),a(e(w),{variant:"ghost",disabled:N.value,onClick:l[4]||(l[4]=s=>j.value="")},{default:t(()=>[...l[19]||(l[19]=[r("Clear",-1)])]),_:1},8,["disabled"])]),_:1}),M.value?(i(),k("span",De,[r(" Last sent: "+d(M.value.messageId)+" ",1),M.value.sequenceNumber?(i(),k(D,{key:0},[r(" · seq "+d(M.value.sequenceNumber),1)],64)):b("",!0)])):b("",!0)]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(h),{label:"Message body",hint:"Plain text or JSON"},{default:t(()=>[a(e(_e),{modelValue:j.value,"onUpdate:modelValue":l[0]||(l[0]=s=>j.value=s),rows:6,placeholder:'{"event": "order.created", "orderId": "abc-123"}'},null,8,["modelValue"])]),_:1}),a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[T.value?b("",!0):(i(),c(e(h),{key:0,label:"Delay (seconds)",hint:"0–900",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:R.value,"onUpdate:modelValue":l[1]||(l[1]=s=>R.value=s),modelModifiers:{number:!0},type:"number",min:"0",max:"900"},null,8,["modelValue"])]),_:1})),T.value?(i(),c(e(h),{key:1,label:"MessageGroupId",hint:"Required for FIFO. Defaults to 'default'.",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:v.value,"onUpdate:modelValue":l[2]||(l[2]=s=>v.value=s),placeholder:"default"},null,8,["modelValue"])]),_:1})):b("",!0),T.value?(i(),c(e(h),{key:2,label:"MessageDeduplicationId",hint:"Optional if content-based dedup is on",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:C.value,"onUpdate:modelValue":l[3]||(l[3]=s=>C.value=s),placeholder:"auto"},null,8,["modelValue"])]),_:1})):b("",!0)]),_:1}),a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[l[16]||(l[16]=f("strong",{style:{"font-size":"0.85rem"}},"Message attributes – optional",-1)),a(e(w),{size:"sm",variant:"outline",onClick:me},{default:t(()=>[...l[15]||(l[15]=[r("Add attribute",-1)])]),_:1})]),_:1}),(i(!0),k(D,null,J(V.value,(s,q)=>(i(),c(e(m),{key:`a-${q}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(h),{label:"Name",style:{flex:"1.4"}},{default:t(()=>[a(e(A),{modelValue:s.name,"onUpdate:modelValue":_=>s.name=_,placeholder:"contentType"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(h),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e(we),{modelValue:s.type,"onUpdate:modelValue":_=>s.type=_,options:ue},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(h),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(A),{modelValue:s.value,"onUpdate:modelValue":_=>s.value=_,placeholder:"application/json"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(w),{size:"sm",variant:"outline",onClick:_=>fe(q)},{default:t(()=>[...l[17]||(l[17]=[r("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),S.value?(i(),c(e(ee),{key:0,variant:"danger",dismissible:"",onDismiss:l[5]||(l[5]=s=>S.value=null)},{default:t(()=>[r(d(S.value),1)]),_:1})):b("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[l[21]||(l[21]=f("strong",null,"Poll for messages",-1)),a(e(x),{tone:"warning",variant:"soft"},{default:t(()=>[...l[20]||(l[20]=[r(" Messages become invisible during the visibility timeout ",-1)])]),_:1})]),_:1})]),footer:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(w),{variant:"solid",loading:F.value,onClick:ce},{default:t(()=>[...l[22]||(l[22]=[r("Poll messages",-1)])]),_:1},8,["loading"]),a(e(w),{variant:"ghost",disabled:!y.value.length,onClick:l[9]||(l[9]=s=>y.value=[])},{default:t(()=>[...l[23]||(l[23]=[r(" Clear results ",-1)])]),_:1},8,["disabled"])]),_:1}),a(e(w),{size:"sm",variant:"outline",tone:"danger",onClick:l[10]||(l[10]=s=>g.value=!0)},{default:t(()=>[...l[24]||(l[24]=[r(" Purge queue ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(h),{label:"Max messages",hint:"1–10",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:B.value,"onUpdate:modelValue":l[6]||(l[6]=s=>B.value=s),modelModifiers:{number:!0},type:"number",min:"1",max:"10"},null,8,["modelValue"])]),_:1}),a(e(h),{label:"Visibility timeout (s)",hint:"0 keeps messages visible",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:E.value,"onUpdate:modelValue":l[7]||(l[7]=s=>E.value=s),modelModifiers:{number:!0},type:"number",min:"0"},null,8,["modelValue"])]),_:1}),a(e(h),{label:"Wait time (s)",hint:"0–20 (long polling)",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:I.value,"onUpdate:modelValue":l[8]||(l[8]=s=>I.value=s),modelModifiers:{number:!0},type:"number",min:"0",max:"20"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),o.value?(i(),c(e(ee),{key:1,variant:"danger",dismissible:"",onDismiss:l[11]||(l[11]=s=>o.value=null)},{default:t(()=>[r(d(o.value),1)]),_:1})):b("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[f("strong",null,"Received messages ("+d(y.value.length)+")",1),l[25]||(l[25]=f("span",{class:"muted",style:{"font-size":"0.75rem"}}," Click a row to view the full body ",-1))]),_:1})]),default:t(()=>[F.value&&!y.value.length?(i(),k("div",Pe,[a(e(ae),{label:"Polling..."})])):y.value.length?(i(),c(e($e),{key:2,columns:ie,rows:oe.value},{"cell-preview":t(({row:s})=>[f("a",{href:"#",style:{"text-decoration":"none"},onClick:ze(q=>ge(String(s.messageId)),["prevent"])},[f("span",je,d(G.value[String(s.messageId)]?"▼":"▶")+" "+d(s.preview),1)],8,Ue)]),"cell-messageId":t(({row:s})=>[f("span",Fe,d(s.messageId),1)]),"cell-sentAt":t(({row:s})=>[f("span",Te,d(s.sentAt),1)]),"cell-attrs":t(({row:s})=>[Number(s.attrs)>0?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[r(d(s.attrs),1)]),_:2},1024)):(i(),k("span",Oe,"—"))]),"cell-actions":t(({row:s})=>[a(e(m),{direction:"horizontal",gap:"0.25rem",justify:"flex-end"},{default:t(()=>[a(e(w),{size:"sm",variant:"ghost",onClick:q=>ke(String(s.__raw.body||""))},{default:t(()=>[...l[26]||(l[26]=[r(" Copy ",-1)])]),_:1},8,["onClick"]),a(e(w),{size:"sm",variant:"outline",tone:"danger",loading:n.value[String(s.messageId)],onClick:q=>ye(s.__raw)},{default:t(()=>[...l[27]||(l[27]=[r(" Delete ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),c(e(le),{key:1,title:"No messages loaded",description:"Use Poll messages to fetch a batch from the queue."})),(i(!0),k(D,null,J(y.value,s=>(i(),k(D,{key:`detail-${s.messageId}`},[s.messageId&&G.value[s.messageId]?(i(),k("div",Re,[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(x),{tone:"neutral",variant:"soft"},{default:t(()=>[r("id: "+d(s.messageId),1)]),_:2},1024),s.md5OfBody?(i(),c(e(x),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[r(" md5: "+d(s.md5OfBody.slice(0,12))+"… ",1)]),_:2},1024)):b("",!0),(i(!0),k(D,null,J(s.attributes||{},(q,_)=>(i(),c(e(x),{key:_,tone:"info",variant:"soft"},{default:t(()=>[r(d(_)+": "+d(q),1)]),_:2},1024))),128))]),_:2},1024),s.messageAttributes&&Object.keys(s.messageAttributes).length?(i(),k("div",Be,[l[28]||(l[28]=f("strong",{style:{"font-size":"0.8rem"}},"Message attributes",-1)),a(e(m),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),k(D,null,J(s.messageAttributes,(q,_)=>(i(),c(e(x),{key:`ma-${_}`,tone:"success",variant:"soft"},{default:t(()=>[r(d(_)+" ("+d(q.type||"String")+"): "+d(q.value),1)]),_:2},1024))),128))]),_:2},1024)])):b("",!0),a(e(Ve)),f("pre",Qe,d(ve(s.body)),1)]),_:2},1024)])):b("",!0)],64))),128))]),_:1}),a(e(Ie),{open:g.value,"onUpdate:open":l[12]||(l[12]=s=>g.value=s),title:"Purge queue",description:`Delete every message in '${$.queue.name}'? AWS rate-limits PurgeQueue to once every 60 seconds.`,"confirm-label":"Purge","cancel-label":"Cancel",tone:"danger",loading:W.value,onConfirm:be},null,8,["open","description","loading"])]),_:1}))}}),Ee={style:{"font-size":"1.1rem"}},Je={key:1,style:{display:"flex","justify-content":"center",padding:"2rem"}},We={style:{"padding-top":"1rem"}},Ge={style:{"padding-top":"1rem"}},He={class:"mono"},Ke={class:"muted",style:{"font-size":"0.75rem"}},Ye={style:{"padding-top":"1rem"}},Ze={class:"mono",style:{"font-size":"0.78rem"}},Xe={class:"mono",style:{"font-size":"0.78rem"}},et={class:"muted",style:{"font-size":"0.75rem"}},tt={class:"mono"},at=te({__name:"QueueDetail",props:{queueName:{}},emits:["back"],setup(O,{emit:L}){const $=O,U=L,z=Ae(),j=ne(),R=se(),v=p(null),C=p(!0),V=p(null);let N=null;const S=["send-receive","consumers","attributes"],M=Y({get(){const o=String(z.query.tab||"");return S.includes(o)?o:"send-receive"},set(o){j.replace({query:{...z.query,tab:o==="send-receive"?void 0:o}})}}),B=Y(()=>{const o=v.value;if(!o)return 0;const n=o.available+o.inFlight+o.processed;return n?Math.round(o.processed/n*100):0});async function I(o=!0){o&&(C.value=!0);try{v.value=await Q.getQueue($.queueName),V.value=null}catch(n){V.value=n.message||"Failed to load queue",v.value=null}finally{C.value=!1}}async function E(){if(v.value)try{await Q.resetQueueProcessed(v.value.name),R.add({title:"Processed counter reset",variant:"info"}),await I(!1)}catch(o){R.add({title:"Failed to reset counter",description:o.message,variant:"danger"})}}function y(o){return o===void 0?"—":o<60?`${o}s`:o<3600?`${Math.round(o/60)}m`:o<86400?`${Math.round(o/3600)}h`:`${Math.round(o/86400)}d`}function F(o){return o?new Date(o).toLocaleString():"—"}return qe(()=>{I(),N=window.setInterval(()=>I(!1),4e3)}),he(()=>{N&&window.clearInterval(N)}),Ce(()=>$.queueName,()=>I()),(o,n)=>(i(),c(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var g;return[a(e(w),{size:"sm",variant:"ghost",onClick:n[0]||(n[0]=W=>U("back"))},{default:t(()=>[...n[5]||(n[5]=[r("← Queues",-1)])]),_:1}),f("strong",Ee,d(O.queueName),1),(g=v.value)!=null&&g.fifo?(i(),c(e(x),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...n[6]||(n[6]=[r("FIFO",-1)])]),_:1})):b("",!0)]}),_:1}),a(e(w),{size:"sm",variant:"ghost",loading:C.value,onClick:n[1]||(n[1]=g=>I())},{default:t(()=>[...n[7]||(n[7]=[r("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),V.value?(i(),c(e(ee),{key:0,variant:"danger",dismissible:"",onDismiss:n[2]||(n[2]=g=>V.value=null)},{default:t(()=>[r(d(V.value),1)]),_:1})):b("",!0),C.value&&!v.value?(i(),k("div",Je,[a(e(ae),{label:"Loading queue..."})])):v.value?(i(),k(D,{key:2},[a(e(xe),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(H),{label:"Available",value:v.value.available,tone:"warning"},null,8,["value"]),a(e(H),{label:"In flight",value:v.value.inFlight,tone:"info"},null,8,["value"]),a(e(H),{label:"Delayed",value:v.value.delayed,tone:"neutral"},null,8,["value"]),a(e(H),{label:"Processed (session)",value:v.value.processed,tone:"success"},null,8,["value"])]),_:1}),a(e(Me),{modelValue:M.value,"onUpdate:modelValue":n[4]||(n[4]=g=>M.value=g)},{default:t(()=>[a(e(Ne),null,{default:t(()=>[a(e(Z),{value:"send-receive"},{default:t(()=>[...n[8]||(n[8]=[r("Send & receive",-1)])]),_:1}),a(e(Z),{value:"consumers"},{default:t(()=>[...n[9]||(n[9]=[r("Consumers",-1)])]),_:1}),a(e(Z),{value:"attributes"},{default:t(()=>[...n[10]||(n[10]=[r("Attributes",-1)])]),_:1})]),_:1}),a(e(X),{value:"send-receive"},{default:t(()=>[f("div",We,[a(Le,{queue:v.value,onRefresh:n[3]||(n[3]=g=>I(!1))},null,8,["queue"])])]),_:1}),a(e(X),{value:"consumers"},{default:t(()=>[f("div",Ge,[a(e(P),{variant:"outline"},{header:t(()=>[...n[11]||(n[11]=[f("strong",null,"Lambda event-source mappings",-1)])]),default:t(()=>[v.value.consumers.length?(i(),c(e(m),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(i(!0),k(D,null,J(v.value.consumers,g=>(i(),c(e(P),{key:g.uuid||g.functionName,variant:"soft"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[f("span",He,d(g.functionName),1),f("span",Ke," UUID: "+d(g.uuid||"—")+" · batch size "+d(g.batchSize??"—"),1)]),_:2},1024),a(e(x),{tone:g.enabled?"success":"neutral",variant:"soft"},{default:t(()=>[r(d(g.state||(g.enabled?"Enabled":"Disabled")),1)]),_:2},1032,["tone"])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),c(e(le),{key:1,title:"No consumers attached",description:"No Lambda event-source mapping currently points at this queue."}))]),_:1})])]),_:1}),a(e(X),{value:"attributes"},{default:t(()=>[f("div",Ye,[a(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[...n[12]||(n[12]=[f("strong",null,"Identity",-1)])]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[n[13]||(n[13]=f("span",{class:"muted"},"Queue URL",-1)),f("span",Ze,d(v.value.url),1)]),_:1}),a(e(m),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[n[14]||(n[14]=f("span",{class:"muted"},"ARN",-1)),f("span",Xe,d(v.value.arn||"—"),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...n[15]||(n[15]=[f("strong",null,"Configuration",-1)])]),footer:t(()=>[f("span",et," Created "+d(F(v.value.createdAt))+" · last polled "+d(F(v.value.lastPolledAt)),1)]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" FIFO: "+d(v.value.fifo?"yes":"no"),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Visibility timeout: "+d(y(v.value.visibilityTimeout)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Retention: "+d(y(v.value.messageRetentionPeriod)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[r(" Delayed: "+d(v.value.delayed),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...n[16]||(n[16]=[f("strong",null,"Throughput",-1)])]),footer:t(()=>[a(e(m),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(w),{size:"sm",variant:"ghost",onClick:E},{default:t(()=>[...n[18]||(n[18]=[r(" Reset processed counter ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[n[17]||(n[17]=f("span",{class:"muted"},"Processed share (this session)",-1)),f("span",tt,d(B.value)+"%",1)]),_:1}),a(e(Se),{value:B.value},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):b("",!0)]),_:1}))}}),st=te({__name:"QueueDetailPage",props:{queueName:{}},setup(O){const L=ne();function $(){L.push("/queues")}return(U,z)=>(i(),c(at,{"queue-name":O.queueName,onBack:$},null,8,["queue-name"]))}});export{st as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as Q,W as q,l as P,o as V,m as i,e as d,U as n,t as m,Z as a,j as s,w as j,x as y,G as T,i as r,T as u,f as U,q as A,g as k,s as D,z as M,A as O,p as g,y as E,F as G,n as W,u as N,R as Z,d as b,a0 as H,r as _,b as S,a as x}from"./index-
|
|
1
|
+
import{k as Q,W as q,l as P,o as V,m as i,e as d,U as n,t as m,Z as a,j as s,w as j,x as y,G as T,i as r,T as u,f as U,q as A,g as k,s as D,z as M,A as O,p as g,y as E,F as G,n as W,u as N,R as Z,d as b,a0 as H,r as _,b as S,a as x}from"./index-BP9zQ9L-.js";const J={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},K=["onClick"],X={class:"muted mono",style:{"font-size":"0.75rem"}},Y={key:1,class:"muted",style:{"font-size":"0.75rem"}},ee=Q({__name:"QueuesView",setup(z){const $=q(),c=_([]),F=_({}),v=_(!0),f=_(null);let h=null;const B=[{key:"name",label:"Queue"},{key:"service",label:"Service"},{key:"available",label:"Available",align:"right"},{key:"inFlight",label:"In flight",align:"right"},{key:"processed",label:"Processed",align:"right"},{key:"consumers",label:"Consumers"},{key:"actions",label:"",align:"right"}],I=S(()=>c.value.map(t=>({...t,consumersCount:t.consumers.length,service:F.value[t.name]||""}))),p=S(()=>({queues:c.value.length,available:c.value.reduce((t,l)=>t+l.available,0),inFlight:c.value.reduce((t,l)=>t+l.inFlight,0),processed:c.value.reduce((t,l)=>t+l.processed,0)}));async function w(){try{const[t,l]=await Promise.all([x.listQueues(),x.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);c.value=t;const e={};for(const o of l.queues)e[o.name]=o.service;F.value=e,f.value=null}catch(t){f.value=t.message||"Failed to load queues"}finally{v.value=!1}}function C(t){$.push(`/queues/${encodeURIComponent(t)}`)}function R(t){return t.available>0?"warning":t.inFlight>0?"info":t.consumers.some(l=>l.enabled)?"success":"neutral"}function L(t){return t.available>0?"Backlog":t.inFlight>0?"Processing":t.consumers.length?"Idle":"No consumers"}return P(()=>{w(),h=window.setInterval(w,4e3)}),V(()=>{h&&window.clearInterval(h)}),(t,l)=>(i(),d(n(m),{direction:"vertical",gap:"1.25rem"},{default:a(()=>[s(n(j),{columns:4,gap:"1rem"},{default:a(()=>[s(n(y),{label:"Queues",value:p.value.queues,tone:"info",loading:v.value},null,8,["value","loading"]),s(n(y),{label:"Available messages",value:p.value.available,tone:"warning",loading:v.value},null,8,["value","loading"]),s(n(y),{label:"In flight",value:p.value.inFlight,tone:"info",loading:v.value},null,8,["value","loading"]),s(n(y),{label:"Processed",value:p.value.processed,tone:"success",loading:v.value},null,8,["value","loading"])]),_:1}),f.value?(i(),d(n(T),{key:0,variant:"danger",dismissible:"",onDismiss:l[0]||(l[0]=e=>f.value=null)},{default:a(()=>[r(u(f.value),1)]),_:1})):U("",!0),s(n(A),{variant:"outline"},{header:a(()=>[s(n(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[...l[1]||(l[1]=[b("strong",null,"SQS Queues",-1),b("span",{class:"muted"},"Live · refreshes every 4s",-1)])]),_:1})]),default:a(()=>[v.value?(i(),k("div",J,[s(n(D),{label:"Loading queues..."})])):c.value.length?(i(),d(n(O),{key:2,columns:B,rows:I.value},{"cell-name":a(({row:e})=>[s(n(m),{direction:"vertical",gap:"0.125rem"},{default:a(()=>[b("a",{href:"#",style:{"text-decoration":"none","font-weight":"600"},onClick:H(o=>C(String(e.name)),["prevent"])},u(e.name),9,K),b("span",X,u(String(e.arn||e.url||"")),1)]),_:2},1024)]),"cell-service":a(({row:e})=>[e.service?(i(),d(n(Z),{key:0,to:`/services/${encodeURIComponent(String(e.service))}`,style:{"text-decoration":"none"}},{default:a(()=>[s(n(N),{size:"sm",variant:"soft",clickable:""},{default:a(()=>[r(u(e.service),1)]),_:2},1024)]),_:2},1032,["to"])):(i(),k("span",Y,"unmanaged"))]),"cell-available":a(({row:e})=>[s(n(g),{tone:Number(e.available)>0?"warning":"neutral",variant:"soft"},{default:a(()=>[r(u(e.available),1)]),_:2},1032,["tone"])]),"cell-inFlight":a(({row:e})=>[s(n(g),{tone:Number(e.inFlight)>0?"info":"neutral",variant:"soft"},{default:a(()=>[r(u(e.inFlight),1)]),_:2},1032,["tone"])]),"cell-processed":a(({row:e})=>[s(n(g),{tone:"success",variant:"soft"},{default:a(()=>[r(u(e.processed),1)]),_:2},1024)]),"cell-consumers":a(({row:e})=>[s(n(m),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:a(()=>[e.consumers.length?(i(!0),k(G,{key:0},W(e.consumers,o=>(i(),d(n(N),{key:o.uuid||o.functionName,size:"sm",variant:o.enabled?"solid":"outline"},{default:a(()=>[r(u(o.functionName),1)]),_:2},1032,["variant"]))),128)):(i(),d(n(g),{key:1,tone:"neutral",variant:"soft"},{default:a(()=>[...l[2]||(l[2]=[r("No consumers",-1)])]),_:1}))]),_:2},1024)]),"cell-actions":a(({row:e})=>[s(n(m),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:a(()=>[s(n(g),{tone:R(e),variant:"solid"},{default:a(()=>[r(u(L(e)),1)]),_:2},1032,["tone"]),s(n(E),{size:"sm",variant:"ghost",onClick:o=>C(String(e.name))},{default:a(()=>[...l[3]||(l[3]=[r(" Open ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),d(n(M),{key:1,title:"No queues found",description:"Register a microservice that defines SQS resources or create queues directly in LocalStack."}))]),_:1})]),_:1}))}}),te=Q({__name:"QueuesPage",setup(z){return($,c)=>(i(),d(ee))}});export{te as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k as re,l as oe,o as ie,Y as ue,e as c,Z as t,U as e,t as l,a as B,r as h,m as s,j as a,R as P,y as C,i as u,d as f,T as i,p as g,f as p,G as de,g as y,s as ve,x as I,w as ce,q as J,z as fe,F as _,n as z,u as k,B as me,C as pe,b as ge,c as ye,W as _e}from"./index-MF9fVrsr.js";const be={style:{"font-size":"1.1rem"}},he={key:1,style:{display:"flex","justify-content":"center",padding:"2rem"}},ze={class:"mono"},ke={class:"mono"},we={class:"mono"},$e={class:"mono"},Se={class:"muted"},Ne={class:"muted"},Le={class:"muted"},Ce={class:"muted"},De={class:"muted"},je={class:"muted"},xe={class:"muted"},Be={class:"muted"},Ie={class:"muted"},Te={class:"logs-pre"},Fe=re({__name:"ServiceDetailPage",props:{serviceName:{}},setup(T){const b=T,K=_e(),S=ye(),m=h(null),q=h(!0),D=h(null),F=h(!1),R=h(!1),U=h(!1),M=h([]),Q=h("stopped");let w=null,V=null;const E=h(!1),r=ge(()=>{var n;const v={lambda:[],dynamodb:[],sqs:[],sns:[],s3:[],eventbus:[],"event-rule":[],opensearch:[],"event-source":[]};for(const d of((n=m.value)==null?void 0:n.resources)||[])v[d.type]||(v[d.type]=[]),v[d.type].push(d);return v});async function N(){q.value=!0;try{m.value=await B.getService(b.serviceName),D.value=null}catch(v){D.value=v.message||"Service not found",m.value=null}finally{q.value=!1}}async function X(){if(!F.value){F.value=!0;try{await B.startService(b.serviceName),S.add({title:"Service started",description:b.serviceName,variant:"success"}),await N()}catch(v){S.add({title:"Failed to start",description:v.message,variant:"danger"})}finally{F.value=!1}}}async function ee(){if(!R.value){R.value=!0;try{await B.stopService(b.serviceName),S.add({title:"Service stopped",description:b.serviceName,variant:"info"}),await N()}catch(v){S.add({title:"Failed to stop",description:v.message,variant:"danger"})}finally{R.value=!1}}}async function G(){try{const v=await B.getServiceLogs(b.serviceName);M.value=v.logs||[],Q.value=v.status||"stopped"}catch(v){console.error("Failed to fetch logs:",v)}}function te(){U.value=!0,G(),w&&window.clearInterval(w),w=window.setInterval(G,2e3)}function ae(){U.value=!1,w&&window.clearInterval(w),w=null}async function ne(){try{await B.deleteService(b.serviceName),S.add({title:"Service deleted",description:b.serviceName,variant:"info"}),K.push("/services")}catch(v){S.add({title:"Failed to delete",description:v.message,variant:"danger"})}finally{E.value=!1}}function le(v){switch(v){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}function se(v){return v?new Date(v).toLocaleString():"—"}return oe(()=>{N(),V=window.setInterval(N,1e4)}),ie(()=>{V&&window.clearInterval(V),w&&window.clearInterval(w)}),ue(()=>b.serviceName,N),(v,n)=>(s(),c(e(l),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var d;return[a(e(P),{to:"/services",style:{"text-decoration":"none"}},{default:t(()=>[a(e(C),{size:"sm",variant:"ghost"},{default:t(()=>[...n[5]||(n[5]=[u("← Services",-1)])]),_:1})]),_:1}),f("strong",be,i(T.serviceName),1),(d=m.value)!=null&&d.status?(s(),c(e(g),{key:0,tone:le(m.value.status),variant:"soft"},{default:t(()=>[u(i(m.value.status),1)]),_:1},8,["tone"])):p("",!0)]}),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem"},{default:t(()=>{var d,$;return[a(e(C),{size:"sm",variant:"soft",disabled:((d=m.value)==null?void 0:d.status)==="running",loading:F.value,onClick:X},{default:t(()=>[...n[6]||(n[6]=[u(" Start ",-1)])]),_:1},8,["disabled","loading"]),a(e(C),{size:"sm",variant:"soft",disabled:(($=m.value)==null?void 0:$.status)!=="running",loading:R.value,onClick:ee},{default:t(()=>[...n[7]||(n[7]=[u(" Stop ",-1)])]),_:1},8,["disabled","loading"]),a(e(C),{size:"sm",variant:"ghost",onClick:te},{default:t(()=>[...n[8]||(n[8]=[u("Logs",-1)])]),_:1}),a(e(C),{size:"sm",variant:"ghost",loading:q.value,onClick:N},{default:t(()=>[...n[9]||(n[9]=[u("Refresh",-1)])]),_:1},8,["loading"]),a(e(C),{size:"sm",variant:"danger",onClick:n[0]||(n[0]=L=>E.value=!0)},{default:t(()=>[...n[10]||(n[10]=[u("Delete",-1)])]),_:1})]}),_:1})]),_:1}),D.value?(s(),c(e(de),{key:0,variant:"danger",dismissible:"",onDismiss:n[1]||(n[1]=d=>D.value=null)},{default:t(()=>[u(i(D.value),1)]),_:1})):p("",!0),q.value&&!m.value?(s(),y("div",he,[a(e(ve),{label:"Loading service..."})])):m.value?(s(),y(_,{key:2},[a(e(ce),{columns:5,gap:"1rem"},{default:t(()=>{var d,$,L,j,x;return[a(e(I),{label:"Lambdas",value:((d=r.value.lambda)==null?void 0:d.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Tables",value:(($=r.value.dynamodb)==null?void 0:$.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Queues",value:((L=r.value.sqs)==null?void 0:L.length)||0,tone:"warning"},null,8,["value"]),a(e(I),{label:"Topics",value:((j=r.value.sns)==null?void 0:j.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Buckets",value:((x=r.value.s3)==null?void 0:x.length)||0,tone:"neutral"},null,8,["value"])]}),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[...n[11]||(n[11]=[f("strong",null,"Metadata",-1)])]),default:t(()=>[a(e(l),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[12]||(n[12]=f("span",{class:"muted"},"Path",-1)),f("span",ze,i(m.value.root),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[13]||(n[13]=f("span",{class:"muted"},"Region",-1)),f("span",ke,i(m.value.region||"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[14]||(n[14]=f("span",{class:"muted"},"Invoke port",-1)),f("span",we,i(m.value.invokePort??"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[15]||(n[15]=f("span",{class:"muted"},"PID",-1)),f("span",$e,i(m.value.pid??"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[16]||(n[16]=f("span",{class:"muted"},"Last updated",-1)),f("span",null,i(se(m.value.lastUpdated)),1)]),_:1})]),_:1})]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[n[17]||(n[17]=f("strong",null,"Declared resources",-1)),a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>{var d;return[u(i(((d=m.value.resources)==null?void 0:d.length)||0)+" total ",1)]}),_:1})]),_:1})]),default:t(()=>{var d;return[(d=m.value.resources)!=null&&d.length?(s(),c(e(l),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>{var $,L,j,x,W,Y,Z,A,H;return[($=r.value.dynamodb)!=null&&$.length?(s(),c(e(l),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[18]||(n[18]=[u("DynamoDB tables",-1)])]),_:1}),f("span",Se,i(r.value.dynamodb.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.dynamodb,o=>(s(),c(e(P),{key:`db-${o.name}`,to:`/dynamo/${encodeURIComponent(o.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):p("",!0),(L=r.value.sqs)!=null&&L.length?(s(),c(e(l),{key:1,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"warning",variant:"soft"},{default:t(()=>[...n[19]||(n[19]=[u("SQS queues",-1)])]),_:1}),f("span",Ne,i(r.value.sqs.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.sqs,o=>(s(),c(e(P),{key:`q-${o.name}`,to:"/queues",style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(j=r.value.sns)!=null&&j.length?(s(),c(e(l),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[20]||(n[20]=[u("SNS topics",-1)])]),_:1}),f("span",Le,i(r.value.sns.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.sns,o=>(s(),c(e(k),{key:`t-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(x=r.value.s3)!=null&&x.length?(s(),c(e(l),{key:3,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[21]||(n[21]=[u("S3 buckets",-1)])]),_:1}),f("span",Ce,i(r.value.s3.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.s3,o=>(s(),c(e(P),{key:`b-${o.name}`,to:`/buckets/${encodeURIComponent(o.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):p("",!0),(W=r.value.lambda)!=null&&W.length?(s(),c(e(l),{key:4,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[22]||(n[22]=[u("Lambda functions",-1)])]),_:1}),f("span",De,i(r.value.lambda.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.lambda,o=>(s(),c(e(k),{key:`l-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(" λ "+i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(Y=r.value.eventbus)!=null&&Y.length?(s(),c(e(l),{key:5,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[23]||(n[23]=[u("EventBridge buses",-1)])]),_:1}),f("span",je,i(r.value.eventbus.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.eventbus,o=>(s(),c(e(k),{key:`eb-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(Z=r.value["event-rule"])!=null&&Z.length?(s(),c(e(l),{key:6,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[24]||(n[24]=[u("EventBridge rules",-1)])]),_:1}),f("span",xe,i(r.value["event-rule"].length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value["event-rule"],(o,O)=>(s(),c(e(k),{key:`er-${O}-${o.name}`,size:"sm",variant:"outline"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(A=r.value.opensearch)!=null&&A.length?(s(),c(e(l),{key:7,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[25]||(n[25]=[u("OpenSearch collections",-1)])]),_:1}),f("span",Be,i(r.value.opensearch.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.opensearch,o=>(s(),c(e(k),{key:`os-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(" 🔍 "+i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(H=r.value["event-source"])!=null&&H.length?(s(),c(e(l),{key:8,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[26]||(n[26]=[u("Event-source mappings",-1)])]),_:1}),f("span",Ie,i(r.value["event-source"].length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value["event-source"],(o,O)=>(s(),c(e(k),{key:`es-${O}-${o.name}`,size:"sm",variant:"outline"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0)]}),_:1})):(s(),c(e(fe),{key:0,title:"No resources declared",description:"This service's CloudFormation template has no resources LSS understands yet."}))]}),_:1})],64)):p("",!0),a(e(me),{open:U.value,"onUpdate:open":[n[2]||(n[2]=d=>U.value=d),n[3]||(n[3]=d=>{d||ae()})],title:`Logs — ${T.serviceName}`,description:`Status: ${Q.value}`,size:"lg"},{default:t(()=>[f("pre",Te,i(M.value.join(`
|
|
1
|
+
import{k as re,l as oe,o as ie,Y as ue,e as c,Z as t,U as e,t as l,a as B,r as h,m as s,j as a,R as P,y as C,i as u,d as f,T as i,p as g,f as p,G as de,g as y,s as ve,x as I,w as ce,q as J,z as fe,F as _,n as z,u as k,B as me,C as pe,b as ge,c as ye,W as _e}from"./index-BP9zQ9L-.js";const be={style:{"font-size":"1.1rem"}},he={key:1,style:{display:"flex","justify-content":"center",padding:"2rem"}},ze={class:"mono"},ke={class:"mono"},we={class:"mono"},$e={class:"mono"},Se={class:"muted"},Ne={class:"muted"},Le={class:"muted"},Ce={class:"muted"},De={class:"muted"},je={class:"muted"},xe={class:"muted"},Be={class:"muted"},Ie={class:"muted"},Te={class:"logs-pre"},Fe=re({__name:"ServiceDetailPage",props:{serviceName:{}},setup(T){const b=T,K=_e(),S=ye(),m=h(null),q=h(!0),D=h(null),F=h(!1),R=h(!1),U=h(!1),M=h([]),Q=h("stopped");let w=null,V=null;const E=h(!1),r=ge(()=>{var n;const v={lambda:[],dynamodb:[],sqs:[],sns:[],s3:[],eventbus:[],"event-rule":[],opensearch:[],"event-source":[]};for(const d of((n=m.value)==null?void 0:n.resources)||[])v[d.type]||(v[d.type]=[]),v[d.type].push(d);return v});async function N(){q.value=!0;try{m.value=await B.getService(b.serviceName),D.value=null}catch(v){D.value=v.message||"Service not found",m.value=null}finally{q.value=!1}}async function X(){if(!F.value){F.value=!0;try{await B.startService(b.serviceName),S.add({title:"Service started",description:b.serviceName,variant:"success"}),await N()}catch(v){S.add({title:"Failed to start",description:v.message,variant:"danger"})}finally{F.value=!1}}}async function ee(){if(!R.value){R.value=!0;try{await B.stopService(b.serviceName),S.add({title:"Service stopped",description:b.serviceName,variant:"info"}),await N()}catch(v){S.add({title:"Failed to stop",description:v.message,variant:"danger"})}finally{R.value=!1}}}async function G(){try{const v=await B.getServiceLogs(b.serviceName);M.value=v.logs||[],Q.value=v.status||"stopped"}catch(v){console.error("Failed to fetch logs:",v)}}function te(){U.value=!0,G(),w&&window.clearInterval(w),w=window.setInterval(G,2e3)}function ae(){U.value=!1,w&&window.clearInterval(w),w=null}async function ne(){try{await B.deleteService(b.serviceName),S.add({title:"Service deleted",description:b.serviceName,variant:"info"}),K.push("/services")}catch(v){S.add({title:"Failed to delete",description:v.message,variant:"danger"})}finally{E.value=!1}}function le(v){switch(v){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}function se(v){return v?new Date(v).toLocaleString():"—"}return oe(()=>{N(),V=window.setInterval(N,1e4)}),ie(()=>{V&&window.clearInterval(V),w&&window.clearInterval(w)}),ue(()=>b.serviceName,N),(v,n)=>(s(),c(e(l),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var d;return[a(e(P),{to:"/services",style:{"text-decoration":"none"}},{default:t(()=>[a(e(C),{size:"sm",variant:"ghost"},{default:t(()=>[...n[5]||(n[5]=[u("← Services",-1)])]),_:1})]),_:1}),f("strong",be,i(T.serviceName),1),(d=m.value)!=null&&d.status?(s(),c(e(g),{key:0,tone:le(m.value.status),variant:"soft"},{default:t(()=>[u(i(m.value.status),1)]),_:1},8,["tone"])):p("",!0)]}),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem"},{default:t(()=>{var d,$;return[a(e(C),{size:"sm",variant:"soft",disabled:((d=m.value)==null?void 0:d.status)==="running",loading:F.value,onClick:X},{default:t(()=>[...n[6]||(n[6]=[u(" Start ",-1)])]),_:1},8,["disabled","loading"]),a(e(C),{size:"sm",variant:"soft",disabled:(($=m.value)==null?void 0:$.status)!=="running",loading:R.value,onClick:ee},{default:t(()=>[...n[7]||(n[7]=[u(" Stop ",-1)])]),_:1},8,["disabled","loading"]),a(e(C),{size:"sm",variant:"ghost",onClick:te},{default:t(()=>[...n[8]||(n[8]=[u("Logs",-1)])]),_:1}),a(e(C),{size:"sm",variant:"ghost",loading:q.value,onClick:N},{default:t(()=>[...n[9]||(n[9]=[u("Refresh",-1)])]),_:1},8,["loading"]),a(e(C),{size:"sm",variant:"danger",onClick:n[0]||(n[0]=L=>E.value=!0)},{default:t(()=>[...n[10]||(n[10]=[u("Delete",-1)])]),_:1})]}),_:1})]),_:1}),D.value?(s(),c(e(de),{key:0,variant:"danger",dismissible:"",onDismiss:n[1]||(n[1]=d=>D.value=null)},{default:t(()=>[u(i(D.value),1)]),_:1})):p("",!0),q.value&&!m.value?(s(),y("div",he,[a(e(ve),{label:"Loading service..."})])):m.value?(s(),y(_,{key:2},[a(e(ce),{columns:5,gap:"1rem"},{default:t(()=>{var d,$,L,j,x;return[a(e(I),{label:"Lambdas",value:((d=r.value.lambda)==null?void 0:d.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Tables",value:(($=r.value.dynamodb)==null?void 0:$.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Queues",value:((L=r.value.sqs)==null?void 0:L.length)||0,tone:"warning"},null,8,["value"]),a(e(I),{label:"Topics",value:((j=r.value.sns)==null?void 0:j.length)||0,tone:"info"},null,8,["value"]),a(e(I),{label:"Buckets",value:((x=r.value.s3)==null?void 0:x.length)||0,tone:"neutral"},null,8,["value"])]}),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[...n[11]||(n[11]=[f("strong",null,"Metadata",-1)])]),default:t(()=>[a(e(l),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[12]||(n[12]=f("span",{class:"muted"},"Path",-1)),f("span",ze,i(m.value.root),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[13]||(n[13]=f("span",{class:"muted"},"Region",-1)),f("span",ke,i(m.value.region||"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[14]||(n[14]=f("span",{class:"muted"},"Invoke port",-1)),f("span",we,i(m.value.invokePort??"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[15]||(n[15]=f("span",{class:"muted"},"PID",-1)),f("span",$e,i(m.value.pid??"—"),1)]),_:1}),a(e(l),{direction:"horizontal",justify:"space-between"},{default:t(()=>[n[16]||(n[16]=f("span",{class:"muted"},"Last updated",-1)),f("span",null,i(se(m.value.lastUpdated)),1)]),_:1})]),_:1})]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[n[17]||(n[17]=f("strong",null,"Declared resources",-1)),a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>{var d;return[u(i(((d=m.value.resources)==null?void 0:d.length)||0)+" total ",1)]}),_:1})]),_:1})]),default:t(()=>{var d;return[(d=m.value.resources)!=null&&d.length?(s(),c(e(l),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>{var $,L,j,x,W,Y,Z,A,H;return[($=r.value.dynamodb)!=null&&$.length?(s(),c(e(l),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[18]||(n[18]=[u("DynamoDB tables",-1)])]),_:1}),f("span",Se,i(r.value.dynamodb.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.dynamodb,o=>(s(),c(e(P),{key:`db-${o.name}`,to:`/dynamo/${encodeURIComponent(o.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):p("",!0),(L=r.value.sqs)!=null&&L.length?(s(),c(e(l),{key:1,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"warning",variant:"soft"},{default:t(()=>[...n[19]||(n[19]=[u("SQS queues",-1)])]),_:1}),f("span",Ne,i(r.value.sqs.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.sqs,o=>(s(),c(e(P),{key:`q-${o.name}`,to:"/queues",style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(j=r.value.sns)!=null&&j.length?(s(),c(e(l),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[20]||(n[20]=[u("SNS topics",-1)])]),_:1}),f("span",Le,i(r.value.sns.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.sns,o=>(s(),c(e(k),{key:`t-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(x=r.value.s3)!=null&&x.length?(s(),c(e(l),{key:3,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[21]||(n[21]=[u("S3 buckets",-1)])]),_:1}),f("span",Ce,i(r.value.s3.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.s3,o=>(s(),c(e(P),{key:`b-${o.name}`,to:`/buckets/${encodeURIComponent(o.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[u(i(o.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):p("",!0),(W=r.value.lambda)!=null&&W.length?(s(),c(e(l),{key:4,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[22]||(n[22]=[u("Lambda functions",-1)])]),_:1}),f("span",De,i(r.value.lambda.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.lambda,o=>(s(),c(e(k),{key:`l-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(" λ "+i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(Y=r.value.eventbus)!=null&&Y.length?(s(),c(e(l),{key:5,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[23]||(n[23]=[u("EventBridge buses",-1)])]),_:1}),f("span",je,i(r.value.eventbus.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.eventbus,o=>(s(),c(e(k),{key:`eb-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(Z=r.value["event-rule"])!=null&&Z.length?(s(),c(e(l),{key:6,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[24]||(n[24]=[u("EventBridge rules",-1)])]),_:1}),f("span",xe,i(r.value["event-rule"].length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value["event-rule"],(o,O)=>(s(),c(e(k),{key:`er-${O}-${o.name}`,size:"sm",variant:"outline"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(A=r.value.opensearch)!=null&&A.length?(s(),c(e(l),{key:7,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"info",variant:"soft"},{default:t(()=>[...n[25]||(n[25]=[u("OpenSearch collections",-1)])]),_:1}),f("span",Be,i(r.value.opensearch.length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value.opensearch,o=>(s(),c(e(k),{key:`os-${o.name}`,size:"sm",variant:"soft"},{default:t(()=>[u(" 🔍 "+i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0),(H=r.value["event-source"])!=null&&H.length?(s(),c(e(l),{key:8,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(l),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(g),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[26]||(n[26]=[u("Event-source mappings",-1)])]),_:1}),f("span",Ie,i(r.value["event-source"].length),1)]),_:1}),a(e(l),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(s(!0),y(_,null,z(r.value["event-source"],(o,O)=>(s(),c(e(k),{key:`es-${O}-${o.name}`,size:"sm",variant:"outline"},{default:t(()=>[u(i(o.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):p("",!0)]}),_:1})):(s(),c(e(fe),{key:0,title:"No resources declared",description:"This service's CloudFormation template has no resources LSS understands yet."}))]}),_:1})],64)):p("",!0),a(e(me),{open:U.value,"onUpdate:open":[n[2]||(n[2]=d=>U.value=d),n[3]||(n[3]=d=>{d||ae()})],title:`Logs — ${T.serviceName}`,description:`Status: ${Q.value}`,size:"lg"},{default:t(()=>[f("pre",Te,i(M.value.join(`
|
|
2
2
|
`)||"— no output yet —"),1)]),_:1},8,["open","title","description"]),a(e(pe),{open:E.value,"onUpdate:open":n[4]||(n[4]=d=>E.value=d),title:`Delete service “${T.serviceName}”?`,description:"This removes the service from the cache and cleans up its provisioned resources in LocalStack.","confirm-label":"Delete","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:ne},null,8,["open","title"])]),_:1}))}});export{Fe as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k as O,l as se,o as ne,m as i,e as d,U as n,q as re,Z as s,g as E,j as r,s as le,z as ie,A as oe,t as C,y as B,i as l,T as o,u as g,f as v,d as L,p as ue,R as de,B as ce,C as ve,D as fe,E as ge,$ as pe,r as u,b as K,a as w,c as me}from"./index-
|
|
1
|
+
import{k as O,l as se,o as ne,m as i,e as d,U as n,q as re,Z as s,g as E,j as r,s as le,z as ie,A as oe,t as C,y as B,i as l,T as o,u as g,f as v,d as L,p as ue,R as de,B as ce,C as ve,D as fe,E as ge,$ as pe,r as u,b as K,a as w,c as me}from"./index-BP9zQ9L-.js";const ke={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},ye={style:{"text-decoration":"underline","text-decoration-style":"dotted","text-underline-offset":"3px"}},Se={class:"mono"},be={key:8,class:"muted",style:{"font-size":"0.75rem"}},_e={class:"logs-pre"},we=O({__name:"ServicesList",setup(Z){const c=me(),h=u([]),U=u(!0),$=u(!1),p=u(""),y=u(null),x=u([]),R=u("stopped"),f=u(null),m=u({}),k=u({}),S=u(null),z=u(!1);let D=null;const G=[{key:"name",label:"Name"},{key:"status",label:"Status"},{key:"root",label:"Path"},{key:"resourceBreakdown",label:"Resources"},{key:"lastUpdated",label:"Last updated"},{key:"actions",label:"Actions",align:"right"}],H=K(()=>h.value.map(t=>({...t}))),F=K({get:()=>y.value!==null,set:t=>{t||X()}});async function b(){try{h.value=await w.listServices()}catch(t){console.error("Failed to load services:",t)}finally{U.value=!1}}async function J(t){if(!m.value[t]){m.value={...m.value,[t]:!0};try{await w.startService(t),c.add({title:"Service started",description:t,variant:"success"}),await b()}catch(a){c.add({title:"Failed to start service",description:a.message,variant:"danger"})}finally{m.value={...m.value,[t]:!1}}}}async function Q(t){if(!k.value[t]){k.value={...k.value,[t]:!0};try{await w.stopService(t),c.add({title:"Service stopped",description:t,variant:"info"}),await b()}catch(a){c.add({title:"Failed to stop service",description:a.message,variant:"danger"})}finally{k.value={...k.value,[t]:!1}}}}async function I(t){try{const a=await w.getServiceLogs(t);x.value=a.logs||[],R.value=a.status||"stopped"}catch(a){console.error("Failed to fetch logs:",a)}}function W(t){y.value=t,I(t),f.value&&window.clearInterval(f.value),f.value=window.setInterval(()=>I(t),2e3)}function X(){y.value=null,x.value=[],f.value&&window.clearInterval(f.value),f.value=null}async function N(){if(p.value.trim()){$.value=!0;try{await w.registerService(p.value),c.add({title:"Service registered",description:p.value,variant:"success"}),p.value="",await b()}catch(t){c.add({title:"Failed to register service",description:t.message,variant:"danger"})}finally{$.value=!1}}}function Y(t){S.value=t,z.value=!0}async function ee(){if(!S.value)return;const t=S.value;try{await w.deleteService(t),c.add({title:"Service deleted",description:t,variant:"info"}),await b()}catch(a){c.add({title:"Failed to delete service",description:a.message,variant:"danger"})}finally{S.value=null,z.value=!1}}function te(t){return new Date(t).toLocaleString()}function ae(t){switch(t){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}return se(()=>{b(),D=window.setInterval(b,1e4)}),ne(()=>{D&&window.clearInterval(D),f.value&&window.clearInterval(f.value)}),(t,a)=>(i(),d(n(re),{variant:"outline"},{header:s(()=>[r(n(C),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:s(()=>[a[4]||(a[4]=L("strong",null,"Microservices",-1)),r(n(C),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:s(()=>[r(n(fe),{hint:"Absolute path to a Serverless project",htmlFor:"register-path"},{default:s(()=>[r(n(ge),{modelValue:p.value,"onUpdate:modelValue":a[0]||(a[0]=e=>p.value=e),placeholder:"/path/to/microservice",disabled:$.value,onKeyup:pe(N,["enter"])},null,8,["modelValue","disabled"])]),_:1}),r(n(B),{variant:"solid",loading:$.value,disabled:!p.value.trim(),onClick:N},{default:s(()=>[...a[3]||(a[3]=[l(" Register ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),default:s(()=>[U.value?(i(),E("div",ke,[r(n(le),{label:"Loading services..."})])):h.value.length?(i(),d(n(oe),{key:2,columns:G,rows:H.value},{"cell-name":s(({row:e})=>[r(n(de),{to:`/services/${encodeURIComponent(String(e.name))}`,style:{color:"inherit","text-decoration":"none"}},{default:s(()=>[L("strong",ye,o(e.name),1)]),_:2},1032,["to"])]),"cell-status":s(({row:e})=>[r(n(ue),{tone:ae(String(e.status)),variant:"soft"},{default:s(()=>[l(o(e.status),1)]),_:2},1032,["tone"])]),"cell-root":s(({row:e})=>[L("span",Se,o(e.root),1)]),"cell-resourceBreakdown":s(({row:e})=>[r(n(C),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:s(()=>{var _,T,V,j,q,A,M,P;return[(_=e.resourceBreakdown)!=null&&_.lambdas?(i(),d(n(g),{key:0,size:"sm",variant:"soft"},{default:s(()=>[l(" λ "+o(e.resourceBreakdown.lambdas),1)]),_:2},1024)):v("",!0),(T=e.resourceBreakdown)!=null&&T.tables?(i(),d(n(g),{key:1,size:"sm",variant:"soft"},{default:s(()=>[l(" 🗄 "+o(e.resourceBreakdown.tables),1)]),_:2},1024)):v("",!0),(V=e.resourceBreakdown)!=null&&V.queues?(i(),d(n(g),{key:2,size:"sm",variant:"soft"},{default:s(()=>[l(" 📨 "+o(e.resourceBreakdown.queues),1)]),_:2},1024)):v("",!0),(j=e.resourceBreakdown)!=null&&j.topics?(i(),d(n(g),{key:3,size:"sm",variant:"soft"},{default:s(()=>[l(" 📣 "+o(e.resourceBreakdown.topics),1)]),_:2},1024)):v("",!0),(q=e.resourceBreakdown)!=null&&q.buckets?(i(),d(n(g),{key:4,size:"sm",variant:"soft"},{default:s(()=>[l(" 🪣 "+o(e.resourceBreakdown.buckets),1)]),_:2},1024)):v("",!0),(A=e.resourceBreakdown)!=null&&A.buses?(i(),d(n(g),{key:5,size:"sm",variant:"soft"},{default:s(()=>[l(" 🔀 "+o(e.resourceBreakdown.buses),1)]),_:2},1024)):v("",!0),(M=e.resourceBreakdown)!=null&&M.eventRules?(i(),d(n(g),{key:6,size:"sm",variant:"soft"},{default:s(()=>[l(" 🎯 "+o(e.resourceBreakdown.eventRules),1)]),_:2},1024)):v("",!0),(P=e.resourceBreakdown)!=null&&P.collections?(i(),d(n(g),{key:7,size:"sm",variant:"soft"},{default:s(()=>[l(" 🔍 "+o(e.resourceBreakdown.collections),1)]),_:2},1024)):v("",!0),e.resourcesCount?v("",!0):(i(),E("span",be," none "))]}),_:2},1024)]),"cell-lastUpdated":s(({row:e})=>[l(o(te(Number(e.lastUpdated))),1)]),"cell-actions":s(({row:e})=>[r(n(C),{direction:"horizontal",gap:"0.375rem",justify:"flex-end",wrap:""},{default:s(()=>[r(n(B),{size:"sm",variant:"soft",disabled:e.status==="running"||m.value[String(e.name)],loading:m.value[String(e.name)],onClick:_=>J(String(e.name))},{default:s(()=>[...a[5]||(a[5]=[l(" Start ",-1)])]),_:1},8,["disabled","loading","onClick"]),r(n(B),{size:"sm",variant:"soft",disabled:e.status!=="running"||k.value[String(e.name)],loading:k.value[String(e.name)],onClick:_=>Q(String(e.name))},{default:s(()=>[...a[6]||(a[6]=[l(" Stop ",-1)])]),_:1},8,["disabled","loading","onClick"]),r(n(B),{size:"sm",variant:"ghost",onClick:_=>W(String(e.name))},{default:s(()=>[...a[7]||(a[7]=[l(" Logs ",-1)])]),_:1},8,["onClick"]),r(n(B),{size:"sm",variant:"danger",onClick:_=>Y(String(e.name))},{default:s(()=>[...a[8]||(a[8]=[l(" Delete ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),d(n(ie),{key:1,title:"No services registered",description:"Register your first microservice using the form above."})),r(n(ce),{open:F.value,"onUpdate:open":a[1]||(a[1]=e=>F.value=e),title:y.value?`Logs — ${y.value}`:"Logs",description:y.value?`Status: ${R.value}`:"",size:"lg"},{default:s(()=>[L("pre",_e,o(x.value.join(`
|
|
2
2
|
`)||"— no output yet —"),1)]),_:1},8,["open","title","description"]),r(n(ve),{open:z.value,"onUpdate:open":a[2]||(a[2]=e=>z.value=e),title:`Delete service${S.value?` “${S.value}”`:""}?`,description:"This removes the service from the cache and cleans up its provisioned resources in LocalStack.","confirm-label":"Delete","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:ee},null,8,["open","title"])]),_:1}))}}),he=O({__name:"ServicesPage",setup(Z){return(c,h)=>(i(),d(we))}});export{he as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-B13l71G0.js","assets/OverviewPage-qEl0a-0B.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const s of n)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function l(n){const s={};return n.integrity&&(s.integrity=n.integrity),n.referrerPolicy&&(s.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?s.credentials="include":n.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function a(n){if(n.ep)return;n.ep=!0;const s=l(n);fetch(n.href,s)}})();/**
|
|
3
3
|
* @vue/shared v3.5.34
|
|
4
4
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
@@ -34,4 +34,4 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-0x
|
|
|
34
34
|
* (c) 2025 Eduardo San Martin Morote
|
|
35
35
|
* @license MIT
|
|
36
36
|
*/let cy=()=>location.protocol+"//"+location.host;function Bo(e,t){const{pathname:l,search:a,hash:n}=t,s=e.indexOf("#");if(s>-1){let i=n.includes(e.slice(s))?e.slice(s).length:1,r=n.slice(i);return r[0]!=="/"&&(r="/"+r),ki(r,"")}return ki(l,e)+a+n}function fy(e,t,l,a){let n=[],s=[],i=null;const r=({state:f})=>{const v=Bo(e,location),T=l.value,x=t.value;let S=0;if(f){if(l.value=v,t.value=f,i&&i===T){i=null;return}S=x?f.position-x.position:0}else a(v);n.forEach(V=>{V(l.value,T,{delta:S,type:qn.pop,direction:S?S>0?Dn.forward:Dn.back:Dn.unknown})})};function o(){i=l.value}function c(f){n.push(f);const v=()=>{const T=n.indexOf(f);T>-1&&n.splice(T,1)};return s.push(v),v}function u(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(Be({},f.state,{scroll:cn()}),"")}}function d(){for(const f of s)f();s=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:o,listen:c,destroy:d}}function Ci(e,t,l,a=!1,n=!1){return{back:e,current:t,forward:l,replaced:a,position:window.history.length,scroll:n?cn():null}}function py(e){const{history:t,location:l}=window,a={value:Bo(e,l)},n={value:t.state};n.value||s(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(o,c,u){const d=e.indexOf("#"),f=d>-1?(l.host&&document.querySelector("base")?e:e.slice(d))+o:cy()+e+o;try{t[u?"replaceState":"pushState"](c,"",f),n.value=c}catch(v){console.error(v),l[u?"replace":"assign"](f)}}function i(o,c){s(o,Be({},t.state,Ci(n.value.back,o,n.value.forward,!0),c,{position:n.value.position}),!0),a.value=o}function r(o,c){const u=Be({},n.value,t.state,{forward:o,scroll:cn()});s(u.current,u,!0),s(o,Be({},Ci(a.value,o,null),{position:u.position+1},c),!1),a.value=o}return{location:a,state:n,push:r,replace:i}}function vy(e){e=Q_(e);const t=py(e),l=fy(e,t.state,t.location,t.replace);function a(s,i=!0){i||l.pauseListeners(),history.go(s)}const n=Be({location:"",base:e,go:a,createHref:Z_.bind(null,e)},t,l);return Object.defineProperty(n,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(n,"state",{enumerable:!0,get:()=>t.state.value}),n}let Cl=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Ze=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Ze||{});const my={type:Cl.Static,value:""},hy=/[a-zA-Z0-9_]/;function by(e){if(!e)return[[]];if(e==="/")return[[my]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${l})/"${c}": ${v}`)}let l=Ze.Static,a=l;const n=[];let s;function i(){s&&n.push(s),s=[]}let r=0,o,c="",u="";function d(){c&&(l===Ze.Static?s.push({type:Cl.Static,value:c}):l===Ze.Param||l===Ze.ParamRegExp||l===Ze.ParamRegExpEnd?(s.length>1&&(o==="*"||o==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:Cl.Param,value:c,regexp:u,repeatable:o==="*"||o==="+",optional:o==="*"||o==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=o}for(;r<e.length;){if(o=e[r++],o==="\\"&&l!==Ze.ParamRegExp){a=l,l=Ze.EscapeNext;continue}switch(l){case Ze.Static:o==="/"?(c&&d(),i()):o===":"?(d(),l=Ze.Param):f();break;case Ze.EscapeNext:f(),l=a;break;case Ze.Param:o==="("?l=Ze.ParamRegExp:hy.test(o)?f():(d(),l=Ze.Static,o!=="*"&&o!=="?"&&o!=="+"&&r--);break;case Ze.ParamRegExp:o===")"?u[u.length-1]=="\\"?u=u.slice(0,-1)+o:l=Ze.ParamRegExpEnd:u+=o;break;case Ze.ParamRegExpEnd:d(),l=Ze.Static,o!=="*"&&o!=="?"&&o!=="+"&&r--,u="";break;default:t("Unknown state");break}}return l===Ze.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),d(),i(),n}const Ei="[^/]+?",gy={sensitive:!1,strict:!1,start:!0,end:!0};var vt=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(vt||{});const _y=/[.+*?^${}()[\]/\\]/g;function yy(e,t){const l=Be({},gy,t),a=[];let n=l.start?"^":"";const s=[];for(const c of e){const u=c.length?[]:[vt.Root];l.strict&&!c.length&&(n+="/");for(let d=0;d<c.length;d++){const f=c[d];let v=vt.Segment+(l.sensitive?vt.BonusCaseSensitive:0);if(f.type===Cl.Static)d||(n+="/"),n+=f.value.replace(_y,"\\$&"),v+=vt.Static;else if(f.type===Cl.Param){const{value:T,repeatable:x,optional:S,regexp:V}=f;s.push({name:T,repeatable:x,optional:S});const R=V||Ei;if(R!==Ei){v+=vt.BonusCustomRegExp;try{`${R}`}catch(_){throw new Error(`Invalid custom RegExp for param "${T}" (${R}): `+_.message)}}let O=x?`((?:${R})(?:/(?:${R}))*)`:`(${R})`;d||(O=S&&c.length<2?`(?:/${O})`:"/"+O),S&&(O+="?"),n+=O,v+=vt.Dynamic,S&&(v+=vt.BonusOptional),x&&(v+=vt.BonusRepeatable),R===".*"&&(v+=vt.BonusWildcard)}u.push(v)}a.push(u)}if(l.strict&&l.end){const c=a.length-1;a[c][a[c].length-1]+=vt.BonusStrict}l.strict||(n+="/?"),l.end?n+="$":l.strict&&!n.endsWith("/")&&(n+="(?:/|$)");const i=new RegExp(n,l.sensitive?"":"i");function r(c){const u=c.match(i),d={};if(!u)return null;for(let f=1;f<u.length;f++){const v=u[f]||"",T=s[f-1];d[T.name]=v&&T.repeatable?v.split("/"):v}return d}function o(c){let u="",d=!1;for(const f of e){(!d||!u.endsWith("/"))&&(u+="/"),d=!1;for(const v of f)if(v.type===Cl.Static)u+=v.value;else if(v.type===Cl.Param){const{value:T,repeatable:x,optional:S}=v,V=T in c?c[T]:"";if(Pt(V)&&!x)throw new Error(`Provided param "${T}" is an array but it is not repeatable (* or + modifiers)`);const R=Pt(V)?V.join("/"):V;if(!R)if(S)f.length<2&&(u.endsWith("/")?u=u.slice(0,-1):d=!0);else throw new Error(`Missing required param "${T}"`);u+=R}}return u||"/"}return{re:i,score:a,keys:s,parse:r,stringify:o}}function ky(e,t){let l=0;for(;l<e.length&&l<t.length;){const a=t[l]-e[l];if(a)return a;l++}return e.length<t.length?e.length===1&&e[0]===vt.Static+vt.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===vt.Static+vt.Segment?1:-1:0}function No(e,t){let l=0;const a=e.score,n=t.score;for(;l<a.length&&l<n.length;){const s=ky(a[l],n[l]);if(s)return s;l++}if(Math.abs(n.length-a.length)===1){if(Si(a))return 1;if(Si(n))return-1}return n.length-a.length}function Si(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const $y={strict:!1,end:!0,sensitive:!1};function wy(e,t,l){const a=yy(by(e.path),l),n=Be(a,{record:e,parent:t,children:[],alias:[]});return t&&!n.record.aliasOf==!t.record.aliasOf&&t.children.push(n),n}function xy(e,t){const l=[],a=new Map;t=yi($y,t);function n(d){return a.get(d)}function s(d,f,v){const T=!v,x=Di(d);x.aliasOf=v&&v.record;const S=yi(t,d),V=[x];if("alias"in d){const _=typeof d.alias=="string"?[d.alias]:d.alias;for(const k of _)V.push(Di(Be({},x,{components:v?v.record.components:x.components,path:k,aliasOf:v?v.record:x})))}let R,O;for(const _ of V){const{path:k}=_;if(f&&k[0]!=="/"){const C=f.record.path,A=C[C.length-1]==="/"?"":"/";_.path=f.record.path+(k&&A+k)}if(R=wy(_,f,S),v?v.alias.push(R):(O=O||R,O!==R&&O.alias.push(R),T&&d.name&&!Oi(R)&&i(d.name)),Lo(R)&&o(R),x.children){const C=x.children;for(let A=0;A<C.length;A++)s(C[A],R,v&&v.children[A])}v=v||R}return O?()=>{i(O)}:fa}function i(d){if(Po(d)){const f=a.get(d);f&&(a.delete(d),l.splice(l.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=l.indexOf(d);f>-1&&(l.splice(f,1),d.record.name&&a.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function r(){return l}function o(d){const f=Ey(d,l);l.splice(f,0,d),d.record.name&&!Oi(d)&&a.set(d.record.name,d)}function c(d,f){let v,T={},x,S;if("name"in d&&d.name){if(v=a.get(d.name),!v)throw Yl(Ge.MATCHER_NOT_FOUND,{location:d});S=v.record.name,T=Be(Ai(f.params,v.keys.filter(O=>!O.optional).concat(v.parent?v.parent.keys.filter(O=>O.optional):[]).map(O=>O.name)),d.params&&Ai(d.params,v.keys.map(O=>O.name))),x=v.stringify(T)}else if(d.path!=null)x=d.path,v=l.find(O=>O.re.test(x)),v&&(T=v.parse(x),S=v.record.name);else{if(v=f.name?a.get(f.name):l.find(O=>O.re.test(f.path)),!v)throw Yl(Ge.MATCHER_NOT_FOUND,{location:d,currentLocation:f});S=v.record.name,T=Be({},f.params,d.params),x=v.stringify(T)}const V=[];let R=v;for(;R;)V.unshift(R.record),R=R.parent;return{name:S,path:x,params:T,matched:V,meta:Cy(V)}}e.forEach(d=>s(d));function u(){l.length=0,a.clear()}return{addRoute:s,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:r,getRecordMatcher:n}}function Ai(e,t){const l={};for(const a of t)a in e&&(l[a]=e[a]);return l}function Di(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ty(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Ty(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const a in e.components)t[a]=typeof l=="object"?l[a]:l;return t}function Oi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Cy(e){return e.reduce((t,l)=>Be(t,l.meta),{})}function Ey(e,t){let l=0,a=t.length;for(;l!==a;){const s=l+a>>1;No(e,t[s])<0?a=s:l=s+1}const n=Sy(e);return n&&(a=t.lastIndexOf(n,a-1)),a}function Sy(e){let t=e;for(;t=t.parent;)if(Lo(t)&&No(e,t)===0)return t}function Lo({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ri(e){const t=tt(fn),l=tt(ms),a=h(()=>{const o=M(e.to);return t.resolve(o)}),n=h(()=>{const{matched:o}=a.value,{length:c}=o,u=o[c-1],d=l.matched;if(!u||!d.length)return-1;const f=d.findIndex(Jl.bind(null,u));if(f>-1)return f;const v=Ii(o[c-2]);return c>1&&Ii(u)===v&&d[d.length-1].path!==v?d.findIndex(Jl.bind(null,o[c-2])):f}),s=h(()=>n.value>-1&&Iy(l.params,a.value.params)),i=h(()=>n.value>-1&&n.value===l.matched.length-1&&Vo(l.params,a.value.params));function r(o={}){if(Ry(o)){const c=t[M(e.replace)?"replace":"push"](M(e.to)).catch(fa);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:a,href:h(()=>a.value.href),isActive:s,isExactActive:i,navigate:r}}function Ay(e){return e.length===1?e[0]:e}const Dy=ve({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Ri,setup(e,{slots:t}){const l=Al(Ri(e)),{options:a}=tt(fn),n=h(()=>({[Vi(e.activeClass,a.linkActiveClass,"router-link-active")]:l.isActive,[Vi(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const s=t.default&&Ay(t.default(l));return e.custom?s:ya("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:n.value},s)}}}),Oy=Dy;function Ry(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Iy(e,t){for(const l in t){const a=t[l],n=e[l];if(typeof a=="string"){if(a!==n)return!1}else if(!Pt(n)||n.length!==a.length||a.some((s,i)=>s.valueOf()!==n[i].valueOf()))return!1}return!0}function Ii(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Vi=(e,t,l)=>e??t??l,Vy=ve({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const a=tt(Yn),n=h(()=>e.route||a.value),s=tt(Ti,0),i=h(()=>{let c=M(s);const{matched:u}=n.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),r=h(()=>n.value.matched[i.value]);Zt(Ti,h(()=>i.value+1)),Zt(uy,r),Zt(Yn,n);const o=ne();return Ve(()=>[o.value,r.value,e.name],([c,u,d],[f,v,T])=>{u&&(u.instances[d]=c,v&&v!==u&&c&&c===f&&(u.leaveGuards.size||(u.leaveGuards=v.leaveGuards),u.updateGuards.size||(u.updateGuards=v.updateGuards))),c&&u&&(!v||!Jl(u,v)||!f)&&(u.enterCallbacks[d]||[]).forEach(x=>x(c))},{flush:"post"}),()=>{const c=n.value,u=e.name,d=r.value,f=d&&d.components[u];if(!f)return Pi(l.default,{Component:f,route:c});const v=d.props[u],T=v?v===!0?c.params:typeof v=="function"?v(c):v:null,S=ya(f,Be({},T,t,{onVnodeUnmounted:V=>{V.component.isUnmounted&&(d.instances[u]=null)},ref:o}));return Pi(l.default,{Component:S,route:c})||S}}});function Pi(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const Fo=Vy;function Py(e){const t=xy(e.routes,e),l=e.parseQuery||ry,a=e.stringifyQuery||xi,n=e.history,s=la(),i=la(),r=la(),o=Vu(rl);let c=rl;Ml&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Sn.bind(null,B=>""+B),d=Sn.bind(null,j_),f=Sn.bind(null,xa);function v(B,L){let q,oe;return Po(B)?(q=t.getRecordMatcher(B),oe=L):oe=B,t.addRoute(oe,q)}function T(B){const L=t.getRecordMatcher(B);L&&t.removeRoute(L)}function x(){return t.getRoutes().map(B=>B.record)}function S(B){return!!t.getRecordMatcher(B)}function V(B,L){if(L=Be({},L||o.value),typeof B=="string"){const E=An(l,B,L.path),z=t.resolve({path:E.path},L),j=n.createHref(E.fullPath);return Be(E,z,{params:f(z.params),hash:xa(E.hash),redirectedFrom:void 0,href:j})}let q;if(B.path!=null)q=Be({},B,{path:An(l,B.path,L.path).path});else{const E=Be({},B.params);for(const z in E)E[z]==null&&delete E[z];q=Be({},B,{params:d(E)}),L.params=d(L.params)}const oe=t.resolve(q,L),U=B.hash||"";oe.params=u(f(oe.params));const p=G_(a,Be({},B,{hash:z_(U),path:oe.path})),b=n.createHref(p);return Be({fullPath:p,hash:U,query:a===xi?oy(B.query):B.query||{}},oe,{redirectedFrom:void 0,href:b})}function R(B){return typeof B=="string"?An(l,B,o.value.path):Be({},B)}function O(B,L){if(c!==B)return Yl(Ge.NAVIGATION_CANCELLED,{from:L,to:B})}function _(B){return A(B)}function k(B){return _(Be(R(B),{replace:!0}))}function C(B,L){const q=B.matched[B.matched.length-1];if(q&&q.redirect){const{redirect:oe}=q;let U=typeof oe=="function"?oe(B,L):oe;return typeof U=="string"&&(U=U.includes("?")||U.includes("#")?U=R(U):{path:U},U.params={}),Be({query:B.query,hash:B.hash,params:U.path!=null?{}:B.params},U)}}function A(B,L){const q=c=V(B),oe=o.value,U=B.state,p=B.force,b=B.replace===!0,E=C(q,oe);if(E)return A(Be(R(E),{state:typeof E=="object"?Be({},U,E.state):U,force:p,replace:b}),L||q);const z=q;z.redirectedFrom=L;let j;return!p&&q_(a,oe,q)&&(j=Yl(Ge.NAVIGATION_DUPLICATED,{to:z,from:oe}),J(oe,oe,!0,!1)),(j?Promise.resolve(j):I(z,oe)).catch(W=>Gt(W)?Gt(W,Ge.NAVIGATION_GUARD_REDIRECT)?W:ce(W):D(W,z,oe)).then(W=>{if(W){if(Gt(W,Ge.NAVIGATION_GUARD_REDIRECT))return A(Be({replace:b},R(W.to),{state:typeof W.to=="object"?Be({},U,W.to.state):U,force:p}),L||z)}else W=H(z,oe,!0,b,U);return Q(z,oe,W),W})}function P(B,L){const q=O(B,L);return q?Promise.reject(q):Promise.resolve()}function N(B){const L=ee.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(B):B()}function I(B,L){let q;const[oe,U,p]=dy(B,L);q=On(oe.reverse(),"beforeRouteLeave",B,L);for(const E of oe)E.leaveGuards.forEach(z=>{q.push(cl(z,B,L))});const b=P.bind(null,B,L);return q.push(b),he(q).then(()=>{q=[];for(const E of s.list())q.push(cl(E,B,L));return q.push(b),he(q)}).then(()=>{q=On(U,"beforeRouteUpdate",B,L);for(const E of U)E.updateGuards.forEach(z=>{q.push(cl(z,B,L))});return q.push(b),he(q)}).then(()=>{q=[];for(const E of p)if(E.beforeEnter)if(Pt(E.beforeEnter))for(const z of E.beforeEnter)q.push(cl(z,B,L));else q.push(cl(E.beforeEnter,B,L));return q.push(b),he(q)}).then(()=>(B.matched.forEach(E=>E.enterCallbacks={}),q=On(p,"beforeRouteEnter",B,L,N),q.push(b),he(q))).then(()=>{q=[];for(const E of i.list())q.push(cl(E,B,L));return q.push(b),he(q)}).catch(E=>Gt(E,Ge.NAVIGATION_CANCELLED)?E:Promise.reject(E))}function Q(B,L,q){r.list().forEach(oe=>N(()=>oe(B,L,q)))}function H(B,L,q,oe,U){const p=O(B,L);if(p)return p;const b=L===rl,E=Ml?history.state:{};q&&(oe||b?n.replace(B.fullPath,Be({scroll:b&&E&&E.scroll},U)):n.push(B.fullPath,U)),o.value=B,J(B,L,q,b),ce()}let de;function ue(){de||(de=n.listen((B,L,q)=>{if(!$e.listening)return;const oe=V(B),U=C(oe,$e.currentRoute.value);if(U){A(Be(U,{replace:!0,force:!0}),oe).catch(fa);return}c=oe;const p=o.value;Ml&&ly(wi(p.fullPath,q.delta),cn()),I(oe,p).catch(b=>Gt(b,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_CANCELLED)?b:Gt(b,Ge.NAVIGATION_GUARD_REDIRECT)?(A(Be(R(b.to),{force:!0}),oe).then(E=>{Gt(E,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&!q.delta&&q.type===qn.pop&&n.go(-1,!1)}).catch(fa),Promise.reject()):(q.delta&&n.go(-q.delta,!1),D(b,oe,p))).then(b=>{b=b||H(oe,p,!1),b&&(q.delta&&!Gt(b,Ge.NAVIGATION_CANCELLED)?n.go(-q.delta,!1):q.type===qn.pop&&Gt(b,Ge.NAVIGATION_ABORTED|Ge.NAVIGATION_DUPLICATED)&&n.go(-1,!1)),Q(oe,p,b)}).catch(fa)}))}let De=la(),$=la(),y;function D(B,L,q){ce(B);const oe=$.list();return oe.length?oe.forEach(U=>U(B,L,q)):console.error(B),Promise.reject(B)}function le(){return y&&o.value!==rl?Promise.resolve():new Promise((B,L)=>{De.add([B,L])})}function ce(B){return y||(y=!B,ue(),De.list().forEach(([L,q])=>B?q(B):L()),De.reset()),B}function J(B,L,q,oe){const{scrollBehavior:U}=e;if(!Ml||!U)return Promise.resolve();const p=!q&&ay(wi(B.fullPath,0))||(oe||!q)&&history.state&&history.state.scroll||null;return Ke().then(()=>U(B,L,p)).then(b=>b&&ty(b)).catch(b=>D(b,B,L))}const pe=B=>n.go(B);let re;const ee=new Set,$e={currentRoute:o,listening:!0,addRoute:v,removeRoute:T,clearRoutes:t.clearRoutes,hasRoute:S,getRoutes:x,resolve:V,options:e,push:_,replace:k,go:pe,back:()=>pe(-1),forward:()=>pe(1),beforeEach:s.add,beforeResolve:i.add,afterEach:r.add,onError:$.add,isReady:le,install(B){B.component("RouterLink",Oy),B.component("RouterView",Fo),B.config.globalProperties.$router=$e,Object.defineProperty(B.config.globalProperties,"$route",{enumerable:!0,get:()=>M(o)}),Ml&&!re&&o.value===rl&&(re=!0,_(n.location).catch(oe=>{}));const L={};for(const oe in rl)Object.defineProperty(L,oe,{get:()=>o.value[oe],enumerable:!0});B.provide(fn,$e),B.provide(ms,dr(L)),B.provide(Yn,o);const q=B.unmount;ee.add(B),B.unmount=function(){ee.delete(B),ee.size<1&&(c=rl,de&&de(),de=null,o.value=rl,re=!1,y=!1),q()}}};function he(B){return B.reduce((L,q)=>L.then(()=>N(q)),Promise.resolve())}return $e}function My(){return tt(fn)}function By(e){return tt(ms)}const zo="lss-region",Mi="us-east-1";function Ny(){try{return localStorage.getItem(zo)||Mi}catch{return Mi}}const Ot=ne(Ny());Ve(Ot,e=>{try{localStorage.setItem(zo,e)}catch{}});const Ho=ne("");function Ly(e,t=!1){e&&(Ho.value=e,t||(Ot.value=e))}const Rn=[{value:"us-east-1",label:"us-east-1 — N. Virginia"},{value:"us-east-2",label:"us-east-2 — Ohio"},{value:"us-west-1",label:"us-west-1 — N. California"},{value:"us-west-2",label:"us-west-2 — Oregon"},{value:"eu-west-1",label:"eu-west-1 — Ireland"},{value:"eu-west-2",label:"eu-west-2 — London"},{value:"eu-west-3",label:"eu-west-3 — Paris"},{value:"eu-central-1",label:"eu-central-1 — Frankfurt"},{value:"eu-north-1",label:"eu-north-1 — Stockholm"},{value:"ap-southeast-1",label:"ap-southeast-1 — Singapore"},{value:"ap-southeast-2",label:"ap-southeast-2 — Sydney"},{value:"ap-northeast-1",label:"ap-northeast-1 — Tokyo"},{value:"ap-northeast-2",label:"ap-northeast-2 — Seoul"},{value:"ap-south-1",label:"ap-south-1 — Mumbai"},{value:"sa-east-1",label:"sa-east-1 — São Paulo"},{value:"ca-central-1",label:"ca-central-1 — Canada"}],Fy=h(()=>{const e=new Set(Rn.map(l=>l.value)),t=[Ho.value,Ot.value].filter((l,a,n)=>l&&!e.has(l)&&n.indexOf(l)===a).map(l=>({value:l,label:l}));return t.length?[...Rn,...t]:Rn}),hs="";function Bi(e){return/^(https?:|data:)/i.test(e)?e:`${hs}${e}`}function zy(e){const t=Ot.value;if(!t)return e;const l=e.includes("?")?"&":"?";return`${e}${l}region=${encodeURIComponent(t)}`}async function Te(e,t){const l=await fetch(`${hs}${zy(e)}`,{headers:{"Content-Type":"application/json",...t==null?void 0:t.headers},...t});if(!l.ok){const a=await l.json().catch(()=>({error:l.statusText}));throw new Error(a.error||"Request failed")}return l.json()}const Qn={checkHealth:()=>Te("/api/health"),getConfig:()=>Te("/api/config"),getBranding:()=>Te("/api/config/branding"),listServices:()=>Te("/api/services"),getService:e=>Te(`/api/services/${encodeURIComponent(e)}`),registerService:e=>Te("/api/services/register",{method:"POST",body:JSON.stringify({servicePath:e})}),deleteService:e=>Te(`/api/services/${e}`,{method:"DELETE"}),updateServiceStatus:(e,t,l)=>Te(`/api/services/${e}/status`,{method:"PATCH",body:JSON.stringify({status:t,pid:l})}),startService:(e,t)=>Te(`/api/services/${e}/start`,{method:"POST",body:JSON.stringify(t||{})}),stopService:e=>Te(`/api/services/${e}/stop`,{method:"POST"}),getServiceLogs:e=>Te(`/api/services/${e}/logs`),listLambdas:()=>Te("/api/lambdas"),getLambda:e=>Te(`/api/lambdas/${encodeURIComponent(e)}`),invokeLambda:(e,t)=>Te(`/api/lambdas/${encodeURIComponent(e)}/invoke`,{method:"POST",body:JSON.stringify(t)}),getLambdaLogs:e=>Te(`/api/lambdas/${encodeURIComponent(e)}/logs`),listApis:()=>Te("/api/apis"),clearAuthorizerCache:e=>{const t=new URLSearchParams;e!=null&&e.service&&t.set("service",e.service),e!=null&&e.authorizer&&t.set("authorizer",e.authorizer);const l=t.toString();return Te(`/api/apis/authorizer-cache/clear${l?`?${l}`:""}`,{method:"POST"})},listResources:()=>Te("/api/resources"),listResourceOwners:()=>Te("/api/resources/owners"),listBuckets:()=>Te("/api/buckets"),getBucket:e=>Te(`/api/buckets/${encodeURIComponent(e)}`),listBucketObjects:(e,t)=>{const l=new URLSearchParams;t!=null&&t.prefix&&l.set("prefix",t.prefix),t!=null&&t.continuationToken&&l.set("continuationToken",t.continuationToken),(t==null?void 0:t.maxKeys)!==void 0&&l.set("maxKeys",String(t.maxKeys)),t!=null&&t.delimiter&&l.set("delimiter",t.delimiter);const a=l.toString();return Te(`/api/buckets/${encodeURIComponent(e)}/objects${a?`?${a}`:""}`)},bucketObjectContentUrl:(e,t,l=!1)=>{const a=new URLSearchParams({key:t});l&&a.set("download","1");const n=Ot.value;return n&&a.set("region",n),`${hs}/api/buckets/${encodeURIComponent(e)}/objects/content?${a.toString()}`},putBucketObject:(e,t)=>Te(`/api/buckets/${encodeURIComponent(e)}/objects`,{method:"POST",body:JSON.stringify(t)}),deleteBucketObject:(e,t)=>Te(`/api/buckets/${encodeURIComponent(e)}/objects?key=${encodeURIComponent(t)}`,{method:"DELETE"}),listOpenSearchCollections:()=>Te("/api/opensearch/collections"),listOpenSearchIndices:e=>Te(`/api/opensearch/collections/${encodeURIComponent(e)}/indices`),searchOpenSearch:(e,t)=>Te(`/api/opensearch/collections/${encodeURIComponent(e)}/search`,{method:"POST",body:JSON.stringify(t)}),listQueues:()=>Te("/api/queues"),getQueue:e=>Te(`/api/queues/${encodeURIComponent(e)}`),resetQueueProcessed:e=>Te(`/api/queues/${encodeURIComponent(e)}/reset-processed`,{method:"POST"}),sendQueueMessage:(e,t)=>Te(`/api/queues/${encodeURIComponent(e)}/messages`,{method:"POST",body:JSON.stringify(t)}),receiveQueueMessages:(e,t)=>Te(`/api/queues/${encodeURIComponent(e)}/messages/receive`,{method:"POST",body:JSON.stringify(t)}),deleteQueueMessage:(e,t)=>Te(`/api/queues/${encodeURIComponent(e)}/messages/delete`,{method:"POST",body:JSON.stringify({receiptHandle:t})}),purgeQueue:e=>Te(`/api/queues/${encodeURIComponent(e)}/purge`,{method:"POST"}),listDynamoTables:()=>Te("/api/dynamo/tables"),describeDynamoTable:e=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}`),setDynamoTtl:(e,t,l)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/ttl`,{method:"PUT",body:JSON.stringify({enabled:t,attributeName:l})}),scanDynamoTable:(e,t)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/scan`,{method:"POST",body:JSON.stringify(t)}),queryDynamoTable:(e,t)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/query`,{method:"POST",body:JSON.stringify(t)}),getDynamoItem:(e,t)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/items/get`,{method:"POST",body:JSON.stringify({key:t})}),putDynamoItem:(e,t)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/items`,{method:"POST",body:JSON.stringify({item:t})}),deleteDynamoItem:(e,t)=>Te(`/api/dynamo/tables/${encodeURIComponent(e)}/items/delete`,{method:"POST",body:JSON.stringify({key:t})}),listSeeds:()=>Te("/api/seeds"),runSeed:e=>Te("/api/seeds/run",{method:"POST",body:JSON.stringify(e?{tableName:e}:{})}),clearSeed:e=>Te("/api/seeds/clear",{method:"POST",body:JSON.stringify(e?{tableName:e}:{})})},Uo="lss-theme",Ni="lss-branding-overrides",wl=ne({title:"Local Serverless Stack",subtitle:"Local development control plane",logoUrl:null,faviconUrl:null,defaultTheme:"dark",colors:{},themeColors:{dark:{},light:{}}});function jo(){const e=localStorage.getItem(Uo);return e==="dark"||e==="light"?e:null}function bs(e,t=!1){document.documentElement.setAttribute("data-tree-theme",e),t&&localStorage.setItem(Uo,e)}function Hy(e){return e.startsWith("--")?e:`--tree-color-${e}`}function Li(e){return Object.entries(e).map(([t,l])=>`${Hy(t)}:${l};`).join("")}function Uy(e){const t=Li({...e.colors,...e.themeColors.dark}),l=Li({...e.colors,...e.themeColors.light});if(!t&&!l)return;let a=document.getElementById(Ni);a||(a=document.createElement("style"),a.id=Ni,document.head.appendChild(a)),a.textContent=[t?`:root[data-tree-theme="dark"]{${t}}`:"",l?`:root[data-tree-theme="light"]{${l}}`:""].join(`
|
|
37
|
-
`)}function jy(e){let t=document.querySelector('link[rel="icon"]');t||(t=document.createElement("link"),t.rel="icon",document.head.appendChild(t)),t.href=e}async function Ky(){try{const e=await Qn.getBranding();e.logoUrl=e.logoUrl?Bi(e.logoUrl):null,e.faviconUrl=e.faviconUrl?Bi(e.faviconUrl):null,wl.value=e,document.title=e.title,e.faviconUrl&&jy(e.faviconUrl),Uy(e),jo()||bs(e.defaultTheme)}catch(e){console.error("Failed to load branding, using defaults:",e)}}const Wy={class:"app-shell"},Gy={class:"app-header"},qy=["src","alt"],Jy={key:0,class:"muted",style:{"font-size":"0.75rem"}},Yy={class:"app-header-controls"},Qy={class:"app-subnav","aria-label":"Primary"},Xy={class:"app-main"},Zy=ve({__name:"App",setup(e){const t=By(),l=My(),a=ne({status:"unknown",localstack:!1,dynamoProxy:{enabled:!1,running:!1,port:8e3}}),n=ne(document.documentElement.getAttribute("data-tree-theme")||"dark");let s=null;const i=h(()=>{const d=t.path.split("/").filter(Boolean);return d.length===0?"/":`/${d[0]}`}),r=h(()=>[{label:n.value==="dark"?"Switch to light":"Switch to dark",value:"theme"}]);function o(d){d&&d!==i.value&&l.push(d)}function c(d){d==="theme"&&(n.value=n.value==="dark"?"light":"dark",bs(n.value,!0))}async function u(){try{a.value=await Qn.checkHealth()}catch(d){console.error("Health check failed:",d)}}return Ql(async()=>{u(),s=window.setInterval(u,1e4);const d=Ot.value;Qn.getConfig().then(f=>Ly(f.region,Ot.value!==d)).catch(()=>{}),await Ky(),n.value=document.documentElement.getAttribute("data-tree-theme")||"dark"}),it(()=>{s&&window.clearInterval(s)}),(d,f)=>(m(),Ae(M(To),{position:"top-right"},{default:ye(()=>[w("div",Wy,[w("header",Gy,[me(M(Kn),{as:"div",bordered:""},{start:ye(()=>[me(M(Wn),{direction:"horizontal",gap:"0.625rem",align:"center"},{default:ye(()=>[M(wl).logoUrl?(m(),g("img",{key:0,src:M(wl).logoUrl,alt:`${M(wl).title} logo`,class:"brand-logo"},null,8,qy)):K("",!0),me(M(Wn),{direction:"vertical",gap:"0.125rem"},{default:ye(()=>[w("strong",null,Z(M(wl).title),1),M(wl).subtitle?(m(),g("span",Jy,Z(M(wl).subtitle),1)):K("",!0)]),_:1})]),_:1})]),end:ye(()=>{var v;return[w("div",Yy,[me(M(Wa),{tone:a.value.localstack?"success":"danger",variant:"soft"},{default:ye(()=>[Oe(" LocalStack: "+Z(a.value.localstack?"Running":"Offline"),1)]),_:1},8,["tone"]),(v=a.value.dynamoProxy)!=null&&v.enabled?(m(),Ae(M(Wa),{key:0,tone:a.value.dynamoProxy.running?"success":"warning",variant:"soft"},{default:ye(()=>[Oe(" Dynamo Proxy: "+Z(a.value.dynamoProxy.running?"On":"Off"),1)]),_:1},8,["tone"])):K("",!0),me(M(_o),{modelValue:M(Ot),"onUpdate:modelValue":f[0]||(f[0]=T=>Je(Ot)?Ot.value=T:null),options:M(Fy),size:"sm",style:{"min-width":"14rem"},"aria-label":"AWS Region"},null,8,["modelValue","options"]),me(M(bo),{items:r.value,size:"sm",label:"Open menu",onSelect:c},{trigger:ye(()=>[me(M($a),{size:"sm",variant:"ghost","aria-label":"Open menu"},{default:ye(()=>[...f[1]||(f[1]=[Oe(" ⋮ ",-1)])]),_:1})]),_:1},8,["items"])])]}),_:1}),w("nav",Qy,[me(M(ko),{"model-value":i.value,"onUpdate:modelValue":o},{default:ye(()=>[me(M($o),null,{default:ye(()=>[me(M(qt),{value:"/"},{default:ye(()=>[...f[2]||(f[2]=[Oe("Overview",-1)])]),_:1}),me(M(qt),{value:"/services"},{default:ye(()=>[...f[3]||(f[3]=[Oe("Services",-1)])]),_:1}),me(M(qt),{value:"/lambdas"},{default:ye(()=>[...f[4]||(f[4]=[Oe("Lambdas",-1)])]),_:1}),me(M(qt),{value:"/apis"},{default:ye(()=>[...f[5]||(f[5]=[Oe("APIs",-1)])]),_:1}),me(M(qt),{value:"/queues"},{default:ye(()=>[...f[6]||(f[6]=[Oe("Queues",-1)])]),_:1}),me(M(qt),{value:"/buckets"},{default:ye(()=>[...f[7]||(f[7]=[Oe("S3",-1)])]),_:1}),me(M(qt),{value:"/dynamo"},{default:ye(()=>[...f[8]||(f[8]=[Oe("DynamoDB",-1)])]),_:1}),me(M(qt),{value:"/opensearch"},{default:ye(()=>[...f[9]||(f[9]=[Oe("OpenSearch",-1)])]),_:1})]),_:1})]),_:1},8,["model-value"])])]),w("main",Xy,[(m(),g("div",{key:`${M(t).fullPath}-${M(Ot)}`},[me(M(Fo))]))])])]),_:1}))}}),e0="modulepreload",t0=function(e){return"/"+e},Fi={},yt=function(t,l,a){let n=Promise.resolve();if(l&&l.length>0){let i=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),o=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));n=i(l.map(c=>{if(c=t0(c),c in Fi)return;Fi[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":e0,u||(f.as="script"),f.crossOrigin="",f.href=c,o&&f.setAttribute("nonce",o),document.head.appendChild(f),u)return new Promise((v,T)=>{f.addEventListener("load",v),f.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(i){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=i,window.dispatchEvent(r),!r.defaultPrevented)throw i}return n.then(i=>{for(const r of i||[])r.status==="rejected"&&s(r.reason);return t().catch(s)})},l0=[{path:"/",name:"overview",component:()=>yt(()=>import("./OverviewPage-
|
|
37
|
+
`)}function jy(e){let t=document.querySelector('link[rel="icon"]');t||(t=document.createElement("link"),t.rel="icon",document.head.appendChild(t)),t.href=e}async function Ky(){try{const e=await Qn.getBranding();e.logoUrl=e.logoUrl?Bi(e.logoUrl):null,e.faviconUrl=e.faviconUrl?Bi(e.faviconUrl):null,wl.value=e,document.title=e.title,e.faviconUrl&&jy(e.faviconUrl),Uy(e),jo()||bs(e.defaultTheme)}catch(e){console.error("Failed to load branding, using defaults:",e)}}const Wy={class:"app-shell"},Gy={class:"app-header"},qy=["src","alt"],Jy={key:0,class:"muted",style:{"font-size":"0.75rem"}},Yy={class:"app-header-controls"},Qy={class:"app-subnav","aria-label":"Primary"},Xy={class:"app-main"},Zy=ve({__name:"App",setup(e){const t=By(),l=My(),a=ne({status:"unknown",localstack:!1,dynamoProxy:{enabled:!1,running:!1,port:8e3}}),n=ne(document.documentElement.getAttribute("data-tree-theme")||"dark");let s=null;const i=h(()=>{const d=t.path.split("/").filter(Boolean);return d.length===0?"/":`/${d[0]}`}),r=h(()=>[{label:n.value==="dark"?"Switch to light":"Switch to dark",value:"theme"}]);function o(d){d&&d!==i.value&&l.push(d)}function c(d){d==="theme"&&(n.value=n.value==="dark"?"light":"dark",bs(n.value,!0))}async function u(){try{a.value=await Qn.checkHealth()}catch(d){console.error("Health check failed:",d)}}return Ql(async()=>{u(),s=window.setInterval(u,1e4);const d=Ot.value;Qn.getConfig().then(f=>Ly(f.region,Ot.value!==d)).catch(()=>{}),await Ky(),n.value=document.documentElement.getAttribute("data-tree-theme")||"dark"}),it(()=>{s&&window.clearInterval(s)}),(d,f)=>(m(),Ae(M(To),{position:"top-right"},{default:ye(()=>[w("div",Wy,[w("header",Gy,[me(M(Kn),{as:"div",bordered:""},{start:ye(()=>[me(M(Wn),{direction:"horizontal",gap:"0.625rem",align:"center"},{default:ye(()=>[M(wl).logoUrl?(m(),g("img",{key:0,src:M(wl).logoUrl,alt:`${M(wl).title} logo`,class:"brand-logo"},null,8,qy)):K("",!0),me(M(Wn),{direction:"vertical",gap:"0.125rem"},{default:ye(()=>[w("strong",null,Z(M(wl).title),1),M(wl).subtitle?(m(),g("span",Jy,Z(M(wl).subtitle),1)):K("",!0)]),_:1})]),_:1})]),end:ye(()=>{var v;return[w("div",Yy,[me(M(Wa),{tone:a.value.localstack?"success":"danger",variant:"soft"},{default:ye(()=>[Oe(" LocalStack: "+Z(a.value.localstack?"Running":"Offline"),1)]),_:1},8,["tone"]),(v=a.value.dynamoProxy)!=null&&v.enabled?(m(),Ae(M(Wa),{key:0,tone:a.value.dynamoProxy.running?"success":"warning",variant:"soft"},{default:ye(()=>[Oe(" Dynamo Proxy: "+Z(a.value.dynamoProxy.running?"On":"Off"),1)]),_:1},8,["tone"])):K("",!0),me(M(_o),{modelValue:M(Ot),"onUpdate:modelValue":f[0]||(f[0]=T=>Je(Ot)?Ot.value=T:null),options:M(Fy),size:"sm",style:{"min-width":"14rem"},"aria-label":"AWS Region"},null,8,["modelValue","options"]),me(M(bo),{items:r.value,size:"sm",label:"Open menu",onSelect:c},{trigger:ye(()=>[me(M($a),{size:"sm",variant:"ghost","aria-label":"Open menu"},{default:ye(()=>[...f[1]||(f[1]=[Oe(" ⋮ ",-1)])]),_:1})]),_:1},8,["items"])])]}),_:1}),w("nav",Qy,[me(M(ko),{"model-value":i.value,"onUpdate:modelValue":o},{default:ye(()=>[me(M($o),null,{default:ye(()=>[me(M(qt),{value:"/"},{default:ye(()=>[...f[2]||(f[2]=[Oe("Overview",-1)])]),_:1}),me(M(qt),{value:"/services"},{default:ye(()=>[...f[3]||(f[3]=[Oe("Services",-1)])]),_:1}),me(M(qt),{value:"/lambdas"},{default:ye(()=>[...f[4]||(f[4]=[Oe("Lambdas",-1)])]),_:1}),me(M(qt),{value:"/apis"},{default:ye(()=>[...f[5]||(f[5]=[Oe("APIs",-1)])]),_:1}),me(M(qt),{value:"/queues"},{default:ye(()=>[...f[6]||(f[6]=[Oe("Queues",-1)])]),_:1}),me(M(qt),{value:"/buckets"},{default:ye(()=>[...f[7]||(f[7]=[Oe("S3",-1)])]),_:1}),me(M(qt),{value:"/dynamo"},{default:ye(()=>[...f[8]||(f[8]=[Oe("DynamoDB",-1)])]),_:1}),me(M(qt),{value:"/opensearch"},{default:ye(()=>[...f[9]||(f[9]=[Oe("OpenSearch",-1)])]),_:1})]),_:1})]),_:1},8,["model-value"])])]),w("main",Xy,[(m(),g("div",{key:`${M(t).fullPath}-${M(Ot)}`},[me(M(Fo))]))])])]),_:1}))}}),e0="modulepreload",t0=function(e){return"/"+e},Fi={},yt=function(t,l,a){let n=Promise.resolve();if(l&&l.length>0){let i=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),o=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));n=i(l.map(c=>{if(c=t0(c),c in Fi)return;Fi[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":e0,u||(f.as="script"),f.crossOrigin="",f.href=c,o&&f.setAttribute("nonce",o),document.head.appendChild(f),u)return new Promise((v,T)=>{f.addEventListener("load",v),f.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(i){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=i,window.dispatchEvent(r),!r.defaultPrevented)throw i}return n.then(i=>{for(const r of i||[])r.status==="rejected"&&s(r.reason);return t().catch(s)})},l0=[{path:"/",name:"overview",component:()=>yt(()=>import("./OverviewPage-B13l71G0.js"),__vite__mapDeps([0,1])),meta:{title:"Overview"}},{path:"/services",name:"services",component:()=>yt(()=>import("./ServicesPage-DsoZBBxo.js"),[]),meta:{title:"Services"}},{path:"/services/:name",name:"service-detail",component:()=>yt(()=>import("./ServiceDetailPage-ZGLPswmY.js"),[]),props:e=>({serviceName:String(e.params.name)}),meta:{title:"Service"}},{path:"/lambdas",name:"lambdas",component:()=>yt(()=>import("./LambdasPage-Dz4wxjVd.js"),[]),meta:{title:"Lambdas"}},{path:"/lambdas/:name",name:"lambda-detail",component:()=>yt(()=>import("./LambdaDetailPage-BPhEkF44.js"),[]),props:e=>({functionName:String(e.params.name)}),meta:{title:"Lambda"}},{path:"/apis",name:"apis",component:()=>yt(()=>import("./ApisPage-DyjG-weG.js"),[]),meta:{title:"APIs"}},{path:"/queues",name:"queues",component:()=>yt(()=>import("./QueuesPage-CF9yiBkq.js"),[]),meta:{title:"Queues"}},{path:"/queues/:name",name:"queue-detail",component:()=>yt(()=>import("./QueueDetailPage-peLph1_v.js"),[]),props:e=>({queueName:String(e.params.name)}),meta:{title:"Queue"}},{path:"/buckets",name:"buckets",component:()=>yt(()=>import("./BucketsPage-KgeLoK6e.js"),[]),meta:{title:"S3 Buckets"}},{path:"/buckets/:name",name:"bucket-detail",component:()=>yt(()=>import("./BucketDetailPage-Bvrk1L6q.js"),[]),props:e=>({bucketName:String(e.params.name)}),meta:{title:"S3 Bucket"}},{path:"/dynamo",name:"dynamo",component:()=>yt(()=>import("./DynamoPage-C8rwaEIi.js"),[]),meta:{title:"DynamoDB"}},{path:"/dynamo/:name",name:"dynamo-table",component:()=>yt(()=>import("./DynamoTablePage-CN5P5f7S.js"),[]),props:e=>({tableName:String(e.params.name)}),meta:{title:"DynamoDB Table"}},{path:"/opensearch",name:"opensearch",component:()=>yt(()=>import("./OpenSearchPage-0fTJJovd.js"),[]),meta:{title:"OpenSearch"}},{path:"/opensearch/:name",name:"opensearch-collection",component:()=>yt(()=>import("./OpenSearchCollectionPage-B3s964oC.js"),[]),props:e=>({name:String(e.params.name)}),meta:{title:"OpenSearch Collection"}},{path:"/:pathMatch(.*)*",redirect:"/"}],a0=Py({history:vy(),routes:l0});bs(jo()??"dark");Oc(Zy).use(Eo).use(a0).mount("#app");export{i0 as $,Tg as A,ho as B,fp as C,kb as D,eh as E,xe as F,Wc as G,$o as H,qt as I,qb as J,Wh as K,_o as L,ko as M,zb as N,Uh as O,Cf as P,hm as Q,Oy as R,ub as S,Z as T,M as U,By as V,My as W,s0 as X,Ve as Y,ye as Z,n0 as _,Qn as a,Va as a0,h as b,tg as c,w as d,Ae as e,K as f,g,cd as h,Oe as i,me as j,ve as k,Ql as l,m,Le as n,it as o,Wa as p,_f as q,ne as r,nl as s,Wn as t,Dg as u,cg as v,um as w,sb as x,$a as y,Av as z};
|
package/dist/ui/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>LSS Orchestrator</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BP9zQ9L-.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-DH7RTkRh.css">
|
|
10
10
|
</head>
|
|
11
11
|
|