local-serverless-stack 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/client/index.d.ts +7 -0
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +6 -0
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/namespaces/apis.d.ts +48 -0
  7. package/dist/client/namespaces/apis.d.ts.map +1 -0
  8. package/dist/client/namespaces/apis.js +12 -0
  9. package/dist/client/namespaces/apis.js.map +1 -0
  10. package/dist/client/namespaces/lambdas.d.ts +61 -0
  11. package/dist/client/namespaces/lambdas.d.ts.map +1 -0
  12. package/dist/client/namespaces/lambdas.js +13 -0
  13. package/dist/client/namespaces/lambdas.js.map +1 -0
  14. package/dist/client/namespaces/services.d.ts +40 -0
  15. package/dist/client/namespaces/services.d.ts.map +1 -1
  16. package/dist/client/namespaces/services.js +3 -0
  17. package/dist/client/namespaces/services.js.map +1 -1
  18. package/dist/client/types.d.ts +2 -0
  19. package/dist/client/types.d.ts.map +1 -1
  20. package/dist/server/index.js +25 -2
  21. package/dist/server/index.js.map +1 -1
  22. package/dist/server/routes/apis.d.ts +3 -0
  23. package/dist/server/routes/apis.d.ts.map +1 -0
  24. package/dist/server/routes/apis.js +54 -0
  25. package/dist/server/routes/apis.js.map +1 -0
  26. package/dist/server/routes/lambdas.d.ts +3 -0
  27. package/dist/server/routes/lambdas.d.ts.map +1 -0
  28. package/dist/server/routes/lambdas.js +85 -0
  29. package/dist/server/routes/lambdas.js.map +1 -0
  30. package/dist/server/routes/services.d.ts.map +1 -1
  31. package/dist/server/routes/services.js +91 -78
  32. package/dist/server/routes/services.js.map +1 -1
  33. package/dist/server/runtime/runtime-worker.d.ts +2 -0
  34. package/dist/server/runtime/runtime-worker.d.ts.map +1 -0
  35. package/dist/server/runtime/runtime-worker.js +207 -0
  36. package/dist/server/runtime/runtime-worker.js.map +1 -0
  37. package/dist/server/services/api-gateway-events.d.ts +44 -0
  38. package/dist/server/services/api-gateway-events.d.ts.map +1 -0
  39. package/dist/server/services/api-gateway-events.js +299 -0
  40. package/dist/server/services/api-gateway-events.js.map +1 -0
  41. package/dist/server/services/authorizer-service.d.ts +25 -0
  42. package/dist/server/services/authorizer-service.d.ts.map +1 -0
  43. package/dist/server/services/authorizer-service.js +0 -0
  44. package/dist/server/services/authorizer-service.js.map +1 -0
  45. package/dist/server/services/cache-manager.d.ts +6 -0
  46. package/dist/server/services/cache-manager.d.ts.map +1 -1
  47. package/dist/server/services/cache-manager.js.map +1 -1
  48. package/dist/server/services/config-manager.d.ts +57 -0
  49. package/dist/server/services/config-manager.d.ts.map +1 -1
  50. package/dist/server/services/config-manager.js +78 -0
  51. package/dist/server/services/config-manager.js.map +1 -1
  52. package/dist/server/services/function-registry.d.ts +33 -0
  53. package/dist/server/services/function-registry.d.ts.map +1 -0
  54. package/dist/server/services/function-registry.js +100 -0
  55. package/dist/server/services/function-registry.js.map +1 -0
  56. package/dist/server/services/gateway-manager.d.ts +31 -0
  57. package/dist/server/services/gateway-manager.d.ts.map +1 -0
  58. package/dist/server/services/gateway-manager.js +292 -0
  59. package/dist/server/services/gateway-manager.js.map +1 -0
  60. package/dist/server/services/lambda-runtime-manager.d.ts +52 -0
  61. package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -0
  62. package/dist/server/services/lambda-runtime-manager.js +326 -0
  63. package/dist/server/services/lambda-runtime-manager.js.map +1 -0
  64. package/dist/server/services/localstack-manager.d.ts.map +1 -1
  65. package/dist/server/services/localstack-manager.js +9 -0
  66. package/dist/server/services/localstack-manager.js.map +1 -1
  67. package/dist/server/services/serverless-packager.d.ts +1 -0
  68. package/dist/server/services/serverless-packager.d.ts.map +1 -1
  69. package/dist/server/services/serverless-packager.js +12 -5
  70. package/dist/server/services/serverless-packager.js.map +1 -1
  71. package/dist/server/services/serverless-state-parser.d.ts +86 -0
  72. package/dist/server/services/serverless-state-parser.d.ts.map +1 -0
  73. package/dist/server/services/serverless-state-parser.js +245 -0
  74. package/dist/server/services/serverless-state-parser.js.map +1 -0
  75. package/dist/server/services/service-registrar.d.ts +34 -0
  76. package/dist/server/services/service-registrar.d.ts.map +1 -0
  77. package/dist/server/services/service-registrar.js +262 -0
  78. package/dist/server/services/service-registrar.js.map +1 -0
  79. package/dist/server/services/source-watcher.d.ts +24 -0
  80. package/dist/server/services/source-watcher.d.ts.map +1 -0
  81. package/dist/server/services/source-watcher.js +101 -0
  82. package/dist/server/services/source-watcher.js.map +1 -0
  83. package/dist/ui/assets/ApisPage-DdgKjEdS.js +1 -0
  84. package/dist/ui/assets/{BucketDetailPage-Hg4Gg3jC.js → BucketDetailPage-DZQGxm0y.js} +1 -1
  85. package/dist/ui/assets/{BucketsPage-BHkg7TQp.js → BucketsPage-xYXzxCvd.js} +1 -1
  86. package/dist/ui/assets/{DynamoPage-CH_TgPh_.js → DynamoPage-B1__Rjr2.js} +1 -1
  87. package/dist/ui/assets/{DynamoTablePage-BPvl5y6_.js → DynamoTablePage-BCoxPdXW.js} +1 -1
  88. package/dist/ui/assets/LambdaDetailPage-B85CA8tb.js +4 -0
  89. package/dist/ui/assets/LambdasPage-_TtxQMT_.js +1 -0
  90. package/dist/ui/assets/{OverviewPage-CwLnw4VW.css → OverviewPage-6jDXV1jr.css} +1 -1
  91. package/dist/ui/assets/OverviewPage-CqTKTY64.js +1 -0
  92. package/dist/ui/assets/{QueueDetailPage-DHDPgRDc.js → QueueDetailPage-BOr_sImA.js} +1 -1
  93. package/dist/ui/assets/{QueuesPage-D5YcEbUU.js → QueuesPage-DpByfcM5.js} +1 -1
  94. package/dist/ui/assets/{ServiceDetailPage-DxJ0t7HQ.js → ServiceDetailPage-DsWgV-ad.js} +1 -1
  95. package/dist/ui/assets/{ServicesPage-DWDaaOz9.js → ServicesPage-CGlpsj98.js} +1 -1
  96. package/dist/ui/assets/{index-D3WwZ4lY.js → index-BWlB542w.js} +11 -11
  97. package/dist/ui/index.html +1 -1
  98. package/package.json +2 -2
  99. package/packages/serverless-plugin/README.md +21 -3
  100. package/packages/serverless-plugin/dist/index.js +8 -3
  101. package/packages/serverless-plugin/dist/index.js.map +1 -1
  102. package/dist/ui/assets/OverviewPage-nhomNDqx.js +0 -1
