local-serverless-stack 0.8.0 → 0.10.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 +55 -0
- package/README.md +214 -624
- 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/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/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 +3 -3
- 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 +67 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.js +812 -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/emulators/s3/index.js +5 -5
- package/dist/server/engine/emulators/s3/index.js.map +1 -1
- 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 +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/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/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/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/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-DyjG-weG.js} +1 -1
- package/dist/ui/assets/{BucketDetailPage-Cz27N0KV.js → BucketDetailPage-Bvrk1L6q.js} +1 -1
- package/dist/ui/assets/{BucketsPage-CZ7wGmUN.js → BucketsPage-KgeLoK6e.js} +1 -1
- package/dist/ui/assets/{DynamoPage-BZMs1iW8.js → DynamoPage-C8rwaEIi.js} +1 -1
- package/dist/ui/assets/{DynamoTablePage-BQsGkhtO.js → DynamoTablePage-CN5P5f7S.js} +1 -1
- package/dist/ui/assets/{LambdaDetailPage-DJb7xqRB.js → LambdaDetailPage-BPhEkF44.js} +3 -3
- package/dist/ui/assets/{LambdasPage-Ctg1l-Lg.js → LambdasPage-Dz4wxjVd.js} +1 -1
- package/dist/ui/assets/OpenSearchCollectionPage-B3s964oC.js +1 -0
- package/dist/ui/assets/OpenSearchPage-0fTJJovd.js +1 -0
- package/dist/ui/assets/OverviewPage-B13l71G0.js +1 -0
- package/dist/ui/assets/OverviewPage-qEl0a-0B.css +1 -0
- package/dist/ui/assets/{QueueDetailPage-DRpSqost.js → QueueDetailPage-peLph1_v.js} +1 -1
- package/dist/ui/assets/{QueuesPage-CY0bDGwV.js → QueuesPage-CF9yiBkq.js} +1 -1
- package/dist/ui/assets/ServiceDetailPage-ZGLPswmY.js +2 -0
- package/dist/ui/assets/ServicesPage-DsoZBBxo.js +2 -0
- package/dist/ui/assets/index-BP9zQ9L-.js +37 -0
- package/dist/ui/assets/{index-C1KdKPDS.css → index-DH7RTkRh.css} +1 -1
- 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,3 +1,3 @@
|
|
|
1
|
-
import{k as H,Y as ve,m as r,e as k,U as e,B as Ye,Z as t,j as a,t as o,G as ne,i as c,T as b,f as C,d as f,p as J,K as Ze,y as E,g as R,F as M,r as g,b as q,a as K,c as fe,q as P,O as Xe,D as B,L as ae,v as we,E as L,P as et,a0 as _e,n as G,s as Ve,z as Se,A as tt,h as lt,Q as at,C as ye,w as ge,x as oe,S as nt,u as ke,l as it,M as ut,I as de,H as st,J as me,V as rt,W as xe}from"./index-
|
|
1
|
+
import{k as H,Y as ve,m as r,e as k,U as e,B as Ye,Z as t,j as a,t as o,G as ne,i as c,T as b,f as C,d as f,p as J,K as Ze,y as E,g as R,F as M,r as g,b as q,a as K,c as fe,q as P,O as Xe,D as B,L as ae,v as we,E as L,P as et,a0 as _e,n as G,s as Ve,z as Se,A as tt,h as lt,Q as at,C as ye,w as ge,x as oe,S as nt,u as ke,l as it,M as ut,I as de,H as st,J as me,V as rt,W as xe}from"./index-BP9zQ9L-.js";const ot=H({__name:"DynamoItemEditor",props:{open:{type:Boolean},tableName:{},mode:{},item:{},originalKey:{}},emits:["update:open","saved","request-edit","request-clone","request-delete"],setup(A,{emit:N}){const s=A,z=N,S=fe(),V=g(""),v=g(null),w=g(!1),_=q({get:()=>s.open,set:i=>z("update:open",i)}),h=q(()=>s.mode==="create"?`Create item · ${s.tableName}`:s.mode==="view"?`View item · ${s.tableName}`:`Edit item · ${s.tableName}`),j=q(()=>s.mode==="view");ve(()=>[s.open,s.item,s.mode],([i])=>{i&&(V.value=s.item&&Object.keys(s.item).length?JSON.stringify(s.item,null,2):`{
|
|
2
2
|
|
|
3
3
|
}`,v.value=null)},{immediate:!0});function x(){try{const i=JSON.parse(V.value);return i===null||typeof i!="object"||Array.isArray(i)?(v.value="Item must be a JSON object",null):(v.value=null,i)}catch(i){return v.value=i.message,null}}async function $(){const i=x();if(i){w.value=!0;try{s.mode==="edit"&&s.originalKey&&Object.entries(s.originalKey).some(([p,T])=>JSON.stringify(i[p])!==JSON.stringify(T))&&await K.deleteDynamoItem(s.tableName,s.originalKey),await K.putDynamoItem(s.tableName,i),S.add({title:s.mode==="create"?"Item created":"Item saved",variant:"success"}),z("saved"),_.value=!1}catch(d){S.add({title:"Save failed",description:d.message,variant:"danger"})}finally{w.value=!1}}}function y(){const i=x();i&&(V.value=JSON.stringify(i,null,2))}return(i,d)=>(r(),k(e(Ye),{open:_.value,"onUpdate:open":d[5]||(d[5]=p=>_.value=p),title:h.value,size:"lg"},{footer:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",justify:"space-between"},{default:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[j.value?C("",!0):(r(),k(e(E),{key:0,size:"sm",variant:"ghost",onClick:y},{default:t(()=>[...d[8]||(d[8]=[c(" Format JSON ",-1)])]),_:1})),j.value?(r(),R(M,{key:1},[a(e(E),{size:"sm",variant:"soft",onClick:d[1]||(d[1]=p=>z("request-edit"))},{default:t(()=>[...d[9]||(d[9]=[c("Edit",-1)])]),_:1}),a(e(E),{size:"sm",variant:"ghost",onClick:d[2]||(d[2]=p=>z("request-clone"))},{default:t(()=>[...d[10]||(d[10]=[c("Clone",-1)])]),_:1}),a(e(E),{size:"sm",variant:"ghost",tone:"danger",onClick:d[3]||(d[3]=p=>z("request-delete"))},{default:t(()=>[...d[11]||(d[11]=[c("Delete",-1)])]),_:1})],64)):C("",!0)]),_:1}),a(e(o),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(E),{size:"sm",variant:"ghost",onClick:d[4]||(d[4]=p=>_.value=!1)},{default:t(()=>[c(b(j.value?"Close":"Cancel"),1)]),_:1}),j.value?C("",!0):(r(),k(e(E),{key:0,size:"sm",variant:"solid",loading:w.value,disabled:!!v.value,onClick:$},{default:t(()=>[c(b(A.mode==="create"?"Create":"Save"),1)]),_:1},8,["loading","disabled"]))]),_:1})]),_:1})]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[v.value?(r(),k(e(ne),{key:0,variant:"danger"},{default:t(()=>[c(b(v.value),1)]),_:1})):C("",!0),a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[d[7]||(d[7]=f("span",{class:"muted",style:{"font-size":"0.75rem"}}," JSON object. Types are inferred — numbers, booleans, strings, arrays, nested objects are all supported. ",-1)),j.value?(r(),k(e(J),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[...d[6]||(d[6]=[c("read-only",-1)])]),_:1})):C("",!0)]),_:1}),a(e(Ze),{modelValue:V.value,"onUpdate:modelValue":d[0]||(d[0]=p=>V.value=p),rows:18,readonly:j.value,spellcheck:"false",class:"mono",onBlur:x},null,8,["modelValue","readonly"])]),_:1})]),_:1},8,["open","title"]))}}),dt={style:{width:"100%"}},mt={class:"muted",style:{"font-size":"0.75rem"}},vt={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},ft={key:1,class:"mono"},pt={class:"mono",style:{"font-size":"0.8rem"}},bt=H({__name:"DynamoItemsExplorer",props:{table:{}},setup(A){const N=A,s=fe(),z=g("scan"),S=g(""),V=g(50),v=g(""),w=g("="),_=g(""),h=g(""),j=g(!1),x=g([]),$=g(!1),y=g([]),i=g(void 0),d=g(void 0),p=g(null),T=g(!1),D=g(null),Y=g(!1),Z=g(!1),X=g("view"),O=g(null),ee=g(null),ie=g(!1),ue=g(null),Ae=[{value:"scan",label:"Scan"},{value:"query",label:"Query"}],Ce=[{value:"=",label:"Equal to"},{value:"<=",label:"Less than or equal to"},{value:"<",label:"Less than"},{value:">=",label:"Greater than or equal to"},{value:">",label:"Greater than"},{value:"between",label:"Between"},{value:"begins_with",label:"Begins with"}],ze=[{value:"=",label:"Equal to"},{value:"<>",label:"Not equal to"},{value:"<",label:"Less than"},{value:"<=",label:"Less than or equal to"},{value:">",label:"Greater than"},{value:">=",label:"Greater than or equal to"},{value:"begins_with",label:"Begins with"},{value:"contains",label:"Contains"},{value:"attribute_exists",label:"Exists"},{value:"attribute_not_exists",label:"Does not exist"}],Te=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Boolean",label:"Boolean"},{value:"Null",label:"Null"}],he=q(()=>{const u=[{value:"",label:`Table - ${N.table.name}`}];for(const l of N.table.gsis||[])l.IndexName&&u.push({value:l.IndexName,label:`Index - ${l.IndexName}`});for(const l of N.table.lsis||[])l.IndexName&&u.push({value:l.IndexName,label:`Index - ${l.IndexName}`});return u}),pe=q(()=>{if(!S.value)return N.table.keySchema;const u=N.table.gsis.find(l=>l.IndexName===S.value)||N.table.lsis.find(l=>l.IndexName===S.value);return(u==null?void 0:u.KeySchema)||N.table.keySchema}),te=q(()=>{var u,l;return((l=(u=pe.value)==null?void 0:u.find(n=>n.KeyType==="HASH"))==null?void 0:l.AttributeName)||""}),F=q(()=>{var u,l;return((l=(u=pe.value)==null?void 0:u.find(n=>n.KeyType==="RANGE"))==null?void 0:l.AttributeName)||""}),se=q(()=>(pe.value||[]).map(u=>u.AttributeName).filter(u=>!!u)),be=q(()=>{const u=new Set;for(const l of y.value)Object.keys(l).forEach(n=>{se.value.includes(n)||u.add(n)});return Array.from(u).sort()});function Ie(u){const l=N.table.attributeDefinitions.find(n=>n.AttributeName===u);return l!=null&&l.AttributeType?l.AttributeType==="S"?"String":l.AttributeType==="N"?"Number":l.AttributeType==="B"?"Binary":l.AttributeType:null}function $e(u,l,n){const m=Ie(u);return l?m?`${u} (${m}, PK)`:`${u} (PK)`:n?m?`${u} (${m}, SK)`:`${u} (SK)`:m?`${u} (${m})`:u}const De=q(()=>{const u=se.value.map((n,m)=>({key:`__attr__${n}`,label:$e(n,m===0,m===1)})),l=be.value.map(n=>({key:`__attr__${n}`,label:$e(n)}));return[...u,...l]}),Ee=q(()=>y.value.map((u,l)=>{const n={__id:l,__raw:u};for(const m of se.value)n[`__attr__${m}`]=u[m];for(const m of be.value)n[`__attr__${m}`]=u[m];return n}));function ce(u){return u===void 0?"—":u===null?"null":typeof u=="boolean"?u?"true":"false":typeof u=="object"?JSON.stringify(u).slice(0,80):String(u).slice(0,80)}function je(u,l){switch(l){case"Number":{const n=Number(u);if(Number.isNaN(n))throw new Error(`"${u}" is not a number`);return n}case"Boolean":return u==="true"||u==="1";case"Null":return null;case"String":default:return u}}function le(u,l){const n=N.table.attributeDefinitions.find(m=>m.AttributeName===l);if((n==null?void 0:n.AttributeType)==="N"){const m=Number(u);if(Number.isNaN(m))throw new Error(`"${u}" is not a number for ${l}`);return m}return u}function qe(){const u={},l={};if(!te.value)throw new Error("No partition key on the selected table or index");if(!v.value)throw new Error(`Partition key value (${te.value}) is required`);u["#pk"]=te.value,l[":pkv"]=le(v.value,te.value);let n="#pk = :pkv";if(F.value&&_.value)if(u["#sk"]=F.value,w.value==="between"){if(!h.value)throw new Error("BETWEEN requires two values");l[":skv1"]=le(_.value,F.value),l[":skv2"]=le(h.value,F.value),n+=" AND #sk BETWEEN :skv1 AND :skv2"}else w.value==="begins_with"?(l[":skv"]=le(_.value,F.value),n+=" AND begins_with(#sk, :skv)"):(l[":skv"]=le(_.value,F.value),n+=` AND #sk ${w.value} :skv`);return{keyExpr:n,names:u,values:l}}function Re(){const u={},l={},n=[];return x.value.forEach((m,I)=>{if(!m.attr)return;const U=`#fn${I}`,re=`:fv${I}`;if(u[U]=m.attr,m.op==="attribute_exists"){n.push(`attribute_exists(${U})`);return}if(m.op==="attribute_not_exists"){n.push(`attribute_not_exists(${U})`);return}l[re]=je(m.value,m.type),m.op==="begins_with"?n.push(`begins_with(${U}, ${re})`):m.op==="contains"?n.push(`contains(${U}, ${re})`):n.push(`${U} ${m.op} ${re}`)}),{expr:n.join(" AND "),names:u,values:l}}function Be(u){const l=Re(),n={indexName:S.value||void 0,limit:V.value>0?V.value:void 0,exclusiveStartKey:u};let m=l.names,I=l.values;if(l.expr&&(n.filterExpression=l.expr),z.value==="query"){const U=qe();n.keyConditionExpression=U.keyExpr,m={...m,...U.names},I={...I,...U.values},j.value&&(n.scanIndexForward=!1)}return Object.keys(m).length&&(n.expressionAttributeNames=m),Object.keys(I).length&&(n.expressionAttributeValues=I),n}async function W(u){T.value=!0,D.value=null;try{const l=Be(u),n=z.value==="scan"?await K.scanDynamoTable(N.table.name,l):await K.queryDynamoTable(N.table.name,l);u?y.value=[...y.value,...n.items]:(y.value=n.items,p.value=new Date),i.value=n.lastEvaluatedKey,d.value=n.scannedCount,Y.value=!0}catch(l){D.value=l.message||"Request failed"}finally{T.value=!1}}function Ke(){v.value="",w.value="=",_.value="",h.value="",j.value=!1,x.value=[],y.value=[],i.value=void 0,d.value=void 0,Y.value=!1,D.value=null}function Ue(){i.value&&W(i.value)}function Oe(){x.value.push({attr:"",op:"=",type:"String",value:""}),$.value=!0}function Le(u){x.value.splice(u,1)}function Ne(u){const l={};for(const n of N.table.keySchema)n.AttributeName&&(l[n.AttributeName]=u[n.AttributeName]);return l}function Pe(){const u={};for(const l of N.table.keySchema){if(!l.AttributeName)continue;const n=N.table.attributeDefinitions.find(m=>m.AttributeName===l.AttributeName);u[l.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}return u}function Fe(){X.value="create",O.value=Pe(),ee.value=null,Z.value=!0}function Je(u){X.value="view",O.value=u,ee.value=null,Z.value=!0}function Me(){O.value&&(ee.value=Ne(O.value),X.value="edit")}function Ge(){if(!O.value)return;const u={...O.value};for(const l of N.table.keySchema){if(!l.AttributeName)continue;const n=N.table.attributeDefinitions.find(m=>m.AttributeName===l.AttributeName);u[l.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}O.value=u,ee.value=null,X.value="create"}function We(){O.value&&(ue.value=Ne(O.value),ie.value=!0)}async function Qe(){if(ue.value)try{await K.deleteDynamoItem(N.table.name,ue.value),s.add({title:"Item deleted",variant:"info"}),Z.value=!1,await W()}catch(u){s.add({title:"Delete failed",description:u.message,variant:"danger"})}finally{ie.value=!1,ue.value=null}}function He(){W()}const Q=q(()=>{const u=y.value.length,l=d.value??u,n=l>0?Math.round(u/l*100):100;return{returned:u,scanned:l,efficiency:n,finished:!i.value}});return W(),ve(()=>[z.value,S.value],()=>{y.value=[],i.value=void 0,d.value=void 0,Y.value=!1}),(u,l)=>(r(),k(e(o),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[...l[15]||(l[15]=[f("strong",null,"Scan or query items",-1)])]),footer:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(E),{variant:"solid",loading:T.value,onClick:l[8]||(l[8]=n=>W())},{default:t(()=>[...l[20]||(l[20]=[c("Run",-1)])]),_:1},8,["loading"]),a(e(E),{variant:"ghost",onClick:Ke},{default:t(()=>[...l[21]||(l[21]=[c("Reset",-1)])]),_:1})]),_:1}),a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[l[22]||(l[22]=f("span",{class:"muted"},"Limit",-1)),a(e(L),{modelValue:V.value,"onUpdate:modelValue":l[9]||(l[9]=n=>V.value=n),modelModifiers:{number:!0},type:"number",size:"sm",style:{width:"6rem"}},null,8,["modelValue"])]),_:1})]),_:1})]),default:t(()=>[a(e(o),{direction:"vertical",gap:"1rem"},{default:t(()=>[f("div",dt,[a(e(Xe),{modelValue:z.value,"onUpdate:modelValue":l[0]||(l[0]=n=>z.value=n),options:Ae,size:"md"},null,8,["modelValue"])]),a(e(o),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(B),{label:"Select a table or index",style:{flex:"1"}},{default:t(()=>[a(e(ae),{modelValue:S.value,"onUpdate:modelValue":l[1]||(l[1]=n=>S.value=n),options:he.value},null,8,["modelValue","options"])]),_:1}),a(e(B),{label:"Select attribute projection",style:{flex:"1"}},{default:t(()=>[a(e(ae),{"model-value":"All attributes",options:[{value:"All attributes",label:"All attributes"}],disabled:""})]),_:1})]),_:1}),z.value==="query"?(r(),R(M,{key:0},[a(e(we)),a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[l[16]||(l[16]=f("strong",{style:{"font-size":"0.9rem"}},"Partition key",-1)),a(e(o),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(B),{label:"Attribute",style:{flex:"1"}},{default:t(()=>[a(e(L),{"model-value":te.value||"—",disabled:""},null,8,["model-value"])]),_:1}),a(e(B),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(L),{modelValue:v.value,"onUpdate:modelValue":l[2]||(l[2]=n=>v.value=n),placeholder:"Enter attribute value"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),F.value?(r(),k(e(o),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[l[17]||(l[17]=f("strong",{style:{"font-size":"0.9rem"}},"Sort key – optional",-1)),a(e(o),{direction:"horizontal",gap:"0.75rem",align:"end"},{default:t(()=>[a(e(B),{label:"Attribute",style:{flex:"1.4"}},{default:t(()=>[a(e(L),{"model-value":F.value,disabled:""},null,8,["model-value"])]),_:1}),a(e(B),{label:"Value",style:{flex:"1.2","min-width":"11rem"}},{default:t(()=>[a(e(ae),{modelValue:w.value,"onUpdate:modelValue":l[3]||(l[3]=n=>w.value=n),options:Ce},null,8,["modelValue"])]),_:1}),a(e(L),{modelValue:_.value,"onUpdate:modelValue":l[4]||(l[4]=n=>_.value=n),placeholder:"Enter attribute value",style:{flex:"2"}},null,8,["modelValue"]),w.value==="between"?(r(),k(e(L),{key:0,modelValue:h.value,"onUpdate:modelValue":l[5]||(l[5]=n=>h.value=n),placeholder:"and value",style:{flex:"2"}},null,8,["modelValue"])):C("",!0),a(e(et),{modelValue:j.value,"onUpdate:modelValue":l[6]||(l[6]=n=>j.value=n),label:"Sort descending"},null,8,["modelValue"])]),_:1})]),_:1})):C("",!0)],64)):C("",!0),a(e(we)),a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[f("a",{href:"#",style:{"text-decoration":"none","font-weight":"600","font-size":"0.9rem"},onClick:l[7]||(l[7]=_e(n=>$.value=!$.value,["prevent"]))},b($.value?"▼":"▶")+" Filters – optional ",1),$.value?(r(),k(e(o),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(r(!0),R(M,null,G(x.value,(n,m)=>(r(),k(e(o),{key:`f-${m}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(B),{label:"Attribute name",style:{flex:"1.4"}},{default:t(()=>[a(e(L),{modelValue:n.attr,"onUpdate:modelValue":I=>n.attr=I,placeholder:"Enter attribute name"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(B),{label:"Condition",style:{flex:"1.4"}},{default:t(()=>[a(e(ae),{modelValue:n.op,"onUpdate:modelValue":I=>n.op=I,options:ze},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(B),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e(ae),{modelValue:n.type,"onUpdate:modelValue":I=>n.type=I,options:Te},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(B),{label:"Value",style:{flex:"1.7"}},{default:t(()=>[a(e(L),{modelValue:n.value,"onUpdate:modelValue":I=>n.value=I,disabled:n.op==="attribute_exists"||n.op==="attribute_not_exists",placeholder:"Enter attribute value"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),a(e(E),{size:"sm",variant:"outline",onClick:I=>Le(m)},{default:t(()=>[...l[18]||(l[18]=[c("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128)),f("div",null,[a(e(E),{size:"sm",variant:"outline",onClick:Oe},{default:t(()=>[...l[19]||(l[19]=[c("Add filter",-1)])]),_:1})])]),_:1})):C("",!0)]),_:1})]),_:1})]),_:1}),D.value?(r(),k(e(ne),{key:0,variant:"danger",dismissible:"",onDismiss:l[10]||(l[10]=n=>D.value=null)},{default:t(()=>[c(b(D.value),1)]),_:1})):C("",!0),Y.value&&!D.value?(r(),k(e(ne),{key:1,variant:Q.value.finished?"success":"warning",dismissible:"",onDismiss:l[11]||(l[11]=n=>Y.value=!1)},{default:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[f("span",null,[f("strong",null,b(Q.value.finished?"Completed":"Stopped"),1),l[23]||(l[23]=c(" · Items returned: ",-1)),f("strong",null,b(Q.value.returned),1),l[24]||(l[24]=c(" · Items scanned: ",-1)),f("strong",null,b(Q.value.scanned),1),l[25]||(l[25]=c(" · Efficiency: ",-1)),f("strong",null,b(Q.value.efficiency)+"%",1)]),Q.value.finished?C("",!0):(r(),k(e(E),{key:0,size:"sm",variant:"outline",loading:T.value,onClick:Ue},{default:t(()=>[...l[26]||(l[26]=[c(" Retrieve next page ",-1)])]),_:1},8,["loading"]))]),_:1})]),_:1},8,["variant"])):C("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(o),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[f("strong",null,b(S.value?`Index: ${S.value} (${N.table.name})`:`Table: ${N.table.name}`)+" – Items returned ("+b(y.value.length)+") ",1),f("span",mt,b(z.value==="scan"?"Scan":"Query")+" started on "+b(p.value?p.value.toLocaleString():"—"),1)]),_:1}),a(e(o),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(E),{size:"sm",variant:"ghost",loading:T.value,onClick:l[12]||(l[12]=n=>W())},{default:t(()=>[...l[27]||(l[27]=[c("Refresh",-1)])]),_:1},8,["loading"]),a(e(E),{size:"sm",variant:"outline",onClick:Fe},{default:t(()=>[...l[28]||(l[28]=[c("Create item",-1)])]),_:1})]),_:1})]),_:1})]),default:t(()=>[T.value&&!y.value.length?(r(),R("div",vt,[a(e(Ve),{label:"Running..."})])):y.value.length?(r(),k(e(tt),{key:2,columns:De.value,rows:Ee.value},lt({_:2},[G(se.value,(n,m)=>({name:`cell-__attr__${n}`,fn:t(({row:I})=>[m===0?(r(),k(e(at),{key:0,href:"#",class:"mono",onClick:_e(U=>Je(I.__raw),["prevent"])},{default:t(()=>[c(b(ce(I[`__attr__${n}`])),1)]),_:2},1032,["onClick"])):(r(),R("span",ft,b(ce(I[`__attr__${n}`])),1))])})),G(be.value,n=>({name:`cell-__attr__${n}`,fn:t(({row:m})=>[f("span",pt,b(ce(m[`__attr__${n}`])),1)])}))]),1032,["columns","rows"])):(r(),k(e(Se),{key:1,title:"No items",description:"Run the operation to load items."}))]),_:1}),a(ot,{open:Z.value,"onUpdate:open":l[13]||(l[13]=n=>Z.value=n),"table-name":N.table.name,mode:X.value,item:O.value,"original-key":ee.value,onSaved:He,onRequestEdit:Me,onRequestClone:Ge,onRequestDelete:We},null,8,["open","table-name","mode","item","original-key"]),a(e(ye),{open:ie.value,"onUpdate:open":l[14]||(l[14]=n=>ie.value=n),title:"Delete item",description:`Delete this item from ${N.table.name}? This cannot be undone.`,"confirm-label":"Delete","cancel-label":"Cancel",tone:"danger",onConfirm:Qe},null,8,["open","description"])]),_:1}))}}),ct={key:0,class:"muted mono",style:{"font-size":"0.7rem"}},yt={key:1,class:"muted",style:{"font-size":"0.75rem"}},gt={class:"muted mono",style:{"font-size":"0.75rem"}},kt={class:"muted",style:{"font-size":"0.75rem"}},$t=H({__name:"DynamoTableSettings",props:{table:{}},emits:["refresh"],setup(A,{emit:N}){const s=A,z=N,S=fe(),V=g(s.table.ttl.enabled),v=g(s.table.ttl.attributeName||""),w=g(!1),_=g(null);ve(()=>[s.table.ttl.enabled,s.table.ttl.attributeName],([x,$])=>{V.value=x,v.value=$||""});async function h(){if(V.value&&!v.value.trim()){_.value="Attribute name is required to enable TTL";return}w.value=!0,_.value=null;try{await K.setDynamoTtl(s.table.name,V.value,v.value.trim()||void 0),S.add({title:V.value?"TTL enabled":"TTL disabled",description:V.value?`Attribute: ${v.value}`:void 0,variant:"success"}),z("refresh")}catch(x){_.value=x.message||"Failed to update TTL"}finally{w.value=!1}}function j(x){return x<1024?`${x} B`:x<1024*1024?`${(x/1024).toFixed(1)} KB`:`${(x/(1024*1024)).toFixed(1)} MB`}return(x,$)=>(r(),k(e(o),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(ge),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(oe),{label:"Items",value:s.table.itemCount,tone:"info"},null,8,["value"]),a(e(oe),{label:"Size",value:j(s.table.sizeBytes),tone:"neutral"},null,8,["value"]),a(e(oe),{label:"Status",value:s.table.status||"UNKNOWN",tone:s.table.status==="ACTIVE"?"success":"warning"},null,8,["value","tone"]),a(e(oe),{label:"Billing",value:s.table.billingMode||"—",tone:"neutral"},null,8,["value"])]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...$[3]||($[3]=[f("strong",null,"Time to Live (TTL)",-1)])]),default:t(()=>[_.value?(r(),k(e(ne),{key:0,variant:"danger",dismissible:"",onDismiss:$[0]||($[0]=y=>_.value=null)},{default:t(()=>[c(b(_.value),1)]),_:1})):C("",!0),a(e(o),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[$[5]||($[5]=f("span",{class:"muted",style:{"font-size":"0.8rem"}}," When TTL is enabled, items are automatically deleted by DynamoDB after the timestamp in the configured attribute (epoch seconds). Items are eventually consistent and may take time to be removed. ",-1)),a(e(B),{label:"Enable TTL"},{default:t(()=>[a(e(nt),{modelValue:V.value,"onUpdate:modelValue":$[1]||($[1]=y=>V.value=y)},null,8,["modelValue"])]),_:1}),a(e(B),{label:"Attribute name",hint:V.value?"Required when enabling TTL":"Disabled — value retained for reference"},{default:t(()=>[a(e(L),{modelValue:v.value,"onUpdate:modelValue":$[2]||($[2]=y=>v.value=y),placeholder:"e.g. expiresAt",disabled:!V.value},null,8,["modelValue","disabled"])]),_:1},8,["hint"]),a(e(o),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(E),{size:"sm",variant:"solid",loading:w.value,onClick:h},{default:t(()=>[...$[4]||($[4]=[c(" Apply ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...$[6]||($[6]=[f("strong",null,"Streams",-1)])]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(J),{tone:s.table.streamEnabled?"success":"neutral",variant:"soft"},{default:t(()=>[c(b(s.table.streamEnabled?"Enabled":"Disabled"),1)]),_:1},8,["tone"]),s.table.streamViewType?(r(),k(e(ke),{key:0,size:"sm",variant:"soft"},{default:t(()=>[c(b(s.table.streamViewType),1)]),_:1})):C("",!0)]),_:1}),s.table.streamArn?(r(),R("span",ct,b(s.table.streamArn),1)):(r(),R("span",yt," Streams configuration is set at table creation time and cannot be changed from here. "))]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...$[7]||($[7]=[f("strong",null,"Identifier",-1)])]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.25rem"},{default:t(()=>[f("span",gt," ARN: "+b(s.table.arn||"—"),1),f("span",kt," Created: "+b(s.table.createdAt?new Date(s.table.createdAt).toLocaleString():"—"),1)]),_:1})]),_:1})]),_:1}))}}),Nt={class:"mono",style:{"font-size":"0.8rem"}},wt={class:"mono"},_t=H({__name:"DynamoSeedPanel",props:{tableName:{},seedFile:{},seedItemCount:{},tableItemCount:{}},emits:["refresh"],setup(A,{emit:N}){const s=A,z=N,S=fe(),V=g(!1),v=g(!1),w=g(!1),_=g(!1),h=g(!1);async function j(){if(!V.value){V.value=!0;try{const y=await K.runSeed(s.tableName),i=y.results.reduce((p,T)=>p+(T.inserted||0),0),d=y.results.find(p=>p.skipped);d?S.add({title:"Seed skipped",description:`${s.tableName}: ${d.reason||"unknown reason"}`,variant:"warning"}):S.add({title:"Seed applied",description:`${i} item(s) inserted into ${s.tableName}`,variant:"success"}),z("refresh")}catch(y){S.add({title:"Seed failed",description:y.message,variant:"danger"})}finally{V.value=!1}}}async function x(){if(!w.value){w.value=!0;try{const i=(await K.clearSeed(s.tableName)).results.reduce((d,p)=>d+(p.deleted||0),0);S.add({title:"Table purged",description:`${i} item(s) removed from ${s.tableName}`,variant:"info"}),z("refresh")}catch(y){S.add({title:"Purge failed",description:y.message,variant:"danger"})}finally{w.value=!1,_.value=!1}}}async function $(){if(!v.value){v.value=!0;try{const i=(await K.clearSeed(s.tableName)).results.reduce((T,D)=>T+(D.deleted||0),0),p=(await K.runSeed(s.tableName)).results.reduce((T,D)=>T+(D.inserted||0),0);S.add({title:"Seed redone",description:`${i} removed, ${p} inserted in ${s.tableName}`,variant:"success"}),z("refresh")}catch(y){S.add({title:"Redo failed",description:y.message,variant:"danger"})}finally{v.value=!1,h.value=!1}}}return(y,i)=>(r(),k(e(o),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(o),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[i[4]||(i[4]=f("strong",null,"Seed file",-1)),a(e(J),{tone:"info",variant:"soft"},{default:t(()=>[c(b(A.seedItemCount)+" item"+b(A.seedItemCount===1?"":"s"),1)]),_:1})]),_:1})]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(o),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[i[5]||(i[5]=f("span",{class:"muted"},"Path",-1)),f("span",Nt,b(A.seedFile),1)]),_:1}),a(e(o),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[i[6]||(i[6]=f("span",{class:"muted"},"Current rows in table",-1)),f("span",wt,b(A.tableItemCount),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[...i[7]||(i[7]=[f("strong",null,"Actions",-1)])]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(o),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(o),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[...i[8]||(i[8]=[f("strong",null,"Apply seed",-1),f("span",{class:"muted",style:{"font-size":"0.825rem"}}," Inserts every item from the seed file. Existing items with the same key are overwritten. ",-1)])]),_:1}),a(e(E),{variant:"solid",loading:V.value,disabled:A.seedItemCount<=0,onClick:j},{default:t(()=>[...i[9]||(i[9]=[c(" Apply ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),a(e(o),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(o),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[...i[10]||(i[10]=[f("strong",null,"Redo seed",-1),f("span",{class:"muted",style:{"font-size":"0.825rem"}}," Purges the table first, then re-applies the seed file. Use when stale rows are blocking a fresh load. ",-1)])]),_:1}),a(e(E),{variant:"soft",loading:v.value,disabled:A.seedItemCount<=0,onClick:i[0]||(i[0]=d=>h.value=!0)},{default:t(()=>[...i[11]||(i[11]=[c(" Redo ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),a(e(o),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(o),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[...i[12]||(i[12]=[f("strong",null,"Purge table",-1),f("span",{class:"muted",style:{"font-size":"0.825rem"}}," Deletes every item currently in this table. The seed file is not touched. ",-1)])]),_:1}),a(e(E),{variant:"danger",loading:w.value,onClick:i[1]||(i[1]=d=>_.value=!0)},{default:t(()=>[...i[13]||(i[13]=[c(" Purge ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(ye),{open:_.value,"onUpdate:open":i[2]||(i[2]=d=>_.value=d),title:`Purge ${A.tableName}?`,description:`This deletes all ${A.tableItemCount} item(s) currently in the table. The seed file on disk is not affected.`,"confirm-label":"Purge","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:x},null,8,["open","title","description"]),a(e(ye),{open:h.value,"onUpdate:open":i[3]||(i[3]=d=>h.value=d),title:`Redo seed for ${A.tableName}?`,description:`This purges all ${A.tableItemCount} current item(s), then re-applies ${A.seedItemCount} seeded item(s).`,"confirm-label":"Redo","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:$},null,8,["open","title","description"])]),_:1}))}}),Vt={style:{"font-size":"1.1rem"}},St={key:2,style:{display:"flex","justify-content":"center",padding:"2rem"}},xt={style:{"padding-top":"1rem"}},At={style:{"padding-top":"1rem"}},Ct={class:"muted",style:{"font-size":"0.75rem"}},zt={class:"muted",style:{"font-size":"0.75rem"}},Tt={style:{"padding-top":"1rem"}},ht={style:{"padding-top":"1rem"}},It=H({__name:"DynamoTableDetail",props:{tableName:{}},emits:["back"],setup(A,{emit:N}){const s=A,z=N,S=rt(),V=xe(),v=g(null),w=g(null),_=g(!0),h=g(null),j=["items","indexes","settings","seed"],x=q({get(){const y=String(S.query.tab||"");return j.includes(y)?y:"items"},set(y){V.replace({query:{...S.query,tab:y==="items"?void 0:y}})}});async function $(){_.value=!0;try{const[y,i]=await Promise.all([K.describeDynamoTable(s.tableName),K.listSeeds().catch(()=>({seedsDir:"",entries:[]}))]);v.value=y,w.value=i.entries.find(d=>d.tableName===s.tableName)||null,h.value=null}catch(y){h.value=y.message||"Failed to load table",v.value=null}finally{_.value=!1}}return it($),ve(()=>s.tableName,$),(y,i)=>(r(),k(e(o),{direction:"vertical",gap:"1rem"},{default:t(()=>{var d;return[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var p;return[a(e(E),{size:"sm",variant:"ghost",onClick:i[0]||(i[0]=T=>z("back"))},{default:t(()=>[...i[3]||(i[3]=[c("← Tables",-1)])]),_:1}),f("strong",Vt,b(A.tableName),1),(p=v.value)!=null&&p.status?(r(),k(e(J),{key:0,tone:v.value.status==="ACTIVE"?"success":"warning",variant:"soft"},{default:t(()=>[c(b(v.value.status),1)]),_:1},8,["tone"])):C("",!0),w.value?(r(),k(e(J),{key:1,tone:"info",variant:"soft"},{default:t(()=>[c(" Seed: "+b(w.value.itemCount)+" item"+b(w.value.itemCount===1?"":"s"),1)]),_:1})):C("",!0)]}),_:1}),a(e(E),{size:"sm",variant:"ghost",loading:_.value,onClick:$},{default:t(()=>[...i[4]||(i[4]=[c("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),(d=v.value)!=null&&d.warnings.length?(r(),k(e(o),{key:0,direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(r(!0),R(M,null,G(v.value.warnings,p=>(r(),k(e(J),{key:p,tone:"warning",variant:"soft"},{default:t(()=>[c("⚠ "+b(p),1)]),_:2},1024))),128))]),_:1})):C("",!0),h.value?(r(),k(e(ne),{key:1,variant:"danger",dismissible:"",onDismiss:i[1]||(i[1]=p=>h.value=null)},{default:t(()=>[c(b(h.value),1)]),_:1})):C("",!0),_.value&&!v.value?(r(),R("div",St,[a(e(Ve),{label:"Loading table..."})])):v.value?(r(),k(e(ut),{key:3,modelValue:x.value,"onUpdate:modelValue":i[2]||(i[2]=p=>x.value=p)},{default:t(()=>[a(e(st),null,{default:t(()=>[a(e(de),{value:"items"},{default:t(()=>[...i[5]||(i[5]=[c("Items",-1)])]),_:1}),a(e(de),{value:"indexes"},{default:t(()=>[...i[6]||(i[6]=[c("Indexes",-1)])]),_:1}),a(e(de),{value:"settings"},{default:t(()=>[...i[7]||(i[7]=[c("Settings",-1)])]),_:1}),w.value?(r(),k(e(de),{key:0,value:"seed"},{default:t(()=>[...i[8]||(i[8]=[c("Seed",-1)])]),_:1})):C("",!0)]),_:1}),a(e(me),{value:"items"},{default:t(()=>[f("div",xt,[a(bt,{table:v.value},null,8,["table"])])]),_:1}),a(e(me),{value:"indexes"},{default:t(()=>[f("div",At,[!v.value.gsis.length&&!v.value.lsis.length?(r(),k(e(Se),{key:0,title:"No secondary indexes",description:"This table has only the primary key."})):(r(),k(e(o),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>[v.value.gsis.length?(r(),k(e(ge),{key:0,columns:2,gap:"0.75rem"},{default:t(()=>[(r(!0),R(M,null,G(v.value.gsis,p=>(r(),k(e(P),{key:p.IndexName,variant:"outline"},{header:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[f("strong",null,b(p.IndexName),1),a(e(J),{tone:"info",variant:"soft"},{default:t(()=>[...i[9]||(i[9]=[c("GSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>{var T;return[a(e(o),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(r(!0),R(M,null,G(p.KeySchema||[],D=>(r(),k(e(ke),{key:D.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[c(b(D.AttributeName)+" ("+b(D.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),f("span",Ct," Projection: "+b(((T=p.Projection)==null?void 0:T.ProjectionType)||"—")+" · Items: "+b(p.ItemCount??"—")+" · Status: "+b(p.IndexStatus||"—"),1)]}),_:2},1024)]),_:2},1024))),128))]),_:1})):C("",!0),v.value.lsis.length?(r(),k(e(ge),{key:1,columns:2,gap:"0.75rem"},{default:t(()=>[(r(!0),R(M,null,G(v.value.lsis,p=>(r(),k(e(P),{key:p.IndexName,variant:"outline"},{header:t(()=>[a(e(o),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[f("strong",null,b(p.IndexName),1),a(e(J),{tone:"neutral",variant:"soft"},{default:t(()=>[...i[10]||(i[10]=[c("LSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(o),{direction:"vertical",gap:"0.5rem"},{default:t(()=>{var T;return[a(e(o),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(r(!0),R(M,null,G(p.KeySchema||[],D=>(r(),k(e(ke),{key:D.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[c(b(D.AttributeName)+" ("+b(D.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),f("span",zt," Projection: "+b(((T=p.Projection)==null?void 0:T.ProjectionType)||"—"),1)]}),_:2},1024)]),_:2},1024))),128))]),_:1})):C("",!0)]),_:1}))])]),_:1}),a(e(me),{value:"settings"},{default:t(()=>[f("div",Tt,[a($t,{table:v.value,onRefresh:$},null,8,["table"])])]),_:1}),w.value?(r(),k(e(me),{key:0,value:"seed"},{default:t(()=>[f("div",ht,[a(_t,{"table-name":v.value.name,"seed-file":w.value.file,"seed-item-count":w.value.itemCount,"table-item-count":v.value.itemCount,onRefresh:$},null,8,["table-name","seed-file","seed-item-count","table-item-count"])])]),_:1})):C("",!0)]),_:1},8,["modelValue"])):C("",!0)]}),_:1}))}}),Et=H({__name:"DynamoTablePage",props:{tableName:{}},setup(A){const N=xe();function s(){N.push("/dynamo")}return(z,S)=>(r(),k(It,{"table-name":A.tableName,onBack:s},null,8,["table-name"]))}});export{Et as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{k as ee,l as me,o as ge,Y as pe,e as
|
|
1
|
+
import{k as ee,l as me,o as ge,Y as pe,e as c,U as e,t as d,Z as t,a as J,m as r,j as a,y as w,i as v,d as s,T as i,g,f as y,G as ye,s as W,x as T,w as ke,H as _e,I as S,J as x,q as k,D as Z,K as he,L as be,F as N,v as ze,p as I,n as Q,u as U,A as X,z as H,a0 as $e,M as we,c as Te,r as p,b as q,V as Ne,W as te}from"./index-BP9zQ9L-.js";const Le={style:{"font-size":"1.1rem"}},Re={key:0,class:"muted mono",style:{"font-size":"0.75rem"}},Ce={key:1,style:{display:"flex","justify-content":"center",padding:"2rem"}},Ee={style:{"padding-top":"1rem"}},Ve={class:"muted mono",style:{"font-size":"0.75rem"}},je={key:0,class:"muted",style:{"font-size":"0.75rem"}},Me={class:"muted mono",style:{"font-size":"0.75rem"}},Se={class:"logs-pre"},xe={class:"logs-pre"},Ie={class:"logs-pre"},qe={style:{"padding-top":"1rem"}},Be={key:1,class:"muted"},De={class:"mono"},Fe={key:1,class:"muted"},Oe={style:{"padding-top":"1rem"}},Ae={class:"mono",style:{"font-size":"0.78rem"}},Pe={class:"mono",style:{"font-size":"0.78rem"}},Je={style:{"padding-top":"1rem"}},Ue={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},He=["onClick"],Ke={class:"mono",style:{"font-size":"0.8rem"}},Ye={style:{"font-size":"0.85rem"}},Ge={class:"muted mono",style:{"font-size":"0.75rem"}},We={key:0,class:"logs-pre"},Ze=ee({__name:"LambdaDetail",props:{functionName:{}},emits:["back"],setup(L,{emit:B}){const _=L,K=B,D=Ne(),ne=te(),h=Te(),u=p(null),R=p(!0),b=p(null);let F=null;const ae=["invoke","triggers","environment","logs"],Y=q({get(){const l=String(D.query.tab||"");return ae.includes(l)?l:"invoke"},set(l){ne.replace({query:{...D.query,tab:l==="invoke"?void 0:l}})}}),C=p("{}"),E=p("RequestResponse"),V=p(!1),f=p(null),O=p(!1),oe=[{value:"RequestResponse",label:"RequestResponse (sync)"},{value:"Event",label:"Event (async, fire & forget)"}],z=p([]),j=p(!1),M=p({}),le=[{key:"key",label:"Key"},{key:"value",label:"Value"}],G=q(()=>{var l;return Object.entries(((l=u.value)==null?void 0:l.environment)||{}).map(([n,o])=>({key:n,value:o}))}),se=[{key:"method",label:"Method"},{key:"path",label:"Path"},{key:"eventType",label:"Type"},{key:"authorizerName",label:"Authorizer"}],re=q(()=>{var l;return(((l=u.value)==null?void 0:l.routes)||[]).map(n=>({...n}))}),ie=q(()=>{if(!f.value)return"";const l=f.value.payload;if(l===void 0)return"—";try{return JSON.stringify(l,null,2)}catch{return String(l)}});async function $(l=!0){l&&(R.value=!0);try{u.value=await J.getLambda(_.functionName),b.value=null}catch(n){b.value=n.message||"Failed to load function",u.value=null}finally{R.value=!1}}async function A(){j.value=!0;try{const l=await J.getLambdaLogs(_.functionName);z.value=[...l.invocations].reverse()}catch(l){h.add({title:"Failed to load invocation logs",description:l.message,variant:"danger"})}finally{j.value=!1}}async function ue(){var o;let l;const n=C.value.trim();if(n)try{l=JSON.parse(n)}catch{h.add({title:"Invalid JSON payload",description:"Fix the payload before invoking.",variant:"danger"});return}V.value=!0;try{const m=await J.invokeLambda(_.functionName,{payload:l,invocationType:E.value});E.value==="Event"?(f.value=null,O.value=!0,h.add({title:"Invocation accepted",description:"Event invocation queued (fire & forget).",variant:"success"})):(O.value=!1,f.value=m,m.ok||h.add({title:"Function returned an error",description:(o=m.functionError)==null?void 0:o.errorMessage,variant:"danger"})),await $(!1)}catch(m){h.add({title:"Failed to invoke function",description:m.message,variant:"danger"})}finally{V.value=!1}}function de(l){M.value[l]=!M.value[l]}function ve(l){switch(l){case"online":return"success";case"starting":return"info";case"stopped":return"neutral";default:return"danger"}}function fe(l){return l==="ANY"?"info":"neutral"}function ce(l){return l?new Date(l).toLocaleString():"—"}return me(()=>{$(),A(),F=window.setInterval(()=>$(!1),1e4)}),ge(()=>{F&&window.clearInterval(F)}),pe(()=>_.functionName,()=>{$(),A()}),(l,n)=>(r(),c(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(w),{size:"sm",variant:"ghost",onClick:n[0]||(n[0]=o=>K("back"))},{default:t(()=>[...n[7]||(n[7]=[v("← Lambdas",-1)])]),_:1}),s("strong",Le,i(L.functionName),1),u.value?(r(),g("span",Re,i(u.value.fullName),1)):y("",!0)]),_:1}),a(e(w),{size:"sm",variant:"ghost",loading:R.value,onClick:n[1]||(n[1]=o=>$())},{default:t(()=>[...n[8]||(n[8]=[v("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),b.value?(r(),c(e(ye),{key:0,variant:"danger",dismissible:"",onDismiss:n[2]||(n[2]=o=>b.value=null)},{default:t(()=>[v(i(b.value),1)]),_:1})):y("",!0),R.value&&!u.value?(r(),g("div",Ce,[a(e(W),{label:"Loading function..."})])):u.value?(r(),g(N,{key:2},[a(e(ke),{columns:5,gap:"0.75rem"},{default:t(()=>[a(e(T),{label:"Status",value:u.value.status,tone:ve(u.value.status)},null,8,["value","tone"]),a(e(T),{label:"Runtime",value:u.value.runtime,tone:"info"},null,8,["value"]),a(e(T),{label:"Memory",value:`${u.value.memorySize} MB`,tone:"neutral"},null,8,["value"]),a(e(T),{label:"Timeout",value:`${u.value.timeout}s`,tone:"neutral"},null,8,["value"]),a(e(T),{label:"Mode",value:u.value.executionMode||"—",tone:"neutral"},null,8,["value"])]),_:1}),a(e(we),{modelValue:Y.value,"onUpdate:modelValue":n[6]||(n[6]=o=>Y.value=o)},{default:t(()=>[a(e(_e),null,{default:t(()=>[a(e(S),{value:"invoke"},{default:t(()=>[...n[9]||(n[9]=[v("Invoke",-1)])]),_:1}),a(e(S),{value:"triggers"},{default:t(()=>[...n[10]||(n[10]=[v("Triggers",-1)])]),_:1}),a(e(S),{value:"environment"},{default:t(()=>[...n[11]||(n[11]=[v("Environment",-1)])]),_:1}),a(e(S),{value:"logs"},{default:t(()=>[...n[12]||(n[12]=[v("Logs",-1)])]),_:1})]),_:1}),a(e(x),{value:"invoke"},{default:t(()=>[s("div",Ee,[a(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(k),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[n[13]||(n[13]=s("strong",null,"Invoke function",-1)),s("span",Ve,i(u.value.handler),1)]),_:1})]),footer:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(w),{variant:"solid",loading:V.value,onClick:ue},{default:t(()=>[...n[14]||(n[14]=[v("Invoke",-1)])]),_:1},8,["loading"]),a(e(w),{variant:"ghost",disabled:V.value,onClick:n[5]||(n[5]=o=>C.value="{}")},{default:t(()=>[...n[15]||(n[15]=[v(" Reset payload ",-1)])]),_:1},8,["disabled"])]),_:1}),O.value?(r(),g("span",je," Last invocation accepted as Event — check the Logs tab for output. ")):y("",!0)]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(Z),{label:"Event payload",hint:"JSON passed to the handler as the event"},{default:t(()=>[a(e(he),{modelValue:C.value,"onUpdate:modelValue":n[3]||(n[3]=o=>C.value=o),class:"mono",rows:8,placeholder:"{}"},null,8,["modelValue"])]),_:1}),a(e(Z),{label:"Invocation type",style:{"max-width":"20rem"}},{default:t(()=>[a(e(be),{modelValue:E.value,"onUpdate:modelValue":n[4]||(n[4]=o=>E.value=o),options:oe},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),f.value?(r(),c(e(k),{key:0,variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[n[16]||(n[16]=s("strong",null,"Result",-1)),a(e(I),{tone:f.value.ok?"success":"danger",variant:"soft"},{default:t(()=>{var o;return[v(i(f.value.ok?"OK":((o=f.value.functionError)==null?void 0:o.errorType)||"Error"),1)]}),_:1},8,["tone"])]),_:1}),s("span",Me,i(f.value.durationMs)+"ms ",1)]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>{var o,m,P;return[f.value.ok?(r(),g(N,{key:0},[n[17]||(n[17]=s("strong",{style:{"font-size":"0.8rem"}},"Response payload",-1)),s("pre",Se,i(ie.value),1)],64)):(r(),g(N,{key:1},[n[18]||(n[18]=s("strong",{style:{"font-size":"0.8rem"}},"Function error",-1)),s("pre",xe,i([`${((o=f.value.functionError)==null?void 0:o.errorType)||"Error"}: ${((m=f.value.functionError)==null?void 0:m.errorMessage)||""}`,...((P=f.value.functionError)==null?void 0:P.trace)||[]].join(`
|
|
2
2
|
`)),1)],64)),a(e(ze)),n[19]||(n[19]=s("strong",{style:{"font-size":"0.8rem"}},"Captured logs",-1)),s("pre",Ie,i(f.value.logs.join(`
|
|
3
|
-
`)||"— no output —"),1)]}),_:1})]),_:1})):
|
|
4
|
-
`)||"— no output —"),1)):
|
|
3
|
+
`)||"— no output —"),1)]}),_:1})]),_:1})):y("",!0)]),_:1})])]),_:1}),a(e(x),{value:"triggers"},{default:t(()=>[s("div",qe,[a(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(k),{variant:"outline"},{header:t(()=>[...n[20]||(n[20]=[s("strong",null,"Trigger sources",-1)])]),default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:t(()=>[u.value.triggers.length?(r(!0),g(N,{key:0},Q(u.value.triggers,o=>(r(),c(e(U),{key:o,size:"sm",variant:"soft"},{default:t(()=>[v(i(o),1)]),_:2},1024))),128)):(r(),g("span",Be,"—"))]),_:1})]),_:1}),a(e(k),{variant:"outline"},{header:t(()=>[...n[21]||(n[21]=[s("strong",null,"HTTP routes",-1)])]),default:t(()=>[u.value.routes.length?(r(),c(e(X),{key:0,columns:se,rows:re.value},{"cell-method":t(({row:o})=>[a(e(I),{tone:fe(String(o.method)),variant:"soft"},{default:t(()=>[v(i(o.method),1)]),_:2},1032,["tone"])]),"cell-path":t(({row:o})=>[s("span",De,i(o.path),1)]),"cell-eventType":t(({row:o})=>[a(e(U),{size:"sm",variant:"soft"},{default:t(()=>[v(i(o.eventType),1)]),_:2},1024)]),"cell-authorizerName":t(({row:o})=>[o.authorizerName?(r(),c(e(U),{key:0,size:"sm",variant:"soft"},{default:t(()=>[v(i(o.authorizerName),1)]),_:2},1024)):(r(),g("span",Fe,"—"))]),_:1},8,["rows"])):(r(),c(e(H),{key:1,title:"No HTTP routes",description:"This function has no http/httpApi events pointing at it."}))]),_:1})]),_:1})])]),_:1}),a(e(x),{value:"environment"},{default:t(()=>[s("div",Oe,[a(e(k),{variant:"outline"},{header:t(()=>[...n[22]||(n[22]=[s("strong",null,"Environment variables",-1)])]),default:t(()=>[G.value.length?(r(),c(e(X),{key:0,columns:le,rows:G.value},{"cell-key":t(({row:o})=>[s("span",Ae,i(o.key),1)]),"cell-value":t(({row:o})=>[s("span",Pe,i(o.value),1)]),_:1},8,["rows"])):(r(),c(e(H),{key:1,title:"No environment variables",description:"No environment variables are configured for this function."}))]),_:1})])]),_:1}),a(e(x),{value:"logs"},{default:t(()=>[s("div",Je,[a(e(k),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[s("strong",null,"Recent invocations ("+i(z.value.length)+")",1),a(e(w),{size:"sm",variant:"ghost",loading:j.value,onClick:A},{default:t(()=>[...n[23]||(n[23]=[v(" Refresh ",-1)])]),_:1},8,["loading"])]),_:1})]),default:t(()=>[j.value&&!z.value.length?(r(),g("div",Ue,[a(e(W),{label:"Loading invocations..."})])):z.value.length?(r(),c(e(d),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(r(!0),g(N,null,Q(z.value,(o,m)=>(r(),c(e(k),{key:`inv-${m}`,variant:"soft"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[s("a",{href:"#",style:{"text-decoration":"none",color:"inherit"},onClick:$e(P=>de(m),["prevent"])},[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[s("span",Ke,i(M.value[m]?"▼":"▶"),1),s("span",Ye,i(ce(o.at)),1),a(e(I),{tone:o.ok?"success":"danger",variant:"soft"},{default:t(()=>[v(i(o.ok?"OK":"Error"),1)]),_:2},1032,["tone"]),o.statusCode&&o.statusCode>=400?(r(),c(e(I),{key:0,tone:o.statusCode>=500?"danger":"warning",variant:"soft"},{default:t(()=>[v(" HTTP "+i(o.statusCode),1)]),_:2},1032,["tone"])):y("",!0)]),_:2},1024),s("span",Ge,i(o.durationMs)+"ms · "+i(o.logs.length)+" line"+i(o.logs.length===1?"":"s"),1)]),_:2},1024)],8,He),M.value[m]?(r(),g("pre",We,i(o.logs.join(`
|
|
4
|
+
`)||"— no output —"),1)):y("",!0)]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),c(e(H),{key:1,title:"No invocations recorded",description:"Invoke the function to see its captured output here."}))]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):y("",!0)]),_:1}))}}),Xe=ee({__name:"LambdaDetailPage",props:{functionName:{}},setup(L){const B=te();function _(){B.push("/lambdas")}return(K,D)=>(r(),c(Ze,{"function-name":L.functionName,onBack:_},null,8,["function-name"]))}});export{Xe as default};
|
|
@@ -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};
|
|
@@ -0,0 +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-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};
|
|
@@ -0,0 +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-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};
|
|
@@ -0,0 +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-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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.overview-hero[data-v-7b113cd8]{background:linear-gradient(135deg,var(--tree-color-bg-surface, rgba(255, 255, 255, .02)),transparent)}
|
|
@@ -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-DA_C1HOg.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};
|
|
@@ -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-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
|
+
`)||"— 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-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
|
+
`)||"— 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};
|