local-serverless-stack 1.0.1 → 1.1.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 (183) hide show
  1. package/CHANGELOG.md +125 -3
  2. package/README.md +75 -26
  3. package/bin/cli.js +81 -15
  4. package/bin/i18n.js +30 -3
  5. package/dist/client/index.d.ts +1 -1
  6. package/dist/client/index.d.ts.map +1 -1
  7. package/dist/client/namespaces/services.d.ts +46 -0
  8. package/dist/client/namespaces/services.d.ts.map +1 -1
  9. package/dist/client/namespaces/services.js +1 -0
  10. package/dist/client/namespaces/services.js.map +1 -1
  11. package/dist/mcp/tools.d.ts.map +1 -1
  12. package/dist/mcp/tools.js +17 -0
  13. package/dist/mcp/tools.js.map +1 -1
  14. package/dist/server/engine/backends/self-backend.d.ts +26 -1
  15. package/dist/server/engine/backends/self-backend.d.ts.map +1 -1
  16. package/dist/server/engine/backends/self-backend.js +104 -11
  17. package/dist/server/engine/backends/self-backend.js.map +1 -1
  18. package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts.map +1 -1
  19. package/dist/server/engine/emulators/dynamodb/expressions/parser.js +12 -1
  20. package/dist/server/engine/emulators/dynamodb/expressions/parser.js.map +1 -1
  21. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts +3 -0
  22. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts.map +1 -0
  23. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js +78 -0
  24. package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js.map +1 -0
  25. package/dist/server/engine/emulators/dynamodb/index.d.ts +11 -0
  26. package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -1
  27. package/dist/server/engine/emulators/dynamodb/index.js +101 -7
  28. package/dist/server/engine/emulators/dynamodb/index.js.map +1 -1
  29. package/dist/server/engine/emulators/dynamodb/query.d.ts +1 -0
  30. package/dist/server/engine/emulators/dynamodb/query.d.ts.map +1 -1
  31. package/dist/server/engine/emulators/dynamodb/query.js +34 -6
  32. package/dist/server/engine/emulators/dynamodb/query.js.map +1 -1
  33. package/dist/server/engine/emulators/s3/index.d.ts +10 -0
  34. package/dist/server/engine/emulators/s3/index.d.ts.map +1 -1
  35. package/dist/server/engine/emulators/s3/index.js +369 -25
  36. package/dist/server/engine/emulators/s3/index.js.map +1 -1
  37. package/dist/server/engine/emulators/sqs/index.d.ts +2 -0
  38. package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -1
  39. package/dist/server/engine/emulators/sqs/index.js +70 -7
  40. package/dist/server/engine/emulators/sqs/index.js.map +1 -1
  41. package/dist/server/engine/emulators/sqs/queue.d.ts +2 -1
  42. package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -1
  43. package/dist/server/engine/emulators/sqs/queue.js +68 -35
  44. package/dist/server/engine/emulators/sqs/queue.js.map +1 -1
  45. package/dist/server/engine/emulators/ssm/index.d.ts +31 -0
  46. package/dist/server/engine/emulators/ssm/index.d.ts.map +1 -0
  47. package/dist/server/engine/emulators/ssm/index.js +670 -0
  48. package/dist/server/engine/emulators/ssm/index.js.map +1 -0
  49. package/dist/server/engine/http/errors.d.ts +1 -0
  50. package/dist/server/engine/http/errors.d.ts.map +1 -1
  51. package/dist/server/engine/http/errors.js +13 -5
  52. package/dist/server/engine/http/errors.js.map +1 -1
  53. package/dist/server/engine/http/is-aws-request.d.ts.map +1 -1
  54. package/dist/server/engine/http/is-aws-request.js +13 -3
  55. package/dist/server/engine/http/is-aws-request.js.map +1 -1
  56. package/dist/server/engine/http/protocols/aws-json.d.ts +1 -0
  57. package/dist/server/engine/http/protocols/aws-json.d.ts.map +1 -1
  58. package/dist/server/engine/http/protocols/aws-json.js +13 -0
  59. package/dist/server/engine/http/protocols/aws-json.js.map +1 -1
  60. package/dist/server/engine/http/reset.d.ts +4 -0
  61. package/dist/server/engine/http/reset.d.ts.map +1 -0
  62. package/dist/server/engine/http/reset.js +17 -0
  63. package/dist/server/engine/http/reset.js.map +1 -0
  64. package/dist/server/engine/http/router.d.ts +1 -0
  65. package/dist/server/engine/http/router.d.ts.map +1 -1
  66. package/dist/server/engine/http/router.js +185 -34
  67. package/dist/server/engine/http/router.js.map +1 -1
  68. package/dist/server/engine/types.d.ts +2 -1
  69. package/dist/server/engine/types.d.ts.map +1 -1
  70. package/dist/server/routes/apis.d.ts.map +1 -1
  71. package/dist/server/routes/apis.js +6 -0
  72. package/dist/server/routes/apis.js.map +1 -1
  73. package/dist/server/routes/config.d.ts.map +1 -1
  74. package/dist/server/routes/config.js +19 -1
  75. package/dist/server/routes/config.js.map +1 -1
  76. package/dist/server/routes/services.d.ts.map +1 -1
  77. package/dist/server/routes/services.js +49 -1
  78. package/dist/server/routes/services.js.map +1 -1
  79. package/dist/server/runtime/runtime-worker.js +33 -3
  80. package/dist/server/runtime/runtime-worker.js.map +1 -1
  81. package/dist/server/services/api-gateway-events.d.ts +14 -0
  82. package/dist/server/services/api-gateway-events.d.ts.map +1 -1
  83. package/dist/server/services/api-gateway-events.js +114 -8
  84. package/dist/server/services/api-gateway-events.js.map +1 -1
  85. package/dist/server/services/artifact-staleness.d.ts +20 -0
  86. package/dist/server/services/artifact-staleness.d.ts.map +1 -0
  87. package/dist/server/services/artifact-staleness.js +115 -0
  88. package/dist/server/services/artifact-staleness.js.map +1 -0
  89. package/dist/server/services/authorizer-service.d.ts +34 -5
  90. package/dist/server/services/authorizer-service.d.ts.map +1 -1
  91. package/dist/server/services/authorizer-service.js +0 -0
  92. package/dist/server/services/authorizer-service.js.map +1 -1
  93. package/dist/server/services/cfn-intrinsics.d.ts +63 -0
  94. package/dist/server/services/cfn-intrinsics.d.ts.map +1 -0
  95. package/dist/server/services/cfn-intrinsics.js +403 -0
  96. package/dist/server/services/cfn-intrinsics.js.map +1 -0
  97. package/dist/server/services/cfn-physical-values.d.ts +51 -0
  98. package/dist/server/services/cfn-physical-values.d.ts.map +1 -0
  99. package/dist/server/services/cfn-physical-values.js +186 -0
  100. package/dist/server/services/cfn-physical-values.js.map +1 -0
  101. package/dist/server/services/cloudformation-parser.d.ts +26 -3
  102. package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
  103. package/dist/server/services/cloudformation-parser.js +76 -4
  104. package/dist/server/services/cloudformation-parser.js.map +1 -1
  105. package/dist/server/services/config-manager.d.ts +24 -2
  106. package/dist/server/services/config-manager.d.ts.map +1 -1
  107. package/dist/server/services/config-manager.js +60 -7
  108. package/dist/server/services/config-manager.js.map +1 -1
  109. package/dist/server/services/gateway-manager.d.ts.map +1 -1
  110. package/dist/server/services/gateway-manager.js +52 -20
  111. package/dist/server/services/gateway-manager.js.map +1 -1
  112. package/dist/server/services/lambda-runtime-manager.d.ts +1 -0
  113. package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -1
  114. package/dist/server/services/lambda-runtime-manager.js +36 -14
  115. package/dist/server/services/lambda-runtime-manager.js.map +1 -1
  116. package/dist/server/services/raw-api-assembler.d.ts +1 -1
  117. package/dist/server/services/raw-api-assembler.d.ts.map +1 -1
  118. package/dist/server/services/raw-api-assembler.js +18 -8
  119. package/dist/server/services/raw-api-assembler.js.map +1 -1
  120. package/dist/server/services/resource-provisioner.d.ts +12 -0
  121. package/dist/server/services/resource-provisioner.d.ts.map +1 -1
  122. package/dist/server/services/resource-provisioner.js +128 -13
  123. package/dist/server/services/resource-provisioner.js.map +1 -1
  124. package/dist/server/services/serverless-state-parser.d.ts +45 -2
  125. package/dist/server/services/serverless-state-parser.d.ts.map +1 -1
  126. package/dist/server/services/serverless-state-parser.js +217 -29
  127. package/dist/server/services/serverless-state-parser.js.map +1 -1
  128. package/dist/server/services/service-graph.d.ts +76 -0
  129. package/dist/server/services/service-graph.d.ts.map +1 -0
  130. package/dist/server/services/service-graph.js +914 -0
  131. package/dist/server/services/service-graph.js.map +1 -0
  132. package/dist/server/services/service-registrar.d.ts +4 -0
  133. package/dist/server/services/service-registrar.d.ts.map +1 -1
  134. package/dist/server/services/service-registrar.js +129 -55
  135. package/dist/server/services/service-registrar.js.map +1 -1
  136. package/dist/server/services/source-watcher.d.ts +1 -0
  137. package/dist/server/services/source-watcher.d.ts.map +1 -1
  138. package/dist/server/services/source-watcher.js +19 -1
  139. package/dist/server/services/source-watcher.js.map +1 -1
  140. package/dist/server/services/worker-runtime.d.ts +82 -0
  141. package/dist/server/services/worker-runtime.d.ts.map +1 -0
  142. package/dist/server/services/worker-runtime.js +303 -0
  143. package/dist/server/services/worker-runtime.js.map +1 -0
  144. package/dist/ui/assets/{ApisPage-CTOcNna-.js → ApisPage-BkW-QZ0X.js} +1 -1
  145. package/dist/ui/assets/BucketDetailPage-CJwTQJh7.js +1 -0
  146. package/dist/ui/assets/BucketsPage-B1xPVhZC.js +1 -0
  147. package/dist/ui/assets/{DynamoPage-BnFFKnIU.js → DynamoPage-DvbpwZDc.js} +1 -1
  148. package/dist/ui/assets/DynamoTablePage-xn3Lq3so.js +3 -0
  149. package/dist/ui/assets/LambdaDetailPage-BhUyO77H.js +4 -0
  150. package/dist/ui/assets/{LambdasPage-Bg-MWFBb.js → LambdasPage-CUF_4rOH.js} +1 -1
  151. package/dist/ui/assets/OnboardingPage-U49THUzu.js +1 -0
  152. package/dist/ui/assets/OpenSearchCollectionPage-BJTVNCq4.js +1 -0
  153. package/dist/ui/assets/OpenSearchPage-4s-egkB9.js +1 -0
  154. package/dist/ui/assets/OverviewPage-DJeJQktG.js +1 -0
  155. package/dist/ui/assets/{OverviewPage-CSWY71vZ.css → OverviewPage-DjQETmb_.css} +1 -1
  156. package/dist/ui/assets/QueueDetailPage-DWsy5Yt8.js +1 -0
  157. package/dist/ui/assets/QueuesPage-BZJSqman.js +1 -0
  158. package/dist/ui/assets/SecretsPage-YC9ua54G.js +1 -0
  159. package/dist/ui/assets/ServiceDetailPage-Cum5frP4.js +2 -0
  160. package/dist/ui/assets/ServicesPage-IpaPDuqx.js +2 -0
  161. package/dist/ui/assets/SettingsPage-BiCRU8O6.js +1 -0
  162. package/dist/ui/assets/index-BDlrAJhi.css +1 -0
  163. package/dist/ui/assets/index-BouKSS43.js +38 -0
  164. package/dist/ui/assets/resourceIcons-DZs28nbs.js +1 -0
  165. package/dist/ui/index.html +5 -2
  166. package/package.json +1 -1
  167. package/dist/ui/assets/BucketDetailPage-BXW8-FrE.js +0 -1
  168. package/dist/ui/assets/BucketsPage-DY_ITepb.js +0 -1
  169. package/dist/ui/assets/DynamoTablePage-BLCuyJHU.js +0 -3
  170. package/dist/ui/assets/LambdaDetailPage-D4rZNLRT.js +0 -4
  171. package/dist/ui/assets/OnboardingPage-nnl313Fm.js +0 -1
  172. package/dist/ui/assets/OpenSearchCollectionPage-Dn15lH_F.js +0 -1
  173. package/dist/ui/assets/OpenSearchPage-CgD5isok.js +0 -1
  174. package/dist/ui/assets/OverviewPage-m5sUr8IN.js +0 -1
  175. package/dist/ui/assets/QueueDetailPage-Ch_FDDoN.js +0 -1
  176. package/dist/ui/assets/QueuesPage-C_yDuGDu.js +0 -1
  177. package/dist/ui/assets/SecretsPage-BSGMSoqy.js +0 -1
  178. package/dist/ui/assets/ServiceDetailPage-6KyohyjI.js +0 -2
  179. package/dist/ui/assets/ServicesPage-BbSetOMo.js +0 -2
  180. package/dist/ui/assets/SettingsPage-BgF1jFr6.js +0 -1
  181. package/dist/ui/assets/index-D627ZyYU.css +0 -1
  182. package/dist/ui/assets/index-DuSPnI19.js +0 -37
  183. package/dist/ui/assets/resourceIcons-baecADXA.js +0 -1
