local-serverless-stack 0.6.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +104 -0
- package/README.md +261 -583
- package/bin/cli.js +31 -3
- package/dist/client/types.d.ts +4 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/server/engine/aoss-sidecar.d.ts +13 -0
- package/dist/server/engine/aoss-sidecar.d.ts.map +1 -0
- package/dist/server/engine/aoss-sidecar.js +93 -0
- package/dist/server/engine/aoss-sidecar.js.map +1 -0
- package/dist/server/engine/backends/localstack-backend.d.ts +25 -0
- package/dist/server/engine/backends/localstack-backend.d.ts.map +1 -0
- package/dist/server/engine/backends/localstack-backend.js +199 -0
- package/dist/server/engine/backends/localstack-backend.js.map +1 -0
- package/dist/server/engine/backends/self-backend.d.ts +32 -0
- package/dist/server/engine/backends/self-backend.d.ts.map +1 -0
- package/dist/server/engine/backends/self-backend.js +207 -0
- package/dist/server/engine/backends/self-backend.js.map +1 -0
- package/dist/server/engine/bus.d.ts +10 -0
- package/dist/server/engine/bus.d.ts.map +1 -0
- package/dist/server/engine/bus.js +24 -0
- package/dist/server/engine/bus.js.map +1 -0
- package/dist/server/engine/dispatch/dispatcher.d.ts +46 -0
- package/dist/server/engine/dispatch/dispatcher.d.ts.map +1 -0
- package/dist/server/engine/dispatch/dispatcher.js +312 -0
- package/dist/server/engine/dispatch/dispatcher.js.map +1 -0
- package/dist/server/engine/dispatch/scheduler.d.ts +47 -0
- package/dist/server/engine/dispatch/scheduler.d.ts.map +1 -0
- package/dist/server/engine/dispatch/scheduler.js +328 -0
- package/dist/server/engine/dispatch/scheduler.js.map +1 -0
- package/dist/server/engine/dispatch/sqs-poller.d.ts +25 -0
- package/dist/server/engine/dispatch/sqs-poller.d.ts.map +1 -0
- package/dist/server/engine/dispatch/sqs-poller.js +242 -0
- package/dist/server/engine/dispatch/sqs-poller.js.map +1 -0
- package/dist/server/engine/dispatch/stream-tailer.d.ts +22 -0
- package/dist/server/engine/dispatch/stream-tailer.d.ts.map +1 -0
- package/dist/server/engine/dispatch/stream-tailer.js +205 -0
- package/dist/server/engine/dispatch/stream-tailer.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.d.ts +5 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.js +91 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.d.ts +24 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.js +183 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.d.ts +29 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.js +12 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.d.ts +13 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.js +244 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.d.ts +11 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.js +109 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts +23 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js +541 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts +46 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/index.js +572 -0
- package/dist/server/engine/emulators/dynamodb/index.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/query.d.ts +12 -0
- package/dist/server/engine/emulators/dynamodb/query.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/query.js +237 -0
- package/dist/server/engine/emulators/dynamodb/query.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/schema.d.ts +58 -0
- package/dist/server/engine/emulators/dynamodb/schema.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/schema.js +284 -0
- package/dist/server/engine/emulators/dynamodb/schema.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/streams.d.ts +28 -0
- package/dist/server/engine/emulators/dynamodb/streams.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/streams.js +100 -0
- package/dist/server/engine/emulators/dynamodb/streams.js.map +1 -0
- package/dist/server/engine/emulators/events/index.d.ts +53 -0
- package/dist/server/engine/emulators/events/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/events/index.js +417 -0
- package/dist/server/engine/emulators/events/index.js.map +1 -0
- package/dist/server/engine/emulators/events/pattern.d.ts +3 -0
- package/dist/server/engine/emulators/events/pattern.d.ts.map +1 -0
- package/dist/server/engine/emulators/events/pattern.js +125 -0
- package/dist/server/engine/emulators/events/pattern.js.map +1 -0
- package/dist/server/engine/emulators/lambda-ctl/index.d.ts +55 -0
- package/dist/server/engine/emulators/lambda-ctl/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/lambda-ctl/index.js +461 -0
- package/dist/server/engine/emulators/lambda-ctl/index.js.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts +67 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.js +811 -0
- package/dist/server/engine/emulators/opensearch/index.js.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts +17 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.js +434 -0
- package/dist/server/engine/emulators/opensearch/search.js.map +1 -0
- package/dist/server/engine/emulators/s3/index.d.ts +45 -0
- package/dist/server/engine/emulators/s3/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/s3/index.js +591 -0
- package/dist/server/engine/emulators/s3/index.js.map +1 -0
- package/dist/server/engine/emulators/sns/index.d.ts +22 -0
- package/dist/server/engine/emulators/sns/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/sns/index.js +135 -0
- package/dist/server/engine/emulators/sns/index.js.map +1 -0
- package/dist/server/engine/emulators/sqs/index.d.ts +66 -0
- package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/index.js +552 -0
- package/dist/server/engine/emulators/sqs/index.js.map +1 -0
- package/dist/server/engine/emulators/sqs/md5.d.ts +8 -0
- package/dist/server/engine/emulators/sqs/md5.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/md5.js +36 -0
- package/dist/server/engine/emulators/sqs/md5.js.map +1 -0
- package/dist/server/engine/emulators/sqs/queue.d.ts +105 -0
- package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/queue.js +371 -0
- package/dist/server/engine/emulators/sqs/queue.js.map +1 -0
- package/dist/server/engine/emulators/sts.d.ts +8 -0
- package/dist/server/engine/emulators/sts.d.ts.map +1 -0
- package/dist/server/engine/emulators/sts.js +23 -0
- package/dist/server/engine/emulators/sts.js.map +1 -0
- package/dist/server/engine/engine-backend.d.ts +17 -0
- package/dist/server/engine/engine-backend.d.ts.map +1 -0
- package/dist/server/engine/engine-backend.js +7 -0
- package/dist/server/engine/engine-backend.js.map +1 -0
- package/dist/server/engine/engine-manager.d.ts +22 -0
- package/dist/server/engine/engine-manager.d.ts.map +1 -0
- package/dist/server/engine/engine-manager.js +74 -0
- package/dist/server/engine/engine-manager.js.map +1 -0
- package/dist/server/engine/http/aws-chunked.d.ts +3 -0
- package/dist/server/engine/http/aws-chunked.d.ts.map +1 -0
- package/dist/server/engine/http/aws-chunked.js +50 -0
- package/dist/server/engine/http/aws-chunked.js.map +1 -0
- package/dist/server/engine/http/errors.d.ts +20 -0
- package/dist/server/engine/http/errors.d.ts.map +1 -0
- package/dist/server/engine/http/errors.js +43 -0
- package/dist/server/engine/http/errors.js.map +1 -0
- package/dist/server/engine/http/protocols/aws-json.d.ts +8 -0
- package/dist/server/engine/http/protocols/aws-json.d.ts.map +1 -0
- package/dist/server/engine/http/protocols/aws-json.js +42 -0
- package/dist/server/engine/http/protocols/aws-json.js.map +1 -0
- package/dist/server/engine/http/protocols/query-xml.d.ts +7 -0
- package/dist/server/engine/http/protocols/query-xml.d.ts.map +1 -0
- package/dist/server/engine/http/protocols/query-xml.js +35 -0
- package/dist/server/engine/http/protocols/query-xml.js.map +1 -0
- package/dist/server/engine/http/router.d.ts +8 -0
- package/dist/server/engine/http/router.d.ts.map +1 -0
- package/dist/server/engine/http/router.js +402 -0
- package/dist/server/engine/http/router.js.map +1 -0
- package/dist/server/engine/http/sigv4.d.ts +9 -0
- package/dist/server/engine/http/sigv4.d.ts.map +1 -0
- package/dist/server/engine/http/sigv4.js +33 -0
- package/dist/server/engine/http/sigv4.js.map +1 -0
- package/dist/server/engine/http/xml.d.ts +16 -0
- package/dist/server/engine/http/xml.d.ts.map +1 -0
- package/dist/server/engine/http/xml.js +92 -0
- package/dist/server/engine/http/xml.js.map +1 -0
- package/dist/server/engine/store/atomic.d.ts +4 -0
- package/dist/server/engine/store/atomic.d.ts.map +1 -0
- package/dist/server/engine/store/atomic.js +35 -0
- package/dist/server/engine/store/atomic.js.map +1 -0
- package/dist/server/engine/store/engine-store.d.ts +9 -0
- package/dist/server/engine/store/engine-store.d.ts.map +1 -0
- package/dist/server/engine/store/engine-store.js +218 -0
- package/dist/server/engine/store/engine-store.js.map +1 -0
- package/dist/server/engine/store/store-types.d.ts +37 -0
- package/dist/server/engine/store/store-types.d.ts.map +1 -0
- package/dist/server/engine/store/store-types.js +17 -0
- package/dist/server/engine/store/store-types.js.map +1 -0
- package/dist/server/engine/store/wal.d.ts +49 -0
- package/dist/server/engine/store/wal.d.ts.map +1 -0
- package/dist/server/engine/store/wal.js +328 -0
- package/dist/server/engine/store/wal.js.map +1 -0
- package/dist/server/engine/types.d.ts +137 -0
- package/dist/server/engine/types.d.ts.map +1 -0
- package/dist/server/engine/types.js +8 -0
- package/dist/server/engine/types.js.map +1 -0
- package/dist/server/index.js +43 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/config.d.ts.map +1 -1
- package/dist/server/routes/config.js +16 -0
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/opensearch.d.ts +3 -0
- package/dist/server/routes/opensearch.d.ts.map +1 -0
- package/dist/server/routes/opensearch.js +69 -0
- package/dist/server/routes/opensearch.js.map +1 -0
- package/dist/server/routes/resources.d.ts.map +1 -1
- package/dist/server/routes/resources.js +4 -1
- package/dist/server/routes/resources.js.map +1 -1
- package/dist/server/routes/services.d.ts.map +1 -1
- package/dist/server/routes/services.js +3 -0
- package/dist/server/routes/services.js.map +1 -1
- package/dist/server/services/cache-manager.d.ts +2 -1
- package/dist/server/services/cache-manager.d.ts.map +1 -1
- package/dist/server/services/cache-manager.js +22 -2
- package/dist/server/services/cache-manager.js.map +1 -1
- package/dist/server/services/cloudformation-parser.d.ts +35 -2
- package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
- package/dist/server/services/cloudformation-parser.js +88 -3
- package/dist/server/services/cloudformation-parser.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +82 -0
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +151 -7
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/server/services/gateway-manager.d.ts +2 -0
- package/dist/server/services/gateway-manager.d.ts.map +1 -1
- package/dist/server/services/gateway-manager.js +44 -6
- package/dist/server/services/gateway-manager.js.map +1 -1
- package/dist/server/services/localstack-manager.d.ts +0 -7
- package/dist/server/services/localstack-manager.d.ts.map +1 -1
- package/dist/server/services/localstack-manager.js +11 -173
- package/dist/server/services/localstack-manager.js.map +1 -1
- package/dist/server/services/opensearch-explorer.d.ts +37 -0
- package/dist/server/services/opensearch-explorer.d.ts.map +1 -0
- package/dist/server/services/opensearch-explorer.js +124 -0
- package/dist/server/services/opensearch-explorer.js.map +1 -0
- package/dist/server/services/resource-provisioner.d.ts +13 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +257 -11
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/service-registrar.d.ts +1 -0
- package/dist/server/services/service-registrar.d.ts.map +1 -1
- package/dist/server/services/service-registrar.js +19 -4
- package/dist/server/services/service-registrar.js.map +1 -1
- package/dist/ui/assets/ApisPage-C0xaNFQW.js +1 -0
- package/dist/ui/assets/BucketDetailPage-Bnny8S04.js +1 -0
- package/dist/ui/assets/BucketsPage-Dd3Y4-gU.js +1 -0
- package/dist/ui/assets/{DynamoPage-B1__Rjr2.js → DynamoPage-JzSF-4VI.js} +1 -1
- package/dist/ui/assets/DynamoTablePage-uM0DXGCo.js +3 -0
- package/dist/ui/assets/LambdaDetailPage-CoR9ZXdb.js +4 -0
- package/dist/ui/assets/LambdasPage-CNMX_O5P.js +1 -0
- package/dist/ui/assets/OpenSearchCollectionPage-D5FaSCF1.js +1 -0
- package/dist/ui/assets/OpenSearchPage-FEzLxaej.js +1 -0
- package/dist/ui/assets/OverviewPage-0xvjT7Q0.js +1 -0
- package/dist/ui/assets/OverviewPage-qEl0a-0B.css +1 -0
- package/dist/ui/assets/QueueDetailPage-B2GaNLLe.js +1 -0
- package/dist/ui/assets/QueuesPage-Ch5kGwrp.js +1 -0
- package/dist/ui/assets/ServiceDetailPage-DKiz21oo.js +2 -0
- package/dist/ui/assets/ServicesPage-Cmi3UIfM.js +2 -0
- package/dist/ui/assets/index-DH7RTkRh.css +1 -0
- package/dist/ui/assets/index-MF9fVrsr.js +37 -0
- package/dist/ui/index.html +2 -2
- package/package.json +3 -1
- package/dist/ui/assets/ApisPage-DdgKjEdS.js +0 -1
- package/dist/ui/assets/BucketDetailPage-DZQGxm0y.js +0 -1
- package/dist/ui/assets/BucketsPage-xYXzxCvd.js +0 -1
- package/dist/ui/assets/DynamoTablePage-BCoxPdXW.js +0 -3
- package/dist/ui/assets/LambdaDetailPage-B85CA8tb.js +0 -4
- package/dist/ui/assets/LambdasPage-_TtxQMT_.js +0 -1
- package/dist/ui/assets/OverviewPage-6jDXV1jr.css +0 -1
- package/dist/ui/assets/OverviewPage-CqTKTY64.js +0 -1
- package/dist/ui/assets/QueueDetailPage-BOr_sImA.js +0 -1
- package/dist/ui/assets/QueuesPage-DpByfcM5.js +0 -1
- package/dist/ui/assets/ServiceDetailPage-DsWgV-ad.js +0 -2
- package/dist/ui/assets/ServicesPage-CGlpsj98.js +0 -2
- package/dist/ui/assets/index-BWlB542w.js +0 -36
- package/dist/ui/assets/index-EYnsoJOq.css +0 -1
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
// Deprecated facade kept so the ~10 existing call sites (provisioner,
|
|
2
|
+
// explorers, seeds, dynamo-proxy, routes) stay untouched: they keep importing
|
|
3
|
+
// LocalStackManager, but the active provider may be the LocalStack container
|
|
4
|
+
// OR the in-process self engine — EngineManager decides from the config.
|
|
5
|
+
// New code should use EngineManager directly.
|
|
6
|
+
import { EngineManager } from '../engine/engine-manager.js';
|
|
5
7
|
export class LocalStackManager {
|
|
6
8
|
static instance;
|
|
7
|
-
process = null;
|
|
8
|
-
_isRunning = false;
|
|
9
|
-
endpoint;
|
|
10
|
-
// Container name is scoped to the LocalStack port so multiple LSS instances
|
|
11
|
-
// (one per example/project) can launch their own container side by side.
|
|
12
|
-
// Falls back to "lss-localstack" when the default 4566 is in use to preserve
|
|
13
|
-
// existing teardown scripts that look for that name.
|
|
14
|
-
containerName;
|
|
15
|
-
configManager;
|
|
16
|
-
constructor() {
|
|
17
|
-
this.configManager = ConfigManager.getInstance();
|
|
18
|
-
this.endpoint = this.configManager.getLocalStackEndpoint();
|
|
19
|
-
const port = this.configManager.getLocalStackPort();
|
|
20
|
-
this.containerName = port === 4566 ? 'lss-localstack' : `lss-localstack-${port}`;
|
|
21
|
-
}
|
|
22
9
|
static getInstance() {
|
|
23
10
|
if (!LocalStackManager.instance) {
|
|
24
11
|
LocalStackManager.instance = new LocalStackManager();
|
|
@@ -26,168 +13,19 @@ export class LocalStackManager {
|
|
|
26
13
|
return LocalStackManager.instance;
|
|
27
14
|
}
|
|
28
15
|
async start() {
|
|
29
|
-
|
|
30
|
-
console.log('⚠️ LocalStack already running');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (this.configManager.isExternal()) {
|
|
34
|
-
console.log(`🔗 Using external LocalStack at ${this.endpoint}`);
|
|
35
|
-
await this.waitForReady(30);
|
|
36
|
-
this._isRunning = true;
|
|
37
|
-
console.log('✅ Connected to external LocalStack');
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
// Check if docker is available
|
|
42
|
-
await execAsync('docker ps -q', { timeout: 5000 });
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
throw new Error('Docker is not available or not running. Please start Docker first.');
|
|
46
|
-
}
|
|
47
|
-
const edition = this.configManager.getLocalStackEdition();
|
|
48
|
-
const image = this.configManager.getLocalStackImage();
|
|
49
|
-
const authToken = this.configManager.getLocalStackAuthToken();
|
|
50
|
-
if (edition === 'pro' && !authToken) {
|
|
51
|
-
throw new Error('LocalStack Pro requires LOCALSTACK_AUTH_TOKEN. Set the env var or "localstackAuthToken" in your config.');
|
|
52
|
-
}
|
|
53
|
-
if (edition === 'community' && !authToken) {
|
|
54
|
-
console.warn('⚠️ LOCALSTACK_AUTH_TOKEN not set. Recent localstack/localstack images (>= 2026.5) require a token even for the community edition.');
|
|
55
|
-
}
|
|
56
|
-
return new Promise((resolve, reject) => {
|
|
57
|
-
console.log(`🔄 Starting LocalStack (${image})...`);
|
|
58
|
-
const port = this.configManager.getLocalStackPort();
|
|
59
|
-
const services = this.configManager.getServices().join(',');
|
|
60
|
-
const persistence = this.configManager.isPersistence() ? '1' : '0';
|
|
61
|
-
const debug = this.configManager.isDebug() ? '1' : '0';
|
|
62
|
-
// Persistence volume is scoped to the container so two LSS instances
|
|
63
|
-
// don't share (and corrupt) the same on-disk state.
|
|
64
|
-
const volumeName = this.containerName === 'lss-localstack'
|
|
65
|
-
? 'lss-localstack-data'
|
|
66
|
-
: `${this.containerName}-data`;
|
|
67
|
-
const dockerArgs = [
|
|
68
|
-
'run',
|
|
69
|
-
'--rm',
|
|
70
|
-
'-p',
|
|
71
|
-
`${port}:4566`,
|
|
72
|
-
'-v',
|
|
73
|
-
`${volumeName}:/var/lib/localstack`,
|
|
74
|
-
'-v',
|
|
75
|
-
'/var/run/docker.sock:/var/run/docker.sock',
|
|
76
|
-
// host.docker.internal resolves natively on Docker Desktop but not on
|
|
77
|
-
// Linux; the generated Lambda proxies target it to reach the invoke
|
|
78
|
-
// listeners on the host, so map it explicitly (no-op elsewhere).
|
|
79
|
-
'--add-host',
|
|
80
|
-
'host.docker.internal:host-gateway',
|
|
81
|
-
'--name',
|
|
82
|
-
this.containerName,
|
|
83
|
-
'-e',
|
|
84
|
-
`SERVICES=${services}`,
|
|
85
|
-
'-e',
|
|
86
|
-
'LAMBDA_EXECUTOR=local',
|
|
87
|
-
// Lambda containers spawned BY LocalStack (which run the proxies) need
|
|
88
|
-
// the same host mapping.
|
|
89
|
-
'-e',
|
|
90
|
-
'LAMBDA_DOCKER_FLAGS=--add-host host.docker.internal:host-gateway',
|
|
91
|
-
'-e',
|
|
92
|
-
`PERSISTENCE=${persistence}`,
|
|
93
|
-
'-e',
|
|
94
|
-
`DEBUG=${debug}`,
|
|
95
|
-
];
|
|
96
|
-
if (authToken) {
|
|
97
|
-
dockerArgs.push('-e', `LOCALSTACK_AUTH_TOKEN=${authToken}`);
|
|
98
|
-
}
|
|
99
|
-
dockerArgs.push(image);
|
|
100
|
-
this.process = spawn('docker', dockerArgs);
|
|
101
|
-
let stderr = '';
|
|
102
|
-
let stdout = '';
|
|
103
|
-
this.process.stderr?.on('data', data => {
|
|
104
|
-
stderr += data.toString();
|
|
105
|
-
console.log(`[LocalStack stderr] ${data.toString().trim()}`);
|
|
106
|
-
});
|
|
107
|
-
this.process.stdout?.on('data', data => {
|
|
108
|
-
stdout += data.toString();
|
|
109
|
-
console.log(`[LocalStack stdout] ${data.toString().trim()}`);
|
|
110
|
-
});
|
|
111
|
-
this.process.on('error', error => {
|
|
112
|
-
console.error('❌ Failed to start LocalStack process:', error);
|
|
113
|
-
reject(error);
|
|
114
|
-
});
|
|
115
|
-
this.process.on('close', code => {
|
|
116
|
-
if (code !== 0) {
|
|
117
|
-
console.error(`Container exited with code ${code}`);
|
|
118
|
-
console.error('stderr:', stderr);
|
|
119
|
-
console.error('stdout:', stdout);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
// Wait for LocalStack to be ready
|
|
123
|
-
this.waitForReady()
|
|
124
|
-
.then(() => {
|
|
125
|
-
this._isRunning = true;
|
|
126
|
-
console.log('✅ LocalStack ready');
|
|
127
|
-
resolve();
|
|
128
|
-
})
|
|
129
|
-
.catch(err => {
|
|
130
|
-
console.error('LocalStack startup error:', err.message);
|
|
131
|
-
this.process?.kill();
|
|
132
|
-
reject(err);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
16
|
+
return EngineManager.getInstance().start();
|
|
135
17
|
}
|
|
136
18
|
async stop() {
|
|
137
|
-
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
if (this.configManager.isExternal()) {
|
|
141
|
-
console.log('🔗 External LocalStack — leaving container untouched');
|
|
142
|
-
this._isRunning = false;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
console.log('🛑 Stopping LocalStack...');
|
|
146
|
-
try {
|
|
147
|
-
await execAsync(`docker stop ${this.containerName}`, { timeout: 10000 });
|
|
148
|
-
this._isRunning = false;
|
|
149
|
-
this.process = null;
|
|
150
|
-
console.log('✅ LocalStack stopped');
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
console.error('⚠️ Error stopping LocalStack:', error instanceof Error ? error.message : 'Unknown error');
|
|
154
|
-
this._isRunning = false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
async waitForReady(maxAttempts = 120) {
|
|
158
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
159
|
-
try {
|
|
160
|
-
const response = await fetch(`${this.endpoint}/_localstack/health`);
|
|
161
|
-
if (response.ok) {
|
|
162
|
-
console.log(`✓ LocalStack is responsive (attempt ${i + 1}/${maxAttempts})`);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
// Ignore fetch errors during startup
|
|
168
|
-
if (i % 20 === 0) {
|
|
169
|
-
console.log(`⏳ Waiting for LocalStack... (attempt ${i + 1}/${maxAttempts})`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
173
|
-
}
|
|
174
|
-
throw new Error('LocalStack failed to start in time (120s timeout). Check Docker and container logs.');
|
|
19
|
+
return EngineManager.getInstance().stop();
|
|
175
20
|
}
|
|
176
21
|
isRunning() {
|
|
177
|
-
return
|
|
22
|
+
return EngineManager.getInstance().isRunning();
|
|
178
23
|
}
|
|
179
24
|
getEndpoint() {
|
|
180
|
-
return
|
|
25
|
+
return EngineManager.getInstance().getEndpoint();
|
|
181
26
|
}
|
|
182
27
|
getConfig() {
|
|
183
|
-
return
|
|
184
|
-
endpoint: this.endpoint,
|
|
185
|
-
region: this.configManager.getRegion(),
|
|
186
|
-
credentials: {
|
|
187
|
-
accessKeyId: process.env.LOCALSTACK_ACCESS_KEY_ID || 'test',
|
|
188
|
-
secretAccessKey: process.env.LOCALSTACK_SECRET_ACCESS_KEY || 'test',
|
|
189
|
-
},
|
|
190
|
-
};
|
|
28
|
+
return EngineManager.getInstance().getConfig();
|
|
191
29
|
}
|
|
192
30
|
}
|
|
193
31
|
//# sourceMappingURL=localstack-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localstack-manager.js","sourceRoot":"","sources":["../../../src/server/services/localstack-manager.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"localstack-manager.js","sourceRoot":"","sources":["../../../src/server/services/localstack-manager.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,8CAA8C;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAC,QAAQ,CAAoB;IAE3C,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAChC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,iBAAiB,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,SAAS;QACP,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,WAAW;QACT,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;IAED,SAAS;QACP,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface OpenSearchCollectionSummary {
|
|
2
|
+
name: string;
|
|
3
|
+
endpoint: string;
|
|
4
|
+
}
|
|
5
|
+
export interface OpenSearchIndexSummary {
|
|
6
|
+
index: string;
|
|
7
|
+
docsCount: number;
|
|
8
|
+
health: string;
|
|
9
|
+
status: string;
|
|
10
|
+
}
|
|
11
|
+
export interface OpenSearchSearchInput {
|
|
12
|
+
index?: string;
|
|
13
|
+
q?: string;
|
|
14
|
+
query?: unknown;
|
|
15
|
+
from?: number;
|
|
16
|
+
size?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class OpenSearchDataPlaneError extends Error {
|
|
19
|
+
readonly status: number;
|
|
20
|
+
constructor(status: number, message: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class OpenSearchExplorer {
|
|
23
|
+
private static instance;
|
|
24
|
+
private clients;
|
|
25
|
+
private defaultRegion;
|
|
26
|
+
private constructor();
|
|
27
|
+
static getInstance(): OpenSearchExplorer;
|
|
28
|
+
setDefaultRegion(region: string): void;
|
|
29
|
+
private aossBase;
|
|
30
|
+
private clientFor;
|
|
31
|
+
listCollections(region?: string): Promise<OpenSearchCollectionSummary[]>;
|
|
32
|
+
listIndices(collection: string, region?: string): Promise<OpenSearchIndexSummary[]>;
|
|
33
|
+
search(collection: string, input: OpenSearchSearchInput, region?: string): Promise<unknown>;
|
|
34
|
+
private dataPlaneFetch;
|
|
35
|
+
private errorReason;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=opensearch-explorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensearch-explorer.d.ts","sourceRoot":"","sources":["../../../src/server/services/opensearch-explorer.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAaD,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK5C;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQtC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAWX,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IASxE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAenF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAenF,cAAc;IAiC5B,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { OpenSearchServerlessClient, ListCollectionsCommand, } from '@aws-sdk/client-opensearchserverless';
|
|
2
|
+
import { LocalStackManager } from './localstack-manager.js';
|
|
3
|
+
import { ConfigManager } from './config-manager.js';
|
|
4
|
+
import { aossEndpoint } from './resource-provisioner.js';
|
|
5
|
+
// Data-plane failure carrying the upstream HTTP status, so the route can
|
|
6
|
+
// translate it (404 for an unknown collection) instead of a blanket 500.
|
|
7
|
+
export class OpenSearchDataPlaneError extends Error {
|
|
8
|
+
status;
|
|
9
|
+
constructor(status, message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'OpenSearchDataPlaneError';
|
|
12
|
+
this.status = status;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class OpenSearchExplorer {
|
|
16
|
+
static instance;
|
|
17
|
+
clients = new Map();
|
|
18
|
+
defaultRegion = 'us-east-1';
|
|
19
|
+
constructor() { }
|
|
20
|
+
static getInstance() {
|
|
21
|
+
if (!OpenSearchExplorer.instance)
|
|
22
|
+
OpenSearchExplorer.instance = new OpenSearchExplorer();
|
|
23
|
+
return OpenSearchExplorer.instance;
|
|
24
|
+
}
|
|
25
|
+
setDefaultRegion(region) {
|
|
26
|
+
if (region)
|
|
27
|
+
this.defaultRegion = region;
|
|
28
|
+
}
|
|
29
|
+
// aoss does not answer on the engine endpoint when the sidecar runs (no
|
|
30
|
+
// LocalStack edition provides aoss). Both planes target the base
|
|
31
|
+
// aossEndpoint() picks: the sidecar when enabled, else the engine itself
|
|
32
|
+
// (the self engine serves aoss natively).
|
|
33
|
+
aossBase() {
|
|
34
|
+
return aossEndpoint(ConfigManager.getInstance(), LocalStackManager.getInstance().getConfig().endpoint);
|
|
35
|
+
}
|
|
36
|
+
clientFor(region) {
|
|
37
|
+
const r = region || this.defaultRegion;
|
|
38
|
+
let client = this.clients.get(r);
|
|
39
|
+
if (!client) {
|
|
40
|
+
const baseConfig = LocalStackManager.getInstance().getConfig();
|
|
41
|
+
client = new OpenSearchServerlessClient({ ...baseConfig, region: r, endpoint: this.aossBase() });
|
|
42
|
+
this.clients.set(r, client);
|
|
43
|
+
}
|
|
44
|
+
return client;
|
|
45
|
+
}
|
|
46
|
+
async listCollections(region) {
|
|
47
|
+
const response = await this.clientFor(region).send(new ListCollectionsCommand({}));
|
|
48
|
+
const base = this.aossBase();
|
|
49
|
+
return (response.collectionSummaries ?? [])
|
|
50
|
+
.map(summary => summary.name)
|
|
51
|
+
.filter((name) => typeof name === 'string' && name.length > 0)
|
|
52
|
+
.map(name => ({ name, endpoint: `${base}/_aoss/${name}` }));
|
|
53
|
+
}
|
|
54
|
+
async listIndices(collection, region) {
|
|
55
|
+
const col = encodeURIComponent(collection);
|
|
56
|
+
// format=json matches the real _cat API (plain text by default); the LSS
|
|
57
|
+
// emulator answers JSON either way.
|
|
58
|
+
const rows = (await this.dataPlaneFetch('GET', `${col}/_cat/indices`, undefined, region, {
|
|
59
|
+
format: 'json',
|
|
60
|
+
}));
|
|
61
|
+
return rows.map(row => ({
|
|
62
|
+
index: row.index,
|
|
63
|
+
docsCount: Number(row['docs.count']),
|
|
64
|
+
health: row.health,
|
|
65
|
+
status: row.status,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
async search(collection, input, region) {
|
|
69
|
+
const col = encodeURIComponent(collection);
|
|
70
|
+
const path = input.index !== undefined
|
|
71
|
+
? `${col}/${encodeURIComponent(input.index)}/_search`
|
|
72
|
+
: `${col}/_search`;
|
|
73
|
+
const body = {};
|
|
74
|
+
if (input.query !== undefined)
|
|
75
|
+
body.query = input.query;
|
|
76
|
+
if (input.from !== undefined)
|
|
77
|
+
body.from = input.from;
|
|
78
|
+
if (input.size !== undefined)
|
|
79
|
+
body.size = input.size;
|
|
80
|
+
// ?q= is forwarded verbatim: the emulator derives a match (field:value) or
|
|
81
|
+
// multi_match (bare text) query from it, and rejects q alongside a body
|
|
82
|
+
// query with a 400 that passes through to the caller untouched.
|
|
83
|
+
return this.dataPlaneFetch('POST', path, body, region, input.q !== undefined ? { q: input.q } : undefined);
|
|
84
|
+
}
|
|
85
|
+
async dataPlaneFetch(method, path, body, region, params) {
|
|
86
|
+
const url = new URL(`${this.aossBase()}/_aoss/${path}`);
|
|
87
|
+
// Pin the data-plane region without signing: the engine router mines
|
|
88
|
+
// {region, service} from the SigV4 credential scope — the Authorization
|
|
89
|
+
// header or the presigned-style X-Amz-Credential query param — and never
|
|
90
|
+
// verifies the signature (engine/http/sigv4.ts resolveSigV4Scope). A
|
|
91
|
+
// scope-shaped credential is therefore enough to route this unsigned
|
|
92
|
+
// request to the effective region instead of the engine's boot region.
|
|
93
|
+
const r = region || this.defaultRegion;
|
|
94
|
+
url.searchParams.set('X-Amz-Credential', `lss-dashboard/00000000/${r}/aoss/aws4_request`);
|
|
95
|
+
for (const [key, value] of Object.entries(params ?? {}))
|
|
96
|
+
url.searchParams.set(key, value);
|
|
97
|
+
const response = await fetch(url, {
|
|
98
|
+
method,
|
|
99
|
+
...(body !== undefined
|
|
100
|
+
? { headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) }
|
|
101
|
+
: {}),
|
|
102
|
+
});
|
|
103
|
+
const text = await response.text();
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new OpenSearchDataPlaneError(response.status, this.errorReason(text, response.status));
|
|
106
|
+
}
|
|
107
|
+
return JSON.parse(text);
|
|
108
|
+
}
|
|
109
|
+
// Mine the OpenSearch error shape ({"error":{"type","reason"},"status":N})
|
|
110
|
+
// for its reason; anything else falls back to a generic message.
|
|
111
|
+
errorReason(text, status) {
|
|
112
|
+
try {
|
|
113
|
+
const payload = JSON.parse(text);
|
|
114
|
+
const reason = payload?.error?.reason;
|
|
115
|
+
if (typeof reason === 'string')
|
|
116
|
+
return reason;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Not JSON — use the generic message.
|
|
120
|
+
}
|
|
121
|
+
return `OpenSearch data plane answered HTTP ${status}`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=opensearch-explorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensearch-explorer.js","sourceRoot":"","sources":["../../../src/server/services/opensearch-explorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
+
import { ConfigManager } from './config-manager.js';
|
|
2
3
|
import type { Resource } from './cloudformation-parser.js';
|
|
4
|
+
export declare function aossEndpoint(config: Pick<ConfigManager, 'getAossSidecarConfig'>, engineEndpoint: string): string;
|
|
3
5
|
export declare class ResourceProvisioner {
|
|
4
6
|
private static instance;
|
|
5
7
|
private dynamoClient;
|
|
@@ -7,6 +9,8 @@ export declare class ResourceProvisioner {
|
|
|
7
9
|
private snsClient;
|
|
8
10
|
private s3Client;
|
|
9
11
|
private lambdaClient;
|
|
12
|
+
private eventBridgeClient;
|
|
13
|
+
private openSearchClient;
|
|
10
14
|
private currentRegion;
|
|
11
15
|
private resourcesByLogicalId;
|
|
12
16
|
private constructor();
|
|
@@ -29,6 +33,10 @@ export declare class ResourceProvisioner {
|
|
|
29
33
|
private resolveLambdaName;
|
|
30
34
|
private generateProxyLambdaCode;
|
|
31
35
|
private createEventSourceMapping;
|
|
36
|
+
private createOpenSearchCollection;
|
|
37
|
+
private createEventBus;
|
|
38
|
+
private resolveEventBusName;
|
|
39
|
+
private createEventRule;
|
|
32
40
|
private ensureLambdaProxyExists;
|
|
33
41
|
private convertCamelCaseToKebab;
|
|
34
42
|
private resolveEventSourceArn;
|
|
@@ -37,12 +45,17 @@ export declare class ResourceProvisioner {
|
|
|
37
45
|
queues: string[];
|
|
38
46
|
topics: string[];
|
|
39
47
|
buckets: string[];
|
|
48
|
+
collections: string[];
|
|
40
49
|
}>;
|
|
41
50
|
private listDynamoDBTables;
|
|
42
51
|
private listSQSQueues;
|
|
43
52
|
private listSNSTopics;
|
|
44
53
|
private listS3Buckets;
|
|
54
|
+
private listOpenSearchCollections;
|
|
45
55
|
cleanupResources(serviceName: string, resources: Resource[]): Promise<void>;
|
|
56
|
+
private deleteOpenSearchCollection;
|
|
57
|
+
private deleteEventRule;
|
|
58
|
+
private deleteEventBus;
|
|
46
59
|
private deleteDynamoDBTable;
|
|
47
60
|
private deleteSQSQueue;
|
|
48
61
|
private deleteS3Bucket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-provisioner.d.ts","sourceRoot":"","sources":["../../../src/server/services/resource-provisioner.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EAQT,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-provisioner.d.ts","sourceRoot":"","sources":["../../../src/server/services/resource-provisioner.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EAQT,MAAM,oBAAoB,CAAC;AAoB5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EACV,QAAQ,EAST,MAAM,4BAA4B,CAAC;AAOpC,wBAAgB,YAAY,CAC1B,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,EACnD,cAAc,EAAE,MAAM,GACrB,MAAM,CAGR;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,aAAa,CAAuB;IAM5C,OAAO,CAAC,oBAAoB,CAA+B;IAE3D,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,OAAO,CAAC,iBAAiB;IAqBzB,WAAW,IAAI,QAAQ;IAIvB,gBAAgB,IAAI,MAAM;IAIpB,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,IAAI,CAAC;YA4GF,mBAAmB;YA+DnB,eAAe;YAqBf,cAAc;YAiCd,cAAc;YAiBd,cAAc;YA4Bd,wBAAwB;IAiEtC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,uBAAuB;YAmEjB,wBAAwB;YAsExB,0BAA0B;YAgC1B,cAAc;IAgB5B,OAAO,CAAC,mBAAmB;YASb,eAAe;YAyEf,uBAAuB;IAqErC,OAAO,CAAC,uBAAuB;YAOjB,qBAAqB;IAkH7B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;YA2BY,kBAAkB;YASlB,aAAa;YASb,aAAa;YAYb,aAAa;YAWb,yBAAyB;IASjC,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA2EnE,0BAA0B;YAY1B,eAAe;YAuBf,cAAc;YAWd,mBAAmB;YAYnB,cAAc;YAiBd,cAAc;YAsBd,cAAc;YAkBd,wBAAwB;CA6BvC"}
|