local-serverless-stack 0.17.0 → 0.17.2
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/README.md +12 -8
- package/dist/server/routes/config.d.ts.map +1 -1
- package/dist/server/routes/config.js +182 -6
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +31 -0
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +370 -0
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/ui/assets/ApisPage-CXYcWDhm.js +1 -0
- package/dist/ui/assets/BucketDetailPage-BwS2--Pe.js +1 -0
- package/dist/ui/assets/BucketsPage-khuiYc9C.js +1 -0
- package/dist/ui/assets/DynamoPage-aYo0QC0N.js +1 -0
- package/dist/ui/assets/DynamoTablePage-rFuV2pgd.js +3 -0
- package/dist/ui/assets/LambdaDetailPage-CJmu8M_N.js +4 -0
- package/dist/ui/assets/LambdasPage-DniNyKMe.js +1 -0
- package/dist/ui/assets/OpenSearchCollectionPage-BBwjgbB9.js +1 -0
- package/dist/ui/assets/OpenSearchPage-D5RxJGRo.js +1 -0
- package/dist/ui/assets/OverviewPage-Cyt1Xdp8.js +1 -0
- package/dist/ui/assets/{OverviewPage-qEl0a-0B.css → OverviewPage-DS6XJ7kG.css} +1 -1
- package/dist/ui/assets/QueueDetailPage-3FPsowIp.js +1 -0
- package/dist/ui/assets/QueuesPage-CUoDDgHr.js +1 -0
- package/dist/ui/assets/SecretsPage-B_mTnUf3.js +1 -0
- package/dist/ui/assets/ServiceDetailPage-BcdSjA6e.js +2 -0
- package/dist/ui/assets/ServicesPage-CU6fb3f8.js +2 -0
- package/dist/ui/assets/SettingsPage-BG8cYxgC.js +1 -0
- package/dist/ui/assets/index-BxwA-UT0.css +1 -0
- package/dist/ui/assets/index-DGsXIPJ-.js +37 -0
- package/dist/ui/index.html +2 -2
- package/package.json +2 -2
- package/dist/ui/assets/ApisPage-CXVLYVM6.js +0 -1
- package/dist/ui/assets/BucketDetailPage-BU7ytv7P.js +0 -1
- package/dist/ui/assets/BucketsPage-6oRAkKhU.js +0 -1
- package/dist/ui/assets/DynamoPage-DU29K5hT.js +0 -1
- package/dist/ui/assets/DynamoTablePage-BsVCgzws.js +0 -3
- package/dist/ui/assets/LambdaDetailPage-CgDlY1Kc.js +0 -4
- package/dist/ui/assets/LambdasPage-CB59BQVb.js +0 -1
- package/dist/ui/assets/OpenSearchCollectionPage-PhV7ZitS.js +0 -1
- package/dist/ui/assets/OpenSearchPage-DMq5T-jO.js +0 -1
- package/dist/ui/assets/OverviewPage-B7i6ZutS.js +0 -1
- package/dist/ui/assets/QueueDetailPage-CDM38X1V.js +0 -1
- package/dist/ui/assets/QueuesPage-6py2nlnw.js +0 -1
- package/dist/ui/assets/SecretsPage-BlllDXAl.js +0 -1
- package/dist/ui/assets/SecretsPage-Dnkt3P3P.css +0 -1
- package/dist/ui/assets/ServiceDetailPage-ghEHM9ko.js +0 -2
- package/dist/ui/assets/ServicesPage-C0E9vXE2.js +0 -2
- package/dist/ui/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
- package/dist/ui/assets/index-DdoMwcQX.css +0 -1
- package/dist/ui/assets/index-VlhdCpKx.js +0 -37
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{k as X,a3 as fe,m as o,e as b,$ as e,J as tt,a4 as t,j as a,t as d,O as ie,i as r,_ as y,f as z,u as $,v as F,T as at,C as D,g as J,F as M,n as c,b as q,a as R,c as be,w as L,d as Q,X as lt,M as j,U as ne,B as xe,N as O,Y as nt,I as Ve,a7 as Se,s as ce,q as G,x as Ce,G as ze,H as it,h as ut,L as ke,D as $e,E as de,Z as rt,A as Ne,y as st,z as Ae,l as ot,V as dt,Q as me,P as mt,S as ve,a0 as vt,a1 as Te}from"./index-DGsXIPJ-.js";const ft=X({__name:"DynamoItemEditor",props:{open:{type:Boolean},tableName:{},mode:{},item:{},originalKey:{}},emits:["update:open","saved","request-edit","request-clone","request-delete"],setup(C,{emit:N}){const s=C,T=N,S=be(),V=c(""),f=c(null),w=c(!1),_=q({get:()=>s.open,set:i=>T("update:open",i)}),h=q(()=>s.mode==="create"?`Create item · ${s.tableName}`:s.mode==="view"?`View item · ${s.tableName}`:`Edit item · ${s.tableName}`),E=q(()=>s.mode==="view");fe(()=>[s.open,s.item,s.mode],([i])=>{i&&(V.value=s.item&&Object.keys(s.item).length?JSON.stringify(s.item,null,2):`{
|
|
2
|
+
|
|
3
|
+
}`,f.value=null)},{immediate:!0});function A(){try{const i=JSON.parse(V.value);return i===null||typeof i!="object"||Array.isArray(i)?(f.value="Item must be a JSON object",null):(f.value=null,i)}catch(i){return f.value=i.message,null}}async function k(){const i=A();if(i){w.value=!0;try{s.mode==="edit"&&s.originalKey&&Object.entries(s.originalKey).some(([p,x])=>JSON.stringify(i[p])!==JSON.stringify(x))&&await R.deleteDynamoItem(s.tableName,s.originalKey),await R.putDynamoItem(s.tableName,i),S.add({title:s.mode==="create"?"Item created":"Item saved",variant:"success"}),T("saved"),_.value=!1}catch(m){S.add({title:"Save failed",description:m.message,variant:"danger"})}finally{w.value=!1}}}function g(){const i=A();i&&(V.value=JSON.stringify(i,null,2))}return(i,m)=>(o(),b(e(tt),{open:_.value,"onUpdate:open":m[5]||(m[5]=p=>_.value=p),title:h.value,size:"lg"},{footer:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[E.value?z("",!0):(o(),b(e(D),{key:0,size:"sm",variant:"ghost",onClick:g},{default:t(()=>[...m[8]||(m[8]=[r(" Format JSON ",-1)])]),_:1})),E.value?(o(),J(M,{key:1},[a(e(D),{size:"sm",variant:"soft",onClick:m[1]||(m[1]=p=>T("request-edit"))},{default:t(()=>[...m[9]||(m[9]=[r("Edit",-1)])]),_:1}),a(e(D),{size:"sm",variant:"ghost",onClick:m[2]||(m[2]=p=>T("request-clone"))},{default:t(()=>[...m[10]||(m[10]=[r("Clone",-1)])]),_:1}),a(e(D),{size:"sm",variant:"ghost",tone:"danger",onClick:m[3]||(m[3]=p=>T("request-delete"))},{default:t(()=>[...m[11]||(m[11]=[r("Delete",-1)])]),_:1})],64)):z("",!0)]),_:1}),a(e(d),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(D),{size:"sm",variant:"ghost",onClick:m[4]||(m[4]=p=>_.value=!1)},{default:t(()=>[r(y(E.value?"Close":"Cancel"),1)]),_:1}),E.value?z("",!0):(o(),b(e(D),{key:0,size:"sm",variant:"solid",loading:w.value,disabled:!!f.value,onClick:k},{default:t(()=>[r(y(C.mode==="create"?"Create":"Save"),1)]),_:1},8,["loading","disabled"]))]),_:1})]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[f.value?(o(),b(e(ie),{key:0,variant:"danger"},{default:t(()=>[r(y(f.value),1)]),_:1})):z("",!0),a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e($),{tone:"muted",size:"xs"},{default:t(()=>[...m[6]||(m[6]=[r(" JSON object. Types are inferred — numbers, booleans, strings, arrays, nested objects are all supported. ",-1)])]),_:1}),E.value?(o(),b(e(F),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[...m[7]||(m[7]=[r("read-only",-1)])]),_:1})):z("",!0)]),_:1}),a(e(at),{modelValue:V.value,"onUpdate:modelValue":m[0]||(m[0]=p=>V.value=p),rows:18,readonly:E.value,spellcheck:"false",class:"mono",onBlur:A},null,8,["modelValue","readonly"])]),_:1})]),_:1},8,["open","title"]))}}),bt={style:{width:"100%"}},pt=X({__name:"DynamoItemsExplorer",props:{table:{}},setup(C){const N=C,s=be(),T=c("scan"),S=c(""),V=c(50),f=c(""),w=c("="),_=c(""),h=c(""),E=c(!1),A=c([]),k=c(!1),g=c([]),i=c(void 0),m=c(void 0),p=c(null),x=c(!1),B=c(null),Y=c(!1),Z=c(!1),ee=c("view"),K=c(null),te=c(null),ue=c(!1),re=c(null),he=[{value:"scan",label:"Scan"},{value:"query",label:"Query"}],Ie=[{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"}],De=[{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"}],Ee=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Boolean",label:"Boolean"},{value:"Null",label:"Null"}],qe=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}),ae=q(()=>{var u,l;return((l=(u=pe.value)==null?void 0:u.find(n=>n.KeyType==="HASH"))==null?void 0:l.AttributeName)||""}),P=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)),ge=q(()=>{const u=new Set;for(const l of g.value)Object.keys(l).forEach(n=>{se.value.includes(n)||u.add(n)});return Array.from(u).sort()});function je(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 we(u,l,n){const v=je(u);return l?v?`${u} (${v}, PK)`:`${u} (PK)`:n?v?`${u} (${v}, SK)`:`${u} (SK)`:v?`${u} (${v})`:u}const Re=q(()=>{const u=se.value.map((n,v)=>({key:`__attr__${n}`,label:we(n,v===0,v===1)})),l=ge.value.map(n=>({key:`__attr__${n}`,label:we(n)}));return[...u,...l]}),Be=q(()=>g.value.map((u,l)=>{const n={__id:l,__raw:u};for(const v of se.value)n[`__attr__${v}`]=u[v];for(const v of ge.value)n[`__attr__${v}`]=u[v];return n}));function ye(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 Ue(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(v=>v.AttributeName===l);if((n==null?void 0:n.AttributeType)==="N"){const v=Number(u);if(Number.isNaN(v))throw new Error(`"${u}" is not a number for ${l}`);return v}return u}function Ke(){const u={},l={};if(!ae.value)throw new Error("No partition key on the selected table or index");if(!f.value)throw new Error(`Partition key value (${ae.value}) is required`);u["#pk"]=ae.value,l[":pkv"]=le(f.value,ae.value);let n="#pk = :pkv";if(P.value&&_.value)if(u["#sk"]=P.value,w.value==="between"){if(!h.value)throw new Error("BETWEEN requires two values");l[":skv1"]=le(_.value,P.value),l[":skv2"]=le(h.value,P.value),n+=" AND #sk BETWEEN :skv1 AND :skv2"}else w.value==="begins_with"?(l[":skv"]=le(_.value,P.value),n+=" AND begins_with(#sk, :skv)"):(l[":skv"]=le(_.value,P.value),n+=` AND #sk ${w.value} :skv`);return{keyExpr:n,names:u,values:l}}function Oe(){const u={},l={},n=[];return A.value.forEach((v,I)=>{if(!v.attr)return;const U=`#fn${I}`,oe=`:fv${I}`;if(u[U]=v.attr,v.op==="attribute_exists"){n.push(`attribute_exists(${U})`);return}if(v.op==="attribute_not_exists"){n.push(`attribute_not_exists(${U})`);return}l[oe]=Ue(v.value,v.type),v.op==="begins_with"?n.push(`begins_with(${U}, ${oe})`):v.op==="contains"?n.push(`contains(${U}, ${oe})`):n.push(`${U} ${v.op} ${oe}`)}),{expr:n.join(" AND "),names:u,values:l}}function Le(u){const l=Oe(),n={indexName:S.value||void 0,limit:V.value>0?V.value:void 0,exclusiveStartKey:u};let v=l.names,I=l.values;if(l.expr&&(n.filterExpression=l.expr),T.value==="query"){const U=Ke();n.keyConditionExpression=U.keyExpr,v={...v,...U.names},I={...I,...U.values},E.value&&(n.scanIndexForward=!1)}return Object.keys(v).length&&(n.expressionAttributeNames=v),Object.keys(I).length&&(n.expressionAttributeValues=I),n}async function W(u){x.value=!0,B.value=null;try{const l=Le(u),n=T.value==="scan"?await R.scanDynamoTable(N.table.name,l):await R.queryDynamoTable(N.table.name,l);u?g.value=[...g.value,...n.items]:(g.value=n.items,p.value=new Date),i.value=n.lastEvaluatedKey,m.value=n.scannedCount,Y.value=!0}catch(l){B.value=l.message||"Request failed"}finally{x.value=!1}}function Pe(){f.value="",w.value="=",_.value="",h.value="",E.value=!1,A.value=[],g.value=[],i.value=void 0,m.value=void 0,Y.value=!1,B.value=null}function Fe(){i.value&&W(i.value)}function Je(){A.value.push({attr:"",op:"=",type:"String",value:""}),k.value=!0}function Me(u){A.value.splice(u,1)}function _e(u){const l={};for(const n of N.table.keySchema)n.AttributeName&&(l[n.AttributeName]=u[n.AttributeName]);return l}function Ge(){const u={};for(const l of N.table.keySchema){if(!l.AttributeName)continue;const n=N.table.attributeDefinitions.find(v=>v.AttributeName===l.AttributeName);u[l.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}return u}function Qe(){ee.value="create",K.value=Ge(),te.value=null,Z.value=!0}function We(u){ee.value="view",K.value=u,te.value=null,Z.value=!0}function He(){K.value&&(te.value=_e(K.value),ee.value="edit")}function Xe(){if(!K.value)return;const u={...K.value};for(const l of N.table.keySchema){if(!l.AttributeName)continue;const n=N.table.attributeDefinitions.find(v=>v.AttributeName===l.AttributeName);u[l.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}K.value=u,te.value=null,ee.value="create"}function Ye(){K.value&&(re.value=_e(K.value),ue.value=!0)}async function Ze(){if(re.value)try{await R.deleteDynamoItem(N.table.name,re.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{ue.value=!1,re.value=null}}function et(){W()}const H=q(()=>{const u=g.value.length,l=m.value??u,n=l>0?Math.round(u/l*100):100;return{returned:u,scanned:l,efficiency:n,finished:!i.value}});return W(),fe(()=>[T.value,S.value],()=>{g.value=[],i.value=void 0,m.value=void 0,Y.value=!1}),(u,l)=>(o(),b(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(L),{variant:"outline"},{header:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...l[15]||(l[15]=[r("Scan or query items",-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(D),{variant:"solid",loading:x.value,onClick:l[8]||(l[8]=n=>W())},{default:t(()=>[...l[21]||(l[21]=[r("Run",-1)])]),_:1},8,["loading"]),a(e(D),{variant:"ghost",onClick:Pe},{default:t(()=>[...l[22]||(l[22]=[r("Reset",-1)])]),_:1})]),_:1}),a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e($),{tone:"muted"},{default:t(()=>[...l[23]||(l[23]=[r("Limit",-1)])]),_:1}),a(e(O),{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(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[Q("div",bt,[a(e(lt),{modelValue:T.value,"onUpdate:modelValue":l[0]||(l[0]=n=>T.value=n),options:he,size:"md"},null,8,["modelValue"])]),a(e(d),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(j),{label:"Select a table or index",style:{flex:"1"}},{default:t(()=>[a(e(ne),{modelValue:S.value,"onUpdate:modelValue":l[1]||(l[1]=n=>S.value=n),options:qe.value},null,8,["modelValue","options"])]),_:1}),a(e(j),{label:"Select attribute projection",style:{flex:"1"}},{default:t(()=>[a(e(ne),{"model-value":"All attributes",options:[{value:"All attributes",label:"All attributes"}],disabled:""})]),_:1})]),_:1}),T.value==="query"?(o(),J(M,{key:0},[a(e(xe)),a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e($),{weight:"semibold",style:{"font-size":"0.9rem"}},{default:t(()=>[...l[16]||(l[16]=[r("Partition key",-1)])]),_:1}),a(e(d),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(j),{label:"Attribute",style:{flex:"1"}},{default:t(()=>[a(e(O),{"model-value":ae.value||"—",disabled:""},null,8,["model-value"])]),_:1}),a(e(j),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(O),{modelValue:f.value,"onUpdate:modelValue":l[2]||(l[2]=n=>f.value=n),placeholder:"Enter attribute value"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),P.value?(o(),b(e(d),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e($),{weight:"semibold",style:{"font-size":"0.9rem"}},{default:t(()=>[...l[17]||(l[17]=[r("Sort key – optional",-1)])]),_:1}),a(e(d),{direction:"horizontal",gap:"0.75rem",align:"end"},{default:t(()=>[a(e(j),{label:"Attribute",style:{flex:"1.4"}},{default:t(()=>[a(e(O),{"model-value":P.value,disabled:""},null,8,["model-value"])]),_:1}),a(e(j),{label:"Value",style:{flex:"1.2","min-width":"11rem"}},{default:t(()=>[a(e(ne),{modelValue:w.value,"onUpdate:modelValue":l[3]||(l[3]=n=>w.value=n),options:Ie},null,8,["modelValue"])]),_:1}),a(e(O),{modelValue:_.value,"onUpdate:modelValue":l[4]||(l[4]=n=>_.value=n),placeholder:"Enter attribute value",style:{flex:"2"}},null,8,["modelValue"]),w.value==="between"?(o(),b(e(O),{key:0,modelValue:h.value,"onUpdate:modelValue":l[5]||(l[5]=n=>h.value=n),placeholder:"and value",style:{flex:"2"}},null,8,["modelValue"])):z("",!0),a(e(nt),{modelValue:E.value,"onUpdate:modelValue":l[6]||(l[6]=n=>E.value=n),label:"Sort descending"},null,8,["modelValue"])]),_:1})]),_:1})):z("",!0)],64)):z("",!0),a(e(xe)),a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(Ve),{href:"#",style:{"font-weight":"600","font-size":"0.9rem"},onClick:l[7]||(l[7]=Se(n=>k.value=!k.value,["prevent"]))},{default:t(()=>[a(e(ce),{name:k.value?"chevron-down":"chevron-right"},null,8,["name"]),l[18]||(l[18]=r(" Filters – optional ",-1))]),_:1}),k.value?(o(),b(e(d),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(o(!0),J(M,null,G(A.value,(n,v)=>(o(),b(e(d),{key:`f-${v}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(j),{label:"Attribute name",style:{flex:"1.4"}},{default:t(()=>[a(e(O),{modelValue:n.attr,"onUpdate:modelValue":I=>n.attr=I,placeholder:"Enter attribute name"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(j),{label:"Condition",style:{flex:"1.4"}},{default:t(()=>[a(e(ne),{modelValue:n.op,"onUpdate:modelValue":I=>n.op=I,options:De},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(j),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e(ne),{modelValue:n.type,"onUpdate:modelValue":I=>n.type=I,options:Ee},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(j),{label:"Value",style:{flex:"1.7"}},{default:t(()=>[a(e(O),{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(D),{size:"sm",variant:"outline",onClick:I=>Me(v)},{default:t(()=>[...l[19]||(l[19]=[r("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128)),Q("div",null,[a(e(D),{size:"sm",variant:"outline",onClick:Je},{default:t(()=>[...l[20]||(l[20]=[r("Add filter",-1)])]),_:1})])]),_:1})):z("",!0)]),_:1})]),_:1})]),_:1}),B.value?(o(),b(e(ie),{key:0,variant:"danger",dismissible:"",onDismiss:l[10]||(l[10]=n=>B.value=null)},{default:t(()=>[r(y(B.value),1)]),_:1})):z("",!0),Y.value&&!B.value?(o(),b(e(ie),{key:1,variant:H.value.finished?"success":"warning",dismissible:"",onDismiss:l[11]||(l[11]=n=>Y.value=!1)},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[Q("span",null,[a(e($),{as:"strong",weight:"semibold"},{default:t(()=>[r(y(H.value.finished?"Completed":"Stopped"),1)]),_:1}),l[24]||(l[24]=r(" · Items returned: ",-1)),a(e($),{as:"strong",weight:"semibold"},{default:t(()=>[r(y(H.value.returned),1)]),_:1}),l[25]||(l[25]=r(" · Items scanned: ",-1)),a(e($),{as:"strong",weight:"semibold"},{default:t(()=>[r(y(H.value.scanned),1)]),_:1}),l[26]||(l[26]=r(" · Efficiency: ",-1)),a(e($),{as:"strong",weight:"semibold"},{default:t(()=>[r(y(H.value.efficiency)+"%",1)]),_:1})]),H.value.finished?z("",!0):(o(),b(e(D),{key:0,size:"sm",variant:"outline",loading:x.value,onClick:Fe},{default:t(()=>[...l[27]||(l[27]=[r(" Retrieve next page ",-1)])]),_:1},8,["loading"]))]),_:1})]),_:1},8,["variant"])):z("",!0),a(e(L),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[r(y(S.value?`Index: ${S.value} (${N.table.name})`:`Table: ${N.table.name}`)+" – Items returned ("+y(g.value.length)+") ",1)]),_:1}),a(e($),{tone:"muted",size:"xs"},{default:t(()=>[r(y(T.value==="scan"?"Scan":"Query")+" started on "+y(p.value?p.value.toLocaleString():"—"),1)]),_:1})]),_:1}),a(e(d),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(D),{size:"sm",variant:"ghost",loading:x.value,onClick:l[12]||(l[12]=n=>W())},{default:t(()=>[...l[28]||(l[28]=[r("Refresh",-1)])]),_:1},8,["loading"]),a(e(D),{size:"sm",variant:"outline",onClick:Qe},{default:t(()=>[...l[29]||(l[29]=[r("Create item",-1)])]),_:1})]),_:1})]),_:1})]),default:t(()=>[x.value&&!g.value.length?(o(),b(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(Ce),{label:"Running..."})]),_:1})):g.value.length?(o(),b(e(it),{key:2,columns:Re.value,rows:Be.value,"aria-label":"Scan and query results"},ut({_:2},[G(se.value,(n,v)=>({name:`cell-__attr__${n}`,fn:t(({row:I})=>[v===0?(o(),b(e(Ve),{key:0,href:"#",class:"mono",onClick:Se(U=>We(I.__raw),["prevent"])},{default:t(()=>[r(y(ye(I[`__attr__${n}`])),1)]),_:2},1032,["onClick"])):(o(),b(e($),{key:1,family:"mono"},{default:t(()=>[r(y(ye(I[`__attr__${n}`])),1)]),_:2},1024))])})),G(ge.value,n=>({name:`cell-__attr__${n}`,fn:t(({row:v})=>[a(e($),{family:"mono",size:"sm"},{default:t(()=>[r(y(ye(v[`__attr__${n}`])),1)]),_:2},1024)])}))]),1032,["columns","rows"])):(o(),b(e(ze),{key:1,title:"No items",description:"Run the operation to load items."}))]),_:1}),a(ft,{open:Z.value,"onUpdate:open":l[13]||(l[13]=n=>Z.value=n),"table-name":N.table.name,mode:ee.value,item:K.value,"original-key":te.value,onSaved:et,onRequestEdit:He,onRequestClone:Xe,onRequestDelete:Ye},null,8,["open","table-name","mode","item","original-key"]),a(e(ke),{open:ue.value,"onUpdate:open":l[14]||(l[14]=n=>ue.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:Ze},null,8,["open","description"])]),_:1}))}}),gt=X({__name:"DynamoTableSettings",props:{table:{}},emits:["refresh"],setup(C,{emit:N}){const s=C,T=N,S=be(),V=c(s.table.ttl.enabled),f=c(s.table.ttl.attributeName||""),w=c(!1),_=c(null);fe(()=>[s.table.ttl.enabled,s.table.ttl.attributeName],([A,k])=>{V.value=A,f.value=k||""});async function h(){if(V.value&&!f.value.trim()){_.value="Attribute name is required to enable TTL";return}w.value=!0,_.value=null;try{await R.setDynamoTtl(s.table.name,V.value,f.value.trim()||void 0),S.add({title:V.value?"TTL enabled":"TTL disabled",description:V.value?`Attribute: ${f.value}`:void 0,variant:"success"}),T("refresh")}catch(A){_.value=A.message||"Failed to update TTL"}finally{w.value=!1}}function E(A){return A<1024?`${A} B`:A<1024*1024?`${(A/1024).toFixed(1)} KB`:`${(A/(1024*1024)).toFixed(1)} MB`}return(A,k)=>(o(),b(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e($e),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(de),{label:"Items",value:s.table.itemCount,tone:"info"},null,8,["value"]),a(e(de),{label:"Size",value:E(s.table.sizeBytes),tone:"neutral"},null,8,["value"]),a(e(de),{label:"Status",value:s.table.status||"UNKNOWN",tone:s.table.status==="ACTIVE"?"success":"warning"},null,8,["value","tone"]),a(e(de),{label:"Billing",value:s.table.billingMode||"—",tone:"neutral"},null,8,["value"])]),_:1}),a(e(L),{variant:"outline"},{header:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...k[3]||(k[3]=[r("Time to Live (TTL)",-1)])]),_:1})]),default:t(()=>[_.value?(o(),b(e(ie),{key:0,variant:"danger",dismissible:"",onDismiss:k[0]||(k[0]=g=>_.value=null)},{default:t(()=>[r(y(_.value),1)]),_:1})):z("",!0),a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e($),{tone:"muted",size:"sm"},{default:t(()=>[...k[4]||(k[4]=[r(" 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)])]),_:1}),a(e(j),{label:"Enable TTL"},{default:t(()=>[a(e(rt),{modelValue:V.value,"onUpdate:modelValue":k[1]||(k[1]=g=>V.value=g)},null,8,["modelValue"])]),_:1}),a(e(j),{label:"Attribute name",hint:V.value?"Required when enabling TTL":"Disabled — value retained for reference"},{default:t(()=>[a(e(O),{modelValue:f.value,"onUpdate:modelValue":k[2]||(k[2]=g=>f.value=g),placeholder:"e.g. expiresAt",disabled:!V.value},null,8,["modelValue","disabled"])]),_:1},8,["hint"]),a(e(d),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(D),{size:"sm",variant:"solid",loading:w.value,onClick:h},{default:t(()=>[...k[5]||(k[5]=[r(" Apply ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(L),{variant:"outline"},{header:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...k[6]||(k[6]=[r("Streams",-1)])]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(F),{tone:s.table.streamEnabled?"success":"neutral",variant:"soft"},{default:t(()=>[r(y(s.table.streamEnabled?"Enabled":"Disabled"),1)]),_:1},8,["tone"]),s.table.streamViewType?(o(),b(e(Ne),{key:0,size:"sm",variant:"soft"},{default:t(()=>[r(y(s.table.streamViewType),1)]),_:1})):z("",!0)]),_:1}),s.table.streamArn?(o(),b(e($),{key:0,tone:"muted",family:"mono",style:{"font-size":"0.7rem"}},{default:t(()=>[r(y(s.table.streamArn),1)]),_:1})):(o(),b(e($),{key:1,tone:"muted",size:"xs"},{default:t(()=>[...k[7]||(k[7]=[r(" Streams configuration is set at table creation time and cannot be changed from here. ",-1)])]),_:1}))]),_:1})]),_:1}),a(e(L),{variant:"outline"},{header:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...k[8]||(k[8]=[r("Identifier",-1)])]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.25rem"},{default:t(()=>[a(e($),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[r(" ARN: "+y(s.table.arn||"—"),1)]),_:1}),a(e($),{tone:"muted",size:"xs"},{default:t(()=>[r(" Created: "+y(s.table.createdAt?new Date(s.table.createdAt).toLocaleString():"—"),1)]),_:1})]),_:1})]),_:1})]),_:1}))}}),yt=X({__name:"DynamoSeedPanel",props:{tableName:{},seedFile:{},seedItemCount:{},tableItemCount:{}},emits:["refresh"],setup(C,{emit:N}){const s=C,T=N,S=be(),V=c(!1),f=c(!1),w=c(!1),_=c(!1),h=c(!1);async function E(){if(!V.value){V.value=!0;try{const g=await R.runSeed(s.tableName),i=g.results.reduce((p,x)=>p+(x.inserted||0),0),m=g.results.find(p=>p.skipped);m?S.add({title:"Seed skipped",description:`${s.tableName}: ${m.reason||"unknown reason"}`,variant:"warning"}):S.add({title:"Seed applied",description:`${i} item(s) inserted into ${s.tableName}`,variant:"success"}),T("refresh")}catch(g){S.add({title:"Seed failed",description:g.message,variant:"danger"})}finally{V.value=!1}}}async function A(){if(!w.value){w.value=!0;try{const i=(await R.clearSeed(s.tableName)).results.reduce((m,p)=>m+(p.deleted||0),0);S.add({title:"Table purged",description:`${i} item(s) removed from ${s.tableName}`,variant:"info"}),T("refresh")}catch(g){S.add({title:"Purge failed",description:g.message,variant:"danger"})}finally{w.value=!1,_.value=!1}}}async function k(){if(!f.value){f.value=!0;try{const i=(await R.clearSeed(s.tableName)).results.reduce((x,B)=>x+(B.deleted||0),0),p=(await R.runSeed(s.tableName)).results.reduce((x,B)=>x+(B.inserted||0),0);S.add({title:"Seed redone",description:`${i} removed, ${p} inserted in ${s.tableName}`,variant:"success"}),T("refresh")}catch(g){S.add({title:"Redo failed",description:g.message,variant:"danger"})}finally{f.value=!1,h.value=!1}}}return(g,i)=>(o(),b(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(L),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...i[4]||(i[4]=[r("Seed file",-1)])]),_:1}),a(e(F),{tone:"info",variant:"soft"},{default:t(()=>[r(y(C.seedItemCount)+" item"+y(C.seedItemCount===1?"":"s"),1)]),_:1})]),_:1})]),default:t(()=>[a(e(st),null,{default:t(()=>[a(e(Ae),{label:"Path"},{default:t(()=>[a(e($),{family:"mono",size:"sm"},{default:t(()=>[r(y(C.seedFile),1)]),_:1})]),_:1}),a(e(Ae),{label:"Current rows in table"},{default:t(()=>[a(e($),{family:"mono"},{default:t(()=>[r(y(C.tableItemCount),1)]),_:1})]),_:1})]),_:1})]),_:1}),a(e(L),{variant:"outline"},{header:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...i[5]||(i[5]=[r("Actions",-1)])]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(d),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...i[6]||(i[6]=[r("Apply seed",-1)])]),_:1}),a(e($),{tone:"muted",size:"sm"},{default:t(()=>[...i[7]||(i[7]=[r(" Inserts every item from the seed file. Existing items with the same key are overwritten. ",-1)])]),_:1})]),_:1}),a(e(D),{variant:"solid",loading:V.value,disabled:C.seedItemCount<=0,onClick:E},{default:t(()=>[...i[8]||(i[8]=[r(" Apply ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),a(e(d),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...i[9]||(i[9]=[r("Redo seed",-1)])]),_:1}),a(e($),{tone:"muted",size:"sm"},{default:t(()=>[...i[10]||(i[10]=[r(" Purges the table first, then re-applies the seed file. Use when stale rows are blocking a fresh load. ",-1)])]),_:1})]),_:1}),a(e(D),{variant:"soft",loading:f.value,disabled:C.seedItemCount<=0,onClick:i[0]||(i[0]=m=>h.value=!0)},{default:t(()=>[...i[11]||(i[11]=[r(" Redo ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),a(e(d),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[...i[12]||(i[12]=[r("Purge table",-1)])]),_:1}),a(e($),{tone:"muted",size:"sm"},{default:t(()=>[...i[13]||(i[13]=[r(" Deletes every item currently in this table. The seed file is not touched. ",-1)])]),_:1})]),_:1}),a(e(D),{variant:"danger",loading:w.value,onClick:i[1]||(i[1]=m=>_.value=!0)},{default:t(()=>[...i[14]||(i[14]=[r(" Purge ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(ke),{open:_.value,"onUpdate:open":i[2]||(i[2]=m=>_.value=m),title:`Purge ${C.tableName}?`,description:`This deletes all ${C.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:A},null,8,["open","title","description"]),a(e(ke),{open:h.value,"onUpdate:open":i[3]||(i[3]=m=>h.value=m),title:`Redo seed for ${C.tableName}?`,description:`This purges all ${C.tableItemCount} current item(s), then re-applies ${C.seedItemCount} seeded item(s).`,"confirm-label":"Redo","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:k},null,8,["open","title","description"])]),_:1}))}}),ct={style:{"padding-top":"1rem"}},kt={style:{"padding-top":"1rem"}},$t={style:{"padding-top":"1rem"}},Nt={style:{"padding-top":"1rem"}},wt=X({__name:"DynamoTableDetail",props:{tableName:{}},emits:["back"],setup(C,{emit:N}){const s=C,T=N,S=vt(),V=Te(),f=c(null),w=c(null),_=c(!0),h=c(null),E=["items","indexes","settings","seed"],A=q({get(){const g=String(S.query.tab||"");return E.includes(g)?g:"items"},set(g){V.replace({query:{...S.query,tab:g==="items"?void 0:g}})}});async function k(){_.value=!0;try{const[g,i]=await Promise.all([R.describeDynamoTable(s.tableName),R.listSeeds().catch(()=>({seedsDir:"",entries:[]}))]);f.value=g,w.value=i.entries.find(m=>m.tableName===s.tableName)||null,h.value=null}catch(g){h.value=g.message||"Failed to load table",f.value=null}finally{_.value=!1}}return ot(k),fe(()=>s.tableName,k),(g,i)=>(o(),b(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>{var m;return[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(()=>{var p;return[a(e(D),{size:"sm",variant:"ghost",onClick:i[0]||(i[0]=x=>T("back"))},{default:t(()=>[a(e(ce),{name:"arrow-left"}),i[3]||(i[3]=r(" Tables",-1))]),_:1}),a(e($),{size:"lg",weight:"semibold"},{default:t(()=>[r(y(C.tableName),1)]),_:1}),(p=f.value)!=null&&p.status?(o(),b(e(F),{key:0,tone:f.value.status==="ACTIVE"?"success":"warning",variant:"soft"},{default:t(()=>[r(y(f.value.status),1)]),_:1},8,["tone"])):z("",!0),w.value?(o(),b(e(F),{key:1,tone:"info",variant:"soft"},{default:t(()=>[r(" Seed: "+y(w.value.itemCount)+" item"+y(w.value.itemCount===1?"":"s"),1)]),_:1})):z("",!0)]}),_:1}),a(e(D),{size:"sm",variant:"ghost",loading:_.value,onClick:k},{default:t(()=>[...i[4]||(i[4]=[r("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),(m=f.value)!=null&&m.warnings.length?(o(),b(e(d),{key:0,direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(o(!0),J(M,null,G(f.value.warnings,p=>(o(),b(e(F),{key:p,tone:"warning",variant:"soft"},{default:t(()=>[a(e(ce),{name:"triangle-alert"}),r(" "+y(p),1)]),_:2},1024))),128))]),_:1})):z("",!0),h.value?(o(),b(e(ie),{key:1,variant:"danger",dismissible:"",onDismiss:i[1]||(i[1]=p=>h.value=null)},{default:t(()=>[r(y(h.value),1)]),_:1})):z("",!0),_.value&&!f.value?(o(),b(e(d),{key:2,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(Ce),{label:"Loading table..."})]),_:1})):f.value?(o(),b(e(dt),{key:3,modelValue:A.value,"onUpdate:modelValue":i[2]||(i[2]=p=>A.value=p)},{default:t(()=>[a(e(mt),null,{default:t(()=>[a(e(me),{value:"items"},{default:t(()=>[...i[5]||(i[5]=[r("Items",-1)])]),_:1}),a(e(me),{value:"indexes"},{default:t(()=>[...i[6]||(i[6]=[r("Indexes",-1)])]),_:1}),a(e(me),{value:"settings"},{default:t(()=>[...i[7]||(i[7]=[r("Settings",-1)])]),_:1}),w.value?(o(),b(e(me),{key:0,value:"seed"},{default:t(()=>[...i[8]||(i[8]=[r("Seed",-1)])]),_:1})):z("",!0)]),_:1}),a(e(ve),{value:"items"},{default:t(()=>[Q("div",ct,[a(pt,{table:f.value},null,8,["table"])])]),_:1}),a(e(ve),{value:"indexes"},{default:t(()=>[Q("div",kt,[!f.value.gsis.length&&!f.value.lsis.length?(o(),b(e(ze),{key:0,title:"No secondary indexes",description:"This table has only the primary key."})):(o(),b(e(d),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>[f.value.gsis.length?(o(),b(e($e),{key:0,columns:2,gap:"0.75rem"},{default:t(()=>[(o(!0),J(M,null,G(f.value.gsis,p=>(o(),b(e(L),{key:p.IndexName,variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[r(y(p.IndexName),1)]),_:2},1024),a(e(F),{tone:"info",variant:"soft"},{default:t(()=>[...i[9]||(i[9]=[r("GSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(o(!0),J(M,null,G(p.KeySchema||[],x=>(o(),b(e(Ne),{key:x.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[r(y(x.AttributeName)+" ("+y(x.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),a(e($),{tone:"muted",size:"xs"},{default:t(()=>{var x;return[r(" Projection: "+y(((x=p.Projection)==null?void 0:x.ProjectionType)||"—")+" · Items: "+y(p.ItemCount??"—")+" · Status: "+y(p.IndexStatus||"—"),1)]}),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})):z("",!0),f.value.lsis.length?(o(),b(e($e),{key:1,columns:2,gap:"0.75rem"},{default:t(()=>[(o(!0),J(M,null,G(f.value.lsis,p=>(o(),b(e(L),{key:p.IndexName,variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e($),{weight:"semibold"},{default:t(()=>[r(y(p.IndexName),1)]),_:2},1024),a(e(F),{tone:"neutral",variant:"soft"},{default:t(()=>[...i[10]||(i[10]=[r("LSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(o(!0),J(M,null,G(p.KeySchema||[],x=>(o(),b(e(Ne),{key:x.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[r(y(x.AttributeName)+" ("+y(x.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),a(e($),{tone:"muted",size:"xs"},{default:t(()=>{var x;return[r(" Projection: "+y(((x=p.Projection)==null?void 0:x.ProjectionType)||"—"),1)]}),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})):z("",!0)]),_:1}))])]),_:1}),a(e(ve),{value:"settings"},{default:t(()=>[Q("div",$t,[a(gt,{table:f.value,onRefresh:k},null,8,["table"])])]),_:1}),w.value?(o(),b(e(ve),{key:0,value:"seed"},{default:t(()=>[Q("div",Nt,[a(yt,{"table-name":f.value.name,"seed-file":w.value.file,"seed-item-count":w.value.itemCount,"table-item-count":f.value.itemCount,onRefresh:k},null,8,["table-name","seed-file","seed-item-count","table-item-count"])])]),_:1})):z("",!0)]),_:1},8,["modelValue"])):z("",!0)]}),_:1}))}}),xt=X({__name:"DynamoTablePage",props:{tableName:{}},setup(C){const N=Te();function s(){N.push("/dynamo")}return(T,S)=>(o(),b(wt,{"table-name":C.tableName,onBack:s},null,8,["table-name"]))}});export{xt as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{k as ne,l as ye,o as ke,a3 as be,e as s,$ as e,t as d,a4 as t,a as J,m as r,j as a,C as z,s as X,i as o,u,_ as v,f as p,O as he,x as Z,g as $,E as T,D as we,P as _e,Q as M,S as I,d as N,w as y,M as ee,T as ze,U as $e,F as C,K as q,B as Te,v as B,q as te,A as K,H as ae,G,a7 as Ne,V as Ce,c as Ee,n as c,b as F,a0 as Le,a1 as le}from"./index-DGsXIPJ-.js";const Re={style:{"padding-top":"1rem"}},xe={style:{"padding-top":"1rem"}},Ve={style:{"padding-top":"1rem"}},je={style:{"padding-top":"1rem"}},Se=["onClick"],Me=ne({__name:"LambdaDetail",props:{functionName:{}},emits:["back"],setup(E,{emit:O}){const k=E,Q=O,P=Le(),oe=le(),b=Ee(),f=c(null),L=c(!0),h=c(null);let D=null;const ie=["invoke","triggers","environment","logs"],Y=F({get(){const i=String(P.query.tab||"");return ie.includes(i)?i:"invoke"},set(i){oe.replace({query:{...P.query,tab:i==="invoke"?void 0:i}})}}),R=c("{}"),x=c("RequestResponse"),V=c(!1),m=c(null),A=c(!1),re=[{value:"RequestResponse",label:"RequestResponse (sync)"},{value:"Event",label:"Event (async, fire & forget)"}],w=c([]),j=c(!1),S=c({}),ue=[{key:"key",label:"Key"},{key:"value",label:"Value"}],W=F(()=>{var i;return Object.entries(((i=f.value)==null?void 0:i.environment)||{}).map(([n,l])=>({key:n,value:l}))}),se=[{key:"method",label:"Method"},{key:"path",label:"Path"},{key:"eventType",label:"Type"},{key:"authorizerName",label:"Authorizer"}],de=F(()=>{var i;return(((i=f.value)==null?void 0:i.routes)||[]).map(n=>({...n}))}),ve=F(()=>{if(!m.value)return"";const i=m.value.payload;if(i===void 0)return"—";try{return JSON.stringify(i,null,2)}catch{return String(i)}});async function _(i=!0){i&&(L.value=!0);try{f.value=await J.getLambda(k.functionName),h.value=null}catch(n){h.value=n.message||"Failed to load function",f.value=null}finally{L.value=!1}}async function H(){j.value=!0;try{const i=await J.getLambdaLogs(k.functionName);w.value=[...i.invocations].reverse()}catch(i){b.add({title:"Failed to load invocation logs",description:i.message,variant:"danger"})}finally{j.value=!1}}async function fe(){var l;let i;const n=R.value.trim();if(n)try{i=JSON.parse(n)}catch{b.add({title:"Invalid JSON payload",description:"Fix the payload before invoking.",variant:"danger"});return}V.value=!0;try{const g=await J.invokeLambda(k.functionName,{payload:i,invocationType:x.value});x.value==="Event"?(m.value=null,A.value=!0,b.add({title:"Invocation accepted",description:"Event invocation queued (fire & forget).",variant:"success"})):(A.value=!1,m.value=g,g.ok||b.add({title:"Function returned an error",description:(l=g.functionError)==null?void 0:l.errorMessage,variant:"danger"})),await _(!1)}catch(g){b.add({title:"Failed to invoke function",description:g.message,variant:"danger"})}finally{V.value=!1}}function me(i){S.value[i]=!S.value[i]}function ge(i){switch(i){case"online":return"success";case"starting":return"info";case"stopped":return"neutral";default:return"danger"}}function ce(i){return i==="ANY"?"info":"neutral"}function pe(i){return i?new Date(i).toLocaleString():"—"}return ye(()=>{_(),H(),D=window.setInterval(()=>_(!1),1e4)}),ke(()=>{D&&window.clearInterval(D)}),be(()=>k.functionName,()=>{_(),H()}),(i,n)=>(r(),s(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(z),{size:"sm",variant:"ghost",onClick:n[0]||(n[0]=l=>Q("back"))},{default:t(()=>[a(e(X),{name:"arrow-left"}),n[7]||(n[7]=o(" Lambdas",-1))]),_:1}),a(e(u),{weight:"semibold",size:"lg"},{default:t(()=>[o(v(E.functionName),1)]),_:1}),f.value?(r(),s(e(u),{key:0,tone:"muted",family:"mono",size:"xs"},{default:t(()=>[o(v(f.value.fullName),1)]),_:1})):p("",!0)]),_:1}),a(e(z),{size:"sm",variant:"ghost",loading:L.value,onClick:n[1]||(n[1]=l=>_())},{default:t(()=>[...n[8]||(n[8]=[o("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),h.value?(r(),s(e(he),{key:0,variant:"danger",dismissible:"",onDismiss:n[2]||(n[2]=l=>h.value=null)},{default:t(()=>[o(v(h.value),1)]),_:1})):p("",!0),L.value&&!f.value?(r(),s(e(d),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(Z),{label:"Loading function..."})]),_:1})):f.value?(r(),$(C,{key:2},[a(e(we),{columns:5,gap:"0.75rem"},{default:t(()=>[a(e(T),{label:"Status",value:f.value.status,tone:ge(f.value.status)},null,8,["value","tone"]),a(e(T),{label:"Runtime",value:f.value.runtime,tone:"info"},null,8,["value"]),a(e(T),{label:"Memory",value:`${f.value.memorySize} MB`,tone:"neutral"},null,8,["value"]),a(e(T),{label:"Timeout",value:`${f.value.timeout}s`,tone:"neutral"},null,8,["value"]),a(e(T),{label:"Mode",value:f.value.executionMode||"—",tone:"neutral"},null,8,["value"])]),_:1}),a(e(Ce),{modelValue:Y.value,"onUpdate:modelValue":n[6]||(n[6]=l=>Y.value=l)},{default:t(()=>[a(e(_e),null,{default:t(()=>[a(e(M),{value:"invoke"},{default:t(()=>[...n[9]||(n[9]=[o("Invoke",-1)])]),_:1}),a(e(M),{value:"triggers"},{default:t(()=>[...n[10]||(n[10]=[o("Triggers",-1)])]),_:1}),a(e(M),{value:"environment"},{default:t(()=>[...n[11]||(n[11]=[o("Environment",-1)])]),_:1}),a(e(M),{value:"logs"},{default:t(()=>[...n[12]||(n[12]=[o("Logs",-1)])]),_:1})]),_:1}),a(e(I),{value:"invoke"},{default:t(()=>[N("div",Re,[a(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(y),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[...n[13]||(n[13]=[o("Invoke function",-1)])]),_:1}),a(e(u),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[o(v(f.value.handler),1)]),_: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(z),{variant:"solid",loading:V.value,onClick:fe},{default:t(()=>[...n[14]||(n[14]=[o("Invoke",-1)])]),_:1},8,["loading"]),a(e(z),{variant:"ghost",disabled:V.value,onClick:n[5]||(n[5]=l=>R.value="{}")},{default:t(()=>[...n[15]||(n[15]=[o(" Reset payload ",-1)])]),_:1},8,["disabled"])]),_:1}),A.value?(r(),s(e(u),{key:0,tone:"muted",size:"xs"},{default:t(()=>[...n[16]||(n[16]=[o(" Last invocation accepted as Event — check the Logs tab for output. ",-1)])]),_:1})):p("",!0)]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(ee),{label:"Event payload",hint:"JSON passed to the handler as the event"},{default:t(()=>[a(e(ze),{modelValue:R.value,"onUpdate:modelValue":n[3]||(n[3]=l=>R.value=l),class:"mono",rows:8,placeholder:"{}"},null,8,["modelValue"])]),_:1}),a(e(ee),{label:"Invocation type",style:{"max-width":"20rem"}},{default:t(()=>[a(e($e),{modelValue:x.value,"onUpdate:modelValue":n[4]||(n[4]=l=>x.value=l),options:re},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),m.value?(r(),s(e(y),{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(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[...n[17]||(n[17]=[o("Result",-1)])]),_:1}),a(e(B),{tone:m.value.ok?"success":"danger",variant:"soft"},{default:t(()=>{var l;return[o(v(m.value.ok?"OK":((l=m.value.functionError)==null?void 0:l.errorType)||"Error"),1)]}),_:1},8,["tone"])]),_:1}),a(e(u),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[o(v(m.value.durationMs)+"ms ",1)]),_:1})]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>{var l,g,U;return[m.value.ok?(r(),$(C,{key:0},[a(e(u),{weight:"semibold",size:"sm"},{default:t(()=>[...n[18]||(n[18]=[o("Response payload",-1)])]),_:1}),a(e(q),{code:ve.value,label:"Response payload","max-block-size":"24rem",wrap:"",copyable:""},null,8,["code"])],64)):(r(),$(C,{key:1},[a(e(u),{weight:"semibold",size:"sm"},{default:t(()=>[...n[19]||(n[19]=[o("Function error",-1)])]),_:1}),a(e(q),{code:[`${((l=m.value.functionError)==null?void 0:l.errorType)||"Error"}: ${((g=m.value.functionError)==null?void 0:g.errorMessage)||""}`,...((U=m.value.functionError)==null?void 0:U.trace)||[]].join(`
|
|
2
|
+
`),label:"Function error","max-block-size":"60vh",wrap:"",copyable:""},null,8,["code"])],64)),a(e(Te)),a(e(u),{weight:"semibold",size:"sm"},{default:t(()=>[...n[20]||(n[20]=[o("Captured logs",-1)])]),_:1}),a(e(q),{code:m.value.logs.join(`
|
|
3
|
+
`)||"— no output —",label:"Captured logs","max-block-size":"60vh",wrap:"",copyable:""},null,8,["code"])]}),_:1})]),_:1})):p("",!0)]),_:1})])]),_:1}),a(e(I),{value:"triggers"},{default:t(()=>[N("div",xe,[a(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(y),{variant:"outline"},{header:t(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[...n[21]||(n[21]=[o("Trigger sources",-1)])]),_:1})]),default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:t(()=>[f.value.triggers.length?(r(!0),$(C,{key:0},te(f.value.triggers,l=>(r(),s(e(K),{key:l,size:"sm",variant:"soft"},{default:t(()=>[o(v(l),1)]),_:2},1024))),128)):(r(),s(e(u),{key:1,tone:"muted"},{default:t(()=>[...n[22]||(n[22]=[o("—",-1)])]),_:1}))]),_:1})]),_:1}),a(e(y),{variant:"outline"},{header:t(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[...n[23]||(n[23]=[o("HTTP routes",-1)])]),_:1})]),default:t(()=>[f.value.routes.length?(r(),s(e(ae),{key:0,columns:se,rows:de.value,"aria-label":"HTTP routes"},{"cell-method":t(({row:l})=>[a(e(B),{tone:ce(String(l.method)),variant:"soft"},{default:t(()=>[o(v(l.method),1)]),_:2},1032,["tone"])]),"cell-path":t(({row:l})=>[a(e(u),{family:"mono"},{default:t(()=>[o(v(l.path),1)]),_:2},1024)]),"cell-eventType":t(({row:l})=>[a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[o(v(l.eventType),1)]),_:2},1024)]),"cell-authorizerName":t(({row:l})=>[l.authorizerName?(r(),s(e(K),{key:0,size:"sm",variant:"soft"},{default:t(()=>[o(v(l.authorizerName),1)]),_:2},1024)):(r(),s(e(u),{key:1,tone:"muted"},{default:t(()=>[...n[24]||(n[24]=[o("—",-1)])]),_:1}))]),_:1},8,["rows"])):(r(),s(e(G),{key:1,title:"No HTTP routes",description:"This function has no http/httpApi events pointing at it."}))]),_:1})]),_:1})])]),_:1}),a(e(I),{value:"environment"},{default:t(()=>[N("div",Ve,[a(e(y),{variant:"outline"},{header:t(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[...n[25]||(n[25]=[o("Environment variables",-1)])]),_:1})]),default:t(()=>[W.value.length?(r(),s(e(ae),{key:0,columns:ue,rows:W.value,"aria-label":"Environment variables"},{"cell-key":t(({row:l})=>[a(e(u),{family:"mono",style:{"font-size":"0.78rem"}},{default:t(()=>[o(v(l.key),1)]),_:2},1024)]),"cell-value":t(({row:l})=>[a(e(u),{family:"mono",style:{"font-size":"0.78rem"}},{default:t(()=>[o(v(l.value),1)]),_:2},1024)]),_:1},8,["rows"])):(r(),s(e(G),{key:1,title:"No environment variables",description:"No environment variables are configured for this function."}))]),_:1})])]),_:1}),a(e(I),{value:"logs"},{default:t(()=>[N("div",je,[a(e(y),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(u),{weight:"semibold"},{default:t(()=>[o("Recent invocations ("+v(w.value.length)+")",1)]),_:1}),a(e(z),{size:"sm",variant:"ghost",loading:j.value,onClick:H},{default:t(()=>[...n[26]||(n[26]=[o(" Refresh ",-1)])]),_:1},8,["loading"])]),_:1})]),default:t(()=>[j.value&&!w.value.length?(r(),s(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(Z),{label:"Loading invocations..."})]),_:1})):w.value.length?(r(),s(e(d),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(r(!0),$(C,null,te(w.value,(l,g)=>(r(),s(e(y),{key:`inv-${g}`,variant:"soft"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[N("a",{href:"#",style:{"text-decoration":"none",color:"inherit"},onClick:Ne(U=>me(g),["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(()=>[a(e(X),{name:S.value[g]?"chevron-down":"chevron-right"},null,8,["name"]),a(e(u),{size:"sm"},{default:t(()=>[o(v(pe(l.at)),1)]),_:2},1024),a(e(B),{tone:l.ok?"success":"danger",variant:"soft"},{default:t(()=>[o(v(l.ok?"OK":"Error"),1)]),_:2},1032,["tone"]),l.statusCode&&l.statusCode>=400?(r(),s(e(B),{key:0,tone:l.statusCode>=500?"danger":"warning",variant:"soft"},{default:t(()=>[o(" HTTP "+v(l.statusCode),1)]),_:2},1032,["tone"])):p("",!0)]),_:2},1024),a(e(u),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[o(v(l.durationMs)+"ms · "+v(l.logs.length)+" line"+v(l.logs.length===1?"":"s"),1)]),_:2},1024)]),_:2},1024)],8,Se),S.value[g]?(r(),s(e(q),{key:0,code:l.logs.join(`
|
|
4
|
+
`)||"— no output —",label:"Invocation log","max-block-size":"60vh",wrap:"",copyable:""},null,8,["code"])):p("",!0)]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),s(e(G),{key:1,title:"No invocations recorded",description:"Invoke the function to see its captured output here."}))]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):p("",!0)]),_:1}))}}),qe=ne({__name:"LambdaDetailPage",props:{functionName:{}},setup(E){const O=le();function k(){O.push("/lambdas")}return(Q,P)=>(r(),s(Me,{"function-name":E.functionName,onBack:k},null,8,["function-name"]))}});export{qe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as z,l as R,o as C,m as i,e as u,$ as a,t as m,a4 as e,j as n,D as F,E as _,O as j,i as s,_ as o,f as y,w as B,x as T,G as E,H as M,u as f,v as p,g as U,F as V,q as A,A as L,R as H,I as O,n as k,b as x,a as q}from"./index-DGsXIPJ-.js";const G=z({__name:"LambdasList",setup(I){const d=k([]),c=k(!0),v=k(null);let b=null;const w=[{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"}],D=x(()=>d.value.map(l=>({...l}))),g=x(()=>({total:d.value.length,online:d.value.filter(l=>l.status==="online").length,invocations:d.value.reduce((l,r)=>l+r.invocations,0),errors:d.value.reduce((l,r)=>l+r.errors,0)}));async function h(){try{d.value=await q.listLambdas(),v.value=null}catch(l){v.value=l.message||"Failed to load lambdas"}finally{c.value=!1}}function N(l){switch(l){case"online":return"success";case"starting":return"info";case"stopped":return"neutral";default:return"danger"}}function S(l){return l?new Date(l).toLocaleString():"—"}return R(()=>{h(),b=window.setInterval(h,1e4)}),C(()=>{b&&window.clearInterval(b)}),(l,r)=>(i(),u(a(m),{direction:"vertical",gap:"1.25rem"},{default:e(()=>[n(a(F),{columns:4,gap:"1rem"},{default:e(()=>[n(a(_),{label:"Functions",value:g.value.total,tone:"info",loading:c.value},null,8,["value","loading"]),n(a(_),{label:"Online",value:g.value.online,tone:"success",loading:c.value},null,8,["value","loading"]),n(a(_),{label:"Invocations (session)",value:g.value.invocations,tone:"info",loading:c.value},null,8,["value","loading"]),n(a(_),{label:"Errors",value:g.value.errors,tone:g.value.errors>0?"warning":"neutral",loading:c.value},null,8,["value","tone","loading"])]),_:1}),v.value?(i(),u(a(j),{key:0,variant:"danger",dismissible:"",onDismiss:r[0]||(r[0]=t=>v.value=null)},{default:e(()=>[s(o(v.value),1)]),_:1})):y("",!0),n(a(B),{variant:"outline"},{header:e(()=>[n(a(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:e(()=>[n(a(f),{weight:"semibold"},{default:e(()=>[...r[1]||(r[1]=[s("Lambda functions",-1)])]),_:1}),n(a(f),{tone:"muted"},{default:e(()=>[...r[2]||(r[2]=[s("Live · refreshes every 10s",-1)])]),_:1})]),_:1})]),default:e(()=>[c.value?(i(),u(a(m),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:e(()=>[n(a(T),{label:"Loading lambdas..."})]),_:1})):d.value.length?(i(),u(a(M),{key:2,columns:w,rows:D.value,"aria-label":"Lambda functions"},{"cell-name":e(({row:t})=>[n(a(m),{direction:"vertical",gap:"0.125rem"},{default:e(()=>[n(a(O),{to:`/lambdas/${encodeURIComponent(String(t.name))}`,style:{"font-weight":"600"}},{default:e(()=>[s(o(t.name),1)]),_:2},1032,["to"]),n(a(f),{tone:"muted",family:"mono",size:"xs"},{default:e(()=>[s(o(t.fullName),1)]),_:2},1024)]),_:2},1024)]),"cell-service":e(({row:t})=>[n(a(H),{to:`/services/${encodeURIComponent(String(t.service))}`,style:{"text-decoration":"none"}},{default:e(()=>[n(a(L),{size:"sm",variant:"soft",clickable:""},{default:e(()=>[s(o(t.service),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-runtime":e(({row:t})=>[s(o(t.runtime),1)]),"cell-handler":e(({row:t})=>[n(a(f),{family:"mono",style:{"font-size":"0.78rem"}},{default:e(()=>[s(o(t.handler),1)]),_:2},1024)]),"cell-triggers":e(({row:t})=>[n(a(m),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:e(()=>[t.triggers.length?(i(!0),U(V,{key:0},A(t.triggers,$=>(i(),u(a(L),{key:$,size:"sm",variant:"soft"},{default:e(()=>[s(o($),1)]),_:2},1024))),128)):(i(),u(a(f),{key:1,tone:"muted"},{default:e(()=>[...r[3]||(r[3]=[s("—",-1)])]),_:1}))]),_:2},1024)]),"cell-status":e(({row:t})=>[n(a(p),{tone:N(String(t.status)),variant:"soft"},{default:e(()=>[s(o(t.status),1)]),_:2},1032,["tone"])]),"cell-invocations":e(({row:t})=>[n(a(m),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:e(()=>[n(a(p),{tone:Number(t.invocations)>0?"info":"neutral",variant:"soft"},{default:e(()=>[s(o(t.invocations),1)]),_:2},1032,["tone"]),Number(t.errors)>0?(i(),u(a(p),{key:0,tone:"danger",variant:"soft"},{default:e(()=>[s(o(t.errors)+" err ",1)]),_:2},1024)):y("",!0)]),_:2},1024)]),"cell-last":e(({row:t})=>[n(a(m),{direction:"vertical",gap:"0.125rem"},{default:e(()=>[n(a(f),{size:"sm"},{default:e(()=>[s(o(S(t.lastInvokedAt)),1)]),_:2},1024),t.lastDurationMs!==void 0?(i(),u(a(f),{key:0,tone:"muted",family:"mono",size:"xs"},{default:e(()=>[s(o(t.lastDurationMs)+"ms ",1)]),_:2},1024)):y("",!0)]),_:2},1024)]),_:1},8,["rows"])):(i(),u(a(E),{key:1,title:"No functions registered",description:"Register a microservice that defines Lambda functions to see them here."}))]),_:1})]),_:1}))}}),J=z({__name:"LambdasPage",setup(I){return(d,c)=>(i(),u(G))}});export{J as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as K,l as L,a3 as P,e as r,$ as e,t as v,a4 as t,a as T,m as d,j as a,C as V,s as Q,i,u as f,_ as o,v as k,O as U,f as N,x as W,G as q,H as B,w as O,M as I,U as F,N as X,a6 as Y,K as Z,n as u,b as H,a1 as ee}from"./index-DGsXIPJ-.js";const te=K({__name:"OpenSearchCollectionView",props:{name:{}},emits:["back"],setup(y,{emit:w}){const h=y,D=w,c=u([]),x=u(!0),p=u(null),b=u(""),_=u(""),S=u("25"),$=u(!1),g=u(null),m=u(null),z=u(!1),M=[{key:"index",label:"Index"},{key:"docsCount",label:"Docs",align:"right"},{key:"health",label:"Health"},{key:"status",label:"Status"}],A=[{key:"index",label:"Index"},{key:"id",label:"ID"},{key:"source",label:"Source"}],E=H(()=>[{value:"",label:"All indices"},...c.value.map(s=>({value:s.index,label:s.index}))]),G=[{value:"10",label:"10 results"},{value:"25",label:"25 results"},{value:"50",label:"50 results"}],j=H(()=>{var s;return(((s=m.value)==null?void 0:s.hits.hits)||[]).map(l=>({index:l._index,id:l._id,source:JSON.stringify(l._source,null,2)}))});function J(s){return s==="green"?"success":s==="yellow"?"warning":s==="red"?"danger":"neutral"}async function C(){x.value=!0;try{const s=await T.listOpenSearchIndices(h.name);c.value=s.indices,p.value=null}catch(s){p.value=s.message||"Failed to load indices",c.value=[]}finally{x.value=!1}}async function R(){$.value=!0,g.value=null,z.value=!1;try{const s={size:Number(S.value)};b.value&&(s.index=b.value);const l=_.value.trim();l&&(s.q=l),m.value=await T.searchOpenSearch(h.name,s)}catch(s){/not[_ ]?found|no such index|does not exist|404/i.test(String((s==null?void 0:s.message)||""))?(m.value={took:0,hits:{total:{value:0},hits:[]}},z.value=!0):(m.value=null,g.value=s.message||"Search failed")}finally{$.value=!1}}return L(C),P(()=>h.name,C),(s,l)=>(d(),r(e(v),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(v),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(v),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(V),{size:"sm",variant:"ghost",onClick:l[0]||(l[0]=n=>D("back"))},{default:t(()=>[a(e(Q),{name:"arrow-left"}),l[6]||(l[6]=i(" Collections",-1))]),_:1}),a(e(f),{size:"lg",weight:"semibold"},{default:t(()=>[i(o(y.name),1)]),_:1}),a(e(k),{tone:"info",variant:"soft"},{default:t(()=>[i(o(c.value.length)+" "+o(c.value.length===1?"index":"indices"),1)]),_:1})]),_:1}),a(e(V),{size:"sm",variant:"ghost",loading:x.value,onClick:C},{default:t(()=>[...l[7]||(l[7]=[i("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),p.value?(d(),r(e(U),{key:0,variant:"danger",dismissible:"",onDismiss:l[1]||(l[1]=n=>p.value=null)},{default:t(()=>[i(o(p.value),1)]),_:1})):N("",!0),a(e(O),{variant:"outline"},{header:t(()=>[a(e(f),{weight:"semibold"},{default:t(()=>[...l[8]||(l[8]=[i("Indices",-1)])]),_:1})]),default:t(()=>[x.value&&!c.value.length?(d(),r(e(v),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(W),{label:"Loading indices..."})]),_:1})):c.value.length?(d(),r(e(B),{key:2,columns:M,rows:c.value,"aria-label":"OpenSearch indices"},{"cell-index":t(({row:n})=>[a(e(f),{weight:"semibold"},{default:t(()=>[i(o(n.index),1)]),_:2},1024)]),"cell-docsCount":t(({row:n})=>[a(e(k),{tone:"info",variant:"soft"},{default:t(()=>[i(o(n.docsCount??0),1)]),_:2},1024)]),"cell-health":t(({row:n})=>[a(e(k),{tone:J(String(n.health)),variant:"soft"},{default:t(()=>[i(o(n.health||"—"),1)]),_:2},1032,["tone"])]),"cell-status":t(({row:n})=>[a(e(k),{tone:n.status==="open"?"success":"neutral",variant:"soft"},{default:t(()=>[i(o(n.status||"—"),1)]),_:2},1032,["tone"])]),_:1},8,["rows"])):(d(),r(e(q),{key:1,title:"No indices yet",description:"Indices are created when the first document is indexed into this collection."}))]),_:1}),a(e(O),{variant:"outline"},{header:t(()=>[a(e(f),{weight:"semibold"},{default:t(()=>[...l[9]||(l[9]=[i("Search documents",-1)])]),_:1})]),default:t(()=>[a(e(v),{direction:"horizontal",gap:"1rem",align:"end"},{default:t(()=>[a(e(I),{label:"Index",style:{flex:"1"}},{default:t(()=>[a(e(F),{modelValue:b.value,"onUpdate:modelValue":l[2]||(l[2]=n=>b.value=n),options:E.value},null,8,["modelValue","options"])]),_:1}),a(e(I),{label:"Query",style:{flex:"2"}},{default:t(()=>[a(e(X),{modelValue:_.value,"onUpdate:modelValue":l[3]||(l[3]=n=>_.value=n),placeholder:"Free-text query — leave empty to match all documents",onKeyup:Y(R,["enter"])},null,8,["modelValue"])]),_:1}),a(e(I),{label:"Size",style:{flex:"0.8","min-width":"8rem"}},{default:t(()=>[a(e(F),{modelValue:S.value,"onUpdate:modelValue":l[4]||(l[4]=n=>S.value=n),options:G},null,8,["modelValue"])]),_:1}),a(e(V),{variant:"solid",loading:$.value,onClick:R},{default:t(()=>[...l[10]||(l[10]=[i("Search",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),g.value?(d(),r(e(U),{key:1,variant:"danger",dismissible:"",onDismiss:l[5]||(l[5]=n=>g.value=null)},{default:t(()=>[i(o(g.value),1)]),_:1})):N("",!0),m.value?(d(),r(e(O),{key:2,variant:"outline"},{header:t(()=>[a(e(v),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(f),{weight:"semibold"},{default:t(()=>[...l[11]||(l[11]=[i("Results",-1)])]),_:1}),a(e(f),{tone:"muted",size:"xs"},{default:t(()=>[i(o(m.value.hits.total.value)+" hit"+o(m.value.hits.total.value===1?"":"s")+" · took "+o(m.value.took)+" ms ",1)]),_:1})]),_:1})]),default:t(()=>[j.value.length?(d(),r(e(B),{key:1,columns:A,rows:j.value,"aria-label":"Search result documents"},{"cell-index":t(({row:n})=>[a(e(f),{family:"mono",style:{"font-size":"0.78rem"}},{default:t(()=>[i(o(n.index),1)]),_:2},1024)]),"cell-id":t(({row:n})=>[a(e(f),{family:"mono",style:{"font-size":"0.78rem"}},{default:t(()=>[i(o(n.id),1)]),_:2},1024)]),"cell-source":t(({row:n})=>[a(e(Z),{code:n.source,label:"Search document","max-block-size":"24rem",wrap:"",copyable:""},null,8,["code"])]),_:1},8,["rows"])):(d(),r(e(q),{key:0,title:"No documents found",description:z.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}))}}),ae=K({__name:"OpenSearchCollectionPage",props:{name:{}},setup(y){const w=ee();function h(){w.push("/opensearch")}return(D,c)=>(d(),r(te,{name:y.name,onBack:h},null,8,["name"]))}});export{ae as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as N,l as V,o as D,m as s,e as i,$ as e,t as k,a4 as t,j as a,D as I,E as O,O as U,i as r,_ as w,f as j,w as q,x as A,G as z,H as F,C as P,u as d,R as E,A as G,N as H,n as m,b as $,a as R,a1 as M}from"./index-DGsXIPJ-.js";const T=N({__name:"OpenSearchCollectionsList",emits:["open"],setup(B,{emit:C}){const v=C,c=m([]),p=m({}),f=m(!0),u=m(null),g=m("");let _=null;const L=[{key:"name",label:"Collection"},{key:"service",label:"Service"},{key:"endpoint",label:"Data-plane endpoint"},{key:"actions",label:"",align:"right"}],h=$(()=>c.value.map(o=>({...o,service:p.value[o.name]||""})).sort((o,l)=>o.name.localeCompare(l.name))),b=$(()=>{const o=g.value.trim().toLowerCase();return o?h.value.filter(l=>l.name.toLowerCase().includes(o)||(l.service||"").toLowerCase().includes(o)):h.value}),S=$(()=>({collections:c.value.length,services:new Set(c.value.map(o=>p.value[o.name]).filter(Boolean)).size}));async function x(){try{const[o,l]=await Promise.all([R.listOpenSearchCollections(),R.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);c.value=o.collections;const n={};for(const y of l.collections||[])n[y.name]=y.service;p.value=n,u.value=null}catch(o){u.value=o.message||"Failed to load OpenSearch collections"}finally{f.value=!1}}return V(()=>{x(),_=window.setInterval(x,15e3)}),D(()=>{_&&window.clearInterval(_)}),(o,l)=>(s(),i(e(k),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[a(e(I),{columns:2,gap:"1rem"},{default:t(()=>[a(e(O),{label:"Collections",value:S.value.collections,tone:"info",loading:f.value},null,8,["value","loading"]),a(e(O),{label:"Owning services",value:S.value.services,tone:"success",loading:f.value},null,8,["value","loading"])]),_:1}),u.value?(s(),i(e(U),{key:0,variant:"danger",dismissible:"",onDismiss:l[0]||(l[0]=n=>u.value=null)},{default:t(()=>[r(w(u.value),1)]),_:1})):j("",!0),a(e(q),{variant:"outline"},{header:t(()=>[a(e(k),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(d),{weight:"semibold"},{default:t(()=>[...l[2]||(l[2]=[r("OpenSearch collections",-1)])]),_:1}),a(e(k),{direction:"horizontal",align:"center",gap:"1rem"},{default:t(()=>[a(e(H),{modelValue:g.value,"onUpdate:modelValue":l[1]||(l[1]=n=>g.value=n),placeholder:"Filter collections...",style:{"min-width":"16rem"}},null,8,["modelValue"]),a(e(d),{tone:"muted",size:"xs"},{default:t(()=>[...l[3]||(l[3]=[r("Refreshes every 15s",-1)])]),_:1})]),_:1})]),_:1})]),default:t(()=>[f.value?(s(),i(e(k),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(A),{label:"Loading collections..."})]),_:1})):h.value.length?b.value.length?(s(),i(e(F),{key:3,columns:L,rows:b.value,"aria-label":"OpenSearch collections"},{"cell-name":t(({row:n})=>[a(e(d),{weight:"semibold",style:{cursor:"pointer","text-decoration":"underline","text-decoration-style":"dotted","text-underline-offset":"3px"},onClick:y=>v("open",String(n.name))},{default:t(()=>[r(w(n.name),1)]),_:2},1032,["onClick"])]),"cell-service":t(({row:n})=>[n.service?(s(),i(e(E),{key:0,to:`/services/${encodeURIComponent(String(n.service))}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(G),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[r(w(n.service),1)]),_:2},1024)]),_:2},1032,["to"])):(s(),i(e(d),{key:1,tone:"muted",size:"xs"},{default:t(()=>[...l[4]||(l[4]=[r("unmanaged",-1)])]),_:1}))]),"cell-endpoint":t(({row:n})=>[a(e(d),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[r(w(n.endpoint),1)]),_:2},1024)]),"cell-actions":t(({row:n})=>[a(e(P),{size:"sm",variant:"soft",onClick:y=>v("open",String(n.name))},{default:t(()=>[...l[5]||(l[5]=[r(" Browse ",-1)])]),_:1},8,["onClick"])]),_:1},8,["rows"])):(s(),i(e(z),{key:2,title:"No matching collections",description:`No collections match "${g.value}".`},null,8,["description"])):(s(),i(e(z),{key:1,title:"No OpenSearch collections",description:"Collections come from AWS::OpenSearchServerless::Collection resources — register a microservice that declares one."}))]),_:1})]),_:1}))}}),J=N({__name:"OpenSearchPage",setup(B){const C=M();function v(c){C.push(`/opensearch/${encodeURIComponent(c)}`)}return(c,p)=>(s(),i(T,{onOpen:v}))}});export{J as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as le,l as ne,o as oe,e as p,a4 as t,$ as e,t as f,a as w,n as _,m as c,j as a,s as D,u as i,i as o,d as se,v as g,_ as r,w as S,x as ue,g as j,y as A,z as v,A as q,B as re,F as E,q as C,f as N,R as H,C as M,D as I,E as b,b as y}from"./index-DGsXIPJ-.js";const ie=le({__name:"OverviewPage",setup(O){const m=_(null),d=_(null),x=_([]),z=_([]),R=_([]),F=_([]),h=_({tables:[],queues:[],topics:[],buckets:[],collections:[]}),V=_(!0);let T=null;async function K(){try{const[u,n,l,s,k,B,ae]=await Promise.all([w.checkHealth(),w.getConfig(),w.listServices(),w.listResources(),w.listLambdas().catch(()=>[]),w.listApis().catch(()=>[]),w.getPorts().catch(()=>({ports:[]}))]);m.value=u,d.value=n,z.value=l,h.value=s,R.value=k,F.value=B,x.value=ae.ports}catch(u){console.error("Overview load failed:",u)}finally{V.value=!1}}const W=y(()=>z.value.filter(u=>u.status==="running").length),U=y(()=>z.value.length),Z=y(()=>R.value.filter(u=>u.status==="online").length),G=y(()=>R.value.length),J=y(()=>F.value.reduce((u,n)=>u+n.routes.length,0)),X=y(()=>{var u;return(u=m.value)!=null&&u.localstack?"success":"danger"}),Q=y(()=>{var u,n;return!!((n=(u=m.value)==null?void 0:u.dynamoProxy)!=null&&n.enabled)}),P=y(()=>{var u,n;return!!((n=(u=m.value)==null?void 0:u.dynamoProxy)!=null&&n.running)}),$=y(()=>{var u;return!!((u=d.value)!=null&&u.autoPackage)}),L=y(()=>{var u;return!!((u=d.value)!=null&&u.persistence)}),Y={orchestrator:"info",engine:"success",sidecar:"info",proxy:"warning","service-api":"info","service-invoke":"neutral"},ee={orchestrator:"orchestrator",engine:"engine",sidecar:"sidecar",proxy:"proxy","service-api":"HTTP API","service-invoke":"invoke"},te=[{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 ne(()=>{K(),T=window.setInterval(K,15e3)}),oe(()=>{T&&window.clearInterval(T)}),(u,n)=>(c(),p(e(f),{direction:"vertical",gap:"1.5rem"},{default:t(()=>[a(e(S),{variant:"outline",class:"overview-hero"},{default:t(()=>[a(e(f),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.75rem",align:"center",wrap:""},{default:t(()=>[a(e(D),{name:"zap"}),a(e(f),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(i),{size:"xl",weight:"semibold"},{default:t(()=>[...n[0]||(n[0]=[o("Local Serverless Stack",-1)])]),_:1}),a(e(i),{tone:"muted"},{default:t(()=>[...n[1]||(n[1]=[o("One LocalStack. Every microservice. Zero docker juggling.",-1)])]),_:1})]),_:1})]),_:1}),n[3]||(n[3]=se("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)),a(e(f),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(g),{tone:X.value,variant:"soft"},{default:t(()=>{var l;return[o(" LocalStack "+r((l=m.value)!=null&&l.localstack?"running":"offline"),1)]}),_:1},8,["tone"]),Q.value?(c(),p(e(g),{key:0,tone:P.value?"success":"warning",variant:"soft"},{default:t(()=>[o(" Dynamo Proxy "+r(P.value?"on":"enabled (not listening)"),1)]),_:1},8,["tone"])):(c(),p(e(g),{key:1,tone:"neutral",variant:"soft"},{default:t(()=>[...n[2]||(n[2]=[o("Dynamo Proxy off",-1)])]),_:1})),a(e(g),{tone:$.value?"info":"neutral",variant:"soft"},{default:t(()=>[o(" Auto-package "+r($.value?"on":"off"),1)]),_:1},8,["tone"]),a(e(g),{tone:L.value?"info":"neutral",variant:"soft"},{default:t(()=>[o(" Persistence "+r(L.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),V.value&&!m.value?(c(),p(e(f),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(ue),{label:"Loading overview..."})]),_:1})):(c(),j(E,{key:1},[a(e(I),{columns:2,gap:"1rem"},{default:t(()=>[a(e(S),{variant:"outline"},{header:t(()=>[a(e(i),{weight:"semibold"},{default:t(()=>[...n[4]||(n[4]=[o("Server status",-1)])]),_:1})]),default:t(()=>[a(e(A),null,{default:t(()=>[a(e(v),{label:"LocalStack"},{default:t(()=>{var l;return[a(e(g),{tone:(l=m.value)!=null&&l.localstack?"success":"danger",variant:"soft"},{default:t(()=>{var s;return[o(r((s=m.value)!=null&&s.localstack?"Running":"Offline"),1)]}),_:1},8,["tone"])]}),_:1}),a(e(v),{label:"Endpoint"},{default:t(()=>[a(e(i),{family:"mono"},{default:t(()=>{var l,s;return[o(r(((s=(l=d.value)==null?void 0:l.localstack)==null?void 0:s.endpoint)||"—"),1)]}),_:1})]),_:1}),a(e(v),{label:"Image"},{default:t(()=>[a(e(i),{family:"mono",size:"sm"},{default:t(()=>{var l,s;return[o(r(((s=(l=d.value)==null?void 0:l.localstack)==null?void 0:s.image)||"—"),1)]}),_:1})]),_:1}),a(e(v),{label:"Mode"},{default:t(()=>[a(e(q),{size:"sm",variant:"soft"},{default:t(()=>{var l,s;return[o(r(((s=(l=d.value)==null?void 0:l.localstack)==null?void 0:s.mode)||"—"),1)]}),_:1})]),_:1})]),_:1}),a(e(re)),a(e(A),null,{default:t(()=>[a(e(v),{label:"Dynamo Proxy"},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:t(()=>[Q.value?(c(),p(e(g),{key:0,tone:P.value?"success":"warning",variant:"soft"},{default:t(()=>{var l,s;return[o(r(P.value?`Listening :${(s=(l=m.value)==null?void 0:l.dynamoProxy)==null?void 0:s.port}`:"Enabled, not listening"),1)]}),_:1},8,["tone"])):(c(),p(e(g),{key:1,tone:"neutral",variant:"soft"},{default:t(()=>[...n[5]||(n[5]=[o("Disabled",-1)])]),_:1}))]),_:1})]),_:1}),a(e(v),{label:"Auto-package"},{default:t(()=>[a(e(g),{tone:$.value?"info":"neutral",variant:"soft"},{default:t(()=>[o(r($.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1}),a(e(v),{label:"Persistence"},{default:t(()=>[a(e(g),{tone:L.value?"info":"neutral",variant:"soft"},{default:t(()=>[o(r(L.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),a(e(S),{variant:"outline"},{header:t(()=>[a(e(f),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(i),{weight:"semibold"},{default:t(()=>[...n[6]||(n[6]=[o("LSS configuration",-1)])]),_:1}),a(e(H),{to:"/settings",style:{"text-decoration":"none"}},{default:t(()=>[a(e(M),{size:"sm",variant:"ghost"},{default:t(()=>[n[7]||(n[7]=o("Edit ",-1)),a(e(D),{name:"arrow-right"})]),_:1})]),_:1})]),_:1})]),default:t(()=>[a(e(A),null,{default:t(()=>{var l;return[a(e(v),{label:"Engine"},{default:t(()=>[a(e(q),{size:"sm",variant:"soft"},{default:t(()=>{var s,k;return[o(r(((k=(s=d.value)==null?void 0:s.engine)==null?void 0:k.kind)||"—"),1)]}),_:1})]),_:1}),a(e(v),{label:"Default region"},{default:t(()=>[a(e(i),{family:"mono"},{default:t(()=>{var s;return[o(r(((s=d.value)==null?void 0:s.region)||"—"),1)]}),_:1})]),_:1}),a(e(v),{label:"Server port"},{default:t(()=>[a(e(i),{family:"mono"},{default:t(()=>{var s;return[o(r(((s=d.value)==null?void 0:s.serverPort)||"—"),1)]}),_:1})]),_:1}),a(e(v),{label:"LocalStack services"},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.25rem",wrap:"",justify:"flex-end"},{default:t(()=>{var s,k;return[(c(!0),j(E,null,C(((s=d.value)==null?void 0:s.services)||[],B=>(c(),p(e(q),{key:B,size:"sm",variant:"soft"},{default:t(()=>[o(r(B),1)]),_:2},1024))),128)),(((k=d.value)==null?void 0:k.services)||[]).length?N("",!0):(c(),p(e(i),{key:0,tone:"muted"},{default:t(()=>[...n[8]||(n[8]=[o("—",-1)])]),_:1}))]}),_:1})]),_:1}),a(e(v),{label:"Seeds dir"},{default:t(()=>[a(e(i),{family:"mono",size:"xs"},{default:t(()=>{var s;return[o(r(((s=d.value)==null?void 0:s.seedsDir)||"—"),1)]}),_:1})]),_:1}),(l=d.value)!=null&&l.configPath?(c(),p(e(v),{key:0,label:"Config file"},{default:t(()=>[a(e(i),{family:"mono",size:"xs"},{default:t(()=>[o(r(d.value.configPath),1)]),_:1})]),_:1})):N("",!0)]}),_:1})]),_:1})]),_:1}),a(e(S),{variant:"outline"},{header:t(()=>[a(e(f),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(i),{weight:"semibold"},{default:t(()=>[...n[9]||(n[9]=[o("Exposed ports",-1)])]),_:1}),a(e(i),{tone:"muted",size:"xs"},{default:t(()=>[...n[10]||(n[10]=[o(" What to point your SDKs, curl and browser at ",-1)])]),_:1})]),_:1})]),default:t(()=>[x.value.length?(c(),p(e(A),{key:0},{default:t(()=>[(c(!0),j(E,null,C(x.value,l=>(c(),p(e(v),{key:`${l.kind}-${l.name}-${l.port}`,label:l.name},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.5rem",align:"center",wrap:"",justify:"flex-end"},{default:t(()=>[a(e(i),{tone:"muted",size:"xs"},{default:t(()=>[o(r(l.description),1)]),_:2},1024),a(e(g),{tone:Y[l.kind],variant:"soft"},{default:t(()=>[o(r(ee[l.kind]),1)]),_:2},1032,["tone"]),a(e(i),{family:"mono",size:"sm"},{default:t(()=>[o(r(l.url),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["label"]))),128))]),_:1})):(c(),p(e(i),{key:1,tone:"muted",size:"sm"},{default:t(()=>[...n[11]||(n[11]=[o("No ports reported — is the orchestrator healthy?",-1)])]),_:1}))]),_:1}),a(e(I),{columns:5,gap:"1rem"},{default:t(()=>{var l;return[a(e(b),{label:"Services running",value:`${W.value} / ${U.value}`,tone:"success"},null,8,["value"]),a(e(b),{label:"Lambdas online",value:`${Z.value} / ${G.value}`,tone:"success"},null,8,["value"]),a(e(b),{label:"API routes",value:J.value,tone:"info"},null,8,["value"]),a(e(b),{label:"DynamoDB tables",value:h.value.tables.length,tone:"info"},null,8,["value"]),a(e(b),{label:"SQS queues",value:h.value.queues.length,tone:"warning"},null,8,["value"]),a(e(b),{label:"SNS topics",value:h.value.topics.length,tone:"info"},null,8,["value"]),a(e(b),{label:"S3 buckets",value:h.value.buckets.length,tone:"neutral"},null,8,["value"]),a(e(b),{label:"OpenSearch collections",value:((l=h.value.collections)==null?void 0:l.length)??0,tone:"info"},null,8,["value"])]}),_:1}),a(e(S),{variant:"outline"},{header:t(()=>[a(e(f),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(i),{weight:"semibold"},{default:t(()=>[...n[12]||(n[12]=[o("What's covered",-1)])]),_:1}),a(e(i),{tone:"muted",size:"xs"},{default:t(()=>[...n[13]||(n[13]=[o(" Resource types LSS understands today ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(I),{columns:2,gap:"0.75rem"},{default:t(()=>[(c(),j(E,null,C(te,l=>a(e(S),{key:l.type,variant:"soft"},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(f),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(f),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(D),{name:l.status==="covered"?"check":"clock"},null,8,["name"]),a(e(i),{weight:"semibold"},{default:t(()=>[o(r(l.type),1)]),_:2},1024),a(e(g),{tone:l.status==="covered"?"success":"neutral",variant:"soft"},{default:t(()=>[o(r(l.status==="covered"?"Supported":"Planned"),1)]),_:2},1032,["tone"])]),_:2},1024),a(e(i),{tone:"muted",size:"sm"},{default:t(()=>[o(r(l.description),1)]),_:2},1024)]),_:2},1024),l.to?(c(),p(e(H),{key:0,to:l.to,style:{"text-decoration":"none"}},{default:t(()=>[a(e(M),{size:"sm",variant:"ghost"},{default:t(()=>[n[14]||(n[14]=o("Open ",-1)),a(e(D),{name:"arrow-right"})]),_:1})]),_:1},8,["to"])):N("",!0)]),_:2},1024)]),_:2},1024)),64))]),_:1})]),_:1})],64))]),_:1}))}}),de=(O,m)=>{const d=O.__vccOpts||O;for(const[x,z]of m)d[x]=z;return d},fe=de(ie,[["__scopeId","data-v-c89610f3"]]);export{fe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.overview-hero[data-v-
|
|
1
|
+
.overview-hero[data-v-c89610f3]{background:linear-gradient(135deg,var(--tree-color-bg-surface, rgba(255, 255, 255, .02)),transparent)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as le,m as o,e as v,$ as e,t as m,a4 as t,j as a,w as P,M as I,T as Ve,N as A,f as c,u as g,i as s,C as _,g as h,F as D,q as W,U as qe,_ as d,v as C,O as ae,x as se,G as ue,H as Ie,d as X,a7 as he,s as ie,B as xe,K as Ce,L as Se,n as b,b as Y,a as Q,c as oe,l as Ne,o as Me,a3 as Ae,E as H,D as De,P as Pe,Q as Z,S as ee,y as ne,z as te,A as K,W as Ue,V as Fe,a0 as Te,a1 as re}from"./index-DGsXIPJ-.js";const je=["onClick"],Oe={key:0,style:{padding:"0.75rem 1rem","border-top":"1px solid var(--tree-color-border, #e5e7eb)"}},Re={key:0},Be=le({__name:"QueueSendReceivePanel",props:{queue:{}},emits:["refresh"],setup(O,{emit:L}){const w=O,U=L,$=oe(),F=b(""),R=b(0),f=b("default"),x=b(""),z=b([]),S=b(!1),N=b(null),M=b(null),B=b(10),V=b(0),E=b(0),y=b([]),T=b(!1),r=b(null),i=b({}),p=b(!1),G=b(!1),J=b({}),de=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Binary",label:"Binary"}],j=Y(()=>w.queue.fifo),me=[{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"}],fe=Y(()=>y.value.map((u,l)=>{var n;return{__id:l,__raw:u,messageId:u.messageId||"—",preview:ve(u.body),sentAt:ge((n=u.attributes)==null?void 0:n.SentTimestamp),attrs:u.messageAttributes?Object.keys(u.messageAttributes).length:0}}));function ve(u){if(!u)return"—";const l=u.replace(/\s+/g," ").trim();return l.length>80?`${l.slice(0,80)}…`:l}function ge(u){if(!u)return"—";const l=Number(u);return l?new Date(l).toLocaleString():"—"}function pe(){z.value.push({name:"",type:"String",value:""})}function be(u){z.value.splice(u,1)}function ye(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 ce(u){J.value[u]=!J.value[u]}async function ke(){if(!F.value.trim()){N.value="Message body is required";return}S.value=!0,N.value=null;try{const u=z.value.filter(n=>n.name.trim()),l=await Q.sendQueueMessage(w.queue.name,{body:F.value,delaySeconds:j.value?void 0:R.value||void 0,messageAttributes:u.length?u:void 0,messageGroupId:j.value?f.value||"default":void 0,messageDeduplicationId:j.value&&x.value?x.value:void 0});M.value={messageId:l.messageId,sequenceNumber:l.sequenceNumber},$.add({title:"Message sent",description:l.messageId,variant:"success"}),U("refresh")}catch(u){N.value=u.message||"Failed to send message"}finally{S.value=!1}}async function _e(){T.value=!0,r.value=null;try{const u=await Q.receiveQueueMessages(w.queue.name,{maxNumberOfMessages:B.value,visibilityTimeout:E.value,waitTimeSeconds:V.value});y.value=u.messages,u.messages.length||$.add({title:"No messages available",description:"The queue returned an empty batch.",variant:"info"}),U("refresh")}catch(u){r.value=u.message||"Failed to poll messages"}finally{T.value=!1}}async function we(u){if(!(!u.receiptHandle||!u.messageId)){i.value[u.messageId]=!0;try{await Q.deleteQueueMessage(w.queue.name,u.receiptHandle),y.value=y.value.filter(l=>l.messageId!==u.messageId),$.add({title:"Message deleted",variant:"success"}),U("refresh")}catch(l){$.add({title:"Failed to delete message",description:l.message,variant:"danger"})}finally{delete i.value[u.messageId]}}}async function $e(){G.value=!0;try{await Q.purgeQueue(w.queue.name),y.value=[],$.add({title:"Queue purged",description:"All messages were removed. It can take up to 60s to fully clear.",variant:"warning"}),U("refresh")}catch(u){$.add({title:"Failed to purge queue",description:u.message,variant:"danger"})}finally{G.value=!1,p.value=!1}}function ze(u){var l;(l=navigator.clipboard)==null||l.writeText(u).then(()=>{$.add({title:"Copied to clipboard",variant:"info"})})}return(u,l)=>(o(),v(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(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...l[13]||(l[13]=[s("Send a message",-1)])]),_:1}),j.value?(o(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...l[14]||(l[14]=[s("FIFO",-1)])]),_:1})):c("",!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(_),{variant:"solid",loading:S.value,onClick:ke},{default:t(()=>[...l[18]||(l[18]=[s("Send message",-1)])]),_:1},8,["loading"]),a(e(_),{variant:"ghost",disabled:S.value,onClick:l[4]||(l[4]=n=>F.value="")},{default:t(()=>[...l[19]||(l[19]=[s("Clear",-1)])]),_:1},8,["disabled"])]),_:1}),M.value?(o(),v(e(g),{key:0,tone:"muted",family:"mono",size:"xs"},{default:t(()=>[s(" Last sent: "+d(M.value.messageId)+" ",1),M.value.sequenceNumber?(o(),h(D,{key:0},[s(" · seq "+d(M.value.sequenceNumber),1)],64)):c("",!0)]),_:1})):c("",!0)]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(I),{label:"Message body",hint:"Plain text or JSON"},{default:t(()=>[a(e(Ve),{modelValue:F.value,"onUpdate:modelValue":l[0]||(l[0]=n=>F.value=n),rows:6,placeholder:'{"event": "order.created", "orderId": "abc-123"}'},null,8,["modelValue"])]),_:1}),a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[j.value?c("",!0):(o(),v(e(I),{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]=n=>R.value=n),modelModifiers:{number:!0},type:"number",min:"0",max:"900"},null,8,["modelValue"])]),_:1})),j.value?(o(),v(e(I),{key:1,label:"MessageGroupId",hint:"Required for FIFO. Defaults to 'default'.",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:f.value,"onUpdate:modelValue":l[2]||(l[2]=n=>f.value=n),placeholder:"default"},null,8,["modelValue"])]),_:1})):c("",!0),j.value?(o(),v(e(I),{key:2,label:"MessageDeduplicationId",hint:"Optional if content-based dedup is on",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:x.value,"onUpdate:modelValue":l[3]||(l[3]=n=>x.value=n),placeholder:"auto"},null,8,["modelValue"])]),_:1})):c("",!0)]),_:1}),a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(g),{weight:"semibold",size:"sm"},{default:t(()=>[...l[15]||(l[15]=[s("Message attributes – optional",-1)])]),_:1}),a(e(_),{size:"sm",variant:"outline",onClick:pe},{default:t(()=>[...l[16]||(l[16]=[s("Add attribute",-1)])]),_:1})]),_:1}),(o(!0),h(D,null,W(z.value,(n,q)=>(o(),v(e(m),{key:`a-${q}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(I),{label:"Name",style:{flex:"1.4"}},{default:t(()=>[a(e(A),{modelValue:n.name,"onUpdate:modelValue":k=>n.name=k,placeholder:"contentType"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(I),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e(qe),{modelValue:n.type,"onUpdate:modelValue":k=>n.type=k,options:de},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(I),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(A),{modelValue:n.value,"onUpdate:modelValue":k=>n.value=k,placeholder:"application/json"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(_),{size:"sm",variant:"outline",onClick:k=>be(q)},{default:t(()=>[...l[17]||(l[17]=[s("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),N.value?(o(),v(e(ae),{key:0,variant:"danger",dismissible:"",onDismiss:l[5]||(l[5]=n=>N.value=null)},{default:t(()=>[s(d(N.value),1)]),_:1})):c("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...l[20]||(l[20]=[s("Poll for messages",-1)])]),_:1}),a(e(C),{tone:"warning",variant:"soft"},{default:t(()=>[...l[21]||(l[21]=[s(" 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(_),{variant:"solid",loading:T.value,onClick:_e},{default:t(()=>[...l[22]||(l[22]=[s("Poll messages",-1)])]),_:1},8,["loading"]),a(e(_),{variant:"ghost",disabled:!y.value.length,onClick:l[9]||(l[9]=n=>y.value=[])},{default:t(()=>[...l[23]||(l[23]=[s(" Clear results ",-1)])]),_:1},8,["disabled"])]),_:1}),a(e(_),{size:"sm",variant:"outline",tone:"danger",onClick:l[10]||(l[10]=n=>p.value=!0)},{default:t(()=>[...l[24]||(l[24]=[s(" Purge queue ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(I),{label:"Max messages",hint:"1–10",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:B.value,"onUpdate:modelValue":l[6]||(l[6]=n=>B.value=n),modelModifiers:{number:!0},type:"number",min:"1",max:"10"},null,8,["modelValue"])]),_:1}),a(e(I),{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]=n=>E.value=n),modelModifiers:{number:!0},type:"number",min:"0"},null,8,["modelValue"])]),_:1}),a(e(I),{label:"Wait time (s)",hint:"0–20 (long polling)",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:V.value,"onUpdate:modelValue":l[8]||(l[8]=n=>V.value=n),modelModifiers:{number:!0},type:"number",min:"0",max:"20"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),r.value?(o(),v(e(ae),{key:1,variant:"danger",dismissible:"",onDismiss:l[11]||(l[11]=n=>r.value=null)},{default:t(()=>[s(d(r.value),1)]),_:1})):c("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[s("Received messages ("+d(y.value.length)+")",1)]),_:1}),a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[...l[25]||(l[25]=[s(" Click a row to view the full body ",-1)])]),_:1})]),_:1})]),default:t(()=>[T.value&&!y.value.length?(o(),v(e(m),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(se),{label:"Polling..."})]),_:1})):y.value.length?(o(),v(e(Ie),{key:2,columns:me,rows:fe.value,"aria-label":"Received messages"},{"cell-preview":t(({row:n})=>[X("a",{href:"#",style:{"text-decoration":"none"},onClick:he(q=>ce(String(n.messageId)),["prevent"])},[a(e(g),{family:"mono",size:"sm"},{default:t(()=>[a(e(ie),{name:J.value[String(n.messageId)]?"chevron-down":"chevron-right"},null,8,["name"]),s(" "+d(n.preview),1)]),_:2},1024)],8,je)]),"cell-messageId":t(({row:n})=>[a(e(g),{family:"mono",size:"xs"},{default:t(()=>[s(d(n.messageId),1)]),_:2},1024)]),"cell-sentAt":t(({row:n})=>[a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(d(n.sentAt),1)]),_:2},1024)]),"cell-attrs":t(({row:n})=>[Number(n.attrs)>0?(o(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[s(d(n.attrs),1)]),_:2},1024)):(o(),v(e(g),{key:1,tone:"muted",size:"xs"},{default:t(()=>[...l[26]||(l[26]=[s("—",-1)])]),_:1}))]),"cell-actions":t(({row:n})=>[a(e(m),{direction:"horizontal",gap:"0.25rem",justify:"flex-end"},{default:t(()=>[a(e(_),{size:"sm",variant:"ghost",onClick:q=>ze(String(n.__raw.body||""))},{default:t(()=>[...l[27]||(l[27]=[s(" Copy ",-1)])]),_:1},8,["onClick"]),a(e(_),{size:"sm",variant:"outline",tone:"danger",loading:i.value[String(n.messageId)],onClick:q=>we(n.__raw)},{default:t(()=>[...l[28]||(l[28]=[s(" Delete ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:1},8,["rows"])):(o(),v(e(ue),{key:1,title:"No messages loaded",description:"Use Poll messages to fetch a batch from the queue."})),(o(!0),h(D,null,W(y.value,n=>(o(),h(D,{key:`detail-${n.messageId}`},[n.messageId&&J.value[n.messageId]?(o(),h("div",Oe,[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(C),{tone:"neutral",variant:"soft"},{default:t(()=>[s("id: "+d(n.messageId),1)]),_:2},1024),n.md5OfBody?(o(),v(e(C),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[s(" md5: "+d(n.md5OfBody.slice(0,12))+"… ",1)]),_:2},1024)):c("",!0),(o(!0),h(D,null,W(n.attributes||{},(q,k)=>(o(),v(e(C),{key:k,tone:"info",variant:"soft"},{default:t(()=>[s(d(k)+": "+d(q),1)]),_:2},1024))),128))]),_:2},1024),n.messageAttributes&&Object.keys(n.messageAttributes).length?(o(),h("div",Re,[a(e(g),{weight:"semibold",size:"sm"},{default:t(()=>[...l[29]||(l[29]=[s("Message attributes",-1)])]),_:1}),a(e(m),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(o(!0),h(D,null,W(n.messageAttributes,(q,k)=>(o(),v(e(C),{key:`ma-${k}`,tone:"success",variant:"soft"},{default:t(()=>[s(d(k)+" ("+d(q.type||"String")+"): "+d(q.value),1)]),_:2},1024))),128))]),_:2},1024)])):c("",!0),a(e(xe)),a(e(Ce),{code:ye(n.body),label:"Message body","max-block-size":"24rem",wrap:"",copyable:""},null,8,["code"])]),_:2},1024)])):c("",!0)],64))),128))]),_:1}),a(e(Se),{open:p.value,"onUpdate:open":l[12]||(l[12]=n=>p.value=n),title:"Purge queue",description:`Delete every message in '${w.queue.name}'? AWS rate-limits PurgeQueue to once every 60 seconds.`,"confirm-label":"Purge","cancel-label":"Cancel",tone:"danger",loading:G.value,onConfirm:$e},null,8,["open","description","loading"])]),_:1}))}}),Qe={style:{"padding-top":"1rem"}},Le={style:{"padding-top":"1rem"}},Ee={style:{"padding-top":"1rem"}},We=le({__name:"QueueDetail",props:{queueName:{}},emits:["back"],setup(O,{emit:L}){const w=O,U=L,$=Te(),F=re(),R=oe(),f=b(null),x=b(!0),z=b(null);let S=null;const N=["send-receive","consumers","attributes"],M=Y({get(){const r=String($.query.tab||"");return N.includes(r)?r:"send-receive"},set(r){F.replace({query:{...$.query,tab:r==="send-receive"?void 0:r}})}}),B=Y(()=>{const r=f.value;if(!r)return 0;const i=r.available+r.inFlight+r.processed;return i?Math.round(r.processed/i*100):0});async function V(r=!0){r&&(x.value=!0);try{f.value=await Q.getQueue(w.queueName),z.value=null}catch(i){z.value=i.message||"Failed to load queue",f.value=null}finally{x.value=!1}}async function E(){if(f.value)try{await Q.resetQueueProcessed(f.value.name),R.add({title:"Processed counter reset",variant:"info"}),await V(!1)}catch(r){R.add({title:"Failed to reset counter",description:r.message,variant:"danger"})}}function y(r){return r===void 0?"—":r<60?`${r}s`:r<3600?`${Math.round(r/60)}m`:r<86400?`${Math.round(r/3600)}h`:`${Math.round(r/86400)}d`}function T(r){return r?new Date(r).toLocaleString():"—"}return Ne(()=>{V(),S=window.setInterval(()=>V(!1),4e3)}),Me(()=>{S&&window.clearInterval(S)}),Ae(()=>w.queueName,()=>V()),(r,i)=>(o(),v(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 p;return[a(e(_),{size:"sm",variant:"ghost",onClick:i[0]||(i[0]=G=>U("back"))},{default:t(()=>[a(e(ie),{name:"arrow-left"}),i[5]||(i[5]=s(" Queues",-1))]),_:1}),a(e(g),{weight:"semibold",size:"lg"},{default:t(()=>[s(d(O.queueName),1)]),_:1}),(p=f.value)!=null&&p.fifo?(o(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...i[6]||(i[6]=[s("FIFO",-1)])]),_:1})):c("",!0)]}),_:1}),a(e(_),{size:"sm",variant:"ghost",loading:x.value,onClick:i[1]||(i[1]=p=>V())},{default:t(()=>[...i[7]||(i[7]=[s("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),z.value?(o(),v(e(ae),{key:0,variant:"danger",dismissible:"",onDismiss:i[2]||(i[2]=p=>z.value=null)},{default:t(()=>[s(d(z.value),1)]),_:1})):c("",!0),x.value&&!f.value?(o(),v(e(m),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(se),{label:"Loading queue..."})]),_:1})):f.value?(o(),h(D,{key:2},[a(e(De),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(H),{label:"Available",value:f.value.available,tone:"warning"},null,8,["value"]),a(e(H),{label:"In flight",value:f.value.inFlight,tone:"info"},null,8,["value"]),a(e(H),{label:"Delayed",value:f.value.delayed,tone:"neutral"},null,8,["value"]),a(e(H),{label:"Processed (session)",value:f.value.processed,tone:"success"},null,8,["value"])]),_:1}),a(e(Fe),{modelValue:M.value,"onUpdate:modelValue":i[4]||(i[4]=p=>M.value=p)},{default:t(()=>[a(e(Pe),null,{default:t(()=>[a(e(Z),{value:"send-receive"},{default:t(()=>[...i[8]||(i[8]=[s("Send & receive",-1)])]),_:1}),a(e(Z),{value:"consumers"},{default:t(()=>[...i[9]||(i[9]=[s("Consumers",-1)])]),_:1}),a(e(Z),{value:"attributes"},{default:t(()=>[...i[10]||(i[10]=[s("Attributes",-1)])]),_:1})]),_:1}),a(e(ee),{value:"send-receive"},{default:t(()=>[X("div",Qe,[a(Be,{queue:f.value,onRefresh:i[3]||(i[3]=p=>V(!1))},null,8,["queue"])])]),_:1}),a(e(ee),{value:"consumers"},{default:t(()=>[X("div",Le,[a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...i[11]||(i[11]=[s("Lambda event-source mappings",-1)])]),_:1})]),default:t(()=>[f.value.consumers.length?(o(),v(e(m),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(o(!0),h(D,null,W(f.value.consumers,p=>(o(),v(e(P),{key:p.uuid||p.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(()=>[a(e(g),{family:"mono"},{default:t(()=>[s(d(p.functionName),1)]),_:2},1024),a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(" UUID: "+d(p.uuid||"—")+" · batch size "+d(p.batchSize??"—"),1)]),_:2},1024)]),_:2},1024),a(e(C),{tone:p.enabled?"success":"neutral",variant:"soft"},{default:t(()=>[s(d(p.state||(p.enabled?"Enabled":"Disabled")),1)]),_:2},1032,["tone"])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(o(),v(e(ue),{key:1,title:"No consumers attached",description:"No Lambda event-source mapping currently points at this queue."}))]),_:1})])]),_:1}),a(e(ee),{value:"attributes"},{default:t(()=>[X("div",Ee,[a(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...i[12]||(i[12]=[s("Identity",-1)])]),_:1})]),default:t(()=>[a(e(ne),null,{default:t(()=>[a(e(te),{label:"Queue URL"},{default:t(()=>[a(e(g),{family:"mono",size:"sm"},{default:t(()=>[s(d(f.value.url),1)]),_:1})]),_:1}),a(e(te),{label:"ARN"},{default:t(()=>[a(e(g),{family:"mono",size:"sm"},{default:t(()=>[s(d(f.value.arn||"—"),1)]),_:1})]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...i[13]||(i[13]=[s("Configuration",-1)])]),_:1})]),footer:t(()=>[a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(" Created "+d(T(f.value.createdAt))+" · last polled "+d(T(f.value.lastPolledAt)),1)]),_:1})]),default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[s(" FIFO: "+d(f.value.fifo?"yes":"no"),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[s(" Visibility timeout: "+d(y(f.value.visibilityTimeout)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[s(" Retention: "+d(y(f.value.messageRetentionPeriod)),1)]),_:1}),a(e(K),{size:"sm",variant:"soft"},{default:t(()=>[s(" Delayed: "+d(f.value.delayed),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...i[14]||(i[14]=[s("Throughput",-1)])]),_:1})]),footer:t(()=>[a(e(m),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(_),{size:"sm",variant:"ghost",onClick:E},{default:t(()=>[...i[15]||(i[15]=[s(" Reset processed counter ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(ne),null,{default:t(()=>[a(e(te),{label:"Processed share (this session)"},{default:t(()=>[a(e(g),{family:"mono"},{default:t(()=>[s(d(B.value)+"%",1)]),_:1})]),_:1})]),_:1}),a(e(Ue),{value:B.value},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):c("",!0)]),_:1}))}}),Je=le({__name:"QueueDetailPage",props:{queueName:{}},setup(O){const L=re();function w(){L.push("/queues")}return(U,$)=>(o(),v(We,{"queue-name":O.queueName,onBack:w},null,8,["queue-name"]))}});export{Je as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as Q,a1 as B,l as L,o as P,m as u,e as o,$ as a,t as f,a4 as e,j as s,D as j,E as p,O as D,i,_ as r,f as U,w as V,x as A,G as O,H as T,v as g,C as E,g as G,F as H,q as M,A as F,R as J,u as y,I as K,n as _,b as w,a as C}from"./index-DGsXIPJ-.js";const W=Q({__name:"QueuesView",setup(x){const h=B(),c=_([]),$=_({}),v=_(!0),m=_(null);let k=null;const N=[{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"}],z=w(()=>c.value.map(l=>({...l,consumersCount:l.consumers.length,service:$.value[l.name]||""}))),b=w(()=>({queues:c.value.length,available:c.value.reduce((l,n)=>l+n.available,0),inFlight:c.value.reduce((l,n)=>l+n.inFlight,0),processed:c.value.reduce((l,n)=>l+n.processed,0)}));async function S(){try{const[l,n]=await Promise.all([C.listQueues(),C.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);c.value=l;const t={};for(const d of n.queues)t[d.name]=d.service;$.value=t,m.value=null}catch(l){m.value=l.message||"Failed to load queues"}finally{v.value=!1}}function I(l){h.push(`/queues/${encodeURIComponent(l)}`)}function R(l){return l.available>0?"warning":l.inFlight>0?"info":l.consumers.some(n=>n.enabled)?"success":"neutral"}function q(l){return l.available>0?"Backlog":l.inFlight>0?"Processing":l.consumers.length?"Idle":"No consumers"}return L(()=>{S(),k=window.setInterval(S,4e3)}),P(()=>{k&&window.clearInterval(k)}),(l,n)=>(u(),o(a(f),{direction:"vertical",gap:"1.25rem"},{default:e(()=>[s(a(j),{columns:4,gap:"1rem"},{default:e(()=>[s(a(p),{label:"Queues",value:b.value.queues,tone:"info",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"Available messages",value:b.value.available,tone:"warning",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"In flight",value:b.value.inFlight,tone:"info",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"Processed",value:b.value.processed,tone:"success",loading:v.value},null,8,["value","loading"])]),_:1}),m.value?(u(),o(a(D),{key:0,variant:"danger",dismissible:"",onDismiss:n[0]||(n[0]=t=>m.value=null)},{default:e(()=>[i(r(m.value),1)]),_:1})):U("",!0),s(a(V),{variant:"outline"},{header:e(()=>[s(a(f),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:e(()=>[s(a(y),{weight:"semibold"},{default:e(()=>[...n[1]||(n[1]=[i("SQS Queues",-1)])]),_:1}),s(a(y),{tone:"muted"},{default:e(()=>[...n[2]||(n[2]=[i("Live · refreshes every 4s",-1)])]),_:1})]),_:1})]),default:e(()=>[v.value?(u(),o(a(f),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:e(()=>[s(a(A),{label:"Loading queues..."})]),_:1})):c.value.length?(u(),o(a(T),{key:2,columns:N,rows:z.value,"aria-label":"SQS queues"},{"cell-name":e(({row:t})=>[s(a(f),{direction:"vertical",gap:"0.125rem"},{default:e(()=>[s(a(K),{to:`/queues/${encodeURIComponent(String(t.name))}`,style:{"font-weight":"600"}},{default:e(()=>[i(r(t.name),1)]),_:2},1032,["to"]),s(a(y),{tone:"muted",family:"mono",size:"xs"},{default:e(()=>[i(r(String(t.arn||t.url||"")),1)]),_:2},1024)]),_:2},1024)]),"cell-service":e(({row:t})=>[t.service?(u(),o(a(J),{key:0,to:`/services/${encodeURIComponent(String(t.service))}`,style:{"text-decoration":"none"}},{default:e(()=>[s(a(F),{size:"sm",variant:"soft",clickable:""},{default:e(()=>[i(r(t.service),1)]),_:2},1024)]),_:2},1032,["to"])):(u(),o(a(y),{key:1,tone:"muted",size:"xs"},{default:e(()=>[...n[3]||(n[3]=[i("unmanaged",-1)])]),_:1}))]),"cell-available":e(({row:t})=>[s(a(g),{tone:Number(t.available)>0?"warning":"neutral",variant:"soft"},{default:e(()=>[i(r(t.available),1)]),_:2},1032,["tone"])]),"cell-inFlight":e(({row:t})=>[s(a(g),{tone:Number(t.inFlight)>0?"info":"neutral",variant:"soft"},{default:e(()=>[i(r(t.inFlight),1)]),_:2},1032,["tone"])]),"cell-processed":e(({row:t})=>[s(a(g),{tone:"success",variant:"soft"},{default:e(()=>[i(r(t.processed),1)]),_:2},1024)]),"cell-consumers":e(({row:t})=>[s(a(f),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:e(()=>[t.consumers.length?(u(!0),G(H,{key:0},M(t.consumers,d=>(u(),o(a(F),{key:d.uuid||d.functionName,size:"sm",variant:d.enabled?"solid":"outline"},{default:e(()=>[i(r(d.functionName),1)]),_:2},1032,["variant"]))),128)):(u(),o(a(g),{key:1,tone:"neutral",variant:"soft"},{default:e(()=>[...n[4]||(n[4]=[i("No consumers",-1)])]),_:1}))]),_:2},1024)]),"cell-actions":e(({row:t})=>[s(a(f),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:e(()=>[s(a(g),{tone:R(t),variant:"solid"},{default:e(()=>[i(r(q(t)),1)]),_:2},1032,["tone"]),s(a(E),{size:"sm",variant:"ghost",onClick:d=>I(String(t.name))},{default:e(()=>[...n[5]||(n[5]=[i(" Open ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(u(),o(a(O),{key:1,title:"No queues found",description:"Register a microservice that defines SQS resources or create queues directly in LocalStack."}))]),_:1})]),_:1}))}}),Y=Q({__name:"QueuesPage",setup(x){return(h,c)=>(u(),o(W))}});export{Y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as q,l as P,o as Q,m as i,e as o,$ as e,t as d,a4 as a,j as s,D as X,E as j,O as Y,i as r,_ as u,f as m,w as Z,x as F,G as I,H as U,C as V,u as f,A,v as E,N as ee,J as ae,g as O,d as T,F as te,q as le,K as ne,n as c,b as h,a as D,c as se}from"./index-DGsXIPJ-.js";const re={key:0},ie=q({__name:"SecretsList",setup(K){const p=se(),y=c([]),_=c(!0),k=c(null),w=c("");let C=null;const S=c(!1),b=c(null),v=c(null),$=c(!1),g=c(null),z=c(!1),M=[{key:"name",label:"Secret"},{key:"description",label:"Description"},{key:"versions",label:"Versions",align:"right"},{key:"lastChanged",label:"Last changed"},{key:"actions",label:"",align:"right"}],x=h(()=>y.value.map(n=>({...n,versions:n.versionCount,lastChanged:n.lastChangedDate?new Date(n.lastChangedDate).toLocaleString():"—",scheduledDeletion:!!n.deletedDate})).sort((n,t)=>n.name.localeCompare(t.name))),L=h(()=>{const n=w.value.trim().toLowerCase();return n?x.value.filter(t=>t.name.toLowerCase().includes(n)||(t.description||"").toLowerCase().includes(n)):x.value}),N=h(()=>({secrets:y.value.length,versions:y.value.reduce((n,t)=>n+t.versionCount,0)})),W=h(()=>{var n;return Object.entries(((n=v.value)==null?void 0:n.versionStages)??{}).map(([t,l])=>({versionId:t,stages:l.join(", "),current:l.includes("AWSCURRENT")}))});async function B(){try{const n=await D.listSecrets();y.value=n.secrets,k.value=null}catch(n){k.value=n.message||"Failed to load secrets"}finally{_.value=!1}}async function R(n){b.value=n,S.value=!0,v.value=null,g.value=null,$.value=!0;try{v.value=await D.describeSecret(n)}catch(t){p.add({title:"Failed to load secret",description:t.message,variant:"danger"})}finally{$.value=!1}}async function G(){if(b.value){z.value=!0;try{g.value=await D.getSecretValue(b.value)}catch(n){p.add({title:"Failed to reveal value",description:n.message,variant:"danger"})}finally{z.value=!1}}}async function H(){var t,l;const n=((t=g.value)==null?void 0:t.secretString)??((l=g.value)==null?void 0:l.secretBinary);if(n)try{await navigator.clipboard.writeText(n),p.add({title:"Copied to clipboard",variant:"success"})}catch{p.add({title:"Copy failed",variant:"danger"})}}return P(()=>{B(),C=window.setInterval(B,15e3)}),Q(()=>{C&&window.clearInterval(C)}),(n,t)=>(i(),o(e(d),{direction:"vertical",gap:"1.25rem"},{default:a(()=>[s(e(X),{columns:2,gap:"1rem"},{default:a(()=>[s(e(j),{label:"Secrets",value:N.value.secrets,tone:"info",loading:_.value},null,8,["value","loading"]),s(e(j),{label:"Versions",value:N.value.versions,tone:"success",loading:_.value},null,8,["value","loading"])]),_:1}),k.value?(i(),o(e(Y),{key:0,variant:"danger",dismissible:"",onDismiss:t[0]||(t[0]=l=>k.value=null)},{default:a(()=>[r(u(k.value),1)]),_:1})):m("",!0),s(e(Z),{variant:"outline"},{header:a(()=>[s(e(d),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:a(()=>[s(e(f),{weight:"semibold"},{default:a(()=>[...t[3]||(t[3]=[r("Secrets Manager",-1)])]),_:1}),s(e(d),{direction:"horizontal",align:"center",gap:"1rem"},{default:a(()=>[s(e(ee),{modelValue:w.value,"onUpdate:modelValue":t[1]||(t[1]=l=>w.value=l),placeholder:"Filter secrets...",style:{"min-width":"16rem"}},null,8,["modelValue"]),s(e(f),{tone:"muted",size:"xs"},{default:a(()=>[...t[4]||(t[4]=[r("Refreshes every 15s",-1)])]),_:1})]),_:1})]),_:1})]),default:a(()=>[_.value?(i(),o(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[s(e(F),{label:"Loading secrets..."})]),_:1})):x.value.length?L.value.length?(i(),o(e(U),{key:3,columns:M,rows:L.value,"aria-label":"Secrets"},{"cell-name":a(({row:l})=>[s(e(d),{direction:"horizontal",align:"center",gap:"0.5rem"},{default:a(()=>[s(e(f),{weight:"semibold",style:{cursor:"pointer","text-decoration":"underline","text-decoration-style":"dotted","text-underline-offset":"3px"},onClick:J=>R(String(l.name))},{default:a(()=>[r(u(l.name),1)]),_:2},1032,["onClick"]),l.scheduledDeletion?(i(),o(e(E),{key:0,tone:"warning",variant:"soft"},{default:a(()=>[...t[5]||(t[5]=[r("deletion scheduled",-1)])]),_:1})):m("",!0)]),_:2},1024)]),"cell-description":a(({row:l})=>[s(e(f),{tone:"muted",size:"sm"},{default:a(()=>[r(u(l.description||"—"),1)]),_:2},1024)]),"cell-versions":a(({row:l})=>[s(e(A),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.versions),1)]),_:2},1024)]),"cell-lastChanged":a(({row:l})=>[s(e(f),{tone:"muted",family:"mono",size:"xs"},{default:a(()=>[r(u(l.lastChanged),1)]),_:2},1024)]),"cell-actions":a(({row:l})=>[s(e(V),{size:"sm",variant:"soft",onClick:J=>R(String(l.name))},{default:a(()=>[...t[6]||(t[6]=[r("Inspect",-1)])]),_:1},8,["onClick"])]),_:1},8,["rows"])):(i(),o(e(I),{key:2,title:"No matching secrets",description:`No secrets match "${w.value}".`},null,8,["description"])):(i(),o(e(I),{key:1,title:"No secrets",description:"Create one with the AWS SDK (CreateSecret) against the engine endpoint — e.g. a signing key an identity service reads at boot."}))]),_:1}),s(e(ae),{open:S.value,"onUpdate:open":t[2]||(t[2]=l=>S.value=l),title:b.value?`Secret — ${b.value}`:"Secret",size:"lg"},{default:a(()=>[$.value?(i(),o(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[s(e(F),{label:"Loading secret..."})]),_:1})):v.value?(i(),o(e(d),{key:1,direction:"vertical",gap:"1rem"},{default:a(()=>[s(e(d),{direction:"vertical",gap:"0.35rem"},{default:a(()=>[s(e(f),{tone:"muted",family:"mono",size:"xs",style:{"word-break":"break-all"}},{default:a(()=>[r(u(v.value.arn),1)]),_:1}),v.value.description?(i(),O("span",re,u(v.value.description),1)):m("",!0)]),_:1}),T("div",null,[s(e(f),{weight:"semibold",size:"sm"},{default:a(()=>[...t[7]||(t[7]=[r("Versions & staging labels",-1)])]),_:1}),s(e(U),{columns:[{key:"versionId",label:"Version"},{key:"stages",label:"Staging labels"}],rows:W.value,"aria-label":"Secret versions and staging labels"},{"cell-versionId":a(({row:l})=>[s(e(f),{family:"mono",size:"xs"},{default:a(()=>[r(u(l.versionId),1)]),_:2},1024)]),"cell-stages":a(({row:l})=>[s(e(E),{tone:l.current?"success":"neutral",variant:"soft"},{default:a(()=>[r(u(l.stages),1)]),_:2},1032,["tone"])]),_:1},8,["rows"])]),v.value.tags.length?(i(),o(e(d),{key:0,direction:"horizontal",gap:"0.5rem",wrap:""},{default:a(()=>[(i(!0),O(te,null,le(v.value.tags,l=>(i(),o(e(A),{key:l.key,size:"sm",variant:"soft"},{default:a(()=>[r(u(l.key)+"="+u(l.value),1)]),_:2},1024))),128))]),_:1})):m("",!0),T("div",null,[s(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[s(e(V),{size:"sm",variant:"solid",loading:z.value,onClick:G},{default:a(()=>[r(u(g.value?"Refresh value":"Reveal current value"),1)]),_:1},8,["loading"]),g.value?(i(),o(e(V),{key:0,size:"sm",variant:"ghost",onClick:H},{default:a(()=>[...t[8]||(t[8]=[r("Copy",-1)])]),_:1})):m("",!0)]),_:1}),g.value?(i(),o(e(ne),{key:0,code:g.value.secretString??`(binary, base64) ${g.value.secretBinary}`,label:"Secret value","max-block-size":"24rem",wrap:"",copyable:""},null,8,["code"])):m("",!0)])]),_:1})):m("",!0)]),_:1},8,["open","title"])]),_:1}))}}),ue=q({__name:"SecretsPage",setup(K){return(p,y)=>(i(),o(ie))}});export{ue as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as ue,l as se,o as de,a3 as ve,e as v,a4 as t,$ as e,t as r,a as q,n as k,m as i,j as a,R as P,C as D,s as Q,i as l,u as m,_ as s,v as p,f as g,O as fe,x as ce,g as y,E as B,D as me,y as ge,z as T,d as pe,w as Z,G as ye,F as b,q as w,A as z,K as be,J as _e,L as ke,b as we,c as ze,a1 as he}from"./index-DGsXIPJ-.js";const Se=ue({__name:"ServiceDetailPage",props:{serviceName:{}},setup(F){const _=F,ee=he(),S=ze(),c=k(null),R=k(!0),C=k(null),U=k(!1),j=k(!1),E=k(!1),A=k([]),G=k("stopped");let h=null,V=null;const O=k(!1),o=we(()=>{var n;const f={lambda:[],dynamodb:[],sqs:[],sns:[],s3:[],eventbus:[],"event-rule":[],opensearch:[],"event-source":[]};for(const d of((n=c.value)==null?void 0:n.resources)||[])f[d.type]||(f[d.type]=[]),f[d.type].push(d);return f});async function N(){R.value=!0;try{c.value=await q.getService(_.serviceName),C.value=null}catch(f){C.value=f.message||"Service not found",c.value=null}finally{R.value=!1}}async function te(){if(!U.value){U.value=!0;try{await q.startService(_.serviceName),S.add({title:"Service started",description:_.serviceName,variant:"success"}),await N()}catch(f){S.add({title:"Failed to start",description:f.message,variant:"danger"})}finally{U.value=!1}}}async function ae(){if(!j.value){j.value=!0;try{await q.stopService(_.serviceName),S.add({title:"Service stopped",description:_.serviceName,variant:"info"}),await N()}catch(f){S.add({title:"Failed to stop",description:f.message,variant:"danger"})}finally{j.value=!1}}}async function J(){try{const f=await q.getServiceLogs(_.serviceName);A.value=f.logs||[],G.value=f.status||"stopped"}catch(f){console.error("Failed to fetch logs:",f)}}function ne(){E.value=!0,J(),h&&window.clearInterval(h),h=window.setInterval(J,2e3)}function le(){E.value=!1,h&&window.clearInterval(h),h=null}async function re(){try{await q.deleteService(_.serviceName),S.add({title:"Service deleted",description:_.serviceName,variant:"info"}),ee.push("/services")}catch(f){S.add({title:"Failed to delete",description:f.message,variant:"danger"})}finally{O.value=!1}}function ie(f){switch(f){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}function oe(f){return f?new Date(f).toLocaleString():"—"}return se(()=>{N(),V=window.setInterval(N,1e4)}),de(()=>{V&&window.clearInterval(V),h&&window.clearInterval(h)}),ve(()=>_.serviceName,N),(f,n)=>(i(),v(e(r),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(r),{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(D),{size:"sm",variant:"ghost"},{default:t(()=>[a(e(Q),{name:"arrow-left"}),n[5]||(n[5]=l(" Services",-1))]),_:1})]),_:1}),a(e(m),{weight:"semibold",size:"lg"},{default:t(()=>[l(s(F.serviceName),1)]),_:1}),(d=c.value)!=null&&d.status?(i(),v(e(p),{key:0,tone:ie(c.value.status),variant:"soft"},{default:t(()=>[l(s(c.value.status),1)]),_:1},8,["tone"])):g("",!0)]}),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem"},{default:t(()=>{var d,$;return[a(e(D),{size:"sm",variant:"soft",disabled:((d=c.value)==null?void 0:d.status)==="running",loading:U.value,onClick:te},{default:t(()=>[...n[6]||(n[6]=[l(" Start ",-1)])]),_:1},8,["disabled","loading"]),a(e(D),{size:"sm",variant:"soft",disabled:(($=c.value)==null?void 0:$.status)!=="running",loading:j.value,onClick:ae},{default:t(()=>[...n[7]||(n[7]=[l(" Stop ",-1)])]),_:1},8,["disabled","loading"]),a(e(D),{size:"sm",variant:"ghost",onClick:ne},{default:t(()=>[...n[8]||(n[8]=[l("Logs",-1)])]),_:1}),a(e(D),{size:"sm",variant:"ghost",loading:R.value,onClick:N},{default:t(()=>[...n[9]||(n[9]=[l("Refresh",-1)])]),_:1},8,["loading"]),a(e(D),{size:"sm",variant:"danger",onClick:n[0]||(n[0]=L=>O.value=!0)},{default:t(()=>[...n[10]||(n[10]=[l("Delete",-1)])]),_:1})]}),_:1})]),_:1}),C.value?(i(),v(e(fe),{key:0,variant:"danger",dismissible:"",onDismiss:n[1]||(n[1]=d=>C.value=null)},{default:t(()=>[l(s(C.value),1)]),_:1})):g("",!0),R.value&&!c.value?(i(),v(e(r),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(ce),{label:"Loading service..."})]),_:1})):c.value?(i(),y(b,{key:2},[a(e(me),{columns:5,gap:"1rem"},{default:t(()=>{var d,$,L,x,I;return[a(e(B),{label:"Lambdas",value:((d=o.value.lambda)==null?void 0:d.length)||0,tone:"info"},null,8,["value"]),a(e(B),{label:"Tables",value:(($=o.value.dynamodb)==null?void 0:$.length)||0,tone:"info"},null,8,["value"]),a(e(B),{label:"Queues",value:((L=o.value.sqs)==null?void 0:L.length)||0,tone:"warning"},null,8,["value"]),a(e(B),{label:"Topics",value:((x=o.value.sns)==null?void 0:x.length)||0,tone:"info"},null,8,["value"]),a(e(B),{label:"Buckets",value:((I=o.value.s3)==null?void 0:I.length)||0,tone:"neutral"},null,8,["value"])]}),_:1}),a(e(Z),{variant:"outline"},{header:t(()=>[a(e(m),{weight:"semibold"},{default:t(()=>[...n[11]||(n[11]=[l("Metadata",-1)])]),_:1})]),default:t(()=>[a(e(ge),null,{default:t(()=>[a(e(T),{label:"Path"},{default:t(()=>[a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.root),1)]),_:1})]),_:1}),a(e(T),{label:"Region"},{default:t(()=>[a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.region||"—"),1)]),_:1})]),_:1}),a(e(T),{label:"Invoke port"},{default:t(()=>[a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.invokePort??"—"),1)]),_:1})]),_:1}),a(e(T),{label:"PID"},{default:t(()=>[a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.pid??"—"),1)]),_:1})]),_:1}),a(e(T),{label:"Last updated"},{default:t(()=>[pe("span",null,s(oe(c.value.lastUpdated)),1)]),_:1})]),_:1})]),_:1}),a(e(Z),{variant:"outline"},{header:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{weight:"semibold"},{default:t(()=>[...n[12]||(n[12]=[l("Declared resources",-1)])]),_:1}),a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>{var d;return[l(s(((d=c.value.resources)==null?void 0:d.length)||0)+" total ",1)]}),_:1})]),_:1})]),default:t(()=>{var d;return[(d=c.value.resources)!=null&&d.length?(i(),v(e(r),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>{var $,L,x,I,K,H,W,X,Y;return[($=o.value.dynamodb)!=null&&$.length?(i(),v(e(r),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[13]||(n[13]=[l("DynamoDB tables",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.dynamodb.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.dynamodb,u=>(i(),v(e(P),{key:`db-${u.name}`,to:`/dynamo/${encodeURIComponent(u.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(z),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):g("",!0),(L=o.value.sqs)!=null&&L.length?(i(),v(e(r),{key:1,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"warning",variant:"soft"},{default:t(()=>[...n[14]||(n[14]=[l("SQS queues",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.sqs.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.sqs,u=>(i(),v(e(P),{key:`q-${u.name}`,to:"/queues",style:{"text-decoration":"none"}},{default:t(()=>[a(e(z),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(x=o.value.sns)!=null&&x.length?(i(),v(e(r),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[15]||(n[15]=[l("SNS topics",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.sns.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.sns,u=>(i(),v(e(z),{key:`t-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(I=o.value.s3)!=null&&I.length?(i(),v(e(r),{key:3,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[16]||(n[16]=[l("S3 buckets",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.s3.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.s3,u=>(i(),v(e(P),{key:`b-${u.name}`,to:`/buckets/${encodeURIComponent(u.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(z),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):g("",!0),(K=o.value.lambda)!=null&&K.length?(i(),v(e(r),{key:4,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[17]||(n[17]=[l("Lambda functions",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.lambda.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.lambda,u=>(i(),v(e(z),{key:`l-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[a(e(Q),{name:"code"}),l(" "+s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(H=o.value.eventbus)!=null&&H.length?(i(),v(e(r),{key:5,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[18]||(n[18]=[l("EventBridge buses",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.eventbus.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.eventbus,u=>(i(),v(e(z),{key:`eb-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(W=o.value["event-rule"])!=null&&W.length?(i(),v(e(r),{key:6,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[19]||(n[19]=[l("EventBridge rules",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value["event-rule"].length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value["event-rule"],(u,M)=>(i(),v(e(z),{key:`er-${M}-${u.name}`,size:"sm",variant:"outline"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(X=o.value.opensearch)!=null&&X.length?(i(),v(e(r),{key:7,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[20]||(n[20]=[l("OpenSearch collections",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.opensearch.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value.opensearch,u=>(i(),v(e(z),{key:`os-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[a(e(Q),{name:"search"}),l(" "+s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(Y=o.value["event-source"])!=null&&Y.length?(i(),v(e(r),{key:8,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[21]||(n[21]=[l("Event-source mappings",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value["event-source"].length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,w(o.value["event-source"],(u,M)=>(i(),v(e(z),{key:`es-${M}-${u.name}`,size:"sm",variant:"outline"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0)]}),_:1})):(i(),v(e(ye),{key:0,title:"No resources declared",description:"This service's CloudFormation template has no resources LSS understands yet."}))]}),_:1})],64)):g("",!0),a(e(_e),{open:E.value,"onUpdate:open":[n[2]||(n[2]=d=>E.value=d),n[3]||(n[3]=d=>{d||le()})],title:`Logs — ${F.serviceName}`,description:`Status: ${G.value}`,size:"lg"},{default:t(()=>[a(e(be),{code:A.value.join(`
|
|
2
|
+
`)||"— no output yet —",label:"Service log","max-block-size":"60vh",wrap:"",copyable:""},null,8,["code"])]),_:1},8,["open","title","description"]),a(e(ke),{open:O.value,"onUpdate:open":n[4]||(n[4]=d=>O.value=d),title:`Delete service “${F.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:re},null,8,["open","title"])]),_:1}))}});export{Se as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as G,l as se,o as re,m as i,e as o,$ as t,w as ne,a4 as s,t as h,j as n,x as le,G as ie,H as oe,C as B,i as l,_ as u,A as g,s as p,f as v,u as x,v as ue,I as de,J as ce,K as ve,L as fe,M as ge,N as pe,a6 as me,n as d,b as O,a as _,c as ke}from"./index-DGsXIPJ-.js";const ye=G({__name:"ServicesList",setup(H){const c=ke(),z=d([]),U=d(!0),C=d(!1),m=d(""),b=d(null),D=d([]),F=d("stopped"),f=d(null),k=d({}),y=d({}),S=d(null),L=d(!1);let I=null;const J=[{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"}],E=O(()=>z.value.map(a=>({...a}))),N=O({get:()=>b.value!==null,set:a=>{a||Y()}});async function w(){try{z.value=await _.listServices()}catch(a){console.error("Failed to load services:",a)}finally{U.value=!1}}async function Q(a){if(!k.value[a]){k.value={...k.value,[a]:!0};try{await _.startService(a),c.add({title:"Service started",description:a,variant:"success"}),await w()}catch(r){c.add({title:"Failed to start service",description:r.message,variant:"danger"})}finally{k.value={...k.value,[a]:!1}}}}async function W(a){if(!y.value[a]){y.value={...y.value,[a]:!0};try{await _.stopService(a),c.add({title:"Service stopped",description:a,variant:"info"}),await w()}catch(r){c.add({title:"Failed to stop service",description:r.message,variant:"danger"})}finally{y.value={...y.value,[a]:!1}}}}async function R(a){try{const r=await _.getServiceLogs(a);D.value=r.logs||[],F.value=r.status||"stopped"}catch(r){console.error("Failed to fetch logs:",r)}}function X(a){b.value=a,R(a),f.value&&window.clearInterval(f.value),f.value=window.setInterval(()=>R(a),2e3)}function Y(){b.value=null,D.value=[],f.value&&window.clearInterval(f.value),f.value=null}async function j(){if(m.value.trim()){C.value=!0;try{await _.registerService(m.value),c.add({title:"Service registered",description:m.value,variant:"success"}),m.value="",await w()}catch(a){c.add({title:"Failed to register service",description:a.message,variant:"danger"})}finally{C.value=!1}}}function Z(a){S.value=a,L.value=!0}async function ee(){if(!S.value)return;const a=S.value;try{await _.deleteService(a),c.add({title:"Service deleted",description:a,variant:"info"}),await w()}catch(r){c.add({title:"Failed to delete service",description:r.message,variant:"danger"})}finally{S.value=null,L.value=!1}}function te(a){return new Date(a).toLocaleString()}function ae(a){switch(a){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}return se(()=>{w(),I=window.setInterval(w,1e4)}),re(()=>{I&&window.clearInterval(I),f.value&&window.clearInterval(f.value)}),(a,r)=>(i(),o(t(ne),{variant:"outline"},{header:s(()=>[n(t(h),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:s(()=>[n(t(x),{weight:"semibold"},{default:s(()=>[...r[3]||(r[3]=[l("Microservices",-1)])]),_:1}),n(t(h),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:s(()=>[n(t(ge),{hint:"Absolute path to a Serverless project",htmlFor:"register-path"},{default:s(()=>[n(t(pe),{modelValue:m.value,"onUpdate:modelValue":r[0]||(r[0]=e=>m.value=e),placeholder:"/path/to/microservice",disabled:C.value,onKeyup:me(j,["enter"])},null,8,["modelValue","disabled"])]),_:1}),n(t(B),{variant:"solid",loading:C.value,disabled:!m.value.trim(),onClick:j},{default:s(()=>[...r[4]||(r[4]=[l(" Register ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),default:s(()=>[U.value?(i(),o(t(h),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:s(()=>[n(t(le),{label:"Loading services..."})]),_:1})):z.value.length?(i(),o(t(oe),{key:2,columns:J,rows:E.value,"aria-label":"Registered microservices"},{"cell-name":s(({row:e})=>[n(t(de),{to:`/services/${encodeURIComponent(String(e.name))}`},{default:s(()=>[n(t(x),{weight:"semibold"},{default:s(()=>[l(u(e.name),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-status":s(({row:e})=>[n(t(ue),{tone:ae(String(e.status)),variant:"soft"},{default:s(()=>[l(u(e.status),1)]),_:2},1032,["tone"])]),"cell-root":s(({row:e})=>[n(t(x),{family:"mono"},{default:s(()=>[l(u(e.root),1)]),_:2},1024)]),"cell-resourceBreakdown":s(({row:e})=>[n(t(h),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:s(()=>{var $,T,V,M,q,A,K,P;return[($=e.resourceBreakdown)!=null&&$.lambdas?(i(),o(t(g),{key:0,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"code"}),l(" "+u(e.resourceBreakdown.lambdas),1)]),_:2},1024)):v("",!0),(T=e.resourceBreakdown)!=null&&T.tables?(i(),o(t(g),{key:1,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"database"}),l(" "+u(e.resourceBreakdown.tables),1)]),_:2},1024)):v("",!0),(V=e.resourceBreakdown)!=null&&V.queues?(i(),o(t(g),{key:2,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"inbox"}),l(" "+u(e.resourceBreakdown.queues),1)]),_:2},1024)):v("",!0),(M=e.resourceBreakdown)!=null&&M.topics?(i(),o(t(g),{key:3,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"megaphone"}),l(" "+u(e.resourceBreakdown.topics),1)]),_:2},1024)):v("",!0),(q=e.resourceBreakdown)!=null&&q.buckets?(i(),o(t(g),{key:4,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"archive"}),l(" "+u(e.resourceBreakdown.buckets),1)]),_:2},1024)):v("",!0),(A=e.resourceBreakdown)!=null&&A.buses?(i(),o(t(g),{key:5,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"shuffle"}),l(" "+u(e.resourceBreakdown.buses),1)]),_:2},1024)):v("",!0),(K=e.resourceBreakdown)!=null&&K.eventRules?(i(),o(t(g),{key:6,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"target"}),l(" "+u(e.resourceBreakdown.eventRules),1)]),_:2},1024)):v("",!0),(P=e.resourceBreakdown)!=null&&P.collections?(i(),o(t(g),{key:7,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"search"}),l(" "+u(e.resourceBreakdown.collections),1)]),_:2},1024)):v("",!0),e.resourcesCount?v("",!0):(i(),o(t(x),{key:8,tone:"muted",size:"xs"},{default:s(()=>[...r[5]||(r[5]=[l(" none ",-1)])]),_:1}))]}),_:2},1024)]),"cell-lastUpdated":s(({row:e})=>[l(u(te(Number(e.lastUpdated))),1)]),"cell-actions":s(({row:e})=>[n(t(h),{direction:"horizontal",gap:"0.375rem",justify:"flex-end",wrap:""},{default:s(()=>[n(t(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(()=>[...r[6]||(r[6]=[l(" Start ",-1)])]),_:1},8,["disabled","loading","onClick"]),n(t(B),{size:"sm",variant:"soft",disabled:e.status!=="running"||y.value[String(e.name)],loading:y.value[String(e.name)],onClick:$=>W(String(e.name))},{default:s(()=>[...r[7]||(r[7]=[l(" Stop ",-1)])]),_:1},8,["disabled","loading","onClick"]),n(t(B),{size:"sm",variant:"ghost",onClick:$=>X(String(e.name))},{default:s(()=>[...r[8]||(r[8]=[l(" Logs ",-1)])]),_:1},8,["onClick"]),n(t(B),{size:"sm",variant:"danger",onClick:$=>Z(String(e.name))},{default:s(()=>[...r[9]||(r[9]=[l(" Delete ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),o(t(ie),{key:1,title:"No services registered",description:"Register your first microservice using the form above."})),n(t(ce),{open:N.value,"onUpdate:open":r[1]||(r[1]=e=>N.value=e),title:b.value?`Logs — ${b.value}`:"Logs",description:b.value?`Status: ${F.value}`:"",size:"lg"},{default:s(()=>[n(t(ve),{code:D.value.join(`
|
|
2
|
+
`)||"— no output yet —",label:"Service log","max-block-size":"60vh",wrap:"",copyable:""},null,8,["code"])]),_:1},8,["open","title","description"]),n(t(fe),{open:L.value,"onUpdate:open":r[2]||(r[2]=e=>L.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}))}}),Se=G({__name:"ServicesPage",setup(H){return(c,z)=>(i(),o(ye))}});export{Se as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as me,l as fe,e as E,a4 as n,$ as a,t as f,a as L,n as M,m as v,j as t,s as Z,u as b,i as r,v as N,_ as c,f as D,C as W,w as U,O as H,x as ge,D as $,M as s,N as u,U as G,p as be,Z as S,X as R,g as J,F as Q,r as pe,b as Y,c as ve}from"./index-DGsXIPJ-.js";const he=me({__name:"SettingsPage",setup(ce){const q=ve(),p=M(null),K=M(!0),z=M(!1),F=M(!1),k=M(null),w=M([]),C=M([]),_=[{value:"localstack",label:"LocalStack"},{value:"self",label:"Self engine"}],ee=[{value:"managed",label:"Managed"},{value:"external",label:"External"}],le=[{value:"community",label:"Community"},{value:"pro",label:"Pro"}],ae=[{value:"auto",label:"Auto"},{value:"artifact",label:"Artifact"},{value:"source",label:"Source"}],te=[{value:"default",label:"Mode default (source → on, artifact → off)"},{value:"on",label:"On"},{value:"off",label:"Off"}],oe=[{value:"dark",label:"Dark"},{value:"light",label:"Light"}],l=pe({serverPort:3100,region:"us-east-1",persistence:!0,debug:!1,engine:"localstack",mode:"managed",edition:"community",version:"",image:"",endpoint:"",localstackPort:4566,aossEnabled:!0,aossPort:14567,sePort:14566,seAccount:"000000000000",seMemoryBudgetMb:128,seIdleUnloadMs:3e5,seFsync:!1,seFallback:"",proxyEnabled:!1,proxyPort:8e3,lrEnabled:!0,lrExecution:"auto",lrWatch:"default",lrInvokePortOffset:1e4,lrInvokeHost:"",autoPackage:!1,packageCommand:"",packageTimeoutMs:3e5,seedsDir:"",servicesCsv:"",brTitle:"",brSubtitle:"",brTheme:"dark"});let j=null;function A(){return{...l}}function B(i){p.value=i,l.serverPort=i.serverPort,l.region=i.region,l.persistence=i.persistence,l.debug=i.debug,l.engine=i.engine.kind,l.mode=i.localstack.mode,l.edition=i.localstack.edition,l.version=i.localstack.version,l.image=i.localstack.image,l.endpoint=i.localstack.endpoint,l.localstackPort=i.localstack.port,l.aossEnabled=i.aossSidecar.enabled,l.aossPort=i.aossSidecar.port,l.sePort=i.selfEngine.port,l.seAccount=i.selfEngine.account,l.seMemoryBudgetMb=i.selfEngine.memoryBudgetMb,l.seIdleUnloadMs=i.selfEngine.idleUnloadMs,l.seFsync=i.selfEngine.fsync,l.seFallback=i.selfEngine.fallbackEndpoint||"",l.proxyEnabled=i.dynamoProxy.enabled,l.proxyPort=i.dynamoProxy.port,l.lrEnabled=i.lambdaRuntime.enabled,l.lrExecution=i.lambdaRuntime.execution,l.lrWatch=i.lambdaRuntime.watch===null?"default":i.lambdaRuntime.watch?"on":"off",l.lrInvokePortOffset=i.lambdaRuntime.invokePortOffset,l.lrInvokeHost=i.lambdaRuntime.invokeHost,l.autoPackage=i.autoPackage,l.packageCommand=i.packageCommand,l.packageTimeoutMs=i.packageTimeoutMs,l.seedsDir=i.seedsDir,l.servicesCsv=i.services.join(", "),l.brTitle=i.branding.title,l.brSubtitle=i.branding.subtitle,l.brTheme=i.branding.defaultTheme,j=A()}const X=Y(()=>{if(!j)return[];const i=A();return Object.keys(i).filter(e=>i[e]!==j[e])}),I=Y(()=>X.value.length);function ne(i){var e;return!!((e=p.value)!=null&&e.envOverrides.includes(i))}function d(i,e){return ne(i)?"Masked by an environment variable — the saved file value will not take effect until it is unset":e}function ie(){const i=[],e=new Set(X.value),o={},m=(V,O)=>{const P=Number(V);return(!Number.isInteger(P)||P<1||P>65535)&&i.push(`${O} must be an integer port between 1 and 65535`),P},h=(V,O)=>{const P=Number(V);return(!Number.isInteger(P)||P<=0)&&i.push(`${O} must be a positive integer`),P},g=V=>V.trim()||null;if(e.has("serverPort")&&(o.serverPort=m(l.serverPort,"Server port")),e.has("region")&&(o.region=l.region),e.has("persistence")&&(o.persistence=l.persistence),e.has("debug")&&(o.debug=l.debug),e.has("engine")&&(o.engine=l.engine),e.has("mode")&&(o.mode=l.mode),e.has("edition")&&(o.localstackEdition=l.edition),e.has("version")&&(o.localstackVersion=g(l.version)),e.has("image")&&(o.localstackImage=g(l.image)),e.has("endpoint")&&(o.localstackEndpoint=g(l.endpoint)),e.has("localstackPort")&&(o.localstackPort=m(l.localstackPort,"LocalStack port")),e.has("proxyEnabled")&&(o.enableDynamoProxy=l.proxyEnabled),e.has("proxyPort")&&(o.dynamoProxyPort=m(l.proxyPort,"Dynamo proxy port")),e.has("autoPackage")&&(o.autoPackage=l.autoPackage),e.has("packageCommand")&&(o.packageCommand=g(l.packageCommand)),e.has("packageTimeoutMs")&&(o.packageTimeoutMs=h(l.packageTimeoutMs,"Package timeout")),e.has("seedsDir")&&(o.seedsDir=g(l.seedsDir)),e.has("servicesCsv")){const V=l.servicesCsv.split(",").map(O=>O.trim()).filter(Boolean);o.services=V.length?V:null}(e.has("aossEnabled")||e.has("aossPort"))&&(o.aossSidecar={...e.has("aossEnabled")?{enabled:l.aossEnabled}:{},...e.has("aossPort")?{port:m(l.aossPort,"aoss sidecar port")}:{}});const y={};e.has("sePort")&&(y.port=m(l.sePort,"Self engine port")),e.has("seAccount")&&(l.seAccount.trim()||i.push("Self engine account cannot be empty"),y.account=l.seAccount.trim()),e.has("seMemoryBudgetMb")&&(y.memoryBudgetMb=h(l.seMemoryBudgetMb,"Memory budget")),e.has("seIdleUnloadMs")&&(y.idleUnloadMs=h(l.seIdleUnloadMs,"Idle unload")),e.has("seFsync")&&(y.fsync=l.seFsync),e.has("seFallback")&&(y.fallbackEndpoint=g(l.seFallback)),Object.keys(y).length&&(o.selfEngine=y);const x={};e.has("lrEnabled")&&(x.enabled=l.lrEnabled),e.has("lrExecution")&&(x.execution=l.lrExecution),e.has("lrWatch")&&(x.watch=l.lrWatch==="default"?null:l.lrWatch==="on"),e.has("lrInvokePortOffset")&&(x.invokePortOffset=h(l.lrInvokePortOffset,"Invoke port offset")),e.has("lrInvokeHost")&&(x.invokeHost=g(l.lrInvokeHost)),Object.keys(x).length&&(o.lambdaRuntime=x);const T={};return e.has("brTitle")&&(T.title=g(l.brTitle)),e.has("brSubtitle")&&(T.subtitle=g(l.brSubtitle)),e.has("brTheme")&&(T.defaultTheme=l.brTheme),Object.keys(T).length&&(o.branding=T),{patch:o,errors:i}}async function se(){try{B(await L.getConfig())}catch(i){k.value=i instanceof Error?i.message:"Failed to load configuration"}finally{K.value=!1}}async function re(){const{patch:i,errors:e}=ie();if(e.length){k.value=e.join("; ");return}z.value=!0,k.value=null;const o=A();try{const m=await L.updateConfig(i),h=A();B(m.config),Object.keys(h).forEach(g=>{h[g]!==o[g]&&(l[g]=h[g])}),w.value=m.restartRequired,C.value=m.envOverridden,q.add({title:"Configuration saved",description:`Written to ${m.configPath} — review and commit the diff`,variant:"success"})}catch(m){k.value=m instanceof Error?m.message:"Failed to save configuration"}finally{z.value=!1}}async function de(){F.value=!0,k.value=null;try{const i=await L.reloadConfig();B(i.config),w.value=i.restartRequired,C.value=[],q.add({title:"Configuration reloaded from disk",description:i.configPath||"No config file found — defaults applied",variant:"success"})}catch(i){k.value=i instanceof Error?i.message:"Failed to reload configuration"}finally{F.value=!1}}function ue(){p.value&&B(p.value)}return fe(se),(i,e)=>(v(),E(a(f),{direction:"vertical",gap:"1.5rem"},{default:n(()=>[t(a(U),{variant:"outline"},{default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(f),{direction:"horizontal",justify:"space-between",align:"center",wrap:"",gap:"0.75rem"},{default:n(()=>[t(a(f),{direction:"horizontal",gap:"0.75rem",align:"center"},{default:n(()=>[t(a(Z),{name:"settings"}),t(a(f),{direction:"vertical",gap:"0.125rem"},{default:n(()=>[t(a(b),{size:"xl",weight:"semibold"},{default:n(()=>[...e[37]||(e[37]=[r("Settings",-1)])]),_:1}),t(a(b),{tone:"muted",size:"sm"},{default:n(()=>[...e[38]||(e[38]=[r(" Saved straight into the config file — review and commit the diff yourself. ",-1)])]),_:1})]),_:1})]),_:1}),t(a(f),{direction:"horizontal",gap:"0.5rem",align:"center",wrap:""},{default:n(()=>[I.value?(v(),E(a(N),{key:0,tone:"warning",variant:"soft"},{default:n(()=>[r(c(I.value)+" unsaved change"+c(I.value>1?"s":""),1)]),_:1})):D("",!0),t(a(W),{size:"sm",variant:"outline",loading:F.value,onClick:de},{icon:n(()=>[t(a(Z),{name:"refresh-cw"})]),default:n(()=>[e[39]||(e[39]=r(" Reload from disk ",-1))]),_:1},8,["loading"]),t(a(W),{size:"sm",variant:"ghost",disabled:!I.value||z.value,onClick:ue},{default:n(()=>[...e[40]||(e[40]=[r(" Discard ",-1)])]),_:1},8,["disabled"]),t(a(W),{size:"sm",variant:"solid",loading:z.value,disabled:!I.value,onClick:re},{default:n(()=>[...e[41]||(e[41]=[r(" Save changes ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),t(a(b),{tone:"muted",size:"xs",family:"mono"},{default:n(()=>{var o,m;return[r(c(((o=p.value)==null?void 0:o.configPath)||`No config file loaded — saving creates lss.config.json in ${((m=p.value)==null?void 0:m.projectRoot)||"the project root"}`),1)]}),_:1})]),_:1})]),_:1}),k.value?(v(),E(a(H),{key:0,variant:"danger",dismissible:"",onDismiss:e[0]||(e[0]=o=>k.value=null)},{default:n(()=>[r(c(k.value),1)]),_:1})):D("",!0),w.value.length?(v(),E(a(H),{key:1,variant:"warning",dismissible:"",onDismiss:e[1]||(e[1]=o=>w.value=[])},{default:n(()=>[r(" Restart required to apply: "+c(w.value.join(", "))+" — these values are locked in at boot. Run ",1),t(a(b),{family:"mono"},{default:n(()=>[...e[42]||(e[42]=[r("lss stop && lss start",-1)])]),_:1}),e[43]||(e[43]=r(' (or the "restart (rebuild local)" VSCode task). ',-1))]),_:1})):D("",!0),C.value.length?(v(),E(a(H),{key:2,variant:"info",dismissible:"",onDismiss:e[2]||(e[2]=o=>C.value=[])},{default:n(()=>[r(" Saved to the file, but masked by environment variables right now: "+c(C.value.join(", "))+". The env value keeps winning until it is unset. ",1)]),_:1})):D("",!0),K.value?(v(),E(a(f),{key:3,direction:"horizontal",justify:"center",align:"center"},{default:n(()=>[t(a(ge),{label:"Loading configuration..."})]),_:1})):p.value?(v(),E(a($),{key:4,columns:2,gap:"1rem"},{default:n(()=>[t(a(U),{variant:"outline"},{header:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[44]||(e[44]=[r("Server",-1)])]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Server port",hint:d("serverPort","Dashboard + REST API (default 3100)")},{default:n(()=>[t(a(u),{modelValue:l.serverPort,"onUpdate:modelValue":e[3]||(e[3]=o=>l.serverPort=o),modelModifiers:{number:!0},type:"number",min:"1",max:"65535"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Default region",hint:d("region","Used by provisioning, seeds and the explorers")},{default:n(()=>[t(a(G),{modelValue:l.region,"onUpdate:modelValue":e[4]||(e[4]=o=>l.region=o),options:a(be)},null,8,["modelValue","options"])]),_:1},8,["hint"]),t(a(s),{label:"Persistence",hint:d("persistence","Keep engine data between restarts")},{default:n(()=>[t(a(S),{modelValue:l.persistence,"onUpdate:modelValue":e[5]||(e[5]=o=>l.persistence=o)},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Debug",hint:d("debug","Verbose engine logging")},{default:n(()=>[t(a(S),{modelValue:l.debug,"onUpdate:modelValue":e[6]||(e[6]=o=>l.debug=o)},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Seeds directory",hint:d("seedsDir","DynamoDB seed files — blank restores ./seeds")},{default:n(()=>[t(a(u),{modelValue:l.seedsDir,"onUpdate:modelValue":e[7]||(e[7]=o=>l.seedsDir=o),placeholder:"./seeds"},null,8,["modelValue"])]),_:1},8,["hint"])]),_:1})]),_:1}),t(a(U),{variant:"outline"},{header:n(()=>[t(a(f),{direction:"horizontal",justify:"space-between",align:"center"},{default:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[45]||(e[45]=[r("Engine",-1)])]),_:1}),t(a(N),{tone:"info",variant:"soft"},{default:n(()=>[r(c(p.value.engine.kind),1)]),_:1})]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Engine",hint:d("engine","Self engine needs no Docker; LocalStack needs it")},{default:n(()=>[t(a(R),{modelValue:l.engine,"onUpdate:modelValue":e[8]||(e[8]=o=>l.engine=o),options:_,size:"md"},null,8,["modelValue"])]),_:1},8,["hint"]),l.engine==="self"?(v(),J(Q,{key:0},[t(a($),{columns:2,gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Port",hint:d("selfEngine","Default 14566")},{default:n(()=>[t(a(u),{modelValue:l.sePort,"onUpdate:modelValue":e[9]||(e[9]=o=>l.sePort=o),modelModifiers:{number:!0},type:"number",min:"1",max:"65535"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Account id",hint:"Used in every ARN"},{default:n(()=>[t(a(u),{modelValue:l.seAccount,"onUpdate:modelValue":e[10]||(e[10]=o=>l.seAccount=o),placeholder:"000000000000"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Memory budget (MB)",hint:"LRU cap for hydrated data"},{default:n(()=>[t(a(u),{modelValue:l.seMemoryBudgetMb,"onUpdate:modelValue":e[11]||(e[11]=o=>l.seMemoryBudgetMb=o),modelModifiers:{number:!0},type:"number",min:"1"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Idle unload (ms)",hint:"Dehydrate idle stores after"},{default:n(()=>[t(a(u),{modelValue:l.seIdleUnloadMs,"onUpdate:modelValue":e[12]||(e[12]=o=>l.seIdleUnloadMs=o),modelModifiers:{number:!0},type:"number",min:"1"},null,8,["modelValue"])]),_:1})]),_:1}),t(a(s),{label:"fsync every WAL flush",hint:"Paranoid durability — slower writes"},{default:n(()=>[t(a(S),{modelValue:l.seFsync,"onUpdate:modelValue":e[13]||(e[13]=o=>l.seFsync=o)},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Fallback endpoint",hint:"Proxy unimplemented AWS calls here — blank disables"},{default:n(()=>[t(a(u),{modelValue:l.seFallback,"onUpdate:modelValue":e[14]||(e[14]=o=>l.seFallback=o),placeholder:"http://localhost:4566"},null,8,["modelValue"])]),_:1}),t(a(b),{tone:"muted",size:"xs",family:"mono"},{default:n(()=>[r("Data dir: "+c(p.value.selfEngine.dataDir),1)]),_:1})],64)):(v(),J(Q,{key:1},[t(a(s),{label:"Mode",hint:d("mode","Managed: LSS runs the container; external: you do")},{default:n(()=>[t(a(R),{modelValue:l.mode,"onUpdate:modelValue":e[15]||(e[15]=o=>l.mode=o),options:ee,size:"md"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a($),{columns:2,gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Edition",hint:d("localstackEdition","Pro requires an auth token")},{default:n(()=>[t(a(R),{modelValue:l.edition,"onUpdate:modelValue":e[16]||(e[16]=o=>l.edition=o),options:le,size:"md"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Version",hint:d("localstackVersion","Image tag — blank restores latest")},{default:n(()=>[t(a(u),{modelValue:l.version,"onUpdate:modelValue":e[17]||(e[17]=o=>l.version=o),placeholder:"latest"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Edge port",hint:d("localstackPort","Default 4566")},{default:n(()=>[t(a(u),{modelValue:l.localstackPort,"onUpdate:modelValue":e[18]||(e[18]=o=>l.localstackPort=o),modelModifiers:{number:!0},type:"number",min:"1",max:"65535"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Endpoint override",hint:d("localstackEndpoint","Blank derives from the port")},{default:n(()=>[t(a(u),{modelValue:l.endpoint,"onUpdate:modelValue":e[19]||(e[19]=o=>l.endpoint=o),placeholder:"http://localhost:4566"},null,8,["modelValue"])]),_:1},8,["hint"])]),_:1}),t(a(s),{label:"Image override",hint:d("localstackImage","Wins over edition + version — blank derives")},{default:n(()=>[t(a(u),{modelValue:l.image,"onUpdate:modelValue":e[20]||(e[20]=o=>l.image=o),placeholder:"localstack/localstack:latest"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"LocalStack services",hint:d("services","Comma-separated SERVICES env — blank restores the default list")},{default:n(()=>[t(a(u),{modelValue:l.servicesCsv,"onUpdate:modelValue":e[21]||(e[21]=o=>l.servicesCsv=o),placeholder:"dynamodb, sqs, sns, s3, lambda, events"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(f),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:n(()=>[t(a(N),{tone:p.value.localstack.hasAuthToken?"success":"neutral",variant:"soft"},{default:n(()=>[r(" Auth token "+c(p.value.localstack.hasAuthToken?"set":"not set"),1)]),_:1},8,["tone"]),t(a(b),{tone:"muted",size:"xs"},{default:n(()=>[...e[46]||(e[46]=[r(" Set via the LOCALSTACK_AUTH_TOKEN env var — never editable here. ",-1)])]),_:1})]),_:1})],64))]),_:1})]),_:1}),t(a(U),{variant:"outline"},{header:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[47]||(e[47]=[r("Lambda runtime",-1)])]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Enabled",hint:d("lambdaRuntime","Runtime + gateway/invoke listeners (serverless-offline replacement)")},{default:n(()=>[t(a(S),{modelValue:l.lrEnabled,"onUpdate:modelValue":e[22]||(e[22]=o=>l.lrEnabled=o)},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Execution",hint:"How handler code is loaded"},{default:n(()=>[t(a(R),{modelValue:l.lrExecution,"onUpdate:modelValue":e[23]||(e[23]=o=>l.lrExecution=o),options:ae,size:"md"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Watch & hot reload",hint:"Restart workers on source changes"},{default:n(()=>[t(a(G),{modelValue:l.lrWatch,"onUpdate:modelValue":e[24]||(e[24]=o=>l.lrWatch=o),options:te},null,8,["modelValue"])]),_:1}),t(a($),{columns:2,gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Invoke port offset",hint:"apiPort + offset = invoke port"},{default:n(()=>[t(a(u),{modelValue:l.lrInvokePortOffset,"onUpdate:modelValue":e[25]||(e[25]=o=>l.lrInvokePortOffset=o),modelModifiers:{number:!0},type:"number",min:"1"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Invoke host",hint:"Blank restores the engine default"},{default:n(()=>[t(a(u),{modelValue:l.lrInvokeHost,"onUpdate:modelValue":e[26]||(e[26]=o=>l.lrInvokeHost=o),placeholder:"host.docker.internal"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1}),t(a(U),{variant:"outline"},{header:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[48]||(e[48]=[r("Sidecars & proxy",-1)])]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"OpenSearch Serverless sidecar",hint:"aoss served in-process on LocalStack engines"},{default:n(()=>[t(a(S),{modelValue:l.aossEnabled,"onUpdate:modelValue":e[27]||(e[27]=o=>l.aossEnabled=o)},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Sidecar port",hint:"Default 14567"},{default:n(()=>[t(a(u),{modelValue:l.aossPort,"onUpdate:modelValue":e[28]||(e[28]=o=>l.aossPort=o),modelModifiers:{number:!0},type:"number",min:"1",max:"65535",disabled:!l.aossEnabled},null,8,["modelValue","disabled"])]),_:1}),t(a(s),{label:"DynamoDB proxy",hint:d("enableDynamoProxy","For tools that expect DynamoDB on a fixed port")},{default:n(()=>[t(a(S),{modelValue:l.proxyEnabled,"onUpdate:modelValue":e[29]||(e[29]=o=>l.proxyEnabled=o)},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Proxy port",hint:d("dynamoProxyPort","Default 8000")},{default:n(()=>[t(a(u),{modelValue:l.proxyPort,"onUpdate:modelValue":e[30]||(e[30]=o=>l.proxyPort=o),modelModifiers:{number:!0},type:"number",min:"1",max:"65535",disabled:!l.proxyEnabled},null,8,["modelValue","disabled"])]),_:1},8,["hint"])]),_:1})]),_:1}),t(a(U),{variant:"outline"},{header:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[49]||(e[49]=[r("Packaging",-1)])]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Auto-package",hint:d("autoPackage","Run the package command when a template is missing at /register")},{default:n(()=>[t(a(S),{modelValue:l.autoPackage,"onUpdate:modelValue":e[31]||(e[31]=o=>l.autoPackage=o)},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Package command",hint:d("packageCommand","Blank restores npx serverless package")},{default:n(()=>[t(a(u),{modelValue:l.packageCommand,"onUpdate:modelValue":e[32]||(e[32]=o=>l.packageCommand=o),placeholder:"npx serverless package"},null,8,["modelValue"])]),_:1},8,["hint"]),t(a(s),{label:"Package timeout (ms)",hint:d("packageTimeoutMs","Default 300000 (5 min)")},{default:n(()=>[t(a(u),{modelValue:l.packageTimeoutMs,"onUpdate:modelValue":e[33]||(e[33]=o=>l.packageTimeoutMs=o),modelModifiers:{number:!0},type:"number",min:"1"},null,8,["modelValue"])]),_:1},8,["hint"]),Object.keys(p.value.servicePackaging).length?(v(),E(a(b),{key:0,tone:"muted",size:"xs"},{default:n(()=>[r(" Per-service overrides ("+c(Object.keys(p.value.servicePackaging).join(", "))+") are file-only — edit servicePackaging in the config. ",1)]),_:1})):D("",!0)]),_:1})]),_:1}),t(a(U),{variant:"outline"},{header:n(()=>[t(a(b),{weight:"semibold"},{default:n(()=>[...e[50]||(e[50]=[r("Branding",-1)])]),_:1})]),default:n(()=>[t(a(f),{direction:"vertical",gap:"0.75rem"},{default:n(()=>[t(a(s),{label:"Title",hint:"Navbar + browser tab — blank restores the default"},{default:n(()=>[t(a(u),{modelValue:l.brTitle,"onUpdate:modelValue":e[34]||(e[34]=o=>l.brTitle=o),placeholder:"Local Serverless Stack"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Subtitle",hint:"Line under the title — blank restores the default"},{default:n(()=>[t(a(u),{modelValue:l.brSubtitle,"onUpdate:modelValue":e[35]||(e[35]=o=>l.brSubtitle=o),placeholder:"Local development control plane"},null,8,["modelValue"])]),_:1}),t(a(s),{label:"Default theme",hint:"Until the user picks one in the UI"},{default:n(()=>[t(a(R),{modelValue:l.brTheme,"onUpdate:modelValue":e[36]||(e[36]=o=>l.brTheme=o),options:oe,size:"md"},null,8,["modelValue"])]),_:1}),t(a(b),{tone:"muted",size:"xs"},{default:n(()=>[...e[51]||(e[51]=[r(" Logo, favicon and color tokens are file-only — edit the branding block in the config. ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})):D("",!0)]),_:1}))}});export{he as default};
|