local-serverless-stack 0.8.0 → 0.9.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 +50 -0
- package/README.md +214 -624
- package/dist/client/types.d.ts +4 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/server/engine/aoss-sidecar.d.ts +13 -0
- package/dist/server/engine/aoss-sidecar.d.ts.map +1 -0
- package/dist/server/engine/aoss-sidecar.js +93 -0
- package/dist/server/engine/aoss-sidecar.js.map +1 -0
- 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/events/index.js +1 -1
- package/dist/server/engine/emulators/events/index.js.map +1 -1
- package/dist/server/engine/emulators/opensearch/index.d.ts +67 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.js +811 -0
- package/dist/server/engine/emulators/opensearch/index.js.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts +17 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.js +434 -0
- package/dist/server/engine/emulators/opensearch/search.js.map +1 -0
- package/dist/server/engine/http/router.d.ts.map +1 -1
- package/dist/server/engine/http/router.js +11 -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/index.js +31 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/config.d.ts.map +1 -1
- package/dist/server/routes/config.js +16 -0
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/opensearch.d.ts +3 -0
- package/dist/server/routes/opensearch.d.ts.map +1 -0
- package/dist/server/routes/opensearch.js +69 -0
- package/dist/server/routes/opensearch.js.map +1 -0
- package/dist/server/routes/resources.d.ts.map +1 -1
- package/dist/server/routes/resources.js +4 -1
- package/dist/server/routes/resources.js.map +1 -1
- package/dist/server/routes/services.d.ts.map +1 -1
- package/dist/server/routes/services.js +1 -0
- package/dist/server/routes/services.js.map +1 -1
- package/dist/server/services/cache-manager.d.ts +2 -1
- package/dist/server/services/cache-manager.d.ts.map +1 -1
- package/dist/server/services/cache-manager.js +22 -2
- package/dist/server/services/cache-manager.js.map +1 -1
- package/dist/server/services/cloudformation-parser.d.ts +10 -1
- package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
- package/dist/server/services/cloudformation-parser.js +28 -0
- package/dist/server/services/cloudformation-parser.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +55 -0
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +84 -0
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/server/services/gateway-manager.d.ts +2 -0
- package/dist/server/services/gateway-manager.d.ts.map +1 -1
- package/dist/server/services/gateway-manager.js +44 -6
- package/dist/server/services/gateway-manager.js.map +1 -1
- package/dist/server/services/opensearch-explorer.d.ts +37 -0
- package/dist/server/services/opensearch-explorer.d.ts.map +1 -0
- package/dist/server/services/opensearch-explorer.js +124 -0
- package/dist/server/services/opensearch-explorer.js.map +1 -0
- package/dist/server/services/resource-provisioner.d.ts +7 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +86 -4
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/service-registrar.d.ts +1 -0
- package/dist/server/services/service-registrar.d.ts.map +1 -1
- package/dist/server/services/service-registrar.js +17 -2
- package/dist/server/services/service-registrar.js.map +1 -1
- package/dist/ui/assets/{ApisPage-a9i2qD0Z.js → ApisPage-C0xaNFQW.js} +1 -1
- package/dist/ui/assets/{BucketDetailPage-Cz27N0KV.js → BucketDetailPage-Bnny8S04.js} +1 -1
- package/dist/ui/assets/{BucketsPage-CZ7wGmUN.js → BucketsPage-Dd3Y4-gU.js} +1 -1
- package/dist/ui/assets/{DynamoPage-BZMs1iW8.js → DynamoPage-JzSF-4VI.js} +1 -1
- package/dist/ui/assets/{DynamoTablePage-BQsGkhtO.js → DynamoTablePage-uM0DXGCo.js} +1 -1
- package/dist/ui/assets/{LambdaDetailPage-DJb7xqRB.js → LambdaDetailPage-CoR9ZXdb.js} +1 -1
- package/dist/ui/assets/{LambdasPage-Ctg1l-Lg.js → LambdasPage-CNMX_O5P.js} +1 -1
- package/dist/ui/assets/OpenSearchCollectionPage-D5FaSCF1.js +1 -0
- package/dist/ui/assets/OpenSearchPage-FEzLxaej.js +1 -0
- package/dist/ui/assets/OverviewPage-0xvjT7Q0.js +1 -0
- package/dist/ui/assets/OverviewPage-qEl0a-0B.css +1 -0
- package/dist/ui/assets/{QueueDetailPage-DRpSqost.js → QueueDetailPage-B2GaNLLe.js} +1 -1
- package/dist/ui/assets/{QueuesPage-CY0bDGwV.js → QueuesPage-Ch5kGwrp.js} +1 -1
- package/dist/ui/assets/ServiceDetailPage-DKiz21oo.js +2 -0
- package/dist/ui/assets/ServicesPage-Cmi3UIfM.js +2 -0
- package/dist/ui/assets/{index-C1KdKPDS.css → index-DH7RTkRh.css} +1 -1
- package/dist/ui/assets/index-MF9fVrsr.js +37 -0
- package/dist/ui/index.html +2 -2
- package/package.json +2 -1
- package/dist/ui/assets/OverviewPage-6jDXV1jr.css +0 -1
- package/dist/ui/assets/OverviewPage-DiijblCA.js +0 -1
- package/dist/ui/assets/ServiceDetailPage-CYTEdtts.js +0 -2
- package/dist/ui/assets/ServicesPage-OlV_rr-q.js +0 -2
- package/dist/ui/assets/index-DA_C1HOg.js +0 -36
|
@@ -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-MF9fVrsr.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};
|
|
@@ -0,0 +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(`
|
|
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};
|
|
@@ -0,0 +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-MF9fVrsr.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
|
+
`)||"— 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};
|