@@ -0,0 +1,303 @@
1
+ // Pure helpers behind the Lambda runtime worker's process setup: the env a
2
+ // forked worker starts with, the per-invocation env merge, the node_modules
3
+ // links that let an extracted artifact resolve bare ESM specifiers, the
4
+ // execArgv fence for the config API, the `runtime` vs Node major check, and
5
+ // the paths the source watcher must never react to.
6
+ //
7
+ // Split out of LambdaRuntimeManager / SourceWatcher (both integration-only:
8
+ // they fork processes and drive fs.watch) so every rule here is unit-tested.
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ // ---------------------------------------------------------------------------
12
+ // Worker environment
13
+ // ---------------------------------------------------------------------------
14
+ // Credential and profile variables the ORCHESTRATOR may carry from the
15
+ // operator's shell. A forked worker must never inherit them: a handler with
16
+ // the developer's real session token, pointed at an endpoint it did not
17
+ // expect, is how local code ends up writing to a real account. The AWS SDK
18
+ // credential chain reads env credentials first, then the profile — so the
19
+ // session token (which would be paired with the dummy key below and rejected,
20
+ // or worse, accepted) and the profile selectors all go.
21
+ const INHERITED_AWS_VARS_TO_DROP = [
22
+ 'AWS_SESSION_TOKEN',
23
+ 'AWS_SECURITY_TOKEN',
24
+ 'AWS_PROFILE',
25
+ 'AWS_DEFAULT_PROFILE',
26
+ 'AWS_ROLE_ARN',
27
+ 'AWS_ROLE_SESSION_NAME',
28
+ 'AWS_WEB_IDENTITY_TOKEN_FILE',
29
+ 'AWS_CREDENTIAL_EXPIRATION',
30
+ 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI',
31
+ 'AWS_CONTAINER_CREDENTIALS_FULL_URI',
32
+ 'AWS_CONTAINER_AUTHORIZATION_TOKEN',
33
+ ];
34
+ /**
35
+ * The environment a forked runtime worker starts with.
36
+ *
37
+ * Every SDK client a handler creates without an explicit endpoint must land on
38
+ * the engine, not on AWS: `AWS_ENDPOINT_URL` is the variable AWS SDK v3 (and
39
+ * the CLI, boto3, SDK v2 >= 2.1580) reads for that — `AWS_ENDPOINT`, which
40
+ * many templates set, is only a convention that code has to read by hand.
41
+ * Credentials are the engine's dummy pair and the region is the service's.
42
+ *
43
+ * What the orchestrator inherited is the BASE, not the authority: a
44
+ * service-specific `AWS_ENDPOINT_URL_<SERVICE>` exported in the operator's
45
+ * shell would outrank the generic endpoint inside the SDK, so those are dropped
46
+ * too. A template or override that sets any of these explicitly still wins —
47
+ * `serviceEnv` here at fork, function env per invocation in the worker.
48
+ */
49
+ export function buildWorkerEnv(parentEnv, options) {
50
+ const env = { ...parentEnv };
51
+ for (const key of INHERITED_AWS_VARS_TO_DROP)
52
+ delete env[key];
53
+ for (const key of Object.keys(env)) {
54
+ if (key.startsWith('AWS_ENDPOINT_URL_'))
55
+ delete env[key];
56
+ }
57
+ Object.assign(env, {
58
+ AWS_ENDPOINT_URL: options.engineEndpoint,
59
+ AWS_ACCESS_KEY_ID: 'test',
60
+ AWS_SECRET_ACCESS_KEY: 'test',
61
+ AWS_REGION: options.region,
62
+ AWS_DEFAULT_REGION: options.region,
63
+ // Bundled artifacts with externalized deps still resolve against the
64
+ // service's own node_modules — for CommonJS. ESM ignores NODE_PATH; see
65
+ // linkArtifactNodeModules() for that half.
66
+ NODE_PATH: [path.join(options.serviceRoot, 'node_modules'), parentEnv.NODE_PATH || '']
67
+ .filter(Boolean)
68
+ .join(path.delimiter),
69
+ });
70
+ return { ...env, ...(options.serviceEnv ?? {}) };
71
+ }
72
+ /**
73
+ * The env one invocation runs with. Precedence, lowest first: the template's
74
+ * function environment (provider + function level, already merged by the
75
+ * packager), then `serviceRuntime.<svc>.env`, then
76
+ * `serviceRuntime.<svc>.functions.<fn>.env` — the override closest to the
77
+ * function wins, the way a function-level `environment:` beats the provider's.
78
+ */
79
+ export function resolveInvocationEnv(templateEnv, serviceEnv, functionEnv) {
80
+ return { ...(templateEnv ?? {}), ...(serviceEnv ?? {}), ...(functionEnv ?? {}) };
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Artifact node_modules
84
+ // ---------------------------------------------------------------------------
85
+ function isDirectory(target) {
86
+ try {
87
+ return fs.statSync(target).isDirectory();
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ /**
94
+ * Every `node_modules` directory the service would resolve through, nearest
95
+ * first — its own, then each ancestor's (a workspace monorepo hoists most
96
+ * dependencies to the repo root, so the service's own dir is often partial or
97
+ * absent).
98
+ */
99
+ export function ancestorNodeModules(serviceRoot) {
100
+ const found = [];
101
+ let dir = path.resolve(serviceRoot);
102
+ for (;;) {
103
+ const candidate = path.join(dir, 'node_modules');
104
+ if (isDirectory(candidate))
105
+ found.push(candidate);
106
+ const parent = path.dirname(dir);
107
+ if (parent === dir)
108
+ return found;
109
+ dir = parent;
110
+ }
111
+ }
112
+ /**
113
+ * Make bare specifiers resolve from an artifact extracted OUTSIDE the service.
114
+ *
115
+ * The extraction lives under ~/.lss, so a bundle that keeps a package external
116
+ * (`import pg from 'pg'`) has no node_modules anywhere above it. CommonJS gets
117
+ * by on NODE_PATH; ESM does not — the ESM resolver ignores NODE_PATH entirely
118
+ * and only walks the importing file's parent directories. So the walk is given
119
+ * something to find: `<extractDir>/node_modules` links to the nearest
120
+ * node_modules of the service, and `<extractDir>/../node_modules` (the
121
+ * per-service directory that holds the content-addressed extractions) to the
122
+ * next one up — which covers the service's own dependencies plus a monorepo's
123
+ * hoisted root. Node resolves a package to its realpath, so the package's own
124
+ * imports then resolve from inside the service tree as usual.
125
+ *
126
+ * An artifact that ships its own node_modules (non-bundled packaging) is
127
+ * self-contained and left untouched. A link already pointing at the right
128
+ * place is kept; one pointing elsewhere (the service moved) is replaced.
129
+ * Linking is best effort: a filesystem that refuses links (some Windows setups)
130
+ * costs only the ESM externals, so it warns instead of failing the boot.
131
+ *
132
+ * Returns the links that now exist, as `[link, target]` pairs.
133
+ */
134
+ export function linkArtifactNodeModules(extractDir, serviceRoot) {
135
+ const own = path.join(extractDir, 'node_modules');
136
+ const ownStat = lstatOrNull(own);
137
+ if (ownStat && !ownStat.isSymbolicLink())
138
+ return [];
139
+ const targets = ancestorNodeModules(serviceRoot);
140
+ const slots = [extractDir, path.dirname(extractDir)];
141
+ const links = [];
142
+ slots.forEach((slot, index) => {
143
+ const target = targets[index];
144
+ if (!target)
145
+ return;
146
+ const link = path.join(slot, 'node_modules');
147
+ try {
148
+ const existing = lstatOrNull(link);
149
+ if (existing) {
150
+ // Anything that is not one of our links is someone else's directory.
151
+ if (!existing.isSymbolicLink())
152
+ return;
153
+ if (fs.readlinkSync(link) === target) {
154
+ links.push([link, target]);
155
+ return;
156
+ }
157
+ fs.unlinkSync(link);
158
+ }
159
+ // 'junction' makes the call succeed on Windows without the symlink
160
+ // privilege; it is ignored everywhere else.
161
+ fs.symlinkSync(target, link, 'junction');
162
+ links.push([link, target]);
163
+ }
164
+ catch (err) {
165
+ console.warn(`⚠️ Could not link ${link} -> ${target}: ${err instanceof Error ? err.message : String(err)} ` +
166
+ '(ESM imports of external packages from the artifact will not resolve)');
167
+ }
168
+ });
169
+ return links;
170
+ }
171
+ function lstatOrNull(target) {
172
+ try {
173
+ return fs.lstatSync(target);
174
+ }
175
+ catch {
176
+ return null;
177
+ }
178
+ }
179
+ // ---------------------------------------------------------------------------
180
+ // execArgv fence
181
+ // ---------------------------------------------------------------------------
182
+ // Node flags a worker may be forked with when the value arrives through
183
+ // PUT /api/config. That endpoint is unauthenticated and execArgv reaches
184
+ // fork() verbatim, so an open list would be code execution one flag away
185
+ // (`--import data:…`, `--require /tmp/x.js`, `--loader`, `--eval`). An
186
+ // allowlist rather than a blocklist, because node grows new code-loading flags
187
+ // and a blocklist silently goes stale. The set is what a developer actually
188
+ // reaches for: a debugger, source maps, heap/stack sizing, diagnostics.
189
+ //
190
+ // Like every other fence in config-manager.ts this guards the API only — a
191
+ // hand-edited lss.config.json is the operator's own shell and is read as is.
192
+ const EXEC_ARGV_BARE_FLAGS = new Set([
193
+ '--enable-source-maps',
194
+ '--trace-warnings',
195
+ '--trace-deprecation',
196
+ '--trace-uncaught',
197
+ '--no-warnings',
198
+ '--no-deprecation',
199
+ '--expose-gc',
200
+ '--experimental-strip-types',
201
+ '--no-experimental-strip-types',
202
+ '--experimental-transform-types',
203
+ '--experimental-vm-modules',
204
+ '--experimental-require-module',
205
+ '--inspect',
206
+ '--inspect-brk',
207
+ '--inspect-wait',
208
+ ]);
209
+ const EXEC_ARGV_NUMERIC_FLAGS = new Set([
210
+ '--max-old-space-size',
211
+ '--max-semi-space-size',
212
+ '--stack-size',
213
+ '--stack-trace-limit',
214
+ ]);
215
+ const INSPECT_FLAGS = new Set(['--inspect', '--inspect-brk', '--inspect-wait', '--inspect-port']);
216
+ const UNHANDLED_REJECTION_MODES = new Set(['throw', 'strict', 'warn', 'none', 'warn-with-error-code']);
217
+ // A debugger is remote code execution for whoever can reach its port, so the
218
+ // inspector may only bind the loopback: `--inspect=9230`,
219
+ // `--inspect=127.0.0.1:9230`, `--inspect=localhost:9230`, `--inspect=[::1]:9230`.
220
+ const LOOPBACK_INSPECT_VALUE = /^(?:(?:127\.0\.0\.1|localhost|\[::1\]):)?\d{1,5}$/;
221
+ /** Null when `value` is an acceptable execArgv list, else the error message. */
222
+ export function execArgvError(key, value) {
223
+ if (!Array.isArray(value) || !value.every(v => typeof v === 'string')) {
224
+ return `"${key}" must be an array of strings`;
225
+ }
226
+ for (const [index, flag] of value.entries()) {
227
+ const eq = flag.indexOf('=');
228
+ const name = eq === -1 ? flag : flag.slice(0, eq);
229
+ const arg = eq === -1 ? undefined : flag.slice(eq + 1);
230
+ const ok = arg === undefined
231
+ ? EXEC_ARGV_BARE_FLAGS.has(name)
232
+ : (INSPECT_FLAGS.has(name) && LOOPBACK_INSPECT_VALUE.test(arg))
233
+ || (EXEC_ARGV_NUMERIC_FLAGS.has(name) && /^\d+$/.test(arg))
234
+ || (name === '--unhandled-rejections' && UNHANDLED_REJECTION_MODES.has(arg));
235
+ if (!ok) {
236
+ return `"${key}[${index}]": "${flag}" is not an allowed worker flag — through the config API execArgv accepts ` +
237
+ 'only debugger (loopback), source-map, memory/stack sizing and diagnostic flags; ' +
238
+ 'set anything else by editing lss.config.json';
239
+ }
240
+ }
241
+ return null;
242
+ }
243
+ // ---------------------------------------------------------------------------
244
+ // runtime vs Node major
245
+ // ---------------------------------------------------------------------------
246
+ /**
247
+ * A warning when the functions declare a Node runtime (`nodejs20.x`) whose
248
+ * major differs from the Node the workers run on — handlers are executed by
249
+ * the orchestrator's own Node, so a template targeting 18 that leans on an API
250
+ * only 22 has (or the reverse) would pass locally and fail deployed. Null when
251
+ * every declared Node runtime matches, or none is a Node runtime at all.
252
+ */
253
+ export function runtimeMismatchWarning(serviceName, runtimes, nodeVersion) {
254
+ const workerMajor = Number(nodeVersion.replace(/^v/, '').split('.')[0]);
255
+ const declared = new Set();
256
+ for (const runtime of runtimes) {
257
+ const match = /^nodejs(\d+)\.x$/.exec(runtime ?? '');
258
+ if (match)
259
+ declared.add(Number(match[1]));
260
+ }
261
+ const mismatched = [...declared].filter(major => major !== workerMajor).sort((a, b) => a - b);
262
+ if (mismatched.length === 0)
263
+ return null;
264
+ return `⚠️ "${serviceName}" declares ${mismatched.map(m => `nodejs${m}.x`).join(', ')} but its Lambda workers ` +
265
+ `run on Node ${workerMajor} (the orchestrator's) — behaviour that differs between the two majors will not show up locally`;
266
+ }
267
+ // ---------------------------------------------------------------------------
268
+ // Watcher exclusions
269
+ // ---------------------------------------------------------------------------
270
+ function realpathOrSelf(target) {
271
+ try {
272
+ return fs.realpathSync(target);
273
+ }
274
+ catch {
275
+ return target;
276
+ }
277
+ }
278
+ /**
279
+ * The paths among `candidates` that sit strictly INSIDE `root`, returned
280
+ * relative to it (platform separators) — the form the watcher's event
281
+ * filenames arrive in. Candidates outside the root, or equal to it, are
282
+ * dropped: ignoring the root itself would silently disable the watch. Both
283
+ * sides are realpath-resolved when they exist, so a symlinked checkout still
284
+ * matches.
285
+ */
286
+ export function ignoredSubpaths(root, candidates) {
287
+ const realRoot = realpathOrSelf(path.resolve(root));
288
+ const result = new Set();
289
+ for (const candidate of candidates) {
290
+ if (!candidate)
291
+ continue;
292
+ const relative = path.relative(realRoot, realpathOrSelf(path.resolve(candidate)));
293
+ if (!relative || relative.startsWith('..') || path.isAbsolute(relative))
294
+ continue;
295
+ result.add(relative);
296
+ }
297
+ return [...result];
298
+ }
299
+ /** True when `filename` (relative to the watched root) is, or is under, one of `ignored`. */
300
+ export function isIgnoredSubpath(filename, ignored) {
301
+ return ignored.some(rel => filename === rel || filename.startsWith(rel + path.sep));
302
+ }
303
+ //# sourceMappingURL=worker-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../../../src/server/services/worker-runtime.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{k as D,m as Y,o as q,n as c,e as d,a7 as e,v as y,ac as a,j as n,y as G,z as C,x as T,L as H,i as r,a6 as u,f as v,w as K,P as I,g as P,F as A,s as W,t as Z,Q as R,J as V,A as g,u as m,R as L,D as b,I as ee,a8 as ae,p as z,b as S,a as j,c as te}from"./index-DuSPnI19.js";const le=D({__name:"ApisView",setup(B){const{t}=ae(),k=te(),p=z([]),h=z(!0),_=z(null),f=z({});let w=null;const F=S(()=>[{key:"method",label:t("apis.colMethod")},{key:"path",label:t("apis.colPath")},{key:"functionName",label:t("apis.colFunction")},{key:"eventType",label:t("common.type")},{key:"authorizerName",label:t("apis.colAuth")},{key:"actions",label:"",align:"right"}]),M=S(()=>[{key:"name",label:t("common.name")},{key:"type",label:t("common.type")},{key:"payloadVersion",label:t("apis.colPayload")},{key:"resultTtlInSeconds",label:"TTL",align:"right"},{key:"identitySource",label:t("apis.colIdentitySource")},{key:"target",label:t("apis.colTarget")}]),$=S(()=>({services:p.value.length,routes:p.value.reduce((i,o)=>i+o.routes.length,0),online:p.value.filter(i=>i.status==="online").length}));function U(i){return i.routes.map(o=>({...o}))}function E(i){return i.authorizers.map(o=>({...o,identitySource:o.identitySource.join(", "),target:o.functionName||o.arn||""}))}async function N(){try{p.value=await j.listApis(),_.value=null}catch(i){_.value=i.message||t("apis.loadError")}finally{h.value=!1}}async function O(i){if(!f.value[i]){f.value={...f.value,[i]:!0};try{const o=await j.clearAuthorizerCache({service:i});k.add({title:t("apis.cacheCleared"),description:o.removed===1?t("apis.cacheClearedOne",{count:o.removed}):t("apis.cacheClearedMany",{count:o.removed}),variant:"success"})}catch(o){k.add({title:t("apis.cacheClearFailed"),description:o.message,variant:"danger"})}finally{f.value={...f.value,[i]:!1}}}}function J(i,o){var l;const s=`curl -X ${o.method} http://localhost:${i.apiPort}${o.path}`;(l=navigator.clipboard)==null||l.writeText(s).then(()=>{k.add({title:t("apis.curlCopied"),description:s,variant:"success"})})}function x(i){switch(i){case"online":return"success";case"port-conflict":return"warning";default:return"neutral"}}function Q(i){switch(i){case"online":return t("common.online");case"stopped":return t("common.stopped");case"disabled":return t("common.disabled");case"port-conflict":return t("apis.statusPortConflict");default:return t("common.unknown")}}function X(i){return i==="ANY"?"info":"neutral"}return Y(()=>{N(),w=window.setInterval(N,1e4)}),q(()=>{w&&window.clearInterval(w)}),(i,o)=>(c(),d(e(y),{direction:"vertical",gap:"1.25rem"},{default:a(()=>[n(e(G),{columns:3,gap:"1rem"},{default:a(()=>[n(e(C),{label:e(t)("apis.statServices"),value:$.value.services,tone:"info",loading:h.value},null,8,["label","value","loading"]),n(e(C),{label:e(t)("apis.statRoutes"),value:$.value.routes,tone:"info",loading:h.value},{icon:a(()=>[n(e(T),{name:"aws-api-gateway"})]),_:1},8,["label","value","loading"]),n(e(C),{label:e(t)("apis.statListenersOnline"),value:$.value.online,tone:"success",loading:h.value},null,8,["label","value","loading"])]),_:1}),_.value?(c(),d(e(H),{key:0,variant:"danger",dismissible:"",onDismiss:o[0]||(o[0]=s=>_.value=null)},{default:a(()=>[r(u(_.value),1)]),_:1})):v("",!0),h.value&&!p.value.length?(c(),d(e(y),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[n(e(K),{label:e(t)("apis.loadingApis")},null,8,["label"])]),_:1})):p.value.length?v("",!0):(c(),d(e(I),{key:2,title:e(t)("apis.emptyTitle"),description:e(t)("apis.emptyDescription")},{icon:a(()=>[n(e(T),{name:"aws-api-gateway"})]),_:1},8,["title","description"])),(c(!0),P(A,null,W(p.value,s=>(c(),d(e(Z),{key:s.service,variant:"outline"},{header:a(()=>[n(e(y),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between",wrap:""},{default:a(()=>[n(e(y),{direction:"horizontal",gap:"0.5rem",align:"center",wrap:""},{default:a(()=>[n(e(L),{to:`/services/${encodeURIComponent(s.service)}`},{default:a(()=>[n(e(m),{weight:"semibold"},{default:a(()=>[r(u(s.service),1)]),_:2},1024)]),_:2},1032,["to"]),s.apiPort?(c(),d(e(b),{key:0,tone:"info",variant:"soft"},{default:a(()=>[r(":"+u(s.apiPort),1)]),_:2},1024)):v("",!0),n(e(b),{tone:x(s.status),variant:"soft"},{default:a(()=>[r(u(Q(s.status)),1)]),_:2},1032,["tone"]),s.invokePort?(c(),d(e(b),{key:1,tone:x(s.invokeStatus),variant:"soft"},{default:a(()=>[r(" invoke :"+u(s.invokePort),1)]),_:2},1032,["tone"])):v("",!0),s.stage?(c(),d(e(g),{key:2,size:"sm",variant:"soft"},{default:a(()=>[r("stage: "+u(s.stage),1)]),_:2},1024)):v("",!0)]),_:2},1024),n(e(V),{size:"sm",variant:"ghost",loading:f.value[s.service],onClick:l=>O(s.service)},{default:a(()=>[r(u(e(t)("apis.clearCache")),1)]),_:1},8,["loading","onClick"])]),_:2},1024)]),default:a(()=>[n(e(y),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[s.routes.length?(c(),d(e(R),{key:0,columns:F.value,rows:U(s),"aria-label":e(t)("apis.routesTableLabel")},{"cell-method":a(({row:l})=>[n(e(b),{tone:X(String(l.method)),variant:"soft"},{default:a(()=>[r(u(l.method),1)]),_:2},1032,["tone"])]),"cell-path":a(({row:l})=>[n(e(m),{family:"mono"},{default:a(()=>[r(u(l.path),1)]),_:2},1024)]),"cell-functionName":a(({row:l})=>[n(e(L),{to:`/lambdas/${encodeURIComponent(String(l.functionName))}`,underline:"none"},{default:a(()=>[n(e(g),{size:"sm",variant:"soft"},{icon:a(()=>[n(e(T),{name:"aws-lambda"})]),default:a(()=>[r(" "+u(l.functionName),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-eventType":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.payloadVersion==="2.0"?"v2":"v1"),1)]),_:2},1024)]),"cell-authorizerName":a(({row:l})=>[l.authorizerName?(c(),d(e(g),{key:0,size:"sm",variant:"soft"},{default:a(()=>[r(u(l.authorizerName),1)]),_:2},1024)):(c(),d(e(m),{key:1,tone:"muted"},{default:a(()=>[...o[1]||(o[1]=[r("—",-1)])]),_:1}))]),"cell-actions":a(({row:l})=>[n(e(y),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:a(()=>[n(e(V),{size:"sm",variant:"ghost",onClick:ne=>J(s,l)},{default:a(()=>[r(u(e(t)("apis.copyCurl")),1)]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1032,["columns","rows","aria-label"])):(c(),d(e(I),{key:1,title:e(t)("apis.noRoutesTitle"),description:e(t)("apis.noRoutesDescription")},null,8,["title","description"])),s.authorizers.length?(c(),P(A,{key:2},[n(e(ee)),n(e(m),{weight:"semibold",size:"sm"},{default:a(()=>[r(u(e(t)("apis.authorizers")),1)]),_:1}),n(e(R),{columns:M.value,rows:E(s),"aria-label":e(t)("apis.authorizers")},{"cell-name":a(({row:l})=>[n(e(m),{family:"mono",size:"sm"},{default:a(()=>[r(u(l.name),1)]),_:2},1024)]),"cell-type":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.type),1)]),_:2},1024)]),"cell-payloadVersion":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.payloadVersion==="2.0"?"v2":"v1"),1)]),_:2},1024)]),"cell-resultTtlInSeconds":a(({row:l})=>[n(e(m),{family:"mono",size:"sm"},{default:a(()=>[r(u(l.resultTtlInSeconds)+"s",1)]),_:2},1024)]),"cell-identitySource":a(({row:l})=>[n(e(m),{family:"mono",size:"xs"},{default:a(()=>[r(u(l.identitySource||"—"),1)]),_:2},1024)]),"cell-target":a(({row:l})=>[l.target?(c(),d(e(m),{key:0,family:"mono",size:"xs"},{default:a(()=>[r(u(l.target),1)]),_:2},1024)):(c(),d(e(m),{key:1,tone:"muted"},{default:a(()=>[...o[2]||(o[2]=[r("—",-1)])]),_:1}))]),_:1},8,["columns","rows","aria-label"])],64)):v("",!0)]),_:2},1024)]),_:2},1024))),128))]),_:1}))}}),ie=D({__name:"ApisPage",setup(B){return(t,k)=>(c(),d(le))}});export{ie as default};
1
+ import{l as B,n as X,o as Y,p as c,f as d,a9 as e,x as y,ae as a,k as n,A as H,B as $,z as T,N as J,j as r,a8 as u,g as v,y as Q,R as A,h as I,F as P,t as W,v as Z,S as R,L as V,C as g,w as m,T as L,G as b,K as ee,aa as ae,q as z,d as S,a as j,c as te}from"./index-BouKSS43.js";const le=B({__name:"ApisView",setup(D){const{t}=ae(),k=te(),p=z([]),h=z(!0),_=z(null),f=z({});let w=null;const F=S(()=>[{key:"method",label:t("apis.colMethod")},{key:"path",label:t("apis.colPath")},{key:"functionName",label:t("apis.colFunction")},{key:"eventType",label:t("common.type")},{key:"authorizerName",label:t("apis.colAuth")},{key:"actions",label:"",align:"right"}]),M=S(()=>[{key:"name",label:t("common.name")},{key:"type",label:t("common.type")},{key:"payloadVersion",label:t("apis.colPayload")},{key:"resultTtlInSeconds",label:"TTL",align:"right"},{key:"identitySource",label:t("apis.colIdentitySource")},{key:"target",label:t("apis.colTarget")}]),C=S(()=>({services:p.value.length,routes:p.value.reduce((i,o)=>i+o.routes.length,0),online:p.value.filter(i=>i.status==="online").length}));function U(i){return i.routes.map(o=>({...o}))}function E(i){return i.authorizers.map(o=>({...o,identitySource:o.identitySource.join(", "),target:o.functionName||o.arn||""}))}async function N(){try{p.value=await j.listApis(),_.value=null}catch(i){_.value=i.message||t("apis.loadError")}finally{h.value=!1}}async function O(i){if(!f.value[i]){f.value={...f.value,[i]:!0};try{const o=await j.clearAuthorizerCache({service:i});k.add({title:t("apis.cacheCleared"),description:o.removed===1?t("apis.cacheClearedOne",{count:o.removed}):t("apis.cacheClearedMany",{count:o.removed}),variant:"success"})}catch(o){k.add({title:t("apis.cacheClearFailed"),description:o.message,variant:"danger"})}finally{f.value={...f.value,[i]:!1}}}}function q(i,o){var l;const s=`curl -X ${o.method} http://localhost:${i.apiPort}${o.path}`;(l=navigator.clipboard)==null||l.writeText(s).then(()=>{k.add({title:t("apis.curlCopied"),description:s,variant:"success"})})}function x(i){switch(i){case"online":return"success";case"port-conflict":return"warning";default:return"neutral"}}function G(i){switch(i){case"online":return t("common.online");case"stopped":return t("common.stopped");case"disabled":return t("common.disabled");case"port-conflict":return t("apis.statusPortConflict");default:return t("common.unknown")}}function K(i){return i==="ANY"?"info":"neutral"}return X(()=>{N(),w=window.setInterval(N,1e4)}),Y(()=>{w&&window.clearInterval(w)}),(i,o)=>(c(),d(e(y),{direction:"vertical",gap:"1.25rem"},{default:a(()=>[n(e(H),{columns:3,gap:"1rem"},{default:a(()=>[n(e($),{label:e(t)("apis.statServices"),value:C.value.services,tone:"info",loading:h.value},null,8,["label","value","loading"]),n(e($),{label:e(t)("apis.statRoutes"),value:C.value.routes,tone:"info",loading:h.value},{icon:a(()=>[n(e(T),{name:"aws-api-gateway"})]),_:1},8,["label","value","loading"]),n(e($),{label:e(t)("apis.statListenersOnline"),value:C.value.online,tone:"success",loading:h.value},null,8,["label","value","loading"])]),_:1}),_.value?(c(),d(e(J),{key:0,variant:"danger",dismissible:"",onDismiss:o[0]||(o[0]=s=>_.value=null)},{default:a(()=>[r(u(_.value),1)]),_:1})):v("",!0),h.value&&!p.value.length?(c(),d(e(y),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[n(e(Q),{label:e(t)("apis.loadingApis")},null,8,["label"])]),_:1})):p.value.length?v("",!0):(c(),d(e(A),{key:2,title:e(t)("apis.emptyTitle"),description:e(t)("apis.emptyDescription")},{icon:a(()=>[n(e(T),{name:"aws-api-gateway"})]),_:1},8,["title","description"])),(c(!0),I(P,null,W(p.value,s=>(c(),d(e(Z),{key:s.service,variant:"outline"},{header:a(()=>[n(e(y),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between",wrap:""},{default:a(()=>[n(e(y),{direction:"horizontal",gap:"0.5rem",align:"center",wrap:""},{default:a(()=>[n(e(L),{to:`/services/${encodeURIComponent(s.service)}`},{default:a(()=>[n(e(m),{weight:"semibold"},{default:a(()=>[r(u(s.service),1)]),_:2},1024)]),_:2},1032,["to"]),s.apiPort?(c(),d(e(b),{key:0,tone:"info",variant:"soft"},{default:a(()=>[r(":"+u(s.apiPort),1)]),_:2},1024)):v("",!0),n(e(b),{tone:x(s.status),variant:"soft"},{default:a(()=>[r(u(G(s.status)),1)]),_:2},1032,["tone"]),s.invokePort?(c(),d(e(b),{key:1,tone:x(s.invokeStatus),variant:"soft"},{default:a(()=>[r(" invoke :"+u(s.invokePort),1)]),_:2},1032,["tone"])):v("",!0),s.stage?(c(),d(e(g),{key:2,size:"sm",variant:"soft"},{default:a(()=>[r("stage: "+u(s.stage),1)]),_:2},1024)):v("",!0)]),_:2},1024),n(e(V),{size:"sm",variant:"ghost",loading:f.value[s.service],onClick:l=>O(s.service)},{default:a(()=>[r(u(e(t)("apis.clearCache")),1)]),_:1},8,["loading","onClick"])]),_:2},1024)]),default:a(()=>[n(e(y),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[s.routes.length?(c(),d(e(R),{key:0,columns:F.value,rows:U(s),"aria-label":e(t)("apis.routesTableLabel")},{"cell-method":a(({row:l})=>[n(e(b),{tone:K(String(l.method)),variant:"soft"},{default:a(()=>[r(u(l.method),1)]),_:2},1032,["tone"])]),"cell-path":a(({row:l})=>[n(e(m),{family:"mono"},{default:a(()=>[r(u(l.path),1)]),_:2},1024)]),"cell-functionName":a(({row:l})=>[n(e(L),{to:`/lambdas/${encodeURIComponent(String(l.functionName))}`,underline:"none"},{default:a(()=>[n(e(g),{size:"sm",variant:"soft"},{icon:a(()=>[n(e(T),{name:"aws-lambda"})]),default:a(()=>[r(" "+u(l.functionName),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-eventType":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.payloadVersion==="2.0"?"v2":"v1"),1)]),_:2},1024)]),"cell-authorizerName":a(({row:l})=>[l.authorizerName?(c(),d(e(g),{key:0,size:"sm",variant:"soft"},{default:a(()=>[r(u(l.authorizerName),1)]),_:2},1024)):(c(),d(e(m),{key:1,tone:"muted"},{default:a(()=>[...o[1]||(o[1]=[r("—",-1)])]),_:1}))]),"cell-actions":a(({row:l})=>[n(e(y),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:a(()=>[n(e(V),{size:"sm",variant:"ghost",onClick:ne=>q(s,l)},{default:a(()=>[r(u(e(t)("apis.copyCurl")),1)]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1032,["columns","rows","aria-label"])):(c(),d(e(A),{key:1,title:e(t)("apis.noRoutesTitle"),description:e(t)("apis.noRoutesDescription")},null,8,["title","description"])),s.authorizers.length?(c(),I(P,{key:2},[n(e(ee)),n(e(m),{weight:"semibold",size:"sm"},{default:a(()=>[r(u(e(t)("apis.authorizers")),1)]),_:1}),n(e(R),{columns:M.value,rows:E(s),"aria-label":e(t)("apis.authorizers")},{"cell-name":a(({row:l})=>[n(e(m),{family:"mono",size:"sm"},{default:a(()=>[r(u(l.name),1)]),_:2},1024)]),"cell-type":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.type),1)]),_:2},1024)]),"cell-payloadVersion":a(({row:l})=>[n(e(g),{size:"sm",variant:"soft"},{default:a(()=>[r(u(l.payloadVersion==="2.0"?"v2":"v1"),1)]),_:2},1024)]),"cell-resultTtlInSeconds":a(({row:l})=>[n(e(m),{family:"mono",size:"sm"},{default:a(()=>[r(u(l.resultTtlInSeconds)+"s",1)]),_:2},1024)]),"cell-identitySource":a(({row:l})=>[n(e(m),{family:"mono",size:"xs"},{default:a(()=>[r(u(l.identitySource||"—"),1)]),_:2},1024)]),"cell-target":a(({row:l})=>[l.target?(c(),d(e(m),{key:0,family:"mono",size:"xs"},{default:a(()=>[r(u(l.target),1)]),_:2},1024)):(c(),d(e(m),{key:1,tone:"muted"},{default:a(()=>[...o[2]||(o[2]=[r("—",-1)])]),_:1}))]),_:1},8,["columns","rows","aria-label"])],64)):v("",!0)]),_:2},1024)]),_:2},1024))),128))]),_:1}))}}),ie=B({__name:"ApisPage",setup(D){return(t,k)=>(c(),d(le))}});export{ie as default};
@@ -0,0 +1 @@
1
+ import{l as G,n as X,ad as Y,f as k,a9 as e,x as c,ae as l,a as g,p as f,k as a,L as p,z as D,j as i,a8 as s,w as M,G as Z,g as O,N as ee,y as K,h as te,B as _,A as ae,O as S,P as T,$ as le,v as P,R as ne,S as oe,T as ue,af as ie,F as se,aa as re,c as ce,q as d,d as E,ac as de}from"./index-BouKSS43.js";const be=G({__name:"BucketDetail",props:{bucketName:{}},emits:["back"],setup($,{emit:B}){const b=$,F=B,{t}=re(),v=ce(),r=d(null),y=d([]),x=d(""),U=d(!0),w=d(!1),h=d(null),j=d(""),z=d(""),N=d("text/plain"),C=d(!1),R=E(()=>[{key:"key",label:t("buckets.colKey")},{key:"size",label:t("common.size"),align:"right"},{key:"lastModified",label:t("buckets.colModified")},{key:"actions",label:"",align:"right"}]),q=E(()=>y.value.reduce((o,u)=>o+(u.size||0),0));function V(o){if(o==null)return"—";if(o===0)return"0 B";const u=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(o)/Math.log(1024));return`${(o/Math.pow(1024,n)).toFixed(n===0?0:1)} ${u[n]}`}function A(o){return o?new Date(o).toLocaleString():"—"}async function L(){try{r.value=await g.getBucket(b.bucketName),h.value=null}catch(o){h.value=o.message||t("buckets.detailLoadFailed"),r.value=null}finally{U.value=!1}}async function m(){w.value=!0;try{const o=await g.listBucketObjects(b.bucketName,{prefix:x.value||void 0,maxKeys:200});y.value=o.objects}catch(o){v.add({title:t("buckets.objectsLoadFailed"),description:o.message,variant:"danger"})}finally{w.value=!1}}function H(o){return g.bucketObjectContentUrl(b.bucketName,o,!1)}function I(o){return g.bucketObjectContentUrl(b.bucketName,o,!0)}async function J(o){if(confirm(t("buckets.deleteConfirm",{key:o})))try{await g.deleteBucketObject(b.bucketName,o),v.add({title:t("buckets.deleteSuccess"),variant:"info"}),await m()}catch(u){v.add({title:t("buckets.deleteFailed"),description:u.message,variant:"danger"})}}async function Q(){if(!j.value||!z.value){v.add({title:t("buckets.uploadMissingFields"),variant:"warning"});return}C.value=!0;try{await g.putBucketObject(b.bucketName,{key:j.value,body:z.value,contentType:N.value||void 0}),v.add({title:t("buckets.uploadSuccess"),variant:"info"}),j.value="",z.value="",await m(),await L()}catch(o){v.add({title:t("buckets.uploadFailed"),description:o.message,variant:"danger"})}finally{C.value=!1}}return X(()=>{L(),m()}),Y(()=>b.bucketName,()=>{L(),m()}),(o,u)=>(f(),k(e(c),{direction:"vertical",gap:"1rem"},{default:l(()=>[a(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:l(()=>[a(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:l(()=>{var n;return[a(e(p),{size:"sm",variant:"ghost",onClick:u[0]||(u[0]=W=>F("back"))},{default:l(()=>[a(e(D),{name:"arrow-left"}),i(" "+s(e(t)("buckets.backToBuckets")),1)]),_:1}),a(e(D),{name:"aws-s3"}),a(e(M),{size:"lg",weight:"semibold"},{default:l(()=>[i(s($.bucketName),1)]),_:1}),(n=r.value)!=null&&n.versioning?(f(),k(e(Z),{key:0,tone:"info",variant:"soft"},{default:l(()=>[i(s(e(t)("buckets.versioning")),1)]),_:1})):O("",!0)]}),_:1}),a(e(p),{size:"sm",variant:"ghost",loading:w.value,"loading-label":e(t)("common.loading"),onClick:u[1]||(u[1]=n=>m())},{default:l(()=>[i(s(e(t)("common.refresh")),1)]),_:1},8,["loading","loading-label"])]),_:1}),h.value?(f(),k(e(ee),{key:0,variant:"danger",dismissible:"",onDismiss:u[2]||(u[2]=n=>h.value=null)},{default:l(()=>[i(s(h.value),1)]),_:1})):O("",!0),U.value&&!r.value?(f(),k(e(c),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:l(()=>[a(e(K),{label:e(t)("buckets.detailLoading")},null,8,["label"])]),_:1})):r.value?(f(),te(se,{key:2},[a(e(ae),{columns:4,gap:"0.75rem"},{default:l(()=>[a(e(_),{label:e(t)("buckets.statObjects"),value:r.value.objectCount??0,tone:"info"},null,8,["label","value"]),a(e(_),{label:e(t)("common.size"),value:V(r.value.totalSize),tone:"neutral"},null,8,["label","value"]),a(e(_),{label:e(t)("buckets.versioning"),value:r.value.versioning?e(t)("buckets.enabled"):e(t)("buckets.disabled"),tone:r.value.versioning?"success":"neutral"},null,8,["label","value","tone"]),a(e(_),{label:e(t)("buckets.statNotifications"),value:r.value.notifications??0,tone:(r.value.notifications??0)>0?"info":"neutral"},null,8,["label","value","tone"])]),_:1}),a(e(P),{variant:"outline"},{header:l(()=>[a(e(M),{weight:"semibold"},{default:l(()=>[i(s(e(t)("buckets.uploadTitle")),1)]),_:1})]),default:l(()=>[a(e(c),{direction:"vertical",gap:"0.5rem"},{default:l(()=>[a(e(S),{label:e(t)("buckets.keyLabel")},{default:l(()=>[a(e(T),{modelValue:j.value,"onUpdate:modelValue":u[3]||(u[3]=n=>j.value=n),placeholder:"object/key.txt"},null,8,["modelValue"])]),_:1},8,["label"]),a(e(S),{label:e(t)("buckets.contentTypeLabel")},{default:l(()=>[a(e(T),{modelValue:N.value,"onUpdate:modelValue":u[4]||(u[4]=n=>N.value=n),placeholder:"text/plain"},null,8,["modelValue"])]),_:1},8,["label"]),a(e(S),{label:e(t)("buckets.bodyLabel")},{default:l(()=>[a(e(le),{modelValue:z.value,"onUpdate:modelValue":u[5]||(u[5]=n=>z.value=n),family:"mono",rows:4,placeholder:e(t)("buckets.bodyPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a(e(c),{direction:"horizontal",justify:"flex-end"},{default:l(()=>[a(e(p),{size:"sm",loading:C.value,"loading-label":e(t)("common.loading"),onClick:Q},{default:l(()=>[i(s(e(t)("buckets.upload")),1)]),_:1},8,["loading","loading-label"])]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:l(()=>[a(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:l(()=>[a(e(M),{weight:"semibold"},{default:l(()=>[i(s(e(t)("buckets.objectsHeader",{count:y.value.length,size:V(q.value)})),1)]),_:1}),a(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:l(()=>[a(e(T),{modelValue:x.value,"onUpdate:modelValue":u[6]||(u[6]=n=>x.value=n),placeholder:e(t)("buckets.prefixPlaceholder"),"aria-label":e(t)("buckets.prefixLabel"),size:"sm",onKeyup:u[7]||(u[7]=ie(n=>m(),["enter"]))},null,8,["modelValue","placeholder","aria-label"]),a(e(p),{size:"sm",variant:"ghost",onClick:u[8]||(u[8]=n=>m())},{default:l(()=>[i(s(e(t)("buckets.apply")),1)]),_:1})]),_:1})]),_:1})]),default:l(()=>[w.value?(f(),k(e(c),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:l(()=>[a(e(K),{label:e(t)("buckets.objectsLoading")},null,8,["label"])]),_:1})):y.value.length?(f(),k(e(oe),{key:2,columns:R.value,rows:y.value,"aria-label":e(t)("buckets.objectsTableLabel")},{"cell-key":l(({row:n})=>[a(e(ue),{href:H(String(n.key)),external:""},{default:l(()=>[i(s(n.key),1)]),_:2},1032,["href"])]),"cell-size":l(({row:n})=>[i(s(V(Number(n.size))),1)]),"cell-lastModified":l(({row:n})=>[i(s(A(n.lastModified)),1)]),"cell-actions":l(({row:n})=>[a(e(c),{direction:"horizontal",gap:"0.25rem",justify:"flex-end"},{default:l(()=>[a(e(p),{as:"a",href:I(String(n.key)),target:"_blank",rel:"noopener noreferrer",size:"sm",variant:"ghost"},{default:l(()=>[i(s(e(t)("buckets.download")),1)]),_:1},8,["href"]),a(e(p),{size:"sm",variant:"ghost",tone:"danger",onClick:W=>J(String(n.key))},{default:l(()=>[i(s(e(t)("common.delete")),1)]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["columns","rows","aria-label"])):(f(),k(e(ne),{key:1,title:e(t)("buckets.objectsEmptyTitle"),description:e(t)("buckets.objectsEmptyDescription")},null,8,["title","description"]))]),_:1})],64)):O("",!0)]),_:1}))}}),ke=G({__name:"BucketDetailPage",props:{bucketName:{}},setup($){const B=de();function b(){B.push("/buckets")}return(F,t)=>(f(),k(be,{"bucket-name":$.bucketName,onBack:b},null,8,["bucket-name"]))}});export{ke as default};
@@ -0,0 +1 @@
1
+ import{l as N,ac as V,n as D,o as E,p as u,f as r,a9 as e,x as f,ae as a,k as s,A as L,B as _,N as U,j as o,a8 as i,g as G,v as O,y as q,R as A,z as j,S as F,L as P,G as h,T as S,C as H,w as $,aa as K,q as m,d as y,a as x}from"./index-BouKSS43.js";import{E as J}from"./engine-D0mFFNbL.js";const Q=N({__name:"BucketsView",setup(I){const{t:n}=K(),B=V(),d=m([]),w=m({}),b=m(!0),v=m(null);let k=null;const M=y(()=>[{key:"name",label:n("buckets.colBucket")},{key:"service",label:n("common.service")},{key:"objectCount",label:n("buckets.colObjects"),align:"right"},{key:"totalSize",label:n("common.size"),align:"right"},{key:"versioning",label:n("buckets.colVersioning")},{key:"notifications",label:n("buckets.colNotifications"),align:"right"},{key:"actions",label:"",align:"right"}]),R=y(()=>d.value.map(l=>({...l,service:w.value[l.name]||""}))),g=y(()=>({buckets:d.value.length,objects:d.value.reduce((l,c)=>l+(c.objectCount||0),0),size:d.value.reduce((l,c)=>l+(c.totalSize||0),0)}));function z(l){if(l==null)return"—";if(l===0)return"0 B";const c=["B","KB","MB","GB","TB"],t=Math.floor(Math.log(l)/Math.log(1024));return`${(l/Math.pow(1024,t)).toFixed(t===0?0:1)} ${c[t]}`}async function C(){try{const[l,c]=await Promise.all([x.listBuckets(),x.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);d.value=l;const t={};for(const p of c.buckets||[])t[p.name]=p.service;w.value=t,v.value=null}catch(l){v.value=l.message||n("buckets.loadFailed")}finally{b.value=!1}}function T(l){B.push(`/buckets/${encodeURIComponent(l)}`)}return D(()=>{C(),k=window.setInterval(C,1e4)}),E(()=>{k&&window.clearInterval(k)}),(l,c)=>(u(),r(e(f),{direction:"vertical",gap:"1.25rem"},{default:a(()=>[s(e(L),{columns:3,gap:"1rem"},{default:a(()=>[s(e(_),{label:e(n)("buckets.statBuckets"),value:g.value.buckets,tone:"info",loading:b.value},null,8,["label","value","loading"]),s(e(_),{label:e(n)("buckets.statObjects"),value:g.value.objects,tone:"success",loading:b.value},null,8,["label","value","loading"]),s(e(_),{label:e(n)("buckets.statTotalSize"),value:z(g.value.size),tone:"neutral",loading:b.value},null,8,["label","value","loading"])]),_:1}),v.value?(u(),r(e(U),{key:0,variant:"danger",dismissible:"",onDismiss:c[0]||(c[0]=t=>v.value=null)},{default:a(()=>[o(i(v.value),1)]),_:1})):G("",!0),s(e(O),{variant:"outline"},{header:a(()=>[s(e(f),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[s(e(f),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[s(e(j),{name:"aws-s3"}),s(e($),{weight:"semibold"},{default:a(()=>[o(i(e(n)("buckets.title")),1)]),_:1})]),_:1}),s(e($),{tone:"muted"},{default:a(()=>[o(i(e(n)("buckets.refreshHint")),1)]),_:1})]),_:1})]),default:a(()=>[b.value?(u(),r(e(f),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[s(e(q),{label:e(n)("buckets.loading")},null,8,["label"])]),_:1})):d.value.length?(u(),r(e(F),{key:2,columns:M.value,rows:R.value,"aria-label":e(n)("buckets.tableLabel")},{"cell-name":a(({row:t})=>[s(e(S),{to:`/buckets/${encodeURIComponent(String(t.name))}`,weight:"semibold"},{default:a(()=>[o(i(t.name),1)]),_:2},1032,["to"])]),"cell-service":a(({row:t})=>[t.service?(u(),r(e(S),{key:0,to:`/services/${encodeURIComponent(String(t.service))}`,underline:"none"},{default:a(()=>[s(e(H),{size:"sm",variant:"soft"},{default:a(()=>[o(i(t.service),1)]),_:2},1024)]),_:2},1032,["to"])):(u(),r(e($),{key:1,tone:"muted",size:"xs"},{default:a(()=>[o(i(e(n)("buckets.unmanaged")),1)]),_:1}))]),"cell-objectCount":a(({row:t})=>[s(e(h),{tone:"info",variant:"soft"},{default:a(()=>[o(i(t.objectCount??0),1)]),_:2},1024)]),"cell-totalSize":a(({row:t})=>[o(i(z(t.totalSize)),1)]),"cell-versioning":a(({row:t})=>[s(e(h),{tone:t.versioning?"success":"neutral",variant:"soft"},{default:a(()=>[o(i(t.versioning?e(n)("buckets.enabled"):e(n)("buckets.disabled")),1)]),_:2},1032,["tone"])]),"cell-notifications":a(({row:t})=>[s(e(h),{tone:Number(t.notifications)>0?"info":"neutral",variant:"soft"},{default:a(()=>[o(i(t.notifications??0),1)]),_:2},1032,["tone"])]),"cell-actions":a(({row:t})=>[s(e(P),{size:"sm",variant:"ghost",onClick:p=>T(String(t.name))},{default:a(()=>[o(i(e(n)("buckets.open")),1)]),_:1},8,["onClick"])]),_:1},8,["columns","rows","aria-label"])):(u(),r(e(A),{key:1,title:e(n)("buckets.emptyTitle"),description:e(n)("buckets.emptyDescription",{engine:e(J)})},{icon:a(()=>[s(e(j),{name:"aws-s3"})]),_:1},8,["title","description"]))]),_:1})]),_:1}))}}),Y=N({__name:"BucketsPage",setup(I){return(n,B)=>(u(),r(Q))}});export{Y as default};
@@ -1 +1 @@
1
- import{k as K,m as F,o as J,n as i,e as u,a7 as e,v as m,ac as n,j as o,y as Q,z as T,L as X,i as r,a6 as d,f as c,t as Y,w as Z,P as A,x as D,Q as ee,J as ae,u as f,A as y,D as O,R as te,a1 as ne,N as se,a8 as le,p as k,b as z,a as P,aa as oe}from"./index-DuSPnI19.js";const ie=K({__name:"DynamoTablesList",emits:["open"],setup(U,{emit:I}){const{t:s}=le(),C=I,v=k([]),x=k([]),N=k({}),b=k(!0),_=k(null),$=k("");let L=null;const B=z(()=>[{key:"name",label:s("dynamo.colTable")},{key:"service",label:s("common.service")},{key:"status",label:s("common.status")},{key:"itemCount",label:s("dynamo.items"),align:"right"},{key:"seed",label:s("dynamo.seed")},{key:"features",label:s("dynamo.features")},{key:"actions",label:"",align:"right"}]),S=z(()=>{const l=v.value.map(t=>{var M,V;const a=(M=t.keySchema.find(h=>h.KeyType==="HASH"))==null?void 0:M.AttributeName,p=(V=t.keySchema.find(h=>h.KeyType==="RANGE"))==null?void 0:V.AttributeName,w=p?`PK: ${a} · SK: ${p}`:`PK: ${a??"—"}`,G=x.value.find(h=>h.tableName===t.name);return{name:t.name,status:t.status,itemCount:t.itemCount||0,keyDescriptor:w,billingMode:t.billingMode,ttlOn:t.ttl.enabled,streamOn:t.streamEnabled,hasGsi:t.hasGsi,hasLsi:t.hasLsi,service:N.value[t.name]||"",seedItemCount:G?G.itemCount:null,exists:!0}});for(const t of x.value)!t.tableExists&&!l.some(a=>a.name===t.tableName)&&l.push({name:t.tableName,status:"PENDING",itemCount:0,keyDescriptor:"—",ttlOn:!1,streamOn:!1,hasGsi:!1,hasLsi:!1,service:N.value[t.tableName]||"",seedItemCount:t.itemCount,exists:!1});return l.sort((t,a)=>t.name.localeCompare(a.name))}),R=z(()=>{const l=$.value.trim().toLowerCase();return l?S.value.filter(t=>t.name.toLowerCase().includes(l)||(t.service||"").toLowerCase().includes(l)):S.value}),g=z(()=>({tables:v.value.length,items:v.value.reduce((l,t)=>l+(t.itemCount||0),0),warnings:v.value.reduce((l,t)=>{var a;return l+(((a=t.warnings)==null?void 0:a.length)||0)},0),seedsPending:x.value.filter(l=>!l.tableExists).length}));async function E(){try{const[l,t,a]=await Promise.all([P.listDynamoTables(),P.listSeeds().catch(()=>({seedsDir:"",entries:[]})),P.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);v.value=l.tables,x.value=t.entries;const p={};for(const w of a.tables)p[w.name]=w.service;N.value=p,_.value=null}catch(l){_.value=l.message||s("dynamo.loadTablesFailed")}finally{b.value=!1}}function j(l){l.exists&&C("open",l.name)}function q(l){return l.exists?`/dynamo/${encodeURIComponent(String(l.name))}`:void 0}function H(l){return s("dynamo.openTableLabel",{name:String(l.name)})}function W(l){return l===1?s("dynamo.seededItemOne",{count:l}):s("dynamo.seededItemOther",{count:l})}return F(()=>{E(),L=window.setInterval(E,15e3)}),J(()=>{L&&window.clearInterval(L)}),(l,t)=>(i(),u(e(m),{direction:"vertical",gap:"1.25rem"},{default:n(()=>[o(e(Q),{columns:4,gap:"1rem"},{default:n(()=>[o(e(T),{label:e(s)("dynamo.statTables"),value:g.value.tables,tone:"info",loading:b.value},null,8,["label","value","loading"]),o(e(T),{label:e(s)("dynamo.statTotalItems"),value:g.value.items,tone:"success",loading:b.value},null,8,["label","value","loading"]),o(e(T),{label:e(s)("dynamo.statSeedsPending"),value:g.value.seedsPending,tone:g.value.seedsPending>0?"warning":"neutral",loading:b.value},null,8,["label","value","tone","loading"]),o(e(T),{label:e(s)("dynamo.statWarnings"),value:g.value.warnings,tone:g.value.warnings>0?"warning":"neutral",loading:b.value},null,8,["label","value","tone","loading"])]),_:1}),_.value?(i(),u(e(X),{key:0,variant:"danger",dismissible:"",onDismiss:t[0]||(t[0]=a=>_.value=null)},{default:n(()=>[r(d(_.value),1)]),_:1})):c("",!0),o(e(Y),{variant:"outline"},{header:n(()=>[o(e(m),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:n(()=>[o(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:n(()=>[o(e(D),{name:"aws-dynamodb"}),o(e(f),{weight:"semibold"},{default:n(()=>[r(d(e(s)("dynamo.tablesTitle")),1)]),_:1})]),_:1}),o(e(m),{direction:"horizontal",align:"center",gap:"1rem"},{default:n(()=>[o(e(ne),{"min-width":"16rem"},{default:n(()=>[o(e(se),{modelValue:$.value,"onUpdate:modelValue":t[1]||(t[1]=a=>$.value=a),placeholder:e(s)("dynamo.filterTablesPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),o(e(f),{tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.seedOnlyHint")),1)]),_:1})]),_:1})]),_:1})]),default:n(()=>[b.value?(i(),u(e(m),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:n(()=>[o(e(Z),{label:e(s)("dynamo.loadingTables")},null,8,["label"])]),_:1})):S.value.length?R.value.length?(i(),u(e(ee),{key:3,columns:B.value,rows:R.value,"row-key":"name","row-state":a=>a.exists?"default":"muted","row-to":q,"row-label":H,"aria-label":e(s)("dynamo.tablesTitle")},{"cell-name":n(({row:a})=>[o(e(m),{direction:"vertical",gap:"0.125rem"},{default:n(()=>[o(e(m),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:n(()=>[o(e(f),{weight:"semibold"},{default:n(()=>[r(d(a.name),1)]),_:2},1024),a.exists?c("",!0):(i(),u(e(y),{key:0,size:"sm",variant:"soft"},{default:n(()=>[r(d(e(s)("dynamo.seedOnly")),1)]),_:1}))]),_:2},1024),o(e(f),{tone:"muted",family:"mono",size:"xs"},{default:n(()=>[r(d(a.keyDescriptor),1)]),_:2},1024)]),_:2},1024)]),"cell-service":n(({row:a})=>[a.service?(i(),u(e(te),{key:0,to:`/services/${encodeURIComponent(String(a.service))}`,underline:"none"},{default:n(()=>[o(e(y),{size:"sm",variant:"soft"},{default:n(()=>[r(d(a.service),1)]),_:2},1024)]),_:2},1032,["to"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[...t[2]||(t[2]=[r("—",-1)])]),_:1}))]),"cell-status":n(({row:a})=>[a.exists?(i(),u(e(O),{key:0,tone:a.status==="ACTIVE"?"success":"warning",variant:"soft"},{default:n(()=>[r(d(a.status||"UNKNOWN"),1)]),_:2},1032,["tone"])):(i(),u(e(O),{key:1,tone:"warning",variant:"outline"},{default:n(()=>[r(d(e(s)("dynamo.notCreated")),1)]),_:1}))]),"cell-itemCount":n(({row:a})=>[r(d(a.exists?a.itemCount:"—"),1)]),"cell-seed":n(({row:a})=>[a.seedItemCount!==null?(i(),u(e(O),{key:0,tone:a.exists?"info":"warning",variant:"soft"},{default:n(()=>[r(d(W(Number(a.seedItemCount))),1)]),_:2},1032,["tone"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.noSeed")),1)]),_:1}))]),"cell-features":n(({row:a})=>[o(e(m),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:n(()=>[a.billingMode?(i(),u(e(y),{key:0,size:"sm",variant:"soft"},{default:n(()=>[r(d(a.billingMode),1)]),_:2},1024)):c("",!0),a.ttlOn?(i(),u(e(y),{key:1,size:"sm",variant:"solid"},{default:n(()=>[...t[3]||(t[3]=[r("TTL",-1)])]),_:1})):c("",!0),a.streamOn?(i(),u(e(y),{key:2,size:"sm",variant:"solid"},{default:n(()=>[...t[4]||(t[4]=[r("Streams",-1)])]),_:1})):c("",!0),a.hasGsi?(i(),u(e(y),{key:3,size:"sm",variant:"soft"},{default:n(()=>[...t[5]||(t[5]=[r("GSI",-1)])]),_:1})):c("",!0),a.hasLsi?(i(),u(e(y),{key:4,size:"sm",variant:"soft"},{default:n(()=>[...t[6]||(t[6]=[r("LSI",-1)])]),_:1})):c("",!0)]),_:2},1024)]),"cell-actions":n(({row:a})=>[a.exists?(i(),u(e(ae),{key:0,size:"sm",variant:"soft",onClick:p=>j(a)},{default:n(()=>[r(d(e(s)("dynamo.explore")),1)]),_:1},8,["onClick"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.registerToProvision")),1)]),_:1}))]),_:1},8,["columns","rows","row-state","aria-label"])):(i(),u(e(A),{key:2,title:e(s)("dynamo.noMatchTitle"),description:e(s)("dynamo.noMatchDesc",{query:$.value})},{icon:n(()=>[o(e(D),{name:"search-x"})]),_:1},8,["title","description"])):(i(),u(e(A),{key:1,title:e(s)("dynamo.emptyTablesTitle"),description:e(s)("dynamo.emptyTablesDesc")},{icon:n(()=>[o(e(D),{name:"aws-dynamodb"})]),_:1},8,["title","description"]))]),_:1})]),_:1}))}}),re=K({__name:"DynamoPage",setup(U){const I=oe();function s(C){I.push(`/dynamo/${encodeURIComponent(C)}`)}return(C,v)=>(i(),u(ie,{onOpen:s}))}});export{re as default};
1
+ import{l as K,n as F,o as J,p as i,f as u,a9 as e,x as m,ae as n,k as o,A as Q,B as w,N as X,j as r,a8 as d,g as c,v as Y,y as Z,R as A,z as O,S as ee,L as ae,w as f,C as y,G as D,T as te,a3 as ne,P as se,aa as le,q as k,d as z,a as P,ac as oe}from"./index-BouKSS43.js";const ie=K({__name:"DynamoTablesList",emits:["open"],setup(U,{emit:I}){const{t:s}=le(),C=I,v=k([]),x=k([]),N=k({}),b=k(!0),_=k(null),T=k("");let S=null;const B=z(()=>[{key:"name",label:s("dynamo.colTable")},{key:"service",label:s("common.service")},{key:"status",label:s("common.status")},{key:"itemCount",label:s("dynamo.items"),align:"right"},{key:"seed",label:s("dynamo.seed")},{key:"features",label:s("dynamo.features")},{key:"actions",label:"",align:"right"}]),L=z(()=>{const l=v.value.map(t=>{var M,V;const a=(M=t.keySchema.find(h=>h.KeyType==="HASH"))==null?void 0:M.AttributeName,p=(V=t.keySchema.find(h=>h.KeyType==="RANGE"))==null?void 0:V.AttributeName,$=p?`PK: ${a} · SK: ${p}`:`PK: ${a??"—"}`,E=x.value.find(h=>h.tableName===t.name);return{name:t.name,status:t.status,itemCount:t.itemCount||0,keyDescriptor:$,billingMode:t.billingMode,ttlOn:t.ttl.enabled,streamOn:t.streamEnabled,hasGsi:t.hasGsi,hasLsi:t.hasLsi,service:N.value[t.name]||"",seedItemCount:E?E.itemCount:null,exists:!0}});for(const t of x.value)!t.tableExists&&!l.some(a=>a.name===t.tableName)&&l.push({name:t.tableName,status:"PENDING",itemCount:0,keyDescriptor:"—",ttlOn:!1,streamOn:!1,hasGsi:!1,hasLsi:!1,service:N.value[t.tableName]||"",seedItemCount:t.itemCount,exists:!1});return l.sort((t,a)=>t.name.localeCompare(a.name))}),R=z(()=>{const l=T.value.trim().toLowerCase();return l?L.value.filter(t=>t.name.toLowerCase().includes(l)||(t.service||"").toLowerCase().includes(l)):L.value}),g=z(()=>({tables:v.value.length,items:v.value.reduce((l,t)=>l+(t.itemCount||0),0),warnings:v.value.reduce((l,t)=>{var a;return l+(((a=t.warnings)==null?void 0:a.length)||0)},0),seedsPending:x.value.filter(l=>!l.tableExists).length}));async function G(){try{const[l,t,a]=await Promise.all([P.listDynamoTables(),P.listSeeds().catch(()=>({seedsDir:"",entries:[]})),P.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);v.value=l.tables,x.value=t.entries;const p={};for(const $ of a.tables)p[$.name]=$.service;N.value=p,_.value=null}catch(l){_.value=l.message||s("dynamo.loadTablesFailed")}finally{b.value=!1}}function q(l){l.exists&&C("open",l.name)}function j(l){return l.exists?`/dynamo/${encodeURIComponent(String(l.name))}`:void 0}function H(l){return s("dynamo.openTableLabel",{name:String(l.name)})}function W(l){return l===1?s("dynamo.seededItemOne",{count:l}):s("dynamo.seededItemOther",{count:l})}return F(()=>{G(),S=window.setInterval(G,15e3)}),J(()=>{S&&window.clearInterval(S)}),(l,t)=>(i(),u(e(m),{direction:"vertical",gap:"1.25rem"},{default:n(()=>[o(e(Q),{columns:4,gap:"1rem"},{default:n(()=>[o(e(w),{label:e(s)("dynamo.statTables"),value:g.value.tables,tone:"info",loading:b.value},null,8,["label","value","loading"]),o(e(w),{label:e(s)("dynamo.statTotalItems"),value:g.value.items,tone:"success",loading:b.value},null,8,["label","value","loading"]),o(e(w),{label:e(s)("dynamo.statSeedsPending"),value:g.value.seedsPending,tone:g.value.seedsPending>0?"warning":"neutral",loading:b.value},null,8,["label","value","tone","loading"]),o(e(w),{label:e(s)("dynamo.statWarnings"),value:g.value.warnings,tone:g.value.warnings>0?"warning":"neutral",loading:b.value},null,8,["label","value","tone","loading"])]),_:1}),_.value?(i(),u(e(X),{key:0,variant:"danger",dismissible:"",onDismiss:t[0]||(t[0]=a=>_.value=null)},{default:n(()=>[r(d(_.value),1)]),_:1})):c("",!0),o(e(Y),{variant:"outline"},{header:n(()=>[o(e(m),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:n(()=>[o(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:n(()=>[o(e(O),{name:"aws-dynamodb"}),o(e(f),{weight:"semibold"},{default:n(()=>[r(d(e(s)("dynamo.tablesTitle")),1)]),_:1})]),_:1}),o(e(m),{direction:"horizontal",align:"center",gap:"1rem"},{default:n(()=>[o(e(ne),{"min-width":"16rem"},{default:n(()=>[o(e(se),{modelValue:T.value,"onUpdate:modelValue":t[1]||(t[1]=a=>T.value=a),placeholder:e(s)("dynamo.filterTablesPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),o(e(f),{tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.seedOnlyHint")),1)]),_:1})]),_:1})]),_:1})]),default:n(()=>[b.value?(i(),u(e(m),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:n(()=>[o(e(Z),{label:e(s)("dynamo.loadingTables")},null,8,["label"])]),_:1})):L.value.length?R.value.length?(i(),u(e(ee),{key:3,columns:B.value,rows:R.value,"row-key":"name","row-state":a=>a.exists?"default":"muted","row-to":j,"row-label":H,"aria-label":e(s)("dynamo.tablesTitle")},{"cell-name":n(({row:a})=>[o(e(m),{direction:"vertical",gap:"0.125rem"},{default:n(()=>[o(e(m),{direction:"horizontal",gap:"0.375rem",align:"center"},{default:n(()=>[o(e(f),{weight:"semibold"},{default:n(()=>[r(d(a.name),1)]),_:2},1024),a.exists?c("",!0):(i(),u(e(y),{key:0,size:"sm",variant:"soft"},{default:n(()=>[r(d(e(s)("dynamo.seedOnly")),1)]),_:1}))]),_:2},1024),o(e(f),{tone:"muted",family:"mono",size:"xs"},{default:n(()=>[r(d(a.keyDescriptor),1)]),_:2},1024)]),_:2},1024)]),"cell-service":n(({row:a})=>[a.service?(i(),u(e(te),{key:0,to:`/services/${encodeURIComponent(String(a.service))}`,underline:"none"},{default:n(()=>[o(e(y),{size:"sm",variant:"soft"},{default:n(()=>[r(d(a.service),1)]),_:2},1024)]),_:2},1032,["to"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[...t[2]||(t[2]=[r("—",-1)])]),_:1}))]),"cell-status":n(({row:a})=>[a.exists?(i(),u(e(D),{key:0,tone:a.status==="ACTIVE"?"success":"warning",variant:"soft"},{default:n(()=>[r(d(a.status||"UNKNOWN"),1)]),_:2},1032,["tone"])):(i(),u(e(D),{key:1,tone:"warning",variant:"outline"},{default:n(()=>[r(d(e(s)("dynamo.notCreated")),1)]),_:1}))]),"cell-itemCount":n(({row:a})=>[r(d(a.exists?a.itemCount:"—"),1)]),"cell-seed":n(({row:a})=>[a.seedItemCount!==null?(i(),u(e(D),{key:0,tone:a.exists?"info":"warning",variant:"soft"},{default:n(()=>[r(d(W(Number(a.seedItemCount))),1)]),_:2},1032,["tone"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.noSeed")),1)]),_:1}))]),"cell-features":n(({row:a})=>[o(e(m),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:n(()=>[a.billingMode?(i(),u(e(y),{key:0,size:"sm",variant:"soft"},{default:n(()=>[r(d(a.billingMode),1)]),_:2},1024)):c("",!0),a.ttlOn?(i(),u(e(y),{key:1,size:"sm",variant:"solid"},{default:n(()=>[...t[3]||(t[3]=[r("TTL",-1)])]),_:1})):c("",!0),a.streamOn?(i(),u(e(y),{key:2,size:"sm",variant:"solid"},{default:n(()=>[...t[4]||(t[4]=[r("Streams",-1)])]),_:1})):c("",!0),a.hasGsi?(i(),u(e(y),{key:3,size:"sm",variant:"soft"},{default:n(()=>[...t[5]||(t[5]=[r("GSI",-1)])]),_:1})):c("",!0),a.hasLsi?(i(),u(e(y),{key:4,size:"sm",variant:"soft"},{default:n(()=>[...t[6]||(t[6]=[r("LSI",-1)])]),_:1})):c("",!0)]),_:2},1024)]),"cell-actions":n(({row:a})=>[a.exists?(i(),u(e(ae),{key:0,size:"sm",variant:"soft",onClick:p=>q(a)},{default:n(()=>[r(d(e(s)("dynamo.explore")),1)]),_:1},8,["onClick"])):(i(),u(e(f),{key:1,tone:"muted",size:"xs"},{default:n(()=>[r(d(e(s)("dynamo.registerToProvision")),1)]),_:1}))]),_:1},8,["columns","rows","row-state","aria-label"])):(i(),u(e(A),{key:2,title:e(s)("dynamo.noMatchTitle"),description:e(s)("dynamo.noMatchDesc",{query:T.value})},{icon:n(()=>[o(e(O),{name:"search-x"})]),_:1},8,["title","description"])):(i(),u(e(A),{key:1,title:e(s)("dynamo.emptyTablesTitle"),description:e(s)("dynamo.emptyTablesDesc")},{icon:n(()=>[o(e(O),{name:"aws-dynamodb"})]),_:1},8,["title","description"]))]),_:1})]),_:1}))}}),re=K({__name:"DynamoPage",setup(U){const I=oe();function s(C){I.push(`/dynamo/${encodeURIComponent(C)}`)}return(C,v)=>(i(),u(ie,{onOpen:s}))}});export{re as default};
@@ -0,0 +1,3 @@
1
+ import{l as Z,ad as ye,p as v,f as y,a9 as e,U as lt,ae as t,k as a,x as m,N as ue,j as r,a8 as u,g as D,w as _,G as H,$ as nt,L as j,h as M,F as W,aa as re,q as p,d as q,a as U,c as pe,v as J,a3 as K,H as ot,O as B,a0 as ie,K as ze,P,Q as it,z as be,t as Q,e as ut,y as xe,R as Ce,S as rt,i as st,W as we,A as Ne,B as ve,a5 as dt,C as he,I as mt,J as Ae,n as vt,X as ct,Z as ce,Y as ft,_ as fe,ab as bt,ac as Te}from"./index-BouKSS43.js";const yt=Z({__name:"DynamoItemEditor",props:{open:{type:Boolean},tableName:{},mode:{},item:{},originalKey:{}},emits:["update:open","saved","request-edit","request-clone","request-delete"],setup(T,{emit:w}){const{t:l}=re(),k=T,s=w,A=pe(),C=p(""),b=p(null),V=p(!1),h=q({get:()=>k.open,set:d=>s("update:open",d)}),I=q(()=>k.mode==="create"?l("dynamo.editorCreateTitle",{table:k.tableName}):k.mode==="view"?l("dynamo.editorViewTitle",{table:k.tableName}):l("dynamo.editorEditTitle",{table:k.tableName})),E=q(()=>k.mode==="view");ye(()=>[k.open,k.item,k.mode],([d])=>{d&&(C.value=k.item&&Object.keys(k.item).length?JSON.stringify(k.item,null,2):`{
2
+
3
+ }`,b.value=null)},{immediate:!0});function x(){try{const d=JSON.parse(C.value);return d===null||typeof d!="object"||Array.isArray(d)?(b.value=l("dynamo.errItemNotObject"),null):(b.value=null,d)}catch(d){return b.value=d.message,null}}async function $(){const d=x();if(d){V.value=!0;try{k.mode==="edit"&&k.originalKey&&Object.entries(k.originalKey).some(([N,g])=>JSON.stringify(d[N])!==JSON.stringify(g))&&await U.deleteDynamoItem(k.tableName,k.originalKey),await U.putDynamoItem(k.tableName,d),A.add({title:k.mode==="create"?l("dynamo.itemCreated"):l("dynamo.itemSaved"),variant:"success"}),s("saved"),h.value=!1}catch(c){A.add({title:l("dynamo.saveFailed"),description:c.message,variant:"danger"})}finally{V.value=!1}}}function S(){const d=x();d&&(C.value=JSON.stringify(d,null,2))}return(d,c)=>(v(),y(e(lt),{open:h.value,"onUpdate:open":c[5]||(c[5]=N=>h.value=N),title:I.value,size:"lg"},{footer:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[E.value?D("",!0):(v(),y(e(j),{key:0,size:"sm",variant:"ghost",onClick:S},{default:t(()=>[r(u(e(l)("dynamo.formatJson")),1)]),_:1})),E.value?(v(),M(W,{key:1},[a(e(j),{size:"sm",variant:"soft",onClick:c[1]||(c[1]=N=>s("request-edit"))},{default:t(()=>[r(u(e(l)("dynamo.edit")),1)]),_:1}),a(e(j),{size:"sm",variant:"ghost",onClick:c[2]||(c[2]=N=>s("request-clone"))},{default:t(()=>[r(u(e(l)("dynamo.clone")),1)]),_:1}),a(e(j),{size:"sm",variant:"ghost",tone:"danger",onClick:c[3]||(c[3]=N=>s("request-delete"))},{default:t(()=>[r(u(e(l)("common.delete")),1)]),_:1})],64)):D("",!0)]),_:1}),a(e(m),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(j),{size:"sm",variant:"ghost",onClick:c[4]||(c[4]=N=>h.value=!1)},{default:t(()=>[r(u(E.value?e(l)("common.close"):e(l)("common.cancel")),1)]),_:1}),E.value?D("",!0):(v(),y(e(j),{key:0,size:"sm",variant:"solid",loading:V.value,disabled:!!b.value,onClick:$},{default:t(()=>[r(u(T.mode==="create"?e(l)("dynamo.create"):e(l)("common.save")),1)]),_:1},8,["loading","disabled"]))]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[b.value?(v(),y(e(ue),{key:0,variant:"danger"},{default:t(()=>[r(u(b.value),1)]),_:1})):D("",!0),a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(_),{tone:"muted",size:"xs"},{default:t(()=>[r(u(e(l)("dynamo.editorHint")),1)]),_:1}),E.value?(v(),y(e(H),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[r(u(e(l)("dynamo.readOnly")),1)]),_:1})):D("",!0)]),_:1}),a(e(nt),{modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=N=>C.value=N),rows:18,readonly:E.value,spellcheck:"false",family:"mono",onBlur:x},null,8,["modelValue","readonly"])]),_:1})]),_:1},8,["open","title"]))}}),pt=Z({__name:"DynamoItemsExplorer",props:{table:{}},setup(T){const w=T,{t:l}=re(),k=pe(),s=p("scan"),A=p(""),C=p(50),b=p(""),V=p("="),h=p(""),I=p(""),E=p(!1),x=p([]),$=p(!1),S=p([]),d=p(void 0),c=p(void 0),N=p(null),g=p(!1),z=p(null),L=p(!1),ee=p(!1),te=p("view"),F=p(null),ae=p(null),se=p(!1),de=p(null),De=[{value:"scan",label:"Scan"},{value:"query",label:"Query"}],Se=q(()=>[{value:"=",label:l("dynamo.opEq")},{value:"<=",label:l("dynamo.opLte")},{value:"<",label:l("dynamo.opLt")},{value:">=",label:l("dynamo.opGte")},{value:">",label:l("dynamo.opGt")},{value:"between",label:l("dynamo.opBetween")},{value:"begins_with",label:l("dynamo.opBeginsWith")}]),Ie=q(()=>[{value:"=",label:l("dynamo.opEq")},{value:"<>",label:l("dynamo.opNeq")},{value:"<",label:l("dynamo.opLt")},{value:"<=",label:l("dynamo.opLte")},{value:">",label:l("dynamo.opGt")},{value:">=",label:l("dynamo.opGte")},{value:"begins_with",label:l("dynamo.opBeginsWith")},{value:"contains",label:l("dynamo.opContains")},{value:"attribute_exists",label:l("dynamo.opExists")},{value:"attribute_not_exists",label:l("dynamo.opNotExists")}]),Ee=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Boolean",label:"Boolean"},{value:"Null",label:"Null"}],je=q(()=>{const i=[{value:"",label:l("dynamo.optionTable",{name:w.table.name})}];for(const o of w.table.gsis||[])o.IndexName&&i.push({value:o.IndexName,label:l("dynamo.optionIndex",{name:o.IndexName})});for(const o of w.table.lsis||[])o.IndexName&&i.push({value:o.IndexName,label:l("dynamo.optionIndex",{name:o.IndexName})});return i}),ge=q(()=>{if(!A.value)return w.table.keySchema;const i=w.table.gsis.find(o=>o.IndexName===A.value)||w.table.lsis.find(o=>o.IndexName===A.value);return(i==null?void 0:i.KeySchema)||w.table.keySchema}),le=q(()=>{var i,o;return((o=(i=ge.value)==null?void 0:i.find(n=>n.KeyType==="HASH"))==null?void 0:o.AttributeName)||""}),G=q(()=>{var i,o;return((o=(i=ge.value)==null?void 0:i.find(n=>n.KeyType==="RANGE"))==null?void 0:o.AttributeName)||""}),ne=q(()=>(ge.value||[]).map(i=>i.AttributeName).filter(i=>!!i)),_e=q(()=>{const i=new Set;for(const o of S.value)Object.keys(o).forEach(n=>{ne.value.includes(n)||i.add(n)});return Array.from(i).sort()});function Oe(i){const o=w.table.attributeDefinitions.find(n=>n.AttributeName===i);return o!=null&&o.AttributeType?o.AttributeType==="S"?"String":o.AttributeType==="N"?"Number":o.AttributeType==="B"?"Binary":o.AttributeType:null}function $e(i,o,n){const f=Oe(i);return o?f?`${i} (${f}, PK)`:`${i} (PK)`:n?f?`${i} (${f}, SK)`:`${i} (SK)`:f?`${i} (${f})`:i}const Ke=q(()=>{const i=ne.value.map((n,f)=>({key:`__attr__${n}`,label:$e(n,f===0,f===1)})),o=_e.value.map(n=>({key:`__attr__${n}`,label:$e(n)}));return[...i,...o]}),qe=q(()=>S.value.map((i,o)=>{const n={__id:o,__raw:i};for(const f of ne.value)n[`__attr__${f}`]=i[f];for(const f of _e.value)n[`__attr__${f}`]=i[f];return n}));function ke(i){return i===void 0?"—":i===null?"null":typeof i=="boolean"?i?"true":"false":typeof i=="object"?JSON.stringify(i).slice(0,80):String(i).slice(0,80)}function Be(i,o){switch(o){case"Number":{const n=Number(i);if(Number.isNaN(n))throw new Error(l("dynamo.errNotNumber",{value:i}));return n}case"Boolean":return i==="true"||i==="1";case"Null":return null;case"String":default:return i}}function oe(i,o){const n=w.table.attributeDefinitions.find(f=>f.AttributeName===o);if((n==null?void 0:n.AttributeType)==="N"){const f=Number(i);if(Number.isNaN(f))throw new Error(l("dynamo.errNotNumberFor",{value:i,attr:o}));return f}return i}function Ue(){const i={},o={};if(!le.value)throw new Error(l("dynamo.errNoPartitionKey"));if(!b.value)throw new Error(l("dynamo.errPkRequired",{attr:le.value}));i["#pk"]=le.value,o[":pkv"]=oe(b.value,le.value);let n="#pk = :pkv";if(G.value&&h.value)if(i["#sk"]=G.value,V.value==="between"){if(!I.value)throw new Error(l("dynamo.errBetweenTwoValues"));o[":skv1"]=oe(h.value,G.value),o[":skv2"]=oe(I.value,G.value),n+=" AND #sk BETWEEN :skv1 AND :skv2"}else V.value==="begins_with"?(o[":skv"]=oe(h.value,G.value),n+=" AND begins_with(#sk, :skv)"):(o[":skv"]=oe(h.value,G.value),n+=` AND #sk ${V.value} :skv`);return{keyExpr:n,names:i,values:o}}function Fe(){const i={},o={},n=[];return x.value.forEach((f,O)=>{if(!f.attr)return;const R=`#fn${O}`,me=`:fv${O}`;if(i[R]=f.attr,f.op==="attribute_exists"){n.push(`attribute_exists(${R})`);return}if(f.op==="attribute_not_exists"){n.push(`attribute_not_exists(${R})`);return}o[me]=Be(f.value,f.type),f.op==="begins_with"?n.push(`begins_with(${R}, ${me})`):f.op==="contains"?n.push(`contains(${R}, ${me})`):n.push(`${R} ${f.op} ${me}`)}),{expr:n.join(" AND "),names:i,values:o}}function Re(i){const o=Fe(),n={indexName:A.value||void 0,limit:C.value>0?C.value:void 0,exclusiveStartKey:i};let f=o.names,O=o.values;if(o.expr&&(n.filterExpression=o.expr),s.value==="query"){const R=Ue();n.keyConditionExpression=R.keyExpr,f={...f,...R.names},O={...O,...R.values},E.value&&(n.scanIndexForward=!1)}return Object.keys(f).length&&(n.expressionAttributeNames=f),Object.keys(O).length&&(n.expressionAttributeValues=O),n}async function X(i){g.value=!0,z.value=null;try{const o=Re(i),n=s.value==="scan"?await U.scanDynamoTable(w.table.name,o):await U.queryDynamoTable(w.table.name,o);i?S.value=[...S.value,...n.items]:(S.value=n.items,N.value=new Date),d.value=n.lastEvaluatedKey,c.value=n.scannedCount,L.value=!0}catch(o){z.value=o.message||l("dynamo.requestFailed")}finally{g.value=!1}}function Le(){b.value="",V.value="=",h.value="",I.value="",E.value=!1,x.value=[],S.value=[],d.value=void 0,c.value=void 0,L.value=!1,z.value=null}function Pe(){d.value&&X(d.value)}function Je(){x.value.push({attr:"",op:"=",type:"String",value:""}),$.value=!0}function Ge(i){x.value.splice(i,1)}function Ve(i){const o={};for(const n of w.table.keySchema)n.AttributeName&&(o[n.AttributeName]=i[n.AttributeName]);return o}function He(){const i={};for(const o of w.table.keySchema){if(!o.AttributeName)continue;const n=w.table.attributeDefinitions.find(f=>f.AttributeName===o.AttributeName);i[o.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}return i}function Me(){te.value="create",F.value=He(),ae.value=null,ee.value=!0}function We(i){te.value="view",F.value=i,ae.value=null,ee.value=!0}function Qe(i){We(i.__raw)}function Xe(i){const o=ne.value.map(n=>ke(i[`__attr__${n}`])).join(" / ");return l("dynamo.openItemLabel",{key:o})}function Ye(){F.value&&(ae.value=Ve(F.value),te.value="edit")}function Ze(){if(!F.value)return;const i={...F.value};for(const o of w.table.keySchema){if(!o.AttributeName)continue;const n=w.table.attributeDefinitions.find(f=>f.AttributeName===o.AttributeName);i[o.AttributeName]=(n==null?void 0:n.AttributeType)==="N"?0:""}F.value=i,ae.value=null,te.value="create"}function et(){F.value&&(de.value=Ve(F.value),se.value=!0)}async function tt(){if(de.value)try{await U.deleteDynamoItem(w.table.name,de.value),k.add({title:l("dynamo.itemDeleted"),variant:"info"}),ee.value=!1,await X()}catch(i){k.add({title:l("dynamo.deleteFailed"),description:i.message,variant:"danger"})}finally{se.value=!1,de.value=null}}function at(){X()}const Y=q(()=>{const i=S.value.length,o=c.value??i,n=o>0?Math.round(i/o*100):100;return{returned:i,scanned:o,efficiency:n,finished:!d.value}});return X(),ye(()=>[s.value,A.value],()=>{S.value=[],d.value=void 0,c.value=void 0,L.value=!1}),(i,o)=>(v(),y(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(J),{variant:"outline"},{header:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(l)("dynamo.explorerTitle")),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",align:"center"},{default:t(()=>[a(e(j),{variant:"solid",loading:g.value,onClick:o[8]||(o[8]=n=>X())},{default:t(()=>[r(u(e(l)("dynamo.run")),1)]),_:1},8,["loading"]),a(e(j),{variant:"ghost",onClick:Le},{default:t(()=>[r(u(e(l)("dynamo.reset")),1)]),_:1})]),_:1}),a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(_),{tone:"muted"},{default:t(()=>[r(u(e(l)("dynamo.limit")),1)]),_:1}),a(e(P),{modelValue:C.value,"onUpdate:modelValue":o[9]||(o[9]=n=>C.value=n),modelModifiers:{number:!0},type:"number",size:"sm",width:"xs"},null,8,["modelValue"])]),_:1})]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(K),{align:"start"},{default:t(()=>[a(e(ot),{modelValue:s.value,"onUpdate:modelValue":o[0]||(o[0]=n=>s.value=n),options:De,size:"md"},null,8,["modelValue"])]),_:1}),a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(K),{grow:1,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.selectTableOrIndex")},{default:t(()=>[a(e(ie),{modelValue:A.value,"onUpdate:modelValue":o[1]||(o[1]=n=>A.value=n),options:je.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),_:1}),a(e(K),{grow:1,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.selectProjection")},{default:t(()=>[a(e(ie),{"model-value":"All attributes",options:[{value:"All attributes",label:e(l)("dynamo.allAttributes")}],disabled:""},null,8,["options"])]),_:1},8,["label"])]),_:1})]),_:1}),s.value==="query"?(v(),M(W,{key:0},[a(e(ze)),a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(_),{weight:"semibold",size:"md"},{default:t(()=>[r(u(e(l)("dynamo.partitionKey")),1)]),_:1}),a(e(m),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(K),{grow:1,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.attribute")},{default:t(()=>[a(e(P),{"model-value":le.value||"—",disabled:""},null,8,["model-value"])]),_:1},8,["label"])]),_:1}),a(e(K),{grow:2,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.value")},{default:t(()=>[a(e(P),{modelValue:b.value,"onUpdate:modelValue":o[2]||(o[2]=n=>b.value=n),placeholder:e(l)("dynamo.enterAttributeValue")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1})]),_:1}),G.value?(v(),y(e(m),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(_),{weight:"semibold",size:"md"},{default:t(()=>[r(u(e(l)("dynamo.sortKeyOptional")),1)]),_:1}),a(e(m),{direction:"horizontal",gap:"0.75rem",align:"end"},{default:t(()=>[a(e(K),{grow:1.4,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.attribute")},{default:t(()=>[a(e(P),{"model-value":G.value,disabled:""},null,8,["model-value"])]),_:1},8,["label"])]),_:1}),a(e(K),{grow:1.2,basis:"0","min-width":"11rem"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.value")},{default:t(()=>[a(e(ie),{modelValue:V.value,"onUpdate:modelValue":o[3]||(o[3]=n=>V.value=n),options:Se.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),_:1}),a(e(K),{grow:2,basis:"0"},{default:t(()=>[a(e(P),{modelValue:h.value,"onUpdate:modelValue":o[4]||(o[4]=n=>h.value=n),placeholder:e(l)("dynamo.enterAttributeValue")},null,8,["modelValue","placeholder"])]),_:1}),V.value==="between"?(v(),y(e(K),{key:0,grow:2,basis:"0"},{default:t(()=>[a(e(P),{modelValue:I.value,"onUpdate:modelValue":o[5]||(o[5]=n=>I.value=n),placeholder:e(l)("dynamo.andValue")},null,8,["modelValue","placeholder"])]),_:1})):D("",!0),a(e(it),{modelValue:E.value,"onUpdate:modelValue":o[6]||(o[6]=n=>E.value=n),label:e(l)("dynamo.sortDescending")},null,8,["modelValue","label"])]),_:1})]),_:1})):D("",!0)],64)):D("",!0),a(e(ze)),a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(K),{align:"start"},{default:t(()=>[a(e(j),{variant:"ghost",size:"sm","aria-expanded":$.value,onClick:o[7]||(o[7]=n=>$.value=!$.value)},{icon:t(()=>[a(e(be),{name:$.value?"chevron-down":"chevron-right"},null,8,["name"])]),default:t(()=>[r(" "+u(e(l)("dynamo.filtersOptional")),1)]),_:1},8,["aria-expanded"])]),_:1}),$.value?(v(),y(e(m),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(v(!0),M(W,null,Q(x.value,(n,f)=>(v(),y(e(m),{key:`f-${f}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(K),{grow:1.4,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.attributeName")},{default:t(()=>[a(e(P),{modelValue:n.attr,"onUpdate:modelValue":O=>n.attr=O,placeholder:e(l)("dynamo.enterAttributeName")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:2},1032,["label"])]),_:2},1024),a(e(K),{grow:1.4,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.condition")},{default:t(()=>[a(e(ie),{modelValue:n.op,"onUpdate:modelValue":O=>n.op=O,options:Ie.value},null,8,["modelValue","onUpdate:modelValue","options"])]),_:2},1032,["label"])]),_:2},1024),a(e(K),{grow:.9,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("common.type")},{default:t(()=>[a(e(ie),{modelValue:n.type,"onUpdate:modelValue":O=>n.type=O,options:Ee},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1032,["label"])]),_:2},1024),a(e(K),{grow:1.7,basis:"0"},{default:t(()=>[a(e(B),{label:e(l)("dynamo.value")},{default:t(()=>[a(e(P),{modelValue:n.value,"onUpdate:modelValue":O=>n.value=O,disabled:n.op==="attribute_exists"||n.op==="attribute_not_exists",placeholder:e(l)("dynamo.enterAttributeValue")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])]),_:2},1032,["label"])]),_:2},1024),a(e(j),{size:"sm",variant:"outline",onClick:O=>Ge(f)},{default:t(()=>[r(u(e(l)("dynamo.remove")),1)]),_:1},8,["onClick"])]),_:2},1024))),128)),a(e(K),{align:"start"},{default:t(()=>[a(e(j),{size:"sm",variant:"outline",onClick:Je},{default:t(()=>[r(u(e(l)("dynamo.addFilter")),1)]),_:1})]),_:1})]),_:1})):D("",!0)]),_:1})]),_:1})]),_:1}),z.value?(v(),y(e(ue),{key:0,variant:"danger",dismissible:"",onDismiss:o[10]||(o[10]=n=>z.value=null)},{default:t(()=>[r(u(z.value),1)]),_:1})):D("",!0),L.value&&!z.value?(v(),y(e(ue),{key:1,variant:Y.value.finished?"success":"warning",dismissible:"",onDismiss:o[11]||(o[11]=n=>L.value=!1)},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[ut("span",null,[a(e(_),{as:"strong",weight:"semibold"},{default:t(()=>[r(u(Y.value.finished?e(l)("dynamo.completed"):e(l)("dynamo.stopped")),1)]),_:1}),r(" · "+u(e(l)("dynamo.itemsReturned"))+": ",1),a(e(_),{as:"strong",weight:"semibold"},{default:t(()=>[r(u(Y.value.returned),1)]),_:1}),r(" · "+u(e(l)("dynamo.itemsScanned"))+": ",1),a(e(_),{as:"strong",weight:"semibold"},{default:t(()=>[r(u(Y.value.scanned),1)]),_:1}),r(" · "+u(e(l)("dynamo.efficiency"))+": ",1),a(e(_),{as:"strong",weight:"semibold"},{default:t(()=>[r(u(Y.value.efficiency)+"%",1)]),_:1})]),Y.value.finished?D("",!0):(v(),y(e(j),{key:0,size:"sm",variant:"outline",loading:g.value,onClick:Pe},{default:t(()=>[r(u(e(l)("dynamo.retrieveNextPage")),1)]),_:1},8,["loading"]))]),_:1})]),_:1},8,["variant"])):D("",!0),a(e(J),{variant:"outline"},{header: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(_),{weight:"semibold"},{default:t(()=>[r(u(A.value?e(l)("dynamo.resultsIndex",{index:A.value,table:w.table.name}):e(l)("dynamo.resultsTable",{table:w.table.name}))+" – "+u(e(l)("dynamo.itemsReturnedCount",{count:S.value.length})),1)]),_:1}),a(e(_),{tone:"muted",size:"xs"},{default:t(()=>[r(u(e(l)("dynamo.startedOn",{mode:s.value==="scan"?"Scan":"Query",time:N.value?N.value.toLocaleString():"—"})),1)]),_:1})]),_:1}),a(e(m),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(j),{size:"sm",variant:"ghost",loading:g.value,onClick:o[12]||(o[12]=n=>X())},{default:t(()=>[r(u(e(l)("common.refresh")),1)]),_:1},8,["loading"]),a(e(j),{size:"sm",variant:"outline",onClick:Me},{default:t(()=>[r(u(e(l)("dynamo.createItem")),1)]),_:1})]),_:1})]),_:1})]),default:t(()=>[g.value&&!S.value.length?(v(),y(e(m),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(xe),{label:e(l)("dynamo.running")},null,8,["label"])]),_:1})):S.value.length?(v(),y(e(rt),{key:2,columns:Ke.value,rows:qe.value,"row-key":"__id","row-activatable":"","row-label":Xe,"aria-label":e(l)("dynamo.resultsAriaLabel"),onRowActivate:Qe},st({_:2},[Q(ne.value,n=>({name:`cell-__attr__${n}`,fn:t(({row:f})=>[a(e(_),{family:"mono"},{default:t(()=>[r(u(ke(f[`__attr__${n}`])),1)]),_:2},1024)])})),Q(_e.value,n=>({name:`cell-__attr__${n}`,fn:t(({row:f})=>[a(e(_),{family:"mono",size:"sm"},{default:t(()=>[r(u(ke(f[`__attr__${n}`])),1)]),_:2},1024)])}))]),1032,["columns","rows","aria-label"])):(v(),y(e(Ce),{key:1,title:e(l)("dynamo.noItemsTitle"),description:e(l)("dynamo.noItemsDesc")},null,8,["title","description"]))]),_:1}),a(yt,{open:ee.value,"onUpdate:open":o[13]||(o[13]=n=>ee.value=n),"table-name":w.table.name,mode:te.value,item:F.value,"original-key":ae.value,onSaved:at,onRequestEdit:Ye,onRequestClone:Ze,onRequestDelete:et},null,8,["open","table-name","mode","item","original-key"]),a(e(we),{open:se.value,"onUpdate:open":o[14]||(o[14]=n=>se.value=n),title:e(l)("dynamo.deleteItemTitle"),description:e(l)("dynamo.deleteItemDesc",{table:w.table.name}),"confirm-label":e(l)("common.delete"),"cancel-label":e(l)("common.cancel"),onConfirm:tt},null,8,["open","title","description","confirm-label","cancel-label"])]),_:1}))}}),gt=Z({__name:"DynamoTableSettings",props:{table:{}},emits:["refresh"],setup(T,{emit:w}){const l=T,k=w,{t:s}=re(),A=pe(),C=p(l.table.ttl.enabled),b=p(l.table.ttl.attributeName||""),V=p(!1),h=p(null);ye(()=>[l.table.ttl.enabled,l.table.ttl.attributeName],([x,$])=>{C.value=x,b.value=$||""});async function I(){if(C.value&&!b.value.trim()){h.value=s("dynamo.ttlAttrRequired");return}V.value=!0,h.value=null;try{await U.setDynamoTtl(l.table.name,C.value,b.value.trim()||void 0),A.add({title:C.value?s("dynamo.ttlEnabledToast"):s("dynamo.ttlDisabledToast"),description:C.value?s("dynamo.attributeLabel",{name:b.value}):void 0,variant:"success"}),k("refresh")}catch(x){h.value=x.message||s("dynamo.ttlUpdateFailed")}finally{V.value=!1}}function E(x){return x<1024?`${x} B`:x<1024*1024?`${(x/1024).toFixed(1)} KB`:`${(x/(1024*1024)).toFixed(1)} MB`}return(x,$)=>(v(),y(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(Ne),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(ve),{label:e(s)("dynamo.items"),value:l.table.itemCount,tone:"info"},null,8,["label","value"]),a(e(ve),{label:e(s)("common.size"),value:E(l.table.sizeBytes),tone:"neutral"},null,8,["label","value"]),a(e(ve),{label:e(s)("common.status"),value:l.table.status||"UNKNOWN",tone:l.table.status==="ACTIVE"?"success":"warning"},null,8,["label","value","tone"]),a(e(ve),{label:e(s)("dynamo.billing"),value:l.table.billingMode||"—",tone:"neutral"},null,8,["label","value"])]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[...$[3]||($[3]=[r("Time to Live (TTL)",-1)])]),_:1})]),default:t(()=>[h.value?(v(),y(e(ue),{key:0,variant:"danger",dismissible:"",onDismiss:$[0]||($[0]=S=>h.value=null)},{default:t(()=>[r(u(h.value),1)]),_:1})):D("",!0),a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(_),{tone:"muted",size:"sm"},{default:t(()=>[r(u(e(s)("dynamo.ttlDescription")),1)]),_:1}),a(e(B),{label:e(s)("dynamo.enableTtl")},{default:t(()=>[a(e(dt),{modelValue:C.value,"onUpdate:modelValue":$[1]||($[1]=S=>C.value=S)},null,8,["modelValue"])]),_:1},8,["label"]),a(e(B),{label:e(s)("dynamo.attributeName"),hint:C.value?e(s)("dynamo.ttlHintRequired"):e(s)("dynamo.ttlHintDisabled")},{default:t(()=>[a(e(P),{modelValue:b.value,"onUpdate:modelValue":$[2]||($[2]=S=>b.value=S),placeholder:e(s)("dynamo.ttlAttrPlaceholder"),disabled:!C.value},null,8,["modelValue","placeholder","disabled"])]),_:1},8,["label","hint"]),a(e(m),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(j),{size:"sm",variant:"solid",loading:V.value,onClick:I},{default:t(()=>[r(u(e(s)("dynamo.apply")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[...$[4]||($[4]=[r("Streams",-1)])]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(H),{tone:l.table.streamEnabled?"success":"neutral",variant:"soft"},{default:t(()=>[r(u(l.table.streamEnabled?e(s)("dynamo.enabled"):e(s)("dynamo.disabled")),1)]),_:1},8,["tone"]),l.table.streamViewType?(v(),y(e(he),{key:0,size:"sm",variant:"soft"},{default:t(()=>[r(u(l.table.streamViewType),1)]),_:1})):D("",!0)]),_:1}),l.table.streamArn?(v(),y(e(_),{key:0,tone:"muted",family:"mono",size:"xs"},{default:t(()=>[r(u(l.table.streamArn),1)]),_:1})):(v(),y(e(_),{key:1,tone:"muted",size:"xs"},{default:t(()=>[r(u(e(s)("dynamo.streamsNote")),1)]),_:1}))]),_:1})]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("dynamo.identifier")),1)]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.25rem"},{default:t(()=>[a(e(_),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[r(" ARN: "+u(l.table.arn||"—"),1)]),_:1}),a(e(_),{tone:"muted",size:"xs"},{default:t(()=>[r(u(e(s)("common.created"))+": "+u(l.table.createdAt?new Date(l.table.createdAt).toLocaleString():"—"),1)]),_:1})]),_:1})]),_:1})]),_:1}))}}),_t=Z({__name:"DynamoSeedPanel",props:{tableName:{},seedFile:{},seedItemCount:{},tableItemCount:{}},emits:["refresh"],setup(T,{emit:w}){const l=T,k=w,{t:s}=re(),A=pe();function C(d){return d===1?s("dynamo.itemOne",{count:d}):s("dynamo.itemOther",{count:d})}const b=p(!1),V=p(!1),h=p(!1),I=p(!1),E=p(!1);async function x(){if(!b.value){b.value=!0;try{const d=await U.runSeed(l.tableName),c=d.results.reduce((g,z)=>g+(z.inserted||0),0),N=d.results.find(g=>g.skipped);N?A.add({title:s("dynamo.seedSkipped"),description:`${l.tableName}: ${N.reason||s("dynamo.unknownReason")}`,variant:"warning"}):A.add({title:s("dynamo.seedApplied"),description:s("dynamo.seedAppliedDesc",{count:c,table:l.tableName}),variant:"success"}),k("refresh")}catch(d){A.add({title:s("dynamo.seedFailed"),description:d.message,variant:"danger"})}finally{b.value=!1}}}async function $(){if(!h.value){h.value=!0;try{const c=(await U.clearSeed(l.tableName)).results.reduce((N,g)=>N+(g.deleted||0),0);A.add({title:s("dynamo.tablePurged"),description:s("dynamo.purgedDesc",{count:c,table:l.tableName}),variant:"info"}),k("refresh")}catch(d){A.add({title:s("dynamo.purgeFailed"),description:d.message,variant:"danger"})}finally{h.value=!1,I.value=!1}}}async function S(){if(!V.value){V.value=!0;try{const c=(await U.clearSeed(l.tableName)).results.reduce((z,L)=>z+(L.deleted||0),0),g=(await U.runSeed(l.tableName)).results.reduce((z,L)=>z+(L.inserted||0),0);A.add({title:s("dynamo.seedRedone"),description:s("dynamo.redoneDesc",{deleted:c,inserted:g,table:l.tableName}),variant:"success"}),k("refresh")}catch(d){A.add({title:s("dynamo.redoFailed"),description:d.message,variant:"danger"})}finally{V.value=!1,E.value=!1}}}return(d,c)=>(v(),y(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(J),{variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("dynamo.seedFile")),1)]),_:1}),a(e(H),{tone:"info",variant:"soft"},{default:t(()=>[r(u(C(T.seedItemCount)),1)]),_:1})]),_:1})]),default:t(()=>[a(e(mt),null,{default:t(()=>[a(e(Ae),{label:e(s)("dynamo.path")},{default:t(()=>[a(e(_),{family:"mono",size:"sm"},{default:t(()=>[r(u(T.seedFile),1)]),_:1})]),_:1},8,["label"]),a(e(Ae),{label:e(s)("dynamo.currentRows")},{default:t(()=>[a(e(_),{family:"mono"},{default:t(()=>[r(u(T.tableItemCount),1)]),_:1})]),_:1},8,["label"])]),_:1})]),_:1}),a(e(J),{variant:"outline"},{header:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("common.actions")),1)]),_:1})]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(m),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("dynamo.applySeed")),1)]),_:1}),a(e(_),{tone:"muted",size:"sm"},{default:t(()=>[r(u(e(s)("dynamo.applySeedDesc")),1)]),_:1})]),_:1}),a(e(j),{variant:"solid",loading:b.value,disabled:T.seedItemCount<=0,onClick:x},{default:t(()=>[r(u(e(s)("dynamo.apply")),1)]),_:1},8,["loading","disabled"])]),_:1}),a(e(m),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("dynamo.redoSeed")),1)]),_:1}),a(e(_),{tone:"muted",size:"sm"},{default:t(()=>[r(u(e(s)("dynamo.redoSeedDesc")),1)]),_:1})]),_:1}),a(e(j),{variant:"soft",loading:V.value,disabled:T.seedItemCount<=0,onClick:c[0]||(c[0]=N=>E.value=!0)},{default:t(()=>[r(u(e(s)("dynamo.redo")),1)]),_:1},8,["loading","disabled"])]),_:1}),a(e(m),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[a(e(m),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(e(s)("dynamo.purgeTable")),1)]),_:1}),a(e(_),{tone:"muted",size:"sm"},{default:t(()=>[r(u(e(s)("dynamo.purgeTableDesc")),1)]),_:1})]),_:1}),a(e(j),{variant:"danger",loading:h.value,onClick:c[1]||(c[1]=N=>I.value=!0)},{default:t(()=>[r(u(e(s)("dynamo.purge")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),a(e(we),{open:I.value,"onUpdate:open":c[2]||(c[2]=N=>I.value=N),title:e(s)("dynamo.purgeConfirmTitle",{table:T.tableName}),description:e(s)("dynamo.purgeConfirmDesc",{count:T.tableItemCount}),"confirm-label":e(s)("dynamo.purge"),"cancel-label":e(s)("common.cancel"),onConfirm:$},null,8,["open","title","description","confirm-label","cancel-label"]),a(e(we),{open:E.value,"onUpdate:open":c[3]||(c[3]=N=>E.value=N),title:e(s)("dynamo.redoConfirmTitle",{table:T.tableName}),description:e(s)("dynamo.redoConfirmDesc",{current:T.tableItemCount,seeded:T.seedItemCount}),"confirm-label":e(s)("dynamo.redo"),"cancel-label":e(s)("common.cancel"),onConfirm:S},null,8,["open","title","description","confirm-label","cancel-label"])]),_:1}))}}),kt=Z({__name:"DynamoTableDetail",props:{tableName:{}},emits:["back"],setup(T,{emit:w}){const{t:l}=re(),k=T,s=w,A=bt(),C=Te(),b=p(null),V=p(null),h=p(!0),I=p(null),E=["items","indexes","settings","seed"],x=q({get(){const d=String(A.query.tab||"");return E.includes(d)?d:"items"},set(d){C.replace({query:{...A.query,tab:d==="items"?void 0:d}})}});async function $(){h.value=!0;try{const[d,c]=await Promise.all([U.describeDynamoTable(k.tableName),U.listSeeds().catch(()=>({seedsDir:"",entries:[]}))]);b.value=d,V.value=c.entries.find(N=>N.tableName===k.tableName)||null,I.value=null}catch(d){I.value=d.message||l("dynamo.loadTableFailed"),b.value=null}finally{h.value=!1}}function S(d){return d===1?l("dynamo.seedBadgeOne",{count:d}):l("dynamo.seedBadgeOther",{count:d})}return vt($),ye(()=>k.tableName,$),(d,c)=>(v(),y(e(m),{direction:"vertical",gap:"1rem"},{default:t(()=>{var N;return[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var g;return[a(e(j),{size:"sm",variant:"ghost",onClick:c[0]||(c[0]=z=>s("back"))},{default:t(()=>[a(e(be),{name:"arrow-left"}),r(" "+u(e(l)("dynamo.backTables")),1)]),_:1}),a(e(be),{name:"aws-dynamodb"}),a(e(_),{size:"lg",weight:"semibold"},{default:t(()=>[r(u(T.tableName),1)]),_:1}),(g=b.value)!=null&&g.status?(v(),y(e(H),{key:0,tone:b.value.status==="ACTIVE"?"success":"warning",variant:"soft"},{default:t(()=>[r(u(b.value.status),1)]),_:1},8,["tone"])):D("",!0),V.value?(v(),y(e(H),{key:1,tone:"info",variant:"soft"},{default:t(()=>[r(u(S(V.value.itemCount)),1)]),_:1})):D("",!0)]}),_:1}),a(e(j),{size:"sm",variant:"ghost",loading:h.value,onClick:$},{default:t(()=>[r(u(e(l)("common.refresh")),1)]),_:1},8,["loading"])]),_:1}),(N=b.value)!=null&&N.warnings.length?(v(),y(e(m),{key:0,direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(v(!0),M(W,null,Q(b.value.warnings,g=>(v(),y(e(H),{key:g,tone:"warning",variant:"soft"},{default:t(()=>[a(e(be),{name:"triangle-alert"}),r(" "+u(g),1)]),_:2},1024))),128))]),_:1})):D("",!0),I.value?(v(),y(e(ue),{key:1,variant:"danger",dismissible:"",onDismiss:c[1]||(c[1]=g=>I.value=null)},{default:t(()=>[r(u(I.value),1)]),_:1})):D("",!0),h.value&&!b.value?(v(),y(e(m),{key:2,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(xe),{label:e(l)("dynamo.loadingTable")},null,8,["label"])]),_:1})):b.value?(v(),y(e(ct),{key:3,modelValue:x.value,"onUpdate:modelValue":c[2]||(c[2]=g=>x.value=g)},{default:t(()=>[a(e(ft),null,{default:t(()=>[a(e(ce),{value:"items"},{default:t(()=>[r(u(e(l)("dynamo.items")),1)]),_:1}),a(e(ce),{value:"indexes"},{default:t(()=>[r(u(e(l)("dynamo.indexes")),1)]),_:1}),a(e(ce),{value:"settings"},{default:t(()=>[r(u(e(l)("dynamo.settings")),1)]),_:1}),V.value?(v(),y(e(ce),{key:0,value:"seed"},{default:t(()=>[r(u(e(l)("dynamo.seed")),1)]),_:1})):D("",!0)]),_:1}),a(e(fe),{value:"items"},{default:t(()=>[a(pt,{table:b.value},null,8,["table"])]),_:1}),a(e(fe),{value:"indexes"},{default:t(()=>[!b.value.gsis.length&&!b.value.lsis.length?(v(),y(e(Ce),{key:0,title:e(l)("dynamo.noIndexesTitle"),description:e(l)("dynamo.noIndexesDesc")},null,8,["title","description"])):(v(),y(e(m),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>[b.value.gsis.length?(v(),y(e(Ne),{key:0,columns:2,gap:"0.75rem"},{default:t(()=>[(v(!0),M(W,null,Q(b.value.gsis,g=>(v(),y(e(J),{key:g.IndexName,variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(g.IndexName),1)]),_:2},1024),a(e(H),{tone:"info",variant:"soft"},{default:t(()=>[...c[3]||(c[3]=[r("GSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(v(!0),M(W,null,Q(g.KeySchema||[],z=>(v(),y(e(he),{key:z.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[r(u(z.AttributeName)+" ("+u(z.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),a(e(_),{tone:"muted",size:"xs"},{default:t(()=>{var z;return[r(u(e(l)("dynamo.projection"))+": "+u(((z=g.Projection)==null?void 0:z.ProjectionType)||"—")+" · "+u(e(l)("dynamo.items"))+": "+u(g.ItemCount??"—")+" · "+u(e(l)("common.status"))+": "+u(g.IndexStatus||"—"),1)]}),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})):D("",!0),b.value.lsis.length?(v(),y(e(Ne),{key:1,columns:2,gap:"0.75rem"},{default:t(()=>[(v(!0),M(W,null,Q(b.value.lsis,g=>(v(),y(e(J),{key:g.IndexName,variant:"outline"},{header:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(_),{weight:"semibold"},{default:t(()=>[r(u(g.IndexName),1)]),_:2},1024),a(e(H),{tone:"neutral",variant:"soft"},{default:t(()=>[...c[4]||(c[4]=[r("LSI",-1)])]),_:1})]),_:2},1024)]),default:t(()=>[a(e(m),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(m),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(v(!0),M(W,null,Q(g.KeySchema||[],z=>(v(),y(e(he),{key:z.AttributeName,size:"sm",variant:"soft"},{default:t(()=>[r(u(z.AttributeName)+" ("+u(z.KeyType)+") ",1)]),_:2},1024))),128))]),_:2},1024),a(e(_),{tone:"muted",size:"xs"},{default:t(()=>{var z;return[r(u(e(l)("dynamo.projection"))+": "+u(((z=g.Projection)==null?void 0:z.ProjectionType)||"—"),1)]}),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})):D("",!0)]),_:1}))]),_:1}),a(e(fe),{value:"settings"},{default:t(()=>[a(gt,{table:b.value,onRefresh:$},null,8,["table"])]),_:1}),V.value?(v(),y(e(fe),{key:0,value:"seed"},{default:t(()=>[a(_t,{"table-name":b.value.name,"seed-file":V.value.file,"seed-item-count":V.value.itemCount,"table-item-count":b.value.itemCount,onRefresh:$},null,8,["table-name","seed-file","seed-item-count","table-item-count"])]),_:1})):D("",!0)]),_:1},8,["modelValue"])):D("",!0)]}),_:1}))}}),Nt=Z({__name:"DynamoTablePage",props:{tableName:{}},setup(T){const w=Te();function l(){w.push("/dynamo")}return(k,s)=>(v(),y(kt,{"table-name":T.tableName,onBack:l},null,8,["table-name"]))}});export{Nt as default};
@@ -0,0 +1,4 @@
1
+ import{l as le,n as pe,o as ye,ad as ke,f as m,a9 as e,x as c,ae as a,a as J,p as r,k as t,L as T,j as s,a8 as i,z as D,w as d,g as k,N as _e,y as W,h as L,B as N,A as he,Y as we,Z as B,_ as I,v as _,O as ee,$ as ze,a0 as $e,F as x,V as O,K as Te,G as M,t as ae,C as U,i as Le,S as te,R as H,a1 as Ne,a2 as xe,X as Ee,aa as Ve,c as Ce,q as g,d as p,ab as je,ac as ne}from"./index-BouKSS43.js";import{t as Re}from"./triggerIcons-DIPWQkJ3.js";const Se=le({__name:"LambdaDetail",props:{functionName:{}},emits:["back"],setup(E,{emit:q}){const y=E,K=q,{t:l}=Ve(),Y=je(),oe=ne(),h=Ce(),v=g(null),V=g(!0),w=g(null);let A=null;const se=["invoke","triggers","environment","logs"],G=p({get(){const o=String(Y.query.tab||"");return se.includes(o)?o:"invoke"},set(o){oe.replace({query:{...Y.query,tab:o==="invoke"?void 0:o}})}}),C=g("{}"),j=g("RequestResponse"),R=g(!1),f=g(null),P=g(!1),ie=p(()=>[{value:"RequestResponse",label:l("lambdas.invocationTypeSync")},{value:"Event",label:l("lambdas.invocationTypeAsync")}]),z=g([]),S=g(!1),ue=p(()=>[{key:"key",label:l("lambdas.key")},{key:"value",label:l("lambdas.value")}]),X=p(()=>{var o;return Object.entries(((o=v.value)==null?void 0:o.environment)||{}).map(([u,n])=>({key:u,value:n}))}),re=p(()=>[{key:"method",label:l("lambdas.method")},{key:"path",label:l("lambdas.path")},{key:"eventType",label:l("common.type")},{key:"authorizerName",label:l("lambdas.authorizer")}]),de=p(()=>{var o;return(((o=v.value)==null?void 0:o.routes)||[]).map(u=>({...u}))}),Z=p(()=>{var o;return Re(((o=v.value)==null?void 0:o.triggers)||[])}),me=p(()=>{if(!f.value)return"";const o=f.value.payload;if(o===void 0)return"—";try{return JSON.stringify(o,null,2)}catch{return String(o)}});async function $(o=!0){o&&(V.value=!0);try{v.value=await J.getLambda(y.functionName),w.value=null}catch(u){w.value=u.message||l("lambdas.detailLoadFailed"),v.value=null}finally{V.value=!1}}async function F(){S.value=!0;try{const o=await J.getLambdaLogs(y.functionName);z.value=[...o.invocations].reverse()}catch(o){h.add({title:l("lambdas.logsLoadFailed"),description:o.message,variant:"danger"})}finally{S.value=!1}}async function ce(){var n;let o;const u=C.value.trim();if(u)try{o=JSON.parse(u)}catch{h.add({title:l("lambdas.invalidJsonTitle"),description:l("lambdas.invalidJsonDescription"),variant:"danger"});return}R.value=!0;try{const b=await J.invokeLambda(y.functionName,{payload:o,invocationType:j.value});j.value==="Event"?(f.value=null,P.value=!0,h.add({title:l("lambdas.acceptedTitle"),description:l("lambdas.acceptedDescription"),variant:"success"})):(P.value=!1,f.value=b,b.ok||h.add({title:l("lambdas.functionErrorTitle"),description:(n=b.functionError)==null?void 0:n.errorMessage,variant:"danger"})),await $(!1)}catch(b){h.add({title:l("lambdas.invokeFailed"),description:b.message,variant:"danger"})}finally{R.value=!1}}function ve(o){switch(o){case"online":return"success";case"starting":return"info";case"stopped":return"neutral";default:return"danger"}}function fe(o){switch(o){case"online":return l("common.online");case"starting":return l("lambdas.statusStarting");case"stopped":return l("common.stopped");case"error":return l("lambdas.statusError");default:return o??l("common.unknown")}}function be(o){return o==="ANY"?"info":"neutral"}function ge(o){return o?new Date(o).toLocaleString():"—"}return pe(()=>{$(),F(),A=window.setInterval(()=>$(!1),1e4)}),ye(()=>{A&&window.clearInterval(A)}),ke(()=>y.functionName,()=>{$(),F()}),(o,u)=>(r(),m(e(c),{direction:"vertical",gap:"1rem"},{default:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[t(e(T),{size:"sm",variant:"ghost",onClick:u[0]||(u[0]=n=>K("back"))},{icon:a(()=>[t(e(D),{name:"arrow-left"})]),default:a(()=>[s(" "+i(e(l)("nav.lambdas")),1)]),_:1}),t(e(D),{name:"aws-lambda"}),t(e(d),{weight:"semibold",size:"lg"},{default:a(()=>[s(i(E.functionName),1)]),_:1}),v.value?(r(),m(e(d),{key:0,tone:"muted",family:"mono",size:"xs"},{default:a(()=>[s(i(v.value.fullName),1)]),_:1})):k("",!0)]),_:1}),t(e(T),{size:"sm",variant:"ghost",loading:V.value,onClick:u[1]||(u[1]=n=>$())},{default:a(()=>[s(i(e(l)("common.refresh")),1)]),_:1},8,["loading"])]),_:1}),w.value?(r(),m(e(_e),{key:0,variant:"danger",dismissible:"",onDismiss:u[2]||(u[2]=n=>w.value=null)},{default:a(()=>[s(i(w.value),1)]),_:1})):k("",!0),V.value&&!v.value?(r(),m(e(c),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[t(e(W),{label:e(l)("lambdas.loadingDetail")},null,8,["label"])]),_:1})):v.value?(r(),L(x,{key:2},[t(e(he),{columns:5,gap:"0.75rem"},{default:a(()=>[t(e(N),{label:e(l)("common.status"),value:fe(v.value.status),tone:ve(v.value.status)},null,8,["label","value","tone"]),t(e(N),{label:e(l)("lambdas.runtime"),value:v.value.runtime,tone:"info"},null,8,["label","value"]),t(e(N),{label:e(l)("lambdas.memory"),value:`${v.value.memorySize} MB`,tone:"neutral"},null,8,["label","value"]),t(e(N),{label:e(l)("lambdas.timeout"),value:`${v.value.timeout}s`,tone:"neutral"},null,8,["label","value"]),t(e(N),{label:e(l)("lambdas.mode"),value:v.value.executionMode||"—",tone:"neutral"},null,8,["label","value"])]),_:1}),t(e(Ee),{modelValue:G.value,"onUpdate:modelValue":u[6]||(u[6]=n=>G.value=n)},{default:a(()=>[t(e(we),null,{default:a(()=>[t(e(B),{value:"invoke"},{default:a(()=>[s(i(e(l)("lambdas.tabInvoke")),1)]),_:1}),t(e(B),{value:"triggers"},{default:a(()=>[s(i(e(l)("lambdas.triggers")),1)]),_:1}),t(e(B),{value:"environment"},{default:a(()=>[s(i(e(l)("lambdas.tabEnvironment")),1)]),_:1}),t(e(B),{value:"logs"},{default:a(()=>[s(i(e(l)("lambdas.tabLogs")),1)]),_:1})]),_:1}),t(e(I),{value:"invoke"},{default:a(()=>[t(e(c),{direction:"vertical",gap:"1rem"},{default:a(()=>[t(e(_),{variant:"outline"},{header:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.invokeTitle")),1)]),_:1}),t(e(d),{tone:"muted",family:"mono",size:"xs"},{default:a(()=>[s(i(v.value.handler),1)]),_:1})]),_:1})]),footer:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[t(e(T),{variant:"solid",loading:R.value,onClick:ce},{default:a(()=>[s(i(e(l)("lambdas.invokeAction")),1)]),_:1},8,["loading"]),t(e(T),{variant:"ghost",disabled:R.value,onClick:u[5]||(u[5]=n=>C.value="{}")},{default:a(()=>[s(i(e(l)("lambdas.resetPayload")),1)]),_:1},8,["disabled"])]),_:1}),P.value?(r(),m(e(d),{key:0,tone:"muted",size:"xs"},{default:a(()=>[s(i(e(l)("lambdas.acceptedHint")),1)]),_:1})):k("",!0)]),_:1})]),default:a(()=>[t(e(c),{direction:"vertical",gap:"0.75rem"},{default:a(()=>[t(e(ee),{label:e(l)("lambdas.payloadLabel"),hint:e(l)("lambdas.payloadHint")},{default:a(()=>[t(e(ze),{modelValue:C.value,"onUpdate:modelValue":u[3]||(u[3]=n=>C.value=n),family:"mono",rows:8,placeholder:"{}"},null,8,["modelValue"])]),_:1},8,["label","hint"]),t(e(ee),{label:e(l)("lambdas.invocationTypeLabel")},{default:a(()=>[t(e($e),{modelValue:j.value,"onUpdate:modelValue":u[4]||(u[4]=n=>j.value=n),options:ie.value,width:"md"},null,8,["modelValue","options"])]),_:1},8,["label"])]),_:1})]),_:1}),f.value?(r(),m(e(_),{key:0,variant:"outline"},{header:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.resultTitle")),1)]),_:1}),t(e(M),{tone:f.value.ok?"success":"danger",variant:"soft"},{default:a(()=>{var n;return[s(i(f.value.ok?"OK":((n=f.value.functionError)==null?void 0:n.errorType)||e(l)("lambdas.errorBadge")),1)]}),_:1},8,["tone"])]),_:1}),t(e(d),{tone:"muted",family:"mono",size:"xs"},{default:a(()=>[s(i(f.value.durationMs)+"ms ",1)]),_:1})]),_:1})]),default:a(()=>[t(e(c),{direction:"vertical",gap:"0.75rem"},{default:a(()=>{var n,b,Q;return[f.value.ok?(r(),L(x,{key:0},[t(e(d),{weight:"semibold",size:"sm"},{default:a(()=>[s(i(e(l)("lambdas.responsePayload")),1)]),_:1}),t(e(O),{code:me.value,label:e(l)("lambdas.responsePayload"),"max-block-size":"24rem",wrap:"",copyable:""},null,8,["code","label"])],64)):(r(),L(x,{key:1},[t(e(d),{weight:"semibold",size:"sm"},{default:a(()=>[s(i(e(l)("lambdas.functionError")),1)]),_:1}),t(e(O),{code:[`${((n=f.value.functionError)==null?void 0:n.errorType)||"Error"}: ${((b=f.value.functionError)==null?void 0:b.errorMessage)||""}`,...((Q=f.value.functionError)==null?void 0:Q.trace)||[]].join(`
2
+ `),label:e(l)("lambdas.functionError"),"max-block-size":"60vh",wrap:"",copyable:""},null,8,["code","label"])],64)),t(e(Te)),t(e(d),{weight:"semibold",size:"sm"},{default:a(()=>[s(i(e(l)("lambdas.capturedLogs")),1)]),_:1}),t(e(O),{code:f.value.logs.join(`
3
+ `)||e(l)("lambdas.noOutput"),label:e(l)("lambdas.capturedLogs"),"max-block-size":"60vh",wrap:"",copyable:""},null,8,["code","label"])]}),_:1})]),_:1})):k("",!0)]),_:1})]),_:1}),t(e(I),{value:"triggers"},{default:a(()=>[t(e(c),{direction:"vertical",gap:"1rem"},{default:a(()=>[t(e(_),{variant:"outline"},{header:a(()=>[t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.triggerSources")),1)]),_:1})]),default:a(()=>[t(e(c),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:a(()=>[Z.value.length?(r(!0),L(x,{key:0},ae(Z.value,n=>(r(),m(e(U),{key:n.name,size:"sm",variant:"soft"},Le({default:a(()=>[s(" "+i(n.name),1)]),_:2},[n.icon?{name:"icon",fn:a(()=>[t(e(D),{name:n.icon},null,8,["name"])]),key:"0"}:void 0]),1024))),128)):(r(),m(e(d),{key:1,tone:"muted"},{default:a(()=>[...u[7]||(u[7]=[s("—",-1)])]),_:1}))]),_:1})]),_:1}),t(e(_),{variant:"outline"},{header:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[t(e(D),{name:"aws-api-gateway"}),t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.httpRoutes")),1)]),_:1})]),_:1})]),default:a(()=>[v.value.routes.length?(r(),m(e(te),{key:0,columns:re.value,rows:de.value,"aria-label":e(l)("lambdas.httpRoutes")},{"cell-method":a(({row:n})=>[t(e(M),{tone:be(String(n.method)),variant:"soft"},{default:a(()=>[s(i(n.method),1)]),_:2},1032,["tone"])]),"cell-path":a(({row:n})=>[t(e(d),{family:"mono"},{default:a(()=>[s(i(n.path),1)]),_:2},1024)]),"cell-eventType":a(({row:n})=>[t(e(U),{size:"sm",variant:"soft"},{default:a(()=>[s(i(n.eventType),1)]),_:2},1024)]),"cell-authorizerName":a(({row:n})=>[n.authorizerName?(r(),m(e(U),{key:0,size:"sm",variant:"soft"},{default:a(()=>[s(i(n.authorizerName),1)]),_:2},1024)):(r(),m(e(d),{key:1,tone:"muted"},{default:a(()=>[...u[8]||(u[8]=[s("—",-1)])]),_:1}))]),_:1},8,["columns","rows","aria-label"])):(r(),m(e(H),{key:1,title:e(l)("lambdas.noRoutesTitle"),description:e(l)("lambdas.noRoutesDescription")},null,8,["title","description"]))]),_:1})]),_:1})]),_:1}),t(e(I),{value:"environment"},{default:a(()=>[t(e(_),{variant:"outline"},{header:a(()=>[t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.environmentVariables")),1)]),_:1})]),default:a(()=>[X.value.length?(r(),m(e(te),{key:0,columns:ue.value,rows:X.value,"aria-label":e(l)("lambdas.environmentVariables")},{"cell-key":a(({row:n})=>[t(e(d),{family:"mono"},{default:a(()=>[s(i(n.key),1)]),_:2},1024)]),"cell-value":a(({row:n})=>[t(e(d),{family:"mono"},{default:a(()=>[s(i(n.value),1)]),_:2},1024)]),_:1},8,["columns","rows","aria-label"])):(r(),m(e(H),{key:1,title:e(l)("lambdas.noEnvTitle"),description:e(l)("lambdas.noEnvDescription")},null,8,["title","description"]))]),_:1})]),_:1}),t(e(I),{value:"logs"},{default:a(()=>[t(e(_),{variant:"outline"},{header:a(()=>[t(e(c),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(d),{weight:"semibold"},{default:a(()=>[s(i(e(l)("lambdas.recentInvocations",{count:z.value.length})),1)]),_:1}),t(e(T),{size:"sm",variant:"ghost",loading:S.value,onClick:F},{default:a(()=>[s(i(e(l)("common.refresh")),1)]),_:1},8,["loading"])]),_:1})]),default:a(()=>[S.value&&!z.value.length?(r(),m(e(c),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:a(()=>[t(e(W),{label:e(l)("lambdas.loadingInvocations")},null,8,["label"])]),_:1})):z.value.length?(r(),m(e(Ne),{key:2,type:"multiple"},{default:a(()=>[(r(!0),L(x,null,ae(z.value,(n,b)=>(r(),m(e(xe),{key:`inv-${b}`,value:`inv-${b}`},{trigger:a(()=>[t(e(c),{as:"span",grow:"",direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:a(()=>[t(e(c),{as:"span",direction:"horizontal",gap:"0.5rem",align:"center"},{default:a(()=>[t(e(d),{size:"sm"},{default:a(()=>[s(i(ge(n.at)),1)]),_:2},1024),t(e(M),{tone:n.ok?"success":"danger",variant:"soft"},{default:a(()=>[s(i(n.ok?"OK":e(l)("lambdas.errorBadge")),1)]),_:2},1032,["tone"]),n.statusCode&&n.statusCode>=400?(r(),m(e(M),{key:0,tone:n.statusCode>=500?"danger":"warning",variant:"soft"},{default:a(()=>[s(" HTTP "+i(n.statusCode),1)]),_:2},1032,["tone"])):k("",!0)]),_:2},1024),t(e(d),{tone:"muted",family:"mono",size:"xs"},{default:a(()=>[s(i(n.durationMs)+"ms · "+i(n.logs.length===1?e(l)("lambdas.logLine",{count:n.logs.length}):e(l)("lambdas.logLines",{count:n.logs.length})),1)]),_:2},1024)]),_:2},1024)]),default:a(()=>[t(e(O),{code:n.logs.join(`
4
+ `)||e(l)("lambdas.noOutput"),label:e(l)("lambdas.invocationLog"),"max-block-size":"60vh",wrap:"",copyable:""},null,8,["code","label"])]),_:2},1032,["value"]))),128))]),_:1})):(r(),m(e(H),{key:1,title:e(l)("lambdas.noInvocationsTitle"),description:e(l)("lambdas.noInvocationsDescription")},null,8,["title","description"]))]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)):k("",!0)]),_:1}))}}),Ie=le({__name:"LambdaDetailPage",props:{functionName:{}},setup(E){const q=ne();function y(){q.push("/lambdas")}return(K,l)=>(r(),m(Se,{"function-name":E.functionName,onBack:y},null,8,["function-name"]))}});export{Ie as default};