@bluelibs/runner-dev 4.0.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI.md +72 -2
- package/README.md +132 -11
- package/dist/cli/overview.d.ts +3 -0
- package/dist/cli/overview.js +260 -0
- package/dist/cli/overview.js.map +1 -0
- package/dist/cli/ping.d.ts +3 -0
- package/dist/cli/ping.js +62 -0
- package/dist/cli/ping.js.map +1 -0
- package/dist/cli/query.d.ts +3 -0
- package/dist/cli/query.js +84 -0
- package/dist/cli/query.js.map +1 -0
- package/dist/cli/schema.d.ts +3 -0
- package/dist/cli/schema.js +71 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/cli/shared.d.ts +18 -0
- package/dist/cli/shared.js +158 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli.js +27 -24
- package/dist/cli.js.map +1 -1
- package/dist/components/Documentation/Documentation.d.ts +2 -2
- package/dist/components/Documentation/Documentation.js.map +1 -1
- package/dist/components/Documentation/components/DiagnosticsPanel.d.ts +2 -2
- package/dist/components/Documentation/components/DiagnosticsPanel.js +163 -100
- package/dist/components/Documentation/components/DiagnosticsPanel.js.map +1 -1
- package/dist/components/Documentation/components/EventCard.d.ts +3 -3
- package/dist/components/Documentation/components/EventCard.js +248 -122
- package/dist/components/Documentation/components/EventCard.js.map +1 -1
- package/dist/components/Documentation/components/HookCard.d.ts +3 -3
- package/dist/components/Documentation/components/HookCard.js +257 -86
- package/dist/components/Documentation/components/HookCard.js.map +1 -1
- package/dist/components/Documentation/components/MiddlewareCard.d.ts +3 -3
- package/dist/components/Documentation/components/MiddlewareCard.js +286 -131
- package/dist/components/Documentation/components/MiddlewareCard.js.map +1 -1
- package/dist/components/Documentation/components/ResourceCard.d.ts +3 -3
- package/dist/components/Documentation/components/ResourceCard.js +202 -68
- package/dist/components/Documentation/components/ResourceCard.js.map +1 -1
- package/dist/components/Documentation/components/Sidebar.d.ts +3 -3
- package/dist/components/Documentation/components/Sidebar.js +137 -101
- package/dist/components/Documentation/components/Sidebar.js.map +1 -1
- package/dist/components/Documentation/components/TagCard.d.ts +1 -1
- package/dist/components/Documentation/components/TaskCard.d.ts +3 -3
- package/dist/components/Documentation/components/TaskCard.js +176 -57
- package/dist/components/Documentation/components/TaskCard.js.map +1 -1
- package/dist/components/ExampleComponent.d.ts +2 -2
- package/dist/components/ExampleComponent.js +72 -31
- package/dist/components/ExampleComponent.js.map +1 -1
- package/dist/generated/resolvers-types.d.ts +52 -35
- package/dist/index.d.ts +7 -6
- package/dist/mcp/projectOverview.js +1 -1
- package/dist/project-writer/AIModel.d.ts +29 -0
- package/dist/project-writer/AIModel.js +48 -0
- package/dist/project-writer/AIModel.js.map +1 -0
- package/dist/resources/dev.resource.js +6 -0
- package/dist/resources/dev.resource.js.map +1 -1
- package/dist/resources/docs.generator.resource.d.ts +1 -1
- package/dist/resources/docs.generator.resource.js +1 -1
- package/dist/resources/docs.generator.resource.js.map +1 -1
- package/dist/resources/docs.route.d.ts +23 -0
- package/dist/resources/docs.route.js +73 -0
- package/dist/resources/docs.route.js.map +1 -0
- package/dist/resources/getFileContents.task.d.ts +17 -0
- package/dist/resources/getFileContents.task.js +44 -0
- package/dist/resources/getFileContents.task.js.map +1 -0
- package/dist/resources/graphql.query.task.d.ts +41 -0
- package/dist/resources/graphql.query.task.js +53 -0
- package/dist/resources/graphql.query.task.js.map +1 -0
- package/dist/resources/http.tag.d.ts +5 -0
- package/dist/resources/http.tag.js +8 -0
- package/dist/resources/http.tag.js.map +1 -0
- package/dist/resources/introspector.resource.d.ts +1 -126
- package/dist/resources/introspector.resource.js +5 -253
- package/dist/resources/introspector.resource.js.map +1 -1
- package/dist/resources/introspector.tools.d.ts +1 -1
- package/dist/resources/models/Introspector.d.ts +177 -0
- package/dist/resources/models/Introspector.js +361 -0
- package/dist/resources/models/Introspector.js.map +1 -0
- package/dist/resources/models/initializeFromStore.d.ts +3 -0
- package/dist/resources/models/initializeFromStore.js +86 -0
- package/dist/resources/models/initializeFromStore.js.map +1 -0
- package/dist/resources/models/initializeFromStore.utils.d.ts +31 -0
- package/dist/resources/models/initializeFromStore.utils.js +332 -0
- package/dist/resources/models/initializeFromStore.utils.js.map +1 -0
- package/dist/resources/models/introspector.tools.d.ts +26 -0
- package/dist/resources/models/introspector.tools.js +195 -0
- package/dist/resources/models/introspector.tools.js.map +1 -0
- package/dist/resources/routeHandlers/createDocsServeHandler.d.ts +3 -0
- package/dist/resources/routeHandlers/createDocsServeHandler.js +50 -0
- package/dist/resources/routeHandlers/createDocsServeHandler.js.map +1 -0
- package/dist/resources/routeHandlers/getDocsData.d.ts +13 -0
- package/dist/resources/routeHandlers/getDocsData.js +23 -0
- package/dist/resources/routeHandlers/getDocsData.js.map +1 -0
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.d.ts +37 -0
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +44 -0
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -0
- package/dist/resources/server.resource.d.ts +4 -3
- package/dist/resources/server.resource.js +46 -34
- package/dist/resources/server.resource.js.map +1 -1
- package/dist/resources/swap.resource.d.ts +10 -3
- package/dist/resources/swap.resource.js +24 -0
- package/dist/resources/swap.resource.js.map +1 -1
- package/dist/resources/ui.static.d.ts +1 -0
- package/dist/resources/ui.static.js +44 -0
- package/dist/resources/ui.static.js.map +1 -0
- package/dist/schema/context.d.ts +3 -3
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/model.d.ts +11 -4
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/mutation.js +22 -0
- package/dist/schema/mutation.js.map +1 -1
- package/dist/schema/query.js +9 -29
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/types/AllType.js +11 -2
- package/dist/schema/types/AllType.js.map +1 -1
- package/dist/schema/types/BaseElementCommon.d.ts +1 -1
- package/dist/schema/types/BaseElementCommon.js +21 -3
- package/dist/schema/types/BaseElementCommon.js.map +1 -1
- package/dist/schema/types/HookType.js +10 -3
- package/dist/schema/types/HookType.js.map +1 -1
- package/dist/schema/types/SwapType.d.ts +1 -0
- package/dist/schema/types/SwapType.js +10 -1
- package/dist/schema/types/SwapType.js.map +1 -1
- package/dist/schema/types/TagType.d.ts +5 -2
- package/dist/schema/types/TagType.js +23 -1
- package/dist/schema/types/TagType.js.map +1 -1
- package/dist/ui/.vite/manifest.json +11 -0
- package/dist/ui/assets/docs-B_YMa-Rg.js +174 -0
- package/dist/ui/assets/docs-DVEzFAJo.css +1 -0
- package/dist/ui-test/assets/app.js +1 -0
- package/dist/ui-test/index.html +1 -0
- package/dist/utils/path.d.ts +7 -0
- package/dist/utils/path.js +43 -0
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/react-ssr.d.ts +3 -1
- package/dist/utils/react-ssr.js +11 -6
- package/dist/utils/react-ssr.js.map +1 -1
- package/package.json +25 -6
- package/dist/ui/index.html +0 -20
- package/dist/ui/static/index-D-NS5aw1.js +0 -40
package/AI.md
CHANGED
|
@@ -38,6 +38,9 @@ query Architecture {
|
|
|
38
38
|
title
|
|
39
39
|
description
|
|
40
40
|
}
|
|
41
|
+
tags {
|
|
42
|
+
id
|
|
43
|
+
}
|
|
41
44
|
dependsOn
|
|
42
45
|
emits
|
|
43
46
|
}
|
|
@@ -47,6 +50,9 @@ query Architecture {
|
|
|
47
50
|
title
|
|
48
51
|
description
|
|
49
52
|
}
|
|
53
|
+
tags {
|
|
54
|
+
id
|
|
55
|
+
}
|
|
50
56
|
dependsOn
|
|
51
57
|
registers
|
|
52
58
|
overrides
|
|
@@ -54,6 +60,9 @@ query Architecture {
|
|
|
54
60
|
}
|
|
55
61
|
events {
|
|
56
62
|
id
|
|
63
|
+
tags {
|
|
64
|
+
id
|
|
65
|
+
}
|
|
57
66
|
emittedBy
|
|
58
67
|
listenedToBy
|
|
59
68
|
}
|
|
@@ -63,6 +72,9 @@ query Architecture {
|
|
|
63
72
|
title
|
|
64
73
|
description
|
|
65
74
|
}
|
|
75
|
+
tags {
|
|
76
|
+
id
|
|
77
|
+
}
|
|
66
78
|
usedByTasks
|
|
67
79
|
}
|
|
68
80
|
hooks {
|
|
@@ -71,6 +83,9 @@ query Architecture {
|
|
|
71
83
|
title
|
|
72
84
|
description
|
|
73
85
|
}
|
|
86
|
+
tags {
|
|
87
|
+
id
|
|
88
|
+
}
|
|
74
89
|
event
|
|
75
90
|
}
|
|
76
91
|
}
|
|
@@ -222,8 +237,8 @@ mutation EvalCode($code: String!, $inputJson: String, $evalInput: Boolean) {
|
|
|
222
237
|
|
|
223
238
|
### GraphQL Operations
|
|
224
239
|
|
|
225
|
-
- `
|
|
226
|
-
- `
|
|
240
|
+
- `graphql.query` - Execute read-only GraphQL queries
|
|
241
|
+
- `graphql.mutation` - Execute GraphQL mutations (if ALLOW_MUTATIONS=true)
|
|
227
242
|
- `graphql.introspect` - Get full schema introspection
|
|
228
243
|
- `graphql.schemaSdl` - Get schema as SDL string
|
|
229
244
|
- `graphql.ping` - Test connectivity
|
|
@@ -267,6 +282,61 @@ help.runner_dev({
|
|
|
267
282
|
help.read({ headingIncludes: ["installation", "setup", "configuration"] });
|
|
268
283
|
```
|
|
269
284
|
|
|
285
|
+
## Direct CLI Usage
|
|
286
|
+
|
|
287
|
+
Beyond MCP, Runner-Dev offers a powerful standalone CLI for direct interaction from your terminal. This is ideal for scripting, quick checks, or when not operating within an MCP-enabled AI assistant.
|
|
288
|
+
|
|
289
|
+
### Prerequisites
|
|
290
|
+
|
|
291
|
+
- Your app must be running with the Dev server enabled.
|
|
292
|
+
- The `@bluelibs/runner-dev` package should be installed.
|
|
293
|
+
|
|
294
|
+
### Common Commands
|
|
295
|
+
|
|
296
|
+
All commands can be prefixed with environment variables like `ENDPOINT` and `HEADERS`.
|
|
297
|
+
|
|
298
|
+
**Ping the server:**
|
|
299
|
+
```bash
|
|
300
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev ping
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Execute a GraphQL query:**
|
|
304
|
+
```bash
|
|
305
|
+
# Simple query
|
|
306
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev query 'query { tasks { id } }'
|
|
307
|
+
|
|
308
|
+
# Query with variables and pretty formatting
|
|
309
|
+
ENDPOINT=http://localhost:1337/graphql \
|
|
310
|
+
npx @bluelibs/runner-dev query \
|
|
311
|
+
'query Q($ns: ID){ tasks(idIncludes: $ns) { id } }' \
|
|
312
|
+
--variables '{"ns":"task."}' \
|
|
313
|
+
--format pretty
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**Generate a project overview:**
|
|
317
|
+
```bash
|
|
318
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev overview --details 10
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Fetch GraphQL schema:**
|
|
322
|
+
```bash
|
|
323
|
+
# As SDL
|
|
324
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev schema sdl
|
|
325
|
+
|
|
326
|
+
# As JSON
|
|
327
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev schema json
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Key Flags
|
|
331
|
+
|
|
332
|
+
- `--endpoint <url>`: GraphQL endpoint URL.
|
|
333
|
+
- `--headers '<json>'`: JSON for extra headers.
|
|
334
|
+
- `--variables '<json>'`: JSON variables for a query.
|
|
335
|
+
- `--format data|json|pretty`: Output format.
|
|
336
|
+
- `--namespace <str>`: A filter to inject `idIncludes` on top-level fields.
|
|
337
|
+
|
|
338
|
+
This direct CLI access provides a powerful way for AI assistants with shell access to script complex interactions, perform detailed introspection, and validate application state without relying on MCP tools.
|
|
339
|
+
|
|
270
340
|
## Common Use Cases
|
|
271
341
|
|
|
272
342
|
### 1. Understanding System Architecture
|
package/README.md
CHANGED
|
@@ -104,6 +104,119 @@ Available tools once connected:
|
|
|
104
104
|
- `graphql.ping` — reachability check
|
|
105
105
|
- `project.overview` — dynamic Markdown overview aggregated from the API
|
|
106
106
|
|
|
107
|
+
### CLI usage (direct)
|
|
108
|
+
|
|
109
|
+
This package also ships a CLI that can query the same GraphQL API or generate an overview directly from your terminal.
|
|
110
|
+
|
|
111
|
+
Prerequisites:
|
|
112
|
+
|
|
113
|
+
- Ensure your app registers the Dev GraphQL server (`dev.with({ port: 1337 })`) or otherwise expose a compatible endpoint.
|
|
114
|
+
- Build this package (or install it) so the binary is available.
|
|
115
|
+
|
|
116
|
+
Help:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npx @bluelibs/runner-dev --help
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Ping endpoint:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev ping
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Run a query:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev query 'query { tasks { id } }'
|
|
132
|
+
|
|
133
|
+
# With variables and pretty output
|
|
134
|
+
ENDPOINT=http://localhost:1337/graphql \
|
|
135
|
+
npx @bluelibs/runner-dev query \
|
|
136
|
+
'query Q($ns: ID){ tasks(idIncludes: $ns) { id } }' \
|
|
137
|
+
--variables '{"ns":"task."}' \
|
|
138
|
+
--format pretty
|
|
139
|
+
|
|
140
|
+
# Add a namespace sugar to inject idIncludes/filter automatically
|
|
141
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev query 'query { tasks { id } }' --namespace task.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Project overview (Markdown):
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev overview --details 10 --include-live
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Schema tools:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# SDL string
|
|
154
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev schema sdl
|
|
155
|
+
|
|
156
|
+
# Introspection JSON
|
|
157
|
+
ENDPOINT=http://localhost:1337/graphql npx @bluelibs/runner-dev schema json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Environment variables used by all commands:
|
|
161
|
+
|
|
162
|
+
- `ENDPOINT` (or `GRAPHQL_ENDPOINT`): GraphQL endpoint URL
|
|
163
|
+
- `HEADERS`: JSON for extra headers, e.g. `{"Authorization":"Bearer ..."}`
|
|
164
|
+
|
|
165
|
+
Flags:
|
|
166
|
+
|
|
167
|
+
- `--endpoint <url>`: override endpoint
|
|
168
|
+
- `--headers '<json>'`: override headers
|
|
169
|
+
- `--variables '<json>'`: JSON variables for query
|
|
170
|
+
- `--operation <name>`: operation name for documents with multiple operations
|
|
171
|
+
- `--format data|json|pretty`: output mode (default `data`)
|
|
172
|
+
- `--raw`: print full GraphQL envelope including errors
|
|
173
|
+
- `--namespace <str>`: convenience filter that injects `idIncludes` or `events(filter: { idIncludes })` at the top-level fields when possible
|
|
174
|
+
|
|
175
|
+
### Local dev playbook
|
|
176
|
+
|
|
177
|
+
Quickly boot the dummy server and UI, then exercise the CLI against it.
|
|
178
|
+
|
|
179
|
+
1. Start dev play (UI + Server):
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm run play
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
This starts:
|
|
186
|
+
|
|
187
|
+
- UI watcher (`vite build --watch`)
|
|
188
|
+
- Dummy GraphQL server with Dev resources on port 31337
|
|
189
|
+
|
|
190
|
+
2. In another terminal, build the CLI and run demo commands:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npm run build
|
|
194
|
+
npm run demo:ping
|
|
195
|
+
npm run demo:query
|
|
196
|
+
npm run demo:overview
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Alternatively, you can keep a server-only process:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
npm run play:cli
|
|
203
|
+
# Then:
|
|
204
|
+
npm run demo:query
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Testing
|
|
208
|
+
|
|
209
|
+
- Unit/integration tests are executed via Jest: `npm test`.
|
|
210
|
+
- CLI remote tests spin up the dummy app on ephemeral ports and dispose cleanly.
|
|
211
|
+
|
|
212
|
+
Run only the CLI tests:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npm test -- src/__tests__/component/cli.query.remote.test.ts src/__tests__/component/cli.overview.remote.test.ts
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
CI note: we prebuild before tests via `pretest` so the CLI binary `dist/cli.js` is available.
|
|
219
|
+
|
|
107
220
|
## Programmatic Introspection (without GraphQL)
|
|
108
221
|
|
|
109
222
|
```ts
|
|
@@ -159,19 +272,21 @@ All arrays are non-null lists with non-null items, and ids are complemented by r
|
|
|
159
272
|
- `swappedTasks: [SwappedTask!]!`
|
|
160
273
|
- `live: Live!`
|
|
161
274
|
- `diagnostics: [Diagnostic!]!`
|
|
275
|
+
- `tag(id: ID!): TagUsage`
|
|
276
|
+
- `tags: [Tag!]!`
|
|
162
277
|
|
|
163
278
|
- All
|
|
164
279
|
|
|
165
|
-
- `id`, `meta`, `filePath`, `fileContents`, `markdownDescription`
|
|
280
|
+
- `id`, `meta`, `filePath`, `fileContents`, `markdownDescription`, `tags: [Tag!]!`
|
|
166
281
|
|
|
167
282
|
- Tasks/Hooks
|
|
168
283
|
|
|
169
|
-
- Shared: `emits: [String!]!`, `emitsResolved: [Event!]!`
|
|
284
|
+
- Shared: `emits: [String!]!`, `emitsResolved: [Event!]!`, `runs: [RunRecord!]!`, `tags: [Tag!]!`
|
|
170
285
|
- Shared: `dependsOn: [String!]!`
|
|
171
286
|
- Shared: `middleware: [String!]!`, `middlewareResolved: [TaskMiddleware!]!`, `middlewareResolvedDetailed: [TaskMiddlewareUsage!]!`
|
|
172
287
|
- Shared: `overriddenBy: String`, `registeredBy: String`, `registeredByResolved: Resource`
|
|
173
|
-
- Task-specific: `inputSchema: String`, `inputSchemaReadable: String`, `dependsOnResolved { tasks { id } resources { id } emitters { id } }`
|
|
174
|
-
- Hook-specific: `event: String!`, `hookOrder: Int`
|
|
288
|
+
- Task-specific: `inputSchema: String`, `inputSchemaReadable: String`, `dependsOnResolved { tasks { id } hooks { id } resources { id } emitters { id } }`
|
|
289
|
+
- Hook-specific: `event: String!`, `hookOrder: Int`, `inputSchema: String`, `inputSchemaReadable: String`
|
|
175
290
|
|
|
176
291
|
- Resources
|
|
177
292
|
|
|
@@ -183,13 +298,15 @@ All arrays are non-null lists with non-null items, and ids are complemented by r
|
|
|
183
298
|
- `emits: [Event!]!` (inferred from task/hook emissions)
|
|
184
299
|
- `dependsOn: [String!]!`, `dependsOnResolved: [Resource!]!`
|
|
185
300
|
- `registeredBy: String`, `registeredByResolved: Resource`
|
|
301
|
+
- `tags: [Tag!]!`
|
|
186
302
|
|
|
187
303
|
- Events
|
|
188
304
|
|
|
189
|
-
- `emittedBy: [String!]!`, `emittedByResolved: [
|
|
305
|
+
- `emittedBy: [String!]!`, `emittedByResolved: [BaseElement!]!`
|
|
190
306
|
- `listenedToBy: [String!]!`, `listenedToByResolved: [Hook!]!`
|
|
191
307
|
- `payloadSchema: String`, `payloadSchemaReadable: String`
|
|
192
308
|
- `registeredBy: String`, `registeredByResolved: Resource`
|
|
309
|
+
- `tags: [Tag!]!`
|
|
193
310
|
|
|
194
311
|
- TaskMiddleware
|
|
195
312
|
|
|
@@ -197,6 +314,8 @@ All arrays are non-null lists with non-null items, and ids are complemented by r
|
|
|
197
314
|
- `usedBy: [Task!]!`, `usedByDetailed: [MiddlewareTaskUsage!]!`
|
|
198
315
|
- `emits: [Event!]!`
|
|
199
316
|
- `overriddenBy: String`, `registeredBy: String`, `registeredByResolved: Resource`
|
|
317
|
+
- `configSchema: String`, `configSchemaReadable: String`
|
|
318
|
+
- `tags: [Tag!]!`
|
|
200
319
|
|
|
201
320
|
- ResourceMiddleware
|
|
202
321
|
|
|
@@ -204,6 +323,8 @@ All arrays are non-null lists with non-null items, and ids are complemented by r
|
|
|
204
323
|
- `usedBy: [Resource!]!`, `usedByDetailed: [MiddlewareResourceUsage!]!`
|
|
205
324
|
- `emits: [Event!]!`
|
|
206
325
|
- `overriddenBy: String`, `registeredBy: String`, `registeredByResolved: Resource`
|
|
326
|
+
- `configSchema: String`, `configSchemaReadable: String`
|
|
327
|
+
- `tags: [Tag!]!`
|
|
207
328
|
|
|
208
329
|
- Live
|
|
209
330
|
|
|
@@ -211,14 +332,14 @@ All arrays are non-null lists with non-null items, and ids are complemented by r
|
|
|
211
332
|
- `LogEntry { timestampMs, level, message, data, correlationId }`
|
|
212
333
|
- `LogFilterInput { levels: [LogLevelEnum!], messageIncludes: String, correlationIds: [String!] }`
|
|
213
334
|
- `emissions(afterTimestamp: Float, last: Int, filter: EmissionFilterInput): [EmissionEntry!]!`
|
|
214
|
-
- `EmissionEntry { timestampMs, eventId, emitterId, payload, correlationId }`
|
|
215
|
-
- `EmissionFilterInput { eventIds: [String!], emitterIds: [String!] }`
|
|
335
|
+
- `EmissionEntry { timestampMs, eventId, emitterId, payload, correlationId, emitterResolved: BaseElement, eventResolved: Event }`
|
|
336
|
+
- `EmissionFilterInput { eventIds: [String!], emitterIds: [String!], correlationIds: [String!] }`
|
|
216
337
|
- `errors(afterTimestamp: Float, last: Int, filter: ErrorFilterInput): [ErrorEntry!]!`
|
|
217
|
-
- `ErrorEntry { timestampMs, sourceId, sourceKind, message, stack, data, correlationId }`
|
|
218
|
-
- `ErrorFilterInput { sourceKinds: [SourceKindEnum!], sourceIds: [ID!], messageIncludes: String }`
|
|
338
|
+
- `ErrorEntry { timestampMs, sourceId, sourceKind, message, stack, data, correlationId, sourceResolved: BaseElement }`
|
|
339
|
+
- `ErrorFilterInput { sourceKinds: [SourceKindEnum!], sourceIds: [ID!], messageIncludes: String, correlationIds: [String!] }`
|
|
219
340
|
- `runs(afterTimestamp: Float, last: Int, filter: RunFilterInput): [RunRecord!]!`
|
|
220
|
-
- `RunRecord { timestampMs, nodeId, nodeKind, durationMs, ok, error, parentId, rootId, correlationId }`
|
|
221
|
-
- `RunFilterInput { nodeKinds: [NodeKindEnum!], nodeIds: [String!], ok: Boolean, parentIds: [String!], rootIds: [String!] }`
|
|
341
|
+
- `RunRecord { timestampMs, nodeId, nodeKind, durationMs, ok, error, parentId, rootId, correlationId, nodeResolved: BaseElement }`
|
|
342
|
+
- `RunFilterInput { nodeKinds: [NodeKindEnum!], nodeIds: [String!], ok: Boolean, parentIds: [String!], rootIds: [String!], correlationIds: [String!] }`
|
|
222
343
|
|
|
223
344
|
Enums: `LogLevelEnum` = `trace|debug|info|warn|error|fatal|log`, `SourceKindEnum` = `TASK|HOOK|RESOURCE|MIDDLEWARE|INTERNAL`, `NodeKindEnum` = `TASK|HOOK`.
|
|
224
345
|
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.main = main;
|
|
5
|
+
require("source-map-support/register");
|
|
6
|
+
const shared_1 = require("./shared");
|
|
7
|
+
function printHelp() {
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.log(`
|
|
10
|
+
runner-dev overview
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
runner-dev overview [--details 10] [--include-live] [--namespace ns]
|
|
14
|
+
|
|
15
|
+
Options:
|
|
16
|
+
--endpoint <url> GraphQL endpoint (or use ENDPOINT/GRAPHQL_ENDPOINT)
|
|
17
|
+
--headers '<json>' Extra HTTP headers as JSON (or HEADERS env)
|
|
18
|
+
--details <n> Sample size per section (default 10)
|
|
19
|
+
--include-live Include live counters (logs/emissions/errors/runs)
|
|
20
|
+
--namespace <str> Filter nodes by idIncludes (client-side)
|
|
21
|
+
`);
|
|
22
|
+
}
|
|
23
|
+
async function main(argv) {
|
|
24
|
+
const args = argv.slice(3);
|
|
25
|
+
if (args.length === 0 &&
|
|
26
|
+
process.env.ENDPOINT == null &&
|
|
27
|
+
process.env.GRAPHQL_ENDPOINT == null) {
|
|
28
|
+
// Show help if nothing is set
|
|
29
|
+
printHelp();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (args[0] && ["-h", "--help", "help"].includes(args[0])) {
|
|
33
|
+
printHelp();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const opts = new Map();
|
|
37
|
+
for (let i = 0; i < args.length; i++) {
|
|
38
|
+
const a = args[i];
|
|
39
|
+
if (a.startsWith("--")) {
|
|
40
|
+
const key = a.slice(2);
|
|
41
|
+
const next = args[i + 1];
|
|
42
|
+
if (!next || next.startsWith("--")) {
|
|
43
|
+
opts.set(key, true);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
opts.set(key, next);
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const endpoint = opts.get("endpoint") || undefined;
|
|
52
|
+
const headersJson = opts.get("headers") || undefined;
|
|
53
|
+
const details = Number(opts.get("details") ?? 10);
|
|
54
|
+
const includeLive = Boolean(opts.get("include-live"));
|
|
55
|
+
const namespace = opts.get("namespace") || undefined;
|
|
56
|
+
const query = `query Overview($liveLast: Int) {
|
|
57
|
+
tasks { id meta { title description } filePath inputSchemaReadable }
|
|
58
|
+
hooks { id meta { title description } events filePath inputSchemaReadable }
|
|
59
|
+
resources { id meta { title description } filePath configSchemaReadable }
|
|
60
|
+
middlewares { id meta { title description } filePath configSchemaReadable }
|
|
61
|
+
events { id meta { title description } filePath payloadSchemaReadable emittedBy listenedToBy }
|
|
62
|
+
diagnostics { severity code message nodeId nodeKind }
|
|
63
|
+
live {
|
|
64
|
+
logs(last: $liveLast) { timestampMs level message correlationId }
|
|
65
|
+
emissions(last: $liveLast) { timestampMs eventId emitterId correlationId }
|
|
66
|
+
errors(last: $liveLast) { timestampMs sourceKind message correlationId }
|
|
67
|
+
runs(last: $liveLast) { timestampMs nodeId nodeKind ok correlationId }
|
|
68
|
+
}
|
|
69
|
+
}`;
|
|
70
|
+
try {
|
|
71
|
+
const endpointResolved = (0, shared_1.resolveEndpoint)(endpoint);
|
|
72
|
+
const _headers = (0, shared_1.resolveHeaders)(headersJson); // validates
|
|
73
|
+
const out = await (0, shared_1.execRemote)({
|
|
74
|
+
endpoint: endpointResolved,
|
|
75
|
+
headersJson,
|
|
76
|
+
query,
|
|
77
|
+
});
|
|
78
|
+
if (out?.errors?.length) {
|
|
79
|
+
// eslint-disable-next-line no-console
|
|
80
|
+
console.error(JSON.stringify(out.errors, null, 2));
|
|
81
|
+
// eslint-disable-next-line no-process-exit
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const data = out?.data ?? {};
|
|
85
|
+
const tasks = (Array.isArray(data.tasks) ? data.tasks : []).filter((x) => !namespace || String(x.id).includes(namespace));
|
|
86
|
+
const hooks = (Array.isArray(data.hooks) ? data.hooks : []).filter((x) => !namespace || String(x.id).includes(namespace));
|
|
87
|
+
const resources = (Array.isArray(data.resources) ? data.resources : []).filter((x) => !namespace || String(x.id).includes(namespace));
|
|
88
|
+
const middlewares = (Array.isArray(data.middlewares) ? data.middlewares : []).filter((x) => !namespace || String(x.id).includes(namespace));
|
|
89
|
+
const events = (Array.isArray(data.events) ? data.events : []).filter((x) => !namespace || String(x.id).includes(namespace));
|
|
90
|
+
const diagnostics = Array.isArray(data.diagnostics) ? data.diagnostics : [];
|
|
91
|
+
const live = data.live ?? {};
|
|
92
|
+
const diagBySeverity = {};
|
|
93
|
+
for (const d of diagnostics) {
|
|
94
|
+
const sev = String(d?.severity ?? "UNKNOWN");
|
|
95
|
+
diagBySeverity[sev] = (diagBySeverity[sev] ?? 0) + 1;
|
|
96
|
+
}
|
|
97
|
+
const lines = [];
|
|
98
|
+
lines.push(`# Runner Dev Project Overview`);
|
|
99
|
+
lines.push("");
|
|
100
|
+
lines.push(`Endpoint: ${endpointResolved}`);
|
|
101
|
+
lines.push("");
|
|
102
|
+
lines.push(`## Topology Summary`);
|
|
103
|
+
lines.push(`- Tasks: ${tasks.length}`);
|
|
104
|
+
lines.push(`- Hooks: ${hooks.length}`);
|
|
105
|
+
lines.push(`- Resources: ${resources.length}`);
|
|
106
|
+
lines.push(`- Middleware: ${middlewares.length}`);
|
|
107
|
+
lines.push(`- Events: ${events.length}`);
|
|
108
|
+
lines.push(`- Diagnostics: ${diagnostics.length}`);
|
|
109
|
+
if (Object.keys(diagBySeverity).length) {
|
|
110
|
+
const sevStr = Object.entries(diagBySeverity)
|
|
111
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
112
|
+
.join(", ");
|
|
113
|
+
lines.push(` - By severity: ${sevStr}`);
|
|
114
|
+
}
|
|
115
|
+
lines.push("");
|
|
116
|
+
lines.push(`## Sample Nodes (first ${details})`);
|
|
117
|
+
function asString(v) {
|
|
118
|
+
return typeof v === "string" && v.trim().length ? v : undefined;
|
|
119
|
+
}
|
|
120
|
+
function safeString(v) {
|
|
121
|
+
if (v == null)
|
|
122
|
+
return undefined;
|
|
123
|
+
if (typeof v === "string")
|
|
124
|
+
return v;
|
|
125
|
+
try {
|
|
126
|
+
return JSON.stringify(v);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return String(v);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function formatSchemaBlock(title, schemaReadable) {
|
|
133
|
+
if (!schemaReadable || schemaReadable.trim().length === 0)
|
|
134
|
+
return [];
|
|
135
|
+
const out = [];
|
|
136
|
+
out.push(` - ${title}:`);
|
|
137
|
+
out.push(" ```");
|
|
138
|
+
for (const l of schemaReadable.split("\n"))
|
|
139
|
+
out.push(l.length ? ` ${l}` : " ");
|
|
140
|
+
out.push(" ```");
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
function formatItem(p) {
|
|
144
|
+
const title = asString(p.meta?.title) || p.id;
|
|
145
|
+
const description = asString(p.meta?.description);
|
|
146
|
+
const out = [];
|
|
147
|
+
out.push(`- ${title} {${p.id}}`);
|
|
148
|
+
if (description)
|
|
149
|
+
out.push(` - description: ${description}`);
|
|
150
|
+
if (p.filePath)
|
|
151
|
+
out.push(` - file: ${p.filePath}`);
|
|
152
|
+
if (Array.isArray(p.extra) && p.extra.length)
|
|
153
|
+
out.push(...p.extra);
|
|
154
|
+
if (p.schemaReadable)
|
|
155
|
+
out.push(...formatSchemaBlock(p.schemaLabel || "schema", p.schemaReadable));
|
|
156
|
+
return out.join("\n");
|
|
157
|
+
}
|
|
158
|
+
if (tasks.length) {
|
|
159
|
+
lines.push(`### Tasks`);
|
|
160
|
+
for (const t of tasks.slice(0, details)) {
|
|
161
|
+
lines.push(formatItem({
|
|
162
|
+
id: String(t.id),
|
|
163
|
+
meta: t.meta,
|
|
164
|
+
filePath: safeString(t.filePath),
|
|
165
|
+
schemaReadable: asString(t.inputSchemaReadable),
|
|
166
|
+
schemaLabel: "input schema",
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
lines.push("");
|
|
170
|
+
}
|
|
171
|
+
if (hooks.length) {
|
|
172
|
+
lines.push(`### Hooks`);
|
|
173
|
+
for (const l of hooks.slice(0, details)) {
|
|
174
|
+
const extra = [];
|
|
175
|
+
if (l.event)
|
|
176
|
+
extra.push(` - event: ${String(l.event)}`);
|
|
177
|
+
lines.push(formatItem({
|
|
178
|
+
id: String(l.id),
|
|
179
|
+
meta: l.meta,
|
|
180
|
+
filePath: safeString(l.filePath),
|
|
181
|
+
schemaReadable: asString(l.inputSchemaReadable),
|
|
182
|
+
schemaLabel: "input schema",
|
|
183
|
+
extra,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
lines.push("");
|
|
187
|
+
}
|
|
188
|
+
if (resources.length) {
|
|
189
|
+
lines.push(`### Resources`);
|
|
190
|
+
for (const r of resources.slice(0, details)) {
|
|
191
|
+
lines.push(formatItem({
|
|
192
|
+
id: String(r.id),
|
|
193
|
+
meta: r.meta,
|
|
194
|
+
filePath: safeString(r.filePath),
|
|
195
|
+
schemaReadable: asString(r.configSchemaReadable),
|
|
196
|
+
schemaLabel: "config schema",
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
lines.push("");
|
|
200
|
+
}
|
|
201
|
+
if (middlewares.length) {
|
|
202
|
+
lines.push(`### Middleware`);
|
|
203
|
+
for (const m of middlewares.slice(0, details)) {
|
|
204
|
+
lines.push(formatItem({
|
|
205
|
+
id: String(m.id),
|
|
206
|
+
meta: m.meta,
|
|
207
|
+
filePath: safeString(m.filePath),
|
|
208
|
+
schemaReadable: asString(m.configSchemaReadable),
|
|
209
|
+
schemaLabel: "config schema",
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
lines.push("");
|
|
213
|
+
}
|
|
214
|
+
if (events.length) {
|
|
215
|
+
lines.push(`### Events`);
|
|
216
|
+
for (const e of events.slice(0, details)) {
|
|
217
|
+
const emittedBy = Array.isArray(e.emittedBy) ? e.emittedBy.length : 0;
|
|
218
|
+
const listenedToBy = Array.isArray(e.listenedToBy)
|
|
219
|
+
? e.listenedToBy.length
|
|
220
|
+
: 0;
|
|
221
|
+
const extra = [
|
|
222
|
+
` - relations: emittedBy=${emittedBy}, listenedToBy=${listenedToBy}`,
|
|
223
|
+
];
|
|
224
|
+
lines.push(formatItem({
|
|
225
|
+
id: String(e.id),
|
|
226
|
+
meta: e.meta,
|
|
227
|
+
filePath: safeString(e.filePath),
|
|
228
|
+
schemaReadable: asString(e.payloadSchemaReadable),
|
|
229
|
+
schemaLabel: "payload schema",
|
|
230
|
+
extra,
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
lines.push("");
|
|
234
|
+
}
|
|
235
|
+
if (includeLive) {
|
|
236
|
+
const logs = Array.isArray(live.logs) ? live.logs : [];
|
|
237
|
+
const emissions = Array.isArray(live.emissions) ? live.emissions : [];
|
|
238
|
+
const errors = Array.isArray(live.errors) ? live.errors : [];
|
|
239
|
+
const runs = Array.isArray(live.runs) ? live.runs : [];
|
|
240
|
+
lines.push(`## Live (last 20)`);
|
|
241
|
+
lines.push(`- Logs: ${logs.length}`);
|
|
242
|
+
lines.push(`- Emissions: ${emissions.length}`);
|
|
243
|
+
lines.push(`- Errors: ${errors.length}`);
|
|
244
|
+
lines.push(`- Runs: ${runs.length}`);
|
|
245
|
+
lines.push("");
|
|
246
|
+
}
|
|
247
|
+
// eslint-disable-next-line no-console
|
|
248
|
+
console.log(lines.join("\n"));
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
// eslint-disable-next-line no-console
|
|
252
|
+
console.error(e.message);
|
|
253
|
+
// eslint-disable-next-line no-process-exit
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (require.main === module) {
|
|
258
|
+
void main(process.argv);
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/cli/overview.ts"],"names":[],"mappings":";;;AA0BA,oBA4QC;AArSD,uCAAqC;AACrC,qCAKkB;AAElB,SAAS,SAAS;IAChB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,CAAC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,EACpC,CAAC;QACD,8BAA8B;QAC9B,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAY,IAAI,SAAS,CAAC;IAC/D,MAAM,WAAW,GAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAY,IAAI,SAAS,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAY,IAAI,SAAS,CAAC;IAEjE,MAAM,KAAK,GAAG;;;;;;;;;;;;;EAad,CAAC;IAED,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,IAAA,wBAAe,EAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,WAAW,CAAC,CAAC,CAAC,YAAY;QAC1D,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAU,EAAC;YAC3B,QAAQ,EAAE,gBAAgB;YAC1B,WAAW;YACX,KAAK;SACN,CAAC,CAAC;QACH,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACxB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,2CAA2C;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;QAE7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAChE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3D,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAChE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3D,CAAC;QACF,MAAM,SAAS,GAAG,CAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CACpD,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,CAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CACxD,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CACnE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3D,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAE7B,MAAM,cAAc,GAA2B,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;YAC7C,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,gBAAgB,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,OAAO,GAAG,CAAC,CAAC;QAEjD,SAAS,QAAQ,CAAC,CAAM;YACtB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,SAAS,UAAU,CAAC,CAAM;YACxB,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;YAChC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,SAAS,iBAAiB,CACxB,KAAa,EACb,cAAuB;YAEvB,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YACrE,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,SAAS,UAAU,CAAC,CAOnB;YACC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAClD,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,CAAC,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,CAAC,cAAc;gBAClB,GAAG,CAAC,IAAI,CACN,GAAG,iBAAiB,CAAC,CAAC,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAClE,CAAC;YACJ,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CACR,UAAU,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBAC/C,WAAW,EAAE,cAAc;iBAC5B,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzD,KAAK,CAAC,IAAI,CACR,UAAU,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBAC/C,WAAW,EAAE,cAAc;oBAC3B,KAAK;iBACN,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,CACR,UAAU,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC;oBAChD,WAAW,EAAE,eAAe;iBAC7B,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9C,KAAK,CAAC,IAAI,CACR,UAAU,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC;oBAChD,WAAW,EAAE,eAAe;iBAC7B,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAChD,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;oBACvB,CAAC,CAAC,CAAC,CAAC;gBACN,MAAM,KAAK,GAAG;oBACZ,4BAA4B,SAAS,kBAAkB,YAAY,EAAE;iBACtE,CAAC;gBACF,KAAK,CAAC,IAAI,CACR,UAAU,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC;oBACjD,WAAW,EAAE,gBAAgB;oBAC7B,KAAK;iBACN,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QACpC,2CAA2C;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/cli/ping.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.main = main;
|
|
5
|
+
require("source-map-support/register");
|
|
6
|
+
const shared_1 = require("./shared");
|
|
7
|
+
function printHelp() {
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.log(`
|
|
10
|
+
runner-dev ping
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
runner-dev ping [--endpoint <url>] [--headers '<json>']
|
|
14
|
+
`);
|
|
15
|
+
}
|
|
16
|
+
async function main(argv) {
|
|
17
|
+
const args = argv.slice(3);
|
|
18
|
+
if (args.length && ["-h", "--help", "help"].includes(args[0])) {
|
|
19
|
+
printHelp();
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const opts = new Map();
|
|
23
|
+
for (let i = 0; i < args.length; i++) {
|
|
24
|
+
const a = args[i];
|
|
25
|
+
if (a.startsWith("--")) {
|
|
26
|
+
const key = a.slice(2);
|
|
27
|
+
const next = args[i + 1];
|
|
28
|
+
if (!next || next.startsWith("--")) {
|
|
29
|
+
opts.set(key, true);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
opts.set(key, next);
|
|
33
|
+
i++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const endpoint = opts.get("endpoint") || undefined;
|
|
38
|
+
const headersJson = opts.get("headers") || undefined;
|
|
39
|
+
try {
|
|
40
|
+
const result = await (0, shared_1.execRemote)({
|
|
41
|
+
endpoint,
|
|
42
|
+
headersJson,
|
|
43
|
+
query: "query { __typename }",
|
|
44
|
+
});
|
|
45
|
+
// eslint-disable-next-line no-console
|
|
46
|
+
console.log(JSON.stringify({
|
|
47
|
+
ok: true,
|
|
48
|
+
endpoint: endpoint ?? process.env.ENDPOINT ?? process.env.GRAPHQL_ENDPOINT,
|
|
49
|
+
result,
|
|
50
|
+
}, null, 2));
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
// eslint-disable-next-line no-console
|
|
54
|
+
console.error(JSON.stringify({ ok: false, error: e.message }, null, 2));
|
|
55
|
+
// eslint-disable-next-line no-process-exit
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (require.main === module) {
|
|
60
|
+
void main(process.argv);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../src/cli/ping.ts"],"names":[],"mappings":";;;AAcA,oBAmDC;AAhED,uCAAqC;AACrC,qCAAsC;AAEtC,SAAS,SAAS;IAChB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAY,IAAI,SAAS,CAAC;IAC/D,MAAM,WAAW,GAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAY,IAAI,SAAS,CAAC;IAEjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,EAAC;YAC9B,QAAQ;YACR,WAAW;YACX,KAAK,EAAE,sBAAsB;SAC9B,CAAC,CAAC;QACH,sCAAsC;QACtC,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,EAAE,EAAE,IAAI;YACR,QAAQ,EACN,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAClE,MAAM;SACP,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACpE,CAAC;QACF,2CAA2C;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|