@qontinui/ui-bridge 0.2.0 → 0.3.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.
Files changed (140) hide show
  1. package/dist/ai/index.d.mts +312 -155
  2. package/dist/ai/index.d.ts +312 -155
  3. package/dist/ai/index.js +2363 -67
  4. package/dist/ai/index.js.map +1 -1
  5. package/dist/ai/index.mjs +2328 -68
  6. package/dist/ai/index.mjs.map +1 -1
  7. package/dist/annotations/index.d.mts +218 -0
  8. package/dist/annotations/index.d.ts +218 -0
  9. package/dist/annotations/index.js +246 -0
  10. package/dist/annotations/index.js.map +1 -0
  11. package/dist/annotations/index.mjs +241 -0
  12. package/dist/annotations/index.mjs.map +1 -0
  13. package/dist/assertions-BSR3afVr.d.ts +161 -0
  14. package/dist/assertions-CTw1hfOx.d.mts +161 -0
  15. package/dist/babel-plugin/index.js +504 -0
  16. package/dist/babel-plugin/index.js.map +1 -0
  17. package/dist/babel-plugin/index.mjs +488 -0
  18. package/dist/babel-plugin/index.mjs.map +1 -0
  19. package/dist/browser-capture-Bms60T6f.d.mts +47 -0
  20. package/dist/browser-capture-CsTU29mb.d.ts +47 -0
  21. package/dist/control/index.d.mts +26 -7
  22. package/dist/control/index.d.ts +26 -7
  23. package/dist/control/index.js +276 -48
  24. package/dist/control/index.js.map +1 -1
  25. package/dist/control/index.mjs +276 -48
  26. package/dist/control/index.mjs.map +1 -1
  27. package/dist/core/index.d.mts +115 -44
  28. package/dist/core/index.d.ts +115 -44
  29. package/dist/core/index.js +0 -1560
  30. package/dist/core/index.js.map +1 -1
  31. package/dist/core/index.mjs +1 -1549
  32. package/dist/core/index.mjs.map +1 -1
  33. package/dist/debug/index.d.mts +5 -3
  34. package/dist/debug/index.d.ts +5 -3
  35. package/dist/debug/index.js +925 -1
  36. package/dist/debug/index.js.map +1 -1
  37. package/dist/debug/index.mjs +924 -2
  38. package/dist/debug/index.mjs.map +1 -1
  39. package/dist/index.d.mts +13 -9
  40. package/dist/index.d.ts +13 -9
  41. package/dist/index.js +8310 -3777
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +8246 -3766
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/{metrics-NC3csD0R.d.mts → metrics-DuA2qIIz.d.mts} +2 -2
  46. package/dist/{metrics-C9XRi_mL.d.ts → metrics-KFAAKNEB.d.ts} +2 -2
  47. package/dist/native/control/index.js +448 -0
  48. package/dist/native/control/index.js.map +1 -0
  49. package/dist/native/control/index.mjs +445 -0
  50. package/dist/native/control/index.mjs.map +1 -0
  51. package/dist/native/core/index.js +486 -0
  52. package/dist/native/core/index.js.map +1 -0
  53. package/dist/native/core/index.mjs +475 -0
  54. package/dist/native/core/index.mjs.map +1 -0
  55. package/dist/native/debug/index.js +408 -0
  56. package/dist/native/debug/index.js.map +1 -0
  57. package/dist/native/debug/index.mjs +406 -0
  58. package/dist/native/debug/index.mjs.map +1 -0
  59. package/dist/native/index.js +2232 -0
  60. package/dist/native/index.js.map +1 -0
  61. package/dist/native/index.mjs +2204 -0
  62. package/dist/native/index.mjs.map +1 -0
  63. package/dist/native/react/index.js +1377 -0
  64. package/dist/native/react/index.js.map +1 -0
  65. package/dist/native/react/index.mjs +1365 -0
  66. package/dist/native/react/index.mjs.map +1 -0
  67. package/dist/native/server/index.js +440 -0
  68. package/dist/native/server/index.js.map +1 -0
  69. package/dist/native/server/index.mjs +435 -0
  70. package/dist/native/server/index.mjs.map +1 -0
  71. package/dist/react/index.d.mts +121 -9
  72. package/dist/react/index.d.ts +121 -9
  73. package/dist/react/index.js +2239 -91
  74. package/dist/react/index.js.map +1 -1
  75. package/dist/react/index.mjs +2239 -92
  76. package/dist/react/index.mjs.map +1 -1
  77. package/dist/{registry-CIEDjbQ9.d.ts → registry-C6dDtn1v.d.ts} +34 -15
  78. package/dist/{registry-SsSDq46X.d.mts → registry-POtcxnal.d.mts} +34 -15
  79. package/dist/render-log/index.d.mts +1 -1
  80. package/dist/render-log/index.d.ts +1 -1
  81. package/dist/server/express.d.mts +37 -0
  82. package/dist/server/express.d.ts +37 -0
  83. package/dist/server/express.js +298 -0
  84. package/dist/server/express.js.map +1 -0
  85. package/dist/server/express.mjs +294 -0
  86. package/dist/server/express.mjs.map +1 -0
  87. package/dist/server/handlers.d.mts +124 -0
  88. package/dist/server/handlers.d.ts +124 -0
  89. package/dist/server/handlers.js +7183 -0
  90. package/dist/server/handlers.js.map +1 -0
  91. package/dist/server/handlers.mjs +7180 -0
  92. package/dist/server/handlers.mjs.map +1 -0
  93. package/dist/server/index.d.mts +12 -0
  94. package/dist/server/index.d.ts +12 -0
  95. package/dist/server/index.js +8384 -0
  96. package/dist/server/index.js.map +1 -0
  97. package/dist/server/index.mjs +8369 -0
  98. package/dist/server/index.mjs.map +1 -0
  99. package/dist/server/nextjs.d.mts +128 -0
  100. package/dist/server/nextjs.d.ts +128 -0
  101. package/dist/server/nextjs.js +390 -0
  102. package/dist/server/nextjs.js.map +1 -0
  103. package/dist/server/nextjs.mjs +385 -0
  104. package/dist/server/nextjs.mjs.map +1 -0
  105. package/dist/server/standalone.d.mts +7 -0
  106. package/dist/server/standalone.d.ts +7 -0
  107. package/dist/server/standalone.js +845 -0
  108. package/dist/server/standalone.js.map +1 -0
  109. package/dist/server/standalone.mjs +841 -0
  110. package/dist/server/standalone.mjs.map +1 -0
  111. package/dist/specs/index.d.mts +365 -0
  112. package/dist/specs/index.d.ts +365 -0
  113. package/dist/specs/index.js +2809 -0
  114. package/dist/specs/index.js.map +1 -0
  115. package/dist/specs/index.mjs +2786 -0
  116. package/dist/specs/index.mjs.map +1 -0
  117. package/dist/standalone-B6GLIEmR.d.ts +216 -0
  118. package/dist/standalone-CjdYqj3P.d.mts +216 -0
  119. package/dist/swc-plugin/index.d.mts +79 -0
  120. package/dist/swc-plugin/index.d.ts +79 -0
  121. package/dist/swc-plugin/index.js +15 -0
  122. package/dist/swc-plugin/index.js.map +1 -0
  123. package/dist/swc-plugin/index.mjs +9 -0
  124. package/dist/swc-plugin/index.mjs.map +1 -0
  125. package/dist/types-B2EfvEaq.d.ts +236 -0
  126. package/dist/{types-Dr6tH-bm.d.mts → types-C7gVYRnF.d.ts} +72 -2
  127. package/dist/{types-oCTrRxSw.d.ts → types-CJGrBEhC.d.mts} +72 -2
  128. package/dist/types-CebMQj76.d.ts +1275 -0
  129. package/dist/types-D_ypYl3T.d.mts +1275 -0
  130. package/dist/types-UBtp7R0u.d.mts +132 -0
  131. package/dist/types-UBtp7R0u.d.ts +132 -0
  132. package/dist/types-gO696T_t.d.mts +236 -0
  133. package/dist/{types-CPMbN_Iw.d.mts → types-suaYwWWg.d.mts} +519 -152
  134. package/dist/{types-CPMbN_Iw.d.ts → types-suaYwWWg.d.ts} +519 -152
  135. package/package.json +123 -4
  136. package/swc-plugin-wasm/ui_bridge_swc_plugin.wasm +0 -0
  137. package/dist/types-BvCfFuEV.d.ts +0 -534
  138. package/dist/types-CFT3Dnx4.d.mts +0 -534
  139. package/dist/websocket-client-CX4QJesI.d.ts +0 -124
  140. package/dist/websocket-client-C_Na0OSp.d.mts +0 -124
@@ -0,0 +1,435 @@
1
+ // src/native/server/types.ts
2
+ var UI_BRIDGE_NATIVE_ROUTES = {
3
+ // Control - Elements
4
+ GET_ELEMENTS: {
5
+ method: "GET",
6
+ path: "/ui-bridge/control/elements",
7
+ description: "List all registered elements"
8
+ },
9
+ GET_ELEMENT: {
10
+ method: "GET",
11
+ path: "/ui-bridge/control/element/:id",
12
+ description: "Get element details"
13
+ },
14
+ GET_ELEMENT_STATE: {
15
+ method: "GET",
16
+ path: "/ui-bridge/control/element/:id/state",
17
+ description: "Get element state"
18
+ },
19
+ EXECUTE_ACTION: {
20
+ method: "POST",
21
+ path: "/ui-bridge/control/element/:id/action",
22
+ description: "Execute action on element"
23
+ },
24
+ // Control - Components
25
+ GET_COMPONENTS: {
26
+ method: "GET",
27
+ path: "/ui-bridge/control/components",
28
+ description: "List all registered components"
29
+ },
30
+ GET_COMPONENT: {
31
+ method: "GET",
32
+ path: "/ui-bridge/control/component/:id",
33
+ description: "Get component details"
34
+ },
35
+ EXECUTE_COMPONENT_ACTION: {
36
+ method: "POST",
37
+ path: "/ui-bridge/control/component/:id/action/:actionId",
38
+ description: "Execute component action"
39
+ },
40
+ // Discovery
41
+ FIND: {
42
+ method: "POST",
43
+ path: "/ui-bridge/control/find",
44
+ description: "Find elements matching criteria"
45
+ },
46
+ GET_SNAPSHOT: {
47
+ method: "GET",
48
+ path: "/ui-bridge/control/snapshot",
49
+ description: "Get full bridge snapshot"
50
+ },
51
+ // Workflows
52
+ GET_WORKFLOWS: {
53
+ method: "GET",
54
+ path: "/ui-bridge/control/workflows",
55
+ description: "List all workflows"
56
+ },
57
+ RUN_WORKFLOW: {
58
+ method: "POST",
59
+ path: "/ui-bridge/control/workflow/:id/run",
60
+ description: "Run a workflow"
61
+ },
62
+ // Page Navigation
63
+ PAGE_REFRESH: {
64
+ method: "POST",
65
+ path: "/ui-bridge/control/page/refresh",
66
+ description: "Refresh the current page"
67
+ },
68
+ PAGE_NAVIGATE: {
69
+ method: "POST",
70
+ path: "/ui-bridge/control/page/navigate",
71
+ description: "Navigate to a URL"
72
+ },
73
+ PAGE_GO_BACK: {
74
+ method: "POST",
75
+ path: "/ui-bridge/control/page/back",
76
+ description: "Go back in navigation history"
77
+ },
78
+ PAGE_GO_FORWARD: {
79
+ method: "POST",
80
+ path: "/ui-bridge/control/page/forward",
81
+ description: "Go forward in navigation history"
82
+ },
83
+ // Health
84
+ HEALTH: {
85
+ method: "GET",
86
+ path: "/ui-bridge/health",
87
+ description: "Health check"
88
+ }
89
+ };
90
+
91
+ // src/native/server/handlers.ts
92
+ function success(data) {
93
+ return {
94
+ success: true,
95
+ data,
96
+ timestamp: Date.now()
97
+ };
98
+ }
99
+ function error(message, code) {
100
+ return {
101
+ success: false,
102
+ error: message,
103
+ code,
104
+ timestamp: Date.now()
105
+ };
106
+ }
107
+ function createServerHandlers(registry, executor) {
108
+ return {
109
+ // Elements
110
+ getElements: async () => {
111
+ const elements = registry.getAllElements().map((e) => ({
112
+ id: e.id,
113
+ type: e.type,
114
+ label: e.label,
115
+ identifier: e.getIdentifier(),
116
+ state: e.getState(),
117
+ actions: e.actions,
118
+ customActions: e.customActions ? Object.keys(e.customActions) : void 0
119
+ }));
120
+ return success({ elements });
121
+ },
122
+ getElement: async (ctx) => {
123
+ const { id } = ctx.params;
124
+ const element = registry.getElement(id);
125
+ if (!element) {
126
+ return error(`Element not found: ${id}`, "ELEMENT_NOT_FOUND");
127
+ }
128
+ return success({
129
+ element: {
130
+ id: element.id,
131
+ type: element.type,
132
+ label: element.label,
133
+ identifier: element.getIdentifier(),
134
+ state: element.getState(),
135
+ actions: element.actions,
136
+ customActions: element.customActions ? Object.keys(element.customActions) : void 0
137
+ }
138
+ });
139
+ },
140
+ getElementState: async (ctx) => {
141
+ const { id } = ctx.params;
142
+ const element = registry.getElement(id);
143
+ if (!element) {
144
+ return error(`Element not found: ${id}`, "ELEMENT_NOT_FOUND");
145
+ }
146
+ return success({ state: element.getState() });
147
+ },
148
+ executeAction: async (ctx) => {
149
+ const { id } = ctx.params;
150
+ const body = ctx.body;
151
+ if (!body?.action) {
152
+ return error("Action is required", "INVALID_REQUEST");
153
+ }
154
+ const response = await executor.executeAction(id, {
155
+ action: body.action,
156
+ params: body.params,
157
+ waitOptions: body.waitOptions
158
+ });
159
+ if (!response.success) {
160
+ return error(response.error || "Action failed", "ACTION_FAILED");
161
+ }
162
+ return success(response);
163
+ },
164
+ // Components
165
+ getComponents: async () => {
166
+ const components = registry.getAllComponents().map((c) => ({
167
+ id: c.id,
168
+ name: c.name,
169
+ description: c.description,
170
+ actions: c.actions.map((a) => ({ id: a.id, label: a.label })),
171
+ elementIds: c.elementIds
172
+ }));
173
+ return success({ components });
174
+ },
175
+ getComponent: async (ctx) => {
176
+ const { id } = ctx.params;
177
+ const component = registry.getComponent(id);
178
+ if (!component) {
179
+ return error(`Component not found: ${id}`, "COMPONENT_NOT_FOUND");
180
+ }
181
+ return success({
182
+ component: {
183
+ id: component.id,
184
+ name: component.name,
185
+ description: component.description,
186
+ actions: component.actions.map((a) => ({
187
+ id: a.id,
188
+ label: a.label,
189
+ description: a.description
190
+ })),
191
+ elementIds: component.elementIds
192
+ }
193
+ });
194
+ },
195
+ executeComponentAction: async (ctx) => {
196
+ const { id, actionId } = ctx.params;
197
+ const body = ctx.body;
198
+ const response = await executor.executeComponentAction(id, {
199
+ action: actionId,
200
+ params: body?.params
201
+ });
202
+ if (!response.success) {
203
+ return error(response.error || "Action failed", "ACTION_FAILED");
204
+ }
205
+ return success(response);
206
+ },
207
+ // Discovery
208
+ find: async (ctx) => {
209
+ const body = ctx.body;
210
+ const response = await executor.find({
211
+ types: body?.types,
212
+ testIdPattern: body?.testIdPattern,
213
+ accessibilityLabelPattern: body?.accessibilityLabelPattern,
214
+ visibleOnly: body?.visibleOnly,
215
+ limit: body?.limit
216
+ });
217
+ return success(response);
218
+ },
219
+ getSnapshot: async () => {
220
+ const snapshot = registry.createSnapshot();
221
+ return success(snapshot);
222
+ },
223
+ // Workflows
224
+ getWorkflows: async () => {
225
+ const workflows = registry.getAllWorkflows().map((w) => ({
226
+ id: w.id,
227
+ name: w.name,
228
+ description: w.description,
229
+ stepCount: w.steps.length
230
+ }));
231
+ return success({ workflows });
232
+ },
233
+ runWorkflow: async (ctx) => {
234
+ const { id } = ctx.params;
235
+ const workflow = registry.getWorkflow(id);
236
+ if (!workflow) {
237
+ return error(`Workflow not found: ${id}`, "WORKFLOW_NOT_FOUND");
238
+ }
239
+ return success({
240
+ runId: `run-${Date.now()}`,
241
+ status: "pending"
242
+ });
243
+ },
244
+ // Page Navigation (stubs — React Native apps should override with their navigation provider)
245
+ pageRefresh: async () => {
246
+ return error("Page refresh not supported on native platform", "NOT_SUPPORTED");
247
+ },
248
+ pageNavigate: async () => {
249
+ return error("Page navigation not supported on native platform", "NOT_SUPPORTED");
250
+ },
251
+ pageGoBack: async () => {
252
+ return error("Page go back not supported on native platform", "NOT_SUPPORTED");
253
+ },
254
+ pageGoForward: async () => {
255
+ return error("Page go forward not supported on native platform", "NOT_SUPPORTED");
256
+ },
257
+ // Health
258
+ health: async () => {
259
+ const stats = registry.getStats();
260
+ return success({
261
+ status: "healthy",
262
+ timestamp: Date.now(),
263
+ ...stats
264
+ });
265
+ }
266
+ };
267
+ }
268
+
269
+ // src/native/server/http-server.ts
270
+ var NativeUIBridgeServer = class {
271
+ constructor(registry, executor, config = {}) {
272
+ this.registry = registry;
273
+ this.executor = executor;
274
+ this.running = false;
275
+ this.config = {
276
+ serverPort: 9876,
277
+ cors: true,
278
+ ...config
279
+ };
280
+ this.handlers = createServerHandlers(registry, executor);
281
+ }
282
+ /**
283
+ * Set the server adapter
284
+ */
285
+ setAdapter(adapter) {
286
+ this.adapter = adapter;
287
+ }
288
+ /**
289
+ * Start the HTTP server
290
+ */
291
+ async start() {
292
+ if (this.running) {
293
+ console.warn("[ui-bridge-native] Server already running");
294
+ return;
295
+ }
296
+ if (!this.adapter) {
297
+ console.warn("[ui-bridge-native] No server adapter configured. Call setAdapter() first.");
298
+ console.warn("[ui-bridge-native] See documentation for supported adapters.");
299
+ return;
300
+ }
301
+ await this.adapter.start(this.config.serverPort, this.handleRequest.bind(this));
302
+ this.running = true;
303
+ console.log(`[ui-bridge-native] HTTP server started on port ${this.config.serverPort}`);
304
+ }
305
+ /**
306
+ * Stop the HTTP server
307
+ */
308
+ async stop() {
309
+ if (!this.running || !this.adapter) {
310
+ return;
311
+ }
312
+ await this.adapter.stop();
313
+ this.running = false;
314
+ console.log("[ui-bridge-native] HTTP server stopped");
315
+ }
316
+ /**
317
+ * Check if server is running
318
+ */
319
+ isRunning() {
320
+ return this.running;
321
+ }
322
+ /**
323
+ * Handle incoming HTTP request
324
+ */
325
+ async handleRequest(request) {
326
+ const headers = {
327
+ "Content-Type": "application/json"
328
+ };
329
+ if (this.config.cors) {
330
+ headers["Access-Control-Allow-Origin"] = this.config.allowedOrigins ? this.config.allowedOrigins.join(",") : "*";
331
+ headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS";
332
+ headers["Access-Control-Allow-Headers"] = "Content-Type, Authorization";
333
+ }
334
+ if (request.method === "OPTIONS") {
335
+ return { status: 204, headers, body: "" };
336
+ }
337
+ try {
338
+ const response = await this.routeRequest(request);
339
+ return {
340
+ status: response.success ? 200 : 400,
341
+ headers,
342
+ body: JSON.stringify(response)
343
+ };
344
+ } catch (error2) {
345
+ const errorResponse = {
346
+ success: false,
347
+ error: error2 instanceof Error ? error2.message : "Internal server error",
348
+ code: "INTERNAL_ERROR",
349
+ timestamp: Date.now()
350
+ };
351
+ return {
352
+ status: 500,
353
+ headers,
354
+ body: JSON.stringify(errorResponse)
355
+ };
356
+ }
357
+ }
358
+ /**
359
+ * Route request to appropriate handler
360
+ */
361
+ async routeRequest(request) {
362
+ const { method, path, query, body } = request;
363
+ const parsePath = (pattern, actual) => {
364
+ const patternParts = pattern.split("/");
365
+ const actualParts = actual.split("/");
366
+ if (patternParts.length !== actualParts.length) {
367
+ return null;
368
+ }
369
+ const params2 = {};
370
+ for (let i = 0; i < patternParts.length; i++) {
371
+ if (patternParts[i].startsWith(":")) {
372
+ params2[patternParts[i].slice(1)] = actualParts[i];
373
+ } else if (patternParts[i] !== actualParts[i]) {
374
+ return null;
375
+ }
376
+ }
377
+ return params2;
378
+ };
379
+ if (method === "GET" && path === "/ui-bridge/health") {
380
+ return this.handlers.health({ params: {}, query, body });
381
+ }
382
+ if (method === "GET" && path === "/ui-bridge/control/elements") {
383
+ return this.handlers.getElements({ params: {}, query, body });
384
+ }
385
+ let params = parsePath("/ui-bridge/control/element/:id", path);
386
+ if (method === "GET" && params) {
387
+ return this.handlers.getElement({ params, query, body });
388
+ }
389
+ params = parsePath("/ui-bridge/control/element/:id/state", path);
390
+ if (method === "GET" && params) {
391
+ return this.handlers.getElementState({ params, query, body });
392
+ }
393
+ params = parsePath("/ui-bridge/control/element/:id/action", path);
394
+ if (method === "POST" && params) {
395
+ return this.handlers.executeAction({ params, query, body });
396
+ }
397
+ if (method === "GET" && path === "/ui-bridge/control/components") {
398
+ return this.handlers.getComponents({ params: {}, query, body });
399
+ }
400
+ params = parsePath("/ui-bridge/control/component/:id", path);
401
+ if (method === "GET" && params) {
402
+ return this.handlers.getComponent({ params, query, body });
403
+ }
404
+ params = parsePath("/ui-bridge/control/component/:id/action/:actionId", path);
405
+ if (method === "POST" && params) {
406
+ return this.handlers.executeComponentAction({ params, query, body });
407
+ }
408
+ if (method === "POST" && path === "/ui-bridge/control/find") {
409
+ return this.handlers.find({ params: {}, query, body });
410
+ }
411
+ if (method === "GET" && path === "/ui-bridge/control/snapshot") {
412
+ return this.handlers.getSnapshot({ params: {}, query, body });
413
+ }
414
+ if (method === "GET" && path === "/ui-bridge/control/workflows") {
415
+ return this.handlers.getWorkflows({ params: {}, query, body });
416
+ }
417
+ params = parsePath("/ui-bridge/control/workflow/:id/run", path);
418
+ if (method === "POST" && params) {
419
+ return this.handlers.runWorkflow({ params, query, body });
420
+ }
421
+ return {
422
+ success: false,
423
+ error: `Route not found: ${method} ${path}`,
424
+ code: "NOT_FOUND",
425
+ timestamp: Date.now()
426
+ };
427
+ }
428
+ };
429
+ function createNativeServer(registry, executor, config) {
430
+ return new NativeUIBridgeServer(registry, executor, config);
431
+ }
432
+
433
+ export { NativeUIBridgeServer, UI_BRIDGE_NATIVE_ROUTES, createNativeServer, createServerHandlers };
434
+ //# sourceMappingURL=index.mjs.map
435
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/native/server/types.ts","../../../src/native/server/handlers.ts","../../../src/native/server/http-server.ts"],"names":["error","params"],"mappings":";AAoCO,IAAM,uBAAA,GAA2D;AAAA;AAAA,EAEtE,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,6BAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,gCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,sCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,+BAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,kCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,mDAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,6BAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,8BAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,qCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,kCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,8BAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iCAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB;;;ACnHA,SAAS,QAAW,IAAA,EAAyB;AAC3C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,KAAK,GAAA;AAAI,GACtB;AACF;AAKA,SAAS,KAAA,CAAmB,SAAiB,IAAA,EAA+B;AAC1E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,IAAA;AAAA,IACA,SAAA,EAAW,KAAK,GAAA;AAAI,GACtB;AACF;AAKO,SAAS,oBAAA,CACd,UACA,QAAA,EACsB;AACtB,EAAA,OAAO;AAAA;AAAA,IAEL,aAAa,YAAY;AACvB,MAAA,MAAM,WAAW,QAAA,CAAS,cAAA,EAAe,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACrD,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,OAAO,CAAA,CAAE,KAAA;AAAA,QACT,UAAA,EAAY,EAAE,aAAA,EAAc;AAAA,QAC5B,KAAA,EAAO,EAAE,QAAA,EAAS;AAAA,QAClB,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,eAAe,CAAA,CAAE,aAAA,GAAgB,OAAO,IAAA,CAAK,CAAA,CAAE,aAAa,CAAA,GAAI;AAAA,OAClE,CAAE,CAAA;AAEF,MAAA,OAAO,OAAA,CAAQ,EAAE,QAAA,EAAU,CAAA;AAAA,IAC7B,CAAA;AAAA,IAEA,UAAA,EAAY,OAAO,GAAA,KAAwB;AACzC,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAEtC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAA,EAAI,mBAAmB,CAAA;AAAA,MAC9D;AAEA,MAAA,OAAO,OAAA,CAAQ;AAAA,QACb,OAAA,EAAS;AAAA,UACP,IAAI,OAAA,CAAQ,EAAA;AAAA,UACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,UAAA,EAAY,QAAQ,aAAA,EAAc;AAAA,UAClC,KAAA,EAAO,QAAQ,QAAA,EAAS;AAAA,UACxB,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,eAAe,OAAA,CAAQ,aAAA,GAAgB,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAa,CAAA,GAAI;AAAA;AAC9E,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,eAAA,EAAiB,OAAO,GAAA,KAAwB;AAC9C,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAEtC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAA,EAAI,mBAAmB,CAAA;AAAA,MAC9D;AAEA,MAAA,OAAO,QAAQ,EAAE,KAAA,EAAO,OAAA,CAAQ,QAAA,IAAY,CAAA;AAAA,IAC9C,CAAA;AAAA,IAEA,aAAA,EAAe,OAAO,GAAA,KAAwB;AAC5C,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AAMjB,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,QAAA,OAAO,KAAA,CAAM,sBAAsB,iBAAiB,CAAA;AAAA,MACtD;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,aAAA,CAAc,EAAA,EAAI;AAAA,QAChD,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,aAAa,IAAA,CAAK;AAAA,OACnB,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,QAAA,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,IAAS,eAAA,EAAiB,eAAe,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,QAAQ,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA;AAAA,IAGA,eAAe,YAAY;AACzB,MAAA,MAAM,aAAa,QAAA,CAAS,gBAAA,EAAiB,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACzD,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,KAAA,EAAO,CAAA,CAAE,OAAM,CAAE,CAAA;AAAA,QAC5D,YAAY,CAAA,CAAE;AAAA,OAChB,CAAE,CAAA;AAEF,MAAA,OAAO,OAAA,CAAQ,EAAE,UAAA,EAAY,CAAA;AAAA,IAC/B,CAAA;AAAA,IAEA,YAAA,EAAc,OAAO,GAAA,KAAwB;AAC3C,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,YAAA,CAAa,EAAE,CAAA;AAE1C,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,KAAA,CAAM,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAA,EAAI,qBAAqB,CAAA;AAAA,MAClE;AAEA,MAAA,OAAO,OAAA,CAAQ;AAAA,QACb,SAAA,EAAW;AAAA,UACT,IAAI,SAAA,CAAU,EAAA;AAAA,UACd,MAAM,SAAA,CAAU,IAAA;AAAA,UAChB,aAAa,SAAA,CAAU,WAAA;AAAA,UACvB,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YACrC,IAAI,CAAA,CAAE,EAAA;AAAA,YACN,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,aAAa,CAAA,CAAE;AAAA,WACjB,CAAE,CAAA;AAAA,UACF,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,sBAAA,EAAwB,OAAO,GAAA,KAAwB;AACrD,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA,CAAI,MAAA;AAC7B,MAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AAEjB,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,sBAAA,CAAuB,EAAA,EAAI;AAAA,QACzD,MAAA,EAAQ,QAAA;AAAA,QACR,QAAQ,IAAA,EAAM;AAAA,OACf,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,QAAA,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,IAAS,eAAA,EAAiB,eAAe,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,QAAQ,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA;AAAA,IAGA,IAAA,EAAM,OAAO,GAAA,KAAwB;AACnC,MAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AAQjB,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,IAAA,CAAK;AAAA,QACnC,OAAO,IAAA,EAAM,KAAA;AAAA,QACb,eAAe,IAAA,EAAM,aAAA;AAAA,QACrB,2BAA2B,IAAA,EAAM,yBAAA;AAAA,QACjC,aAAa,IAAA,EAAM,WAAA;AAAA,QACnB,OAAO,IAAA,EAAM;AAAA,OACd,CAAA;AAED,MAAA,OAAO,QAAQ,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA,IAEA,aAAa,YAAY;AACvB,MAAA,MAAM,QAAA,GAAW,SAAS,cAAA,EAAe;AACzC,MAAA,OAAO,QAAQ,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA;AAAA,IAGA,cAAc,YAAY;AACxB,MAAA,MAAM,YAAY,QAAA,CAAS,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACvD,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,SAAA,EAAW,EAAE,KAAA,CAAM;AAAA,OACrB,CAAE,CAAA;AAEF,MAAA,OAAO,OAAA,CAAQ,EAAE,SAAA,EAAW,CAAA;AAAA,IAC9B,CAAA;AAAA,IAEA,WAAA,EAAa,OAAO,GAAA,KAAwB;AAC1C,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,WAAA,CAAY,EAAE,CAAA;AAExC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAO,KAAA,CAAM,CAAA,oBAAA,EAAuB,EAAE,CAAA,CAAA,EAAI,oBAAoB,CAAA;AAAA,MAChE;AAGA,MAAA,OAAO,OAAA,CAAQ;AAAA,QACb,KAAA,EAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,QACxB,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA;AAAA;AAAA,IAGA,aAAa,YAAY;AACvB,MAAA,OAAO,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAAA,IAC/E,CAAA;AAAA,IAEA,cAAc,YAAY;AACxB,MAAA,OAAO,KAAA,CAAM,oDAAoD,eAAe,CAAA;AAAA,IAClF,CAAA;AAAA,IAEA,YAAY,YAAY;AACtB,MAAA,OAAO,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAAA,IAC/E,CAAA;AAAA,IAEA,eAAe,YAAY;AACzB,MAAA,OAAO,KAAA,CAAM,oDAAoD,eAAe,CAAA;AAAA,IAClF,CAAA;AAAA;AAAA,IAGA,QAAQ,YAAY;AAClB,MAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,EAAS;AAChC,MAAA,OAAO,OAAA,CAAQ;AAAA,QACb,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,GAAG;AAAA,OACJ,CAAA;AAAA,IACH;AAAA,GACF;AACF;;;ACzLO,IAAM,uBAAN,MAA2B;AAAA,EAMhC,WAAA,CACU,QAAA,EACA,QAAA,EACR,MAAA,GAA6B,EAAC,EAC9B;AAHQ,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAJV,IAAA,IAAA,CAAQ,OAAA,GAAU,KAAA;AAOhB,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,UAAA,EAAY,IAAA;AAAA,MACZ,IAAA,EAAM,IAAA;AAAA,MACN,GAAG;AAAA,KACL;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,oBAAA,CAAqB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAA,EAA8B;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,OAAA,CAAQ,KAAK,2CAA2C,CAAA;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,OAAA,CAAQ,KAAK,2EAA2E,CAAA;AACxF,MAAA,OAAA,CAAQ,KAAK,8DAA8D,CAAA;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,YAAa,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/E,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,+CAAA,EAAkD,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,OAAA,EAAS;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,QAAQ,IAAA,EAAK;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAEf,IAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAc,OAAA,EAA6C;AAEvE,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM;AACpB,MAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,cAAA,GACjD,KAAK,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GACnC,GAAA;AACJ,MAAA,OAAA,CAAQ,8BAA8B,CAAA,GAAI,iCAAA;AAC1C,MAAA,OAAA,CAAQ,8BAA8B,CAAA,GAAI,6BAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,OAAA,CAAQ,WAAW,SAAA,EAAW;AAChC,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,MAAM,EAAA,EAAG;AAAA,IAC1C;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAChD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,QAAA,CAAS,OAAA,GAAU,GAAA,GAAM,GAAA;AAAA,QACjC,OAAA;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,OAC/B;AAAA,IACF,SAASA,MAAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAA6B;AAAA,QACjC,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAOA,MAAAA,YAAiB,KAAA,GAAQA,MAAAA,CAAM,OAAA,GAAU,uBAAA;AAAA,QAChD,IAAA,EAAM,gBAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA;AAAI,OACtB;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,aAAa;AAAA,OACpC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,OAAA,EAA4C;AACrE,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,MAAK,GAAI,OAAA;AAGtC,IAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAAiB,MAAA,KAAkD;AACpF,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACtC,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAEpC,MAAA,IAAI,YAAA,CAAa,MAAA,KAAW,WAAA,CAAY,MAAA,EAAQ;AAC9C,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAMC,UAAiC,EAAC;AAExC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,QAAA,IAAI,YAAA,CAAa,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AACnC,UAAAA,OAAAA,CAAO,aAAa,CAAC,CAAA,CAAE,MAAM,CAAC,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA;AAAA,QAClD,WAAW,YAAA,CAAa,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAA,EAAG;AAC7C,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAOA,OAAAA;AAAA,IACT,CAAA;AAGA,IAAA,IAAI,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,mBAAA,EAAqB;AACpD,MAAA,OAAO,IAAA,CAAK,SAAS,MAAA,CAAO,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IACzD;AAGA,IAAA,IAAI,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,6BAAA,EAA+B;AAC9D,MAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,GAAS,SAAA,CAAU,gCAAA,EAAkC,IAAI,CAAA;AAC7D,IAAA,IAAI,MAAA,KAAW,SAAS,MAAA,EAAQ;AAC9B,MAAA,OAAO,KAAK,QAAA,CAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IACzD;AAEA,IAAA,MAAA,GAAS,SAAA,CAAU,wCAAwC,IAAI,CAAA;AAC/D,IAAA,IAAI,MAAA,KAAW,SAAS,MAAA,EAAQ;AAC9B,MAAA,OAAO,KAAK,QAAA,CAAS,eAAA,CAAgB,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAA,GAAS,SAAA,CAAU,yCAAyC,IAAI,CAAA;AAChE,IAAA,IAAI,MAAA,KAAW,UAAU,MAAA,EAAQ;AAC/B,MAAA,OAAO,KAAK,QAAA,CAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,+BAAA,EAAiC;AAChE,MAAA,OAAO,IAAA,CAAK,SAAS,aAAA,CAAc,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAChE;AAEA,IAAA,MAAA,GAAS,SAAA,CAAU,oCAAoC,IAAI,CAAA;AAC3D,IAAA,IAAI,MAAA,KAAW,SAAS,MAAA,EAAQ;AAC9B,MAAA,OAAO,KAAK,QAAA,CAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAA,GAAS,SAAA,CAAU,qDAAqD,IAAI,CAAA;AAC5E,IAAA,IAAI,MAAA,KAAW,UAAU,MAAA,EAAQ;AAC/B,MAAA,OAAO,KAAK,QAAA,CAAS,sBAAA,CAAuB,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IACrE;AAGA,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,IAAA,KAAS,yBAAA,EAA2B;AAC3D,MAAA,OAAO,IAAA,CAAK,SAAS,IAAA,CAAK,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,6BAAA,EAA+B;AAC9D,MAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAC9D;AAGA,IAAA,IAAI,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,8BAAA,EAAgC;AAC/D,MAAA,OAAO,IAAA,CAAK,SAAS,YAAA,CAAa,EAAE,QAAQ,EAAC,EAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAA,GAAS,SAAA,CAAU,uCAAuC,IAAI,CAAA;AAC9D,IAAA,IAAI,MAAA,KAAW,UAAU,MAAA,EAAQ;AAC/B,MAAA,OAAO,KAAK,QAAA,CAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,IAC1D;AAGA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MACzC,IAAA,EAAM,WAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAAA,EACF;AACF;AAKO,SAAS,kBAAA,CACd,QAAA,EACA,QAAA,EACA,MAAA,EACsB;AACtB,EAAA,OAAO,IAAI,oBAAA,CAAqB,QAAA,EAAU,QAAA,EAAU,MAAM,CAAA;AAC5D","file":"index.mjs","sourcesContent":["/**\n * UI Bridge Native Server Types\n *\n * Types for the embedded HTTP server.\n */\n\nimport type {\n NativeUIBridgeConfig,\n NativeActionResponse,\n NativeFindResponse,\n NativeBridgeSnapshot,\n} from '../core/types';\nimport type { ComponentActionResponse, PageNavigationResponse } from '../control/types';\n\n/**\n * Server configuration\n */\nexport interface NativeServerConfig extends NativeUIBridgeConfig {\n /** Enable CORS */\n cors?: boolean;\n /** Allowed origins for CORS */\n allowedOrigins?: string[];\n}\n\n/**\n * Route definition\n */\nexport interface RouteDefinition {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n path: string;\n description: string;\n}\n\n/**\n * All UI Bridge Native routes\n */\nexport const UI_BRIDGE_NATIVE_ROUTES: Record<string, RouteDefinition> = {\n // Control - Elements\n GET_ELEMENTS: {\n method: 'GET',\n path: '/ui-bridge/control/elements',\n description: 'List all registered elements',\n },\n GET_ELEMENT: {\n method: 'GET',\n path: '/ui-bridge/control/element/:id',\n description: 'Get element details',\n },\n GET_ELEMENT_STATE: {\n method: 'GET',\n path: '/ui-bridge/control/element/:id/state',\n description: 'Get element state',\n },\n EXECUTE_ACTION: {\n method: 'POST',\n path: '/ui-bridge/control/element/:id/action',\n description: 'Execute action on element',\n },\n\n // Control - Components\n GET_COMPONENTS: {\n method: 'GET',\n path: '/ui-bridge/control/components',\n description: 'List all registered components',\n },\n GET_COMPONENT: {\n method: 'GET',\n path: '/ui-bridge/control/component/:id',\n description: 'Get component details',\n },\n EXECUTE_COMPONENT_ACTION: {\n method: 'POST',\n path: '/ui-bridge/control/component/:id/action/:actionId',\n description: 'Execute component action',\n },\n\n // Discovery\n FIND: {\n method: 'POST',\n path: '/ui-bridge/control/find',\n description: 'Find elements matching criteria',\n },\n GET_SNAPSHOT: {\n method: 'GET',\n path: '/ui-bridge/control/snapshot',\n description: 'Get full bridge snapshot',\n },\n\n // Workflows\n GET_WORKFLOWS: {\n method: 'GET',\n path: '/ui-bridge/control/workflows',\n description: 'List all workflows',\n },\n RUN_WORKFLOW: {\n method: 'POST',\n path: '/ui-bridge/control/workflow/:id/run',\n description: 'Run a workflow',\n },\n\n // Page Navigation\n PAGE_REFRESH: {\n method: 'POST',\n path: '/ui-bridge/control/page/refresh',\n description: 'Refresh the current page',\n },\n PAGE_NAVIGATE: {\n method: 'POST',\n path: '/ui-bridge/control/page/navigate',\n description: 'Navigate to a URL',\n },\n PAGE_GO_BACK: {\n method: 'POST',\n path: '/ui-bridge/control/page/back',\n description: 'Go back in navigation history',\n },\n PAGE_GO_FORWARD: {\n method: 'POST',\n path: '/ui-bridge/control/page/forward',\n description: 'Go forward in navigation history',\n },\n\n // Health\n HEALTH: {\n method: 'GET',\n path: '/ui-bridge/health',\n description: 'Health check',\n },\n};\n\n/**\n * API response wrapper\n */\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n code?: string;\n timestamp: number;\n}\n\n/**\n * Handler context\n */\nexport interface HandlerContext {\n params: Record<string, string>;\n query: Record<string, string>;\n body: unknown;\n}\n\n/**\n * Handler function type\n */\nexport type HandlerFunction<T = unknown> = (context: HandlerContext) => Promise<APIResponse<T>>;\n\n/**\n * Server handlers interface\n */\nexport interface NativeServerHandlers {\n // Elements\n getElements: HandlerFunction<{ elements: unknown[] }>;\n getElement: HandlerFunction<{ element: unknown }>;\n getElementState: HandlerFunction<{ state: unknown }>;\n executeAction: HandlerFunction<NativeActionResponse>;\n\n // Components\n getComponents: HandlerFunction<{ components: unknown[] }>;\n getComponent: HandlerFunction<{ component: unknown }>;\n executeComponentAction: HandlerFunction<ComponentActionResponse>;\n\n // Discovery\n find: HandlerFunction<NativeFindResponse>;\n getSnapshot: HandlerFunction<NativeBridgeSnapshot>;\n\n // Workflows\n getWorkflows: HandlerFunction<{ workflows: unknown[] }>;\n runWorkflow: HandlerFunction<{ runId: string; status: string }>;\n\n // Page Navigation\n pageRefresh: HandlerFunction<PageNavigationResponse>;\n pageNavigate: HandlerFunction<PageNavigationResponse>;\n pageGoBack: HandlerFunction<PageNavigationResponse>;\n pageGoForward: HandlerFunction<PageNavigationResponse>;\n\n // Health\n health: HandlerFunction<{ status: string; timestamp: number }>;\n}\n","/**\n * UI Bridge Native Server Handlers\n *\n * Request handlers for the HTTP API endpoints.\n */\n\nimport type { NativeUIBridgeRegistry } from '../core/registry';\nimport type { NativeActionExecutor } from '../control/types';\nimport type { APIResponse, HandlerContext, NativeServerHandlers } from './types';\n\n/**\n * Create a success response\n */\nfunction success<T>(data: T): APIResponse<T> {\n return {\n success: true,\n data,\n timestamp: Date.now(),\n };\n}\n\n/**\n * Create an error response\n */\nfunction error<T = unknown>(message: string, code?: string): APIResponse<T> {\n return {\n success: false,\n error: message,\n code,\n timestamp: Date.now(),\n };\n}\n\n/**\n * Create server handlers\n */\nexport function createServerHandlers(\n registry: NativeUIBridgeRegistry,\n executor: NativeActionExecutor\n): NativeServerHandlers {\n return {\n // Elements\n getElements: async () => {\n const elements = registry.getAllElements().map((e) => ({\n id: e.id,\n type: e.type,\n label: e.label,\n identifier: e.getIdentifier(),\n state: e.getState(),\n actions: e.actions,\n customActions: e.customActions ? Object.keys(e.customActions) : undefined,\n }));\n\n return success({ elements });\n },\n\n getElement: async (ctx: HandlerContext) => {\n const { id } = ctx.params;\n const element = registry.getElement(id);\n\n if (!element) {\n return error(`Element not found: ${id}`, 'ELEMENT_NOT_FOUND');\n }\n\n return success({\n element: {\n id: element.id,\n type: element.type,\n label: element.label,\n identifier: element.getIdentifier(),\n state: element.getState(),\n actions: element.actions,\n customActions: element.customActions ? Object.keys(element.customActions) : undefined,\n },\n });\n },\n\n getElementState: async (ctx: HandlerContext) => {\n const { id } = ctx.params;\n const element = registry.getElement(id);\n\n if (!element) {\n return error(`Element not found: ${id}`, 'ELEMENT_NOT_FOUND');\n }\n\n return success({ state: element.getState() });\n },\n\n executeAction: async (ctx: HandlerContext) => {\n const { id } = ctx.params;\n const body = ctx.body as {\n action: string;\n params?: Record<string, unknown>;\n waitOptions?: Record<string, unknown>;\n };\n\n if (!body?.action) {\n return error('Action is required', 'INVALID_REQUEST');\n }\n\n const response = await executor.executeAction(id, {\n action: body.action,\n params: body.params,\n waitOptions: body.waitOptions as any,\n });\n\n if (!response.success) {\n return error(response.error || 'Action failed', 'ACTION_FAILED');\n }\n\n return success(response);\n },\n\n // Components\n getComponents: async () => {\n const components = registry.getAllComponents().map((c) => ({\n id: c.id,\n name: c.name,\n description: c.description,\n actions: c.actions.map((a) => ({ id: a.id, label: a.label })),\n elementIds: c.elementIds,\n }));\n\n return success({ components });\n },\n\n getComponent: async (ctx: HandlerContext) => {\n const { id } = ctx.params;\n const component = registry.getComponent(id);\n\n if (!component) {\n return error(`Component not found: ${id}`, 'COMPONENT_NOT_FOUND');\n }\n\n return success({\n component: {\n id: component.id,\n name: component.name,\n description: component.description,\n actions: component.actions.map((a) => ({\n id: a.id,\n label: a.label,\n description: a.description,\n })),\n elementIds: component.elementIds,\n },\n });\n },\n\n executeComponentAction: async (ctx: HandlerContext) => {\n const { id, actionId } = ctx.params;\n const body = ctx.body as { params?: Record<string, unknown> };\n\n const response = await executor.executeComponentAction(id, {\n action: actionId,\n params: body?.params,\n });\n\n if (!response.success) {\n return error(response.error || 'Action failed', 'ACTION_FAILED');\n }\n\n return success(response);\n },\n\n // Discovery\n find: async (ctx: HandlerContext) => {\n const body = ctx.body as {\n types?: string[];\n testIdPattern?: string;\n accessibilityLabelPattern?: string;\n visibleOnly?: boolean;\n limit?: number;\n };\n\n const response = await executor.find({\n types: body?.types as any,\n testIdPattern: body?.testIdPattern,\n accessibilityLabelPattern: body?.accessibilityLabelPattern,\n visibleOnly: body?.visibleOnly,\n limit: body?.limit,\n });\n\n return success(response);\n },\n\n getSnapshot: async () => {\n const snapshot = registry.createSnapshot();\n return success(snapshot);\n },\n\n // Workflows\n getWorkflows: async () => {\n const workflows = registry.getAllWorkflows().map((w) => ({\n id: w.id,\n name: w.name,\n description: w.description,\n stepCount: w.steps.length,\n }));\n\n return success({ workflows });\n },\n\n runWorkflow: async (ctx: HandlerContext) => {\n const { id } = ctx.params;\n const workflow = registry.getWorkflow(id);\n\n if (!workflow) {\n return error(`Workflow not found: ${id}`, 'WORKFLOW_NOT_FOUND');\n }\n\n // TODO: Implement workflow execution\n return success({\n runId: `run-${Date.now()}`,\n status: 'pending',\n });\n },\n\n // Page Navigation (stubs — React Native apps should override with their navigation provider)\n pageRefresh: async () => {\n return error('Page refresh not supported on native platform', 'NOT_SUPPORTED');\n },\n\n pageNavigate: async () => {\n return error('Page navigation not supported on native platform', 'NOT_SUPPORTED');\n },\n\n pageGoBack: async () => {\n return error('Page go back not supported on native platform', 'NOT_SUPPORTED');\n },\n\n pageGoForward: async () => {\n return error('Page go forward not supported on native platform', 'NOT_SUPPORTED');\n },\n\n // Health\n health: async () => {\n const stats = registry.getStats();\n return success({\n status: 'healthy',\n timestamp: Date.now(),\n ...stats,\n });\n },\n };\n}\n","/**\n * UI Bridge Native HTTP Server\n *\n * Abstract HTTP server implementation for React Native.\n * This provides a framework-agnostic server interface that can be\n * implemented using various React Native HTTP server libraries.\n *\n * Supported libraries:\n * - react-native-http-bridge (recommended)\n * - @aspect/react-native-http-server\n * - Custom implementations\n */\n\nimport type { NativeUIBridgeRegistry } from '../core/registry';\nimport type { NativeActionExecutor } from '../control/types';\nimport type { NativeServerConfig, NativeServerHandlers, APIResponse } from './types';\nimport { createServerHandlers } from './handlers';\n\n/**\n * HTTP Request interface (library-agnostic)\n */\nexport interface HTTPRequest {\n method: string;\n path: string;\n headers: Record<string, string>;\n query: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * HTTP Response interface (library-agnostic)\n */\nexport interface HTTPResponse {\n status: number;\n headers: Record<string, string>;\n body: string;\n}\n\n/**\n * Request handler type\n */\nexport type RequestHandler = (request: HTTPRequest) => Promise<HTTPResponse>;\n\n/**\n * Server adapter interface\n *\n * Implement this interface to integrate with your chosen HTTP server library.\n */\nexport interface ServerAdapter {\n /** Start the server */\n start(port: number, handler: RequestHandler): Promise<void>;\n /** Stop the server */\n stop(): Promise<void>;\n /** Check if server is running */\n isRunning(): boolean;\n}\n\n/**\n * Native UI Bridge HTTP Server\n */\nexport class NativeUIBridgeServer {\n private config: NativeServerConfig;\n private handlers: NativeServerHandlers;\n private adapter?: ServerAdapter;\n private running = false;\n\n constructor(\n private registry: NativeUIBridgeRegistry,\n private executor: NativeActionExecutor,\n config: NativeServerConfig = {}\n ) {\n this.config = {\n serverPort: 9876,\n cors: true,\n ...config,\n };\n this.handlers = createServerHandlers(registry, executor);\n }\n\n /**\n * Set the server adapter\n */\n setAdapter(adapter: ServerAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Start the HTTP server\n */\n async start(): Promise<void> {\n if (this.running) {\n console.warn('[ui-bridge-native] Server already running');\n return;\n }\n\n if (!this.adapter) {\n console.warn('[ui-bridge-native] No server adapter configured. Call setAdapter() first.');\n console.warn('[ui-bridge-native] See documentation for supported adapters.');\n return;\n }\n\n await this.adapter.start(this.config.serverPort!, this.handleRequest.bind(this));\n this.running = true;\n\n console.log(`[ui-bridge-native] HTTP server started on port ${this.config.serverPort}`);\n }\n\n /**\n * Stop the HTTP server\n */\n async stop(): Promise<void> {\n if (!this.running || !this.adapter) {\n return;\n }\n\n await this.adapter.stop();\n this.running = false;\n\n console.log('[ui-bridge-native] HTTP server stopped');\n }\n\n /**\n * Check if server is running\n */\n isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Handle incoming HTTP request\n */\n private async handleRequest(request: HTTPRequest): Promise<HTTPResponse> {\n // Add CORS headers if enabled\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (this.config.cors) {\n headers['Access-Control-Allow-Origin'] = this.config.allowedOrigins\n ? this.config.allowedOrigins.join(',')\n : '*';\n headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';\n headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization';\n }\n\n // Handle CORS preflight\n if (request.method === 'OPTIONS') {\n return { status: 204, headers, body: '' };\n }\n\n try {\n const response = await this.routeRequest(request);\n return {\n status: response.success ? 200 : 400,\n headers,\n body: JSON.stringify(response),\n };\n } catch (error) {\n const errorResponse: APIResponse = {\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n code: 'INTERNAL_ERROR',\n timestamp: Date.now(),\n };\n return {\n status: 500,\n headers,\n body: JSON.stringify(errorResponse),\n };\n }\n }\n\n /**\n * Route request to appropriate handler\n */\n private async routeRequest(request: HTTPRequest): Promise<APIResponse> {\n const { method, path, query, body } = request;\n\n // Parse path parameters\n const parsePath = (pattern: string, actual: string): Record<string, string> | null => {\n const patternParts = pattern.split('/');\n const actualParts = actual.split('/');\n\n if (patternParts.length !== actualParts.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i].startsWith(':')) {\n params[patternParts[i].slice(1)] = actualParts[i];\n } else if (patternParts[i] !== actualParts[i]) {\n return null;\n }\n }\n\n return params;\n };\n\n // Health check\n if (method === 'GET' && path === '/ui-bridge/health') {\n return this.handlers.health({ params: {}, query, body });\n }\n\n // Elements\n if (method === 'GET' && path === '/ui-bridge/control/elements') {\n return this.handlers.getElements({ params: {}, query, body });\n }\n\n let params = parsePath('/ui-bridge/control/element/:id', path);\n if (method === 'GET' && params) {\n return this.handlers.getElement({ params, query, body });\n }\n\n params = parsePath('/ui-bridge/control/element/:id/state', path);\n if (method === 'GET' && params) {\n return this.handlers.getElementState({ params, query, body });\n }\n\n params = parsePath('/ui-bridge/control/element/:id/action', path);\n if (method === 'POST' && params) {\n return this.handlers.executeAction({ params, query, body });\n }\n\n // Components\n if (method === 'GET' && path === '/ui-bridge/control/components') {\n return this.handlers.getComponents({ params: {}, query, body });\n }\n\n params = parsePath('/ui-bridge/control/component/:id', path);\n if (method === 'GET' && params) {\n return this.handlers.getComponent({ params, query, body });\n }\n\n params = parsePath('/ui-bridge/control/component/:id/action/:actionId', path);\n if (method === 'POST' && params) {\n return this.handlers.executeComponentAction({ params, query, body });\n }\n\n // Discovery\n if (method === 'POST' && path === '/ui-bridge/control/find') {\n return this.handlers.find({ params: {}, query, body });\n }\n\n if (method === 'GET' && path === '/ui-bridge/control/snapshot') {\n return this.handlers.getSnapshot({ params: {}, query, body });\n }\n\n // Workflows\n if (method === 'GET' && path === '/ui-bridge/control/workflows') {\n return this.handlers.getWorkflows({ params: {}, query, body });\n }\n\n params = parsePath('/ui-bridge/control/workflow/:id/run', path);\n if (method === 'POST' && params) {\n return this.handlers.runWorkflow({ params, query, body });\n }\n\n // Not found\n return {\n success: false,\n error: `Route not found: ${method} ${path}`,\n code: 'NOT_FOUND',\n timestamp: Date.now(),\n };\n }\n}\n\n/**\n * Create a UI Bridge Native server\n */\nexport function createNativeServer(\n registry: NativeUIBridgeRegistry,\n executor: NativeActionExecutor,\n config?: NativeServerConfig\n): NativeUIBridgeServer {\n return new NativeUIBridgeServer(registry, executor, config);\n}\n\n/**\n * Example adapter using react-native-http-bridge\n *\n * To use this adapter:\n * 1. Install: npm install react-native-http-bridge\n * 2. Link native modules\n * 3. Create adapter and pass to server\n *\n * ```tsx\n * import httpBridge from 'react-native-http-bridge';\n *\n * const adapter: ServerAdapter = {\n * start: async (port, handler) => {\n * httpBridge.start(port, 'ui-bridge', async (request) => {\n * const response = await handler({\n * method: request.type,\n * path: request.url,\n * headers: request.headers || {},\n * query: parseQuery(request.url),\n * body: request.postData ? JSON.parse(request.postData) : undefined,\n * });\n * httpBridge.respond(\n * request.requestId,\n * response.status,\n * response.headers['Content-Type'],\n * response.body\n * );\n * });\n * },\n * stop: async () => {\n * httpBridge.stop();\n * },\n * isRunning: () => true,\n * };\n *\n * server.setAdapter(adapter);\n * await server.start();\n * ```\n */\n"]}