@@ -5,7 +5,7 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>LSS Orchestrator</title>
8
- <script type="module" crossorigin src="/assets/index-D3WwZ4lY.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BWlB542w.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-EYnsoJOq.css">
10
10
  </head>
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-serverless-stack",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Local control plane for serverless development with LocalStack orchestration",
5
5
  "author": "LSS Contributors",
6
6
  "license": "MIT",
@@ -101,7 +101,7 @@
101
101
  "typescript-eslint": "^8.53.1"
102
102
  },
103
103
  "engines": {
104
- "node": ">=18.0.0"
104
+ "node": ">=20.0.0"
105
105
  },
106
106
  "repository": {
107
107
  "type": "git",
@@ -28,15 +28,33 @@ custom:
28
28
 
29
29
  After running `sls package` or `sls deploy`:
30
30
 
31
- 1. The plugin reads your CloudFormation template from `.serverless/`
32
- 2. Sends a registration request to the Orchestrator
33
- 3. The Orchestrator provisions resources (DynamoDB, SQS, SNS) to LocalStack
31
+ 1. The plugin sends a registration request to the Orchestrator (service path, ports, region)
32
+ 2. The Orchestrator reads the `sls package` artifacts from `.serverless/` (CloudFormation template + `serverless-state.json`)
33
+ 3. It provisions resources (DynamoDB, SQS, SNS, S3) to LocalStack
34
+ 4. It registers the service's Lambda functions, HTTP routes and authorizers, starts a runtime worker, and binds the service's API port (30xx) and Lambda-invoke port (130xx) — replacing `serverless-offline`
34
35
 
35
36
  ## Configuration Options
36
37
 
37
38
  - `enabled` (boolean, default: `true`): Enable/disable the plugin
38
39
  - `orchestratorUrl` (string, default: `http://localhost:3100`): Orchestrator API endpoint
39
40
 
41
+ ### Service ports
42
+
43
+ The plugin reports which ports LSS should serve the service on:
44
+
45
+ ```yaml
46
+ custom:
47
+ lss: # preferred — explicit LSS ports
48
+ apiPort: 3010 # API Gateway emulator (HTTP routes)
49
+ invokePort: 13010 # AWS Lambda Invoke API
50
+ serverless-offline: # fallback — drop-in for services already using offline
51
+ httpPort: 3010
52
+ lambdaPort: 13010
53
+ ```
54
+
55
+ If only `apiPort` is known, the orchestrator derives `invokePort = apiPort + 10000`
56
+ (configurable via `lambdaRuntime.invokePortOffset`).
57
+
40
58
  ### Example with custom config:
41
59
 
42
60
  ```yaml
@@ -63,9 +63,13 @@ class ServerlessOrchestratorPlugin {
63
63
  const servicePath = this.serverless.config.servicePath;
64
64
  const serviceName = this.serverless.service?.service || this.serverless.config.service || 'unknown';
65
65
  const region = this.serverless.service?.provider?.region; // Don't use fallback, let orchestrator handle it
66
- // Extract invoke port from serverless-offline configuration
67
- const serverlessOfflineConfig = this.serverless.service?.custom?.['serverless-offline'];
68
- const invokePort = serverlessOfflineConfig?.lambdaPort;
66
+ // Port discovery: custom.lss wins; custom.serverless-offline keeps drop-in
67
+ // compatibility for services already configured for offline (httpPort →
68
+ // apiPort, lambdaPort → invokePort).
69
+ const lssConfig = this.serverless.service?.custom?.lss || {};
70
+ const serverlessOfflineConfig = this.serverless.service?.custom?.['serverless-offline'] || {};
71
+ const invokePort = lssConfig.invokePort ?? serverlessOfflineConfig.lambdaPort;
72
+ const apiPort = lssConfig.apiPort ?? serverlessOfflineConfig.httpPort;
69
73
  if (region) {
70
74
  this.log(`Registering service "${serviceName}" (region: ${region} from Serverless Framework) with orchestrator at ${this.orchestratorUrl}...`, 'info');
71
75
  }
@@ -81,6 +85,7 @@ class ServerlessOrchestratorPlugin {
81
85
  body: JSON.stringify({
82
86
  servicePath,
83
87
  invokePort,
88
+ ...(apiPort !== undefined && { apiPort }),
84
89
  ...(region && { region }), // Only include region if defined in Serverless Framework
85
90
  }),
86
91
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AA2B1B,MAAM,4BAA4B;IACxB,UAAU,CAAqB;IAC/B,eAAe,CAAS;IACxB,OAAO,CAAU;IAClB,KAAK,CAAsC;IAElD,YAAY,UAA8B,EAAE,UAAyB,EAAE;QACrE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;QAEhF,oDAAoD;QACpD,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,uBAAuB;YACxC,GAAG,YAAY;YACf,GAAG,OAAO;SACM,CAAC;QAEnB,8EAA8E;QAC9E,2EAA2E;QAC3E,mEAAmE;QACnE,uEAAuE;QACvE,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACxD,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC1C,MAAM,CAAC,eAAe,GAAG,oBAAoB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,OAAO,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAgB,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;QAExC,IAAI,CAAC,KAAK,GAAG;YACX,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClE,mEAAmE;YACnE,sBAAsB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChE,2BAA2B,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;SACtE,CAAC;IACJ,CAAC;IAEO,GAAG,CAAC,OAAe,EAAE,OAAqC,MAAM;QACtE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAElD,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,gBAAgB,GAAG,eAAK,CAAC,KAAK,CAAC,MAAM,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC9D,MAAM;YACR,KAAK,OAAO;gBACV,gBAAgB,GAAG,eAAK,CAAC,GAAG,CAAC,MAAM,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM;YACR;gBACE,gBAAgB,GAAG,eAAK,CAAC,IAAI,CAAC,MAAM,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,wBAAwB;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,iDAAiD;QAE3G,2EAA2E;QAC3E,wEAAwE;QACxE,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7D,MAAM,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC9F,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,uBAAuB,CAAC,UAAU,CAAC;QAC9E,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,uBAAuB,CAAC,QAAQ,CAAC;QAEtE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,wBAAwB,WAAW,cAAc,MAAM,oDAAoD,IAAI,CAAC,eAAe,KAAK,EAAE,MAAM,CAAC,CAAC;QACzJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,wBAAwB,WAAW,uEAAuE,IAAI,CAAC,eAAe,KAAK,EAAE,MAAM,CAAC,CAAC;QACxJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,wBAAwB,EAAE;gBAC5E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,WAAW;oBACX,UAAU;oBACV,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;oBACzC,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,yDAAyD;iBACrF,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAQ,CAAC;gBAC3F,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,cAAc,mBAAmB,WAAW,GAAG,EAAE,SAAS,CAAC,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,wDAAwD;YACxD,IAAI,CAAC,GAAG,CACN,oDAAoD,KAAK,CAAC,OAAO,yCAAyC,EAC1G,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,6CAA6C;AAC7C,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAC"}
@@ -1 +0,0 @@
1
- import{o as $,v as K,u as M,i as g,S as t,G as e,f as r,d as h,y as b,w as f,n,h as o,_ as p,m as c,E as u,K as w,k as _,R as G,B as N,Y as H,F as L,z as T,j as D,D as R,s as S,a as U,A as W,g as y}from"./index-D3WwZ4lY.js";const Y={key:0,style:{display:"flex","justify-content":"center",padding:"2rem"}},Z={class:"mono"},J={class:"mono",style:{"font-size":"0.8rem"}},X={class:"mono"},ee={class:"mono"},te={key:0,class:"muted"},ae={class:"mono",style:{"font-size":"0.75rem"}},ne={class:"mono",style:{"font-size":"0.75rem"}},se={style:{"font-size":"1.05rem"}},oe={class:"muted",style:{"font-size":"0.825rem"}},le=$({__name:"OverviewPage",setup(P){const v=b(null),d=b(null),k=b([]),m=b({tables:[],queues:[],topics:[],buckets:[]}),C=b(!0);let B=null;async function E(){try{const[i,a,s,l]=await Promise.all([h.checkHealth(),h.getConfig(),h.listServices(),h.listResources()]);v.value=i,d.value=a,k.value=s,m.value=l}catch(i){console.error("Overview load failed:",i)}finally{C.value=!1}}const F=y(()=>k.value.filter(i=>i.status==="running").length),I=y(()=>k.value.length),V=y(()=>{var i;return(i=v.value)!=null&&i.localstack?"success":"danger"}),O=y(()=>{var i,a;return!!((a=(i=v.value)==null?void 0:i.dynamoProxy)!=null&&a.enabled)}),z=y(()=>{var i,a;return!!((a=(i=v.value)==null?void 0:i.dynamoProxy)!=null&&a.running)}),j=y(()=>{var i;return!!((i=d.value)!=null&&i.autoPackage)}),x=y(()=>{var i;return!!((i=d.value)!=null&&i.persistence)}),Q=[{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 K(()=>{E(),B=window.setInterval(E,15e3)}),M(()=>{B&&window.clearInterval(B)}),(i,a)=>(f(),g(e(r),{direction:"vertical",gap:"1.5rem"},{default:t(()=>[n(e(w),{variant:"outline",class:"overview-hero"},{default:t(()=>[n(e(r),{direction:"vertical",gap:"1rem"},{default:t(()=>[n(e(r),{direction:"horizontal",gap:"0.75rem",align:"center",wrap:""},{default:t(()=>[a[1]||(a[1]=o("span",{style:{"font-size":"1.75rem"}},"⚡",-1)),n(e(r),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[...a[0]||(a[0]=[o("strong",{style:{"font-size":"1.5rem"}},"Local Serverless Stack",-1),o("span",{class:"muted"},"One LocalStack. Every microservice. Zero docker juggling.",-1)])]),_:1})]),_:1}),a[3]||(a[3]=o("p",{style:{"max-width":"70ch","line-height":"1.55"}}," A single control plane for your local serverless workflow. Register a Serverless Framework project and LSS parses its CloudFormation template, provisions the resources in a shared LocalStack instance, wires up event-source mappings, and gives you live visibility into every queue, table, and topic — without spinning up a separate LocalStack per service. ",-1)),n(e(r),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[n(e(p),{tone:V.value,variant:"soft"},{default:t(()=>{var s;return[c(" LocalStack "+u((s=v.value)!=null&&s.localstack?"running":"offline"),1)]}),_:1},8,["tone"]),O.value?(f(),g(e(p),{key:0,tone:z.value?"success":"warning",variant:"soft"},{default:t(()=>[c(" Dynamo Proxy "+u(z.value?"on":"enabled (not listening)"),1)]),_:1},8,["tone"])):(f(),g(e(p),{key:1,tone:"neutral",variant:"soft"},{default:t(()=>[...a[2]||(a[2]=[c("Dynamo Proxy off",-1)])]),_:1})),n(e(p),{tone:j.value?"info":"neutral",variant:"soft"},{default:t(()=>[c(" Auto-package "+u(j.value?"on":"off"),1)]),_:1},8,["tone"]),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:t(()=>[c(" Persistence "+u(x.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),C.value&&!v.value?(f(),_("div",Y,[n(e(G),{label:"Loading overview..."})])):(f(),_(L,{key:1},[n(e(R),{columns:2,gap:"1rem"},{default:t(()=>[n(e(w),{variant:"outline"},{header:t(()=>[...a[4]||(a[4]=[o("strong",null,"Server status",-1)])]),default:t(()=>[n(e(r),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var s;return[a[5]||(a[5]=o("span",{class:"muted"},"LocalStack",-1)),n(e(p),{tone:(s=v.value)!=null&&s.localstack?"success":"danger",variant:"soft"},{default:t(()=>{var l;return[c(u((l=v.value)!=null&&l.localstack?"Running":"Offline"),1)]}),_:1},8,["tone"])]}),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var s,l;return[a[6]||(a[6]=o("span",{class:"muted"},"Endpoint",-1)),o("span",Z,u(((l=(s=d.value)==null?void 0:s.localstack)==null?void 0:l.endpoint)||"—"),1)]}),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var s,l;return[a[7]||(a[7]=o("span",{class:"muted"},"Image",-1)),o("span",J,u(((l=(s=d.value)==null?void 0:s.localstack)==null?void 0:l.image)||"—"),1)]}),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a[8]||(a[8]=o("span",{class:"muted"},"Mode",-1)),n(e(N),{size:"sm",variant:"soft"},{default:t(()=>{var s,l;return[c(u(((l=(s=d.value)==null?void 0:s.localstack)==null?void 0:l.mode)||"—"),1)]}),_:1})]),_:1}),n(e(H)),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a[10]||(a[10]=o("span",{class:"muted"},"Dynamo Proxy",-1)),n(e(r),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:t(()=>[O.value?(f(),g(e(p),{key:0,tone:z.value?"success":"warning",variant:"soft"},{default:t(()=>{var s,l;return[c(u(z.value?`Listening :${(l=(s=v.value)==null?void 0:s.dynamoProxy)==null?void 0:l.port}`:"Enabled, not listening"),1)]}),_:1},8,["tone"])):(f(),g(e(p),{key:1,tone:"neutral",variant:"soft"},{default:t(()=>[...a[9]||(a[9]=[c("Disabled",-1)])]),_:1}))]),_:1})]),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a[11]||(a[11]=o("span",{class:"muted"},"Auto-package",-1)),n(e(p),{tone:j.value?"info":"neutral",variant:"soft"},{default:t(()=>[c(u(j.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a[12]||(a[12]=o("span",{class:"muted"},"Persistence",-1)),n(e(p),{tone:x.value?"info":"neutral",variant:"soft"},{default:t(()=>[c(u(x.value?"on":"off"),1)]),_:1},8,["tone"])]),_:1})]),_:1})]),_:1}),n(e(w),{variant:"outline"},{header:t(()=>[...a[13]||(a[13]=[o("strong",null,"LESC configuration",-1)])]),default:t(()=>[n(e(r),{direction:"vertical",gap:"0.75rem"},{default:t(()=>{var s;return[n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var l;return[a[14]||(a[14]=o("span",{class:"muted"},"Default region",-1)),o("span",X,u(((l=d.value)==null?void 0:l.region)||"—"),1)]}),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var l;return[a[15]||(a[15]=o("span",{class:"muted"},"Server port",-1)),o("span",ee,u(((l=d.value)==null?void 0:l.serverPort)||"—"),1)]}),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"start",wrap:""},{default:t(()=>[a[16]||(a[16]=o("span",{class:"muted"},"LocalStack services",-1)),n(e(r),{direction:"horizontal",gap:"0.25rem",wrap:"",justify:"flex-end"},{default:t(()=>{var l,q;return[(f(!0),_(L,null,T(((l=d.value)==null?void 0:l.services)||[],A=>(f(),g(e(N),{key:A,size:"sm",variant:"soft"},{default:t(()=>[c(u(A),1)]),_:2},1024))),128)),(((q=d.value)==null?void 0:q.services)||[]).length?D("",!0):(f(),_("span",te,"—"))]}),_:1})]),_:1}),n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>{var l;return[a[17]||(a[17]=o("span",{class:"muted"},"Seeds dir",-1)),o("span",ae,u(((l=d.value)==null?void 0:l.seedsDir)||"—"),1)]}),_:1}),(s=d.value)!=null&&s.configPath?(f(),g(e(r),{key:0,direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a[18]||(a[18]=o("span",{class:"muted"},"Config file",-1)),o("span",ne,u(d.value.configPath),1)]),_:1})):D("",!0)]}),_:1})]),_:1})]),_:1}),n(e(R),{columns:5,gap:"1rem"},{default:t(()=>[n(e(S),{label:"Services running",value:`${F.value} / ${I.value}`,tone:"success"},null,8,["value"]),n(e(S),{label:"DynamoDB tables",value:m.value.tables.length,tone:"info"},null,8,["value"]),n(e(S),{label:"SQS queues",value:m.value.queues.length,tone:"warning"},null,8,["value"]),n(e(S),{label:"SNS topics",value:m.value.topics.length,tone:"info"},null,8,["value"]),n(e(S),{label:"S3 buckets",value:m.value.buckets.length,tone:"neutral"},null,8,["value"])]),_:1}),n(e(w),{variant:"outline"},{header:t(()=>[n(e(r),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[...a[19]||(a[19]=[o("strong",null,"What's covered",-1),o("span",{class:"muted",style:{"font-size":"0.75rem"}}," Resource types LSS understands today ",-1)])]),_:1})]),default:t(()=>[n(e(R),{columns:2,gap:"0.75rem"},{default:t(()=>[(f(),_(L,null,T(Q,s=>n(e(w),{key:s.type,variant:"soft"},{default:t(()=>[n(e(r),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:t(()=>[n(e(r),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[n(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[o("span",se,u(s.status==="covered"?"✓":"⏳"),1),o("strong",null,u(s.type),1),n(e(p),{tone:s.status==="covered"?"success":"neutral",variant:"soft"},{default:t(()=>[c(u(s.status==="covered"?"Supported":"Planned"),1)]),_:2},1032,["tone"])]),_:2},1024),o("span",oe,u(s.description),1)]),_:2},1024),s.to?(f(),g(e(U),{key:0,to:s.to,style:{"text-decoration":"none"}},{default:t(()=>[n(e(W),{size:"sm",variant:"ghost"},{default:t(()=>[...a[20]||(a[20]=[c("Open →",-1)])]),_:1})]),_:1},8,["to"])):D("",!0)]),_:2},1024)]),_:2},1024)),64))]),_:1})]),_:1})],64))]),_:1}))}}),re=(P,v)=>{const d=P.__vccOpts||P;for(const[k,m]of v)d[k]=m;return d},ue=re(le,[["__scopeId","data-v-b8378960"]]);export{ue as default};