react-native-mcp-kit 4.2.0 → 4.2.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 (239) hide show
  1. package/dist/babel/testIdPlugin/collectHooks.d.ts +13 -0
  2. package/dist/babel/testIdPlugin/collectHooks.d.ts.map +1 -0
  3. package/dist/babel/testIdPlugin/collectHooks.js +112 -0
  4. package/dist/babel/testIdPlugin/collectHooks.js.map +1 -0
  5. package/dist/babel/testIdPlugin/constants.d.ts +6 -0
  6. package/dist/babel/testIdPlugin/constants.d.ts.map +1 -0
  7. package/dist/babel/testIdPlugin/constants.js +49 -0
  8. package/dist/babel/testIdPlugin/constants.js.map +1 -0
  9. package/dist/babel/testIdPlugin/helpers.d.ts +7 -0
  10. package/dist/babel/testIdPlugin/helpers.d.ts.map +1 -0
  11. package/dist/babel/testIdPlugin/helpers.js +77 -0
  12. package/dist/babel/testIdPlugin/helpers.js.map +1 -0
  13. package/dist/babel/testIdPlugin/hocUnwrap.d.ts +4 -0
  14. package/dist/babel/testIdPlugin/hocUnwrap.d.ts.map +1 -0
  15. package/dist/babel/testIdPlugin/hocUnwrap.js +94 -0
  16. package/dist/babel/testIdPlugin/hocUnwrap.js.map +1 -0
  17. package/dist/babel/{testIdPlugin.d.ts → testIdPlugin/index.d.ts} +1 -1
  18. package/dist/babel/testIdPlugin/index.d.ts.map +1 -0
  19. package/dist/babel/testIdPlugin/index.js +205 -0
  20. package/dist/babel/testIdPlugin/index.js.map +1 -0
  21. package/dist/babel/testIdPlugin/inject.d.ts +7 -0
  22. package/dist/babel/testIdPlugin/inject.d.ts.map +1 -0
  23. package/dist/babel/testIdPlugin/inject.js +86 -0
  24. package/dist/babel/testIdPlugin/inject.js.map +1 -0
  25. package/dist/babel/testIdPlugin/types.d.ts +59 -0
  26. package/dist/babel/testIdPlugin/types.d.ts.map +1 -0
  27. package/dist/babel/testIdPlugin/types.js +3 -0
  28. package/dist/babel/testIdPlugin/types.js.map +1 -0
  29. package/dist/bin/ios-hid +0 -0
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/modules/fiberTree/hooks/extract.d.ts +6 -0
  35. package/dist/modules/fiberTree/hooks/extract.d.ts.map +1 -0
  36. package/dist/modules/fiberTree/hooks/extract.js +187 -0
  37. package/dist/modules/fiberTree/hooks/extract.js.map +1 -0
  38. package/dist/modules/fiberTree/hooks/flatten.d.ts +4 -0
  39. package/dist/modules/fiberTree/hooks/flatten.d.ts.map +1 -0
  40. package/dist/modules/fiberTree/hooks/flatten.js +81 -0
  41. package/dist/modules/fiberTree/hooks/flatten.js.map +1 -0
  42. package/dist/modules/fiberTree/hooks/index.d.ts +5 -0
  43. package/dist/modules/fiberTree/hooks/index.d.ts.map +1 -0
  44. package/dist/modules/fiberTree/hooks/index.js +10 -0
  45. package/dist/modules/fiberTree/hooks/index.js.map +1 -0
  46. package/dist/modules/fiberTree/hooks/options.d.ts +9 -0
  47. package/dist/modules/fiberTree/hooks/options.d.ts.map +1 -0
  48. package/dist/modules/fiberTree/hooks/options.js +27 -0
  49. package/dist/modules/fiberTree/hooks/options.js.map +1 -0
  50. package/dist/modules/fiberTree/hooks/patterns.d.ts +2 -0
  51. package/dist/modules/fiberTree/hooks/patterns.d.ts.map +1 -0
  52. package/dist/modules/fiberTree/hooks/patterns.js +26 -0
  53. package/dist/modules/fiberTree/hooks/patterns.js.map +1 -0
  54. package/dist/modules/fiberTree/hooks/shape.d.ts +3 -0
  55. package/dist/modules/fiberTree/hooks/shape.d.ts.map +1 -0
  56. package/dist/modules/fiberTree/hooks/shape.js +66 -0
  57. package/dist/modules/fiberTree/hooks/shape.js.map +1 -0
  58. package/dist/modules/fiberTree/hooks/slotCount.d.ts +2 -0
  59. package/dist/modules/fiberTree/hooks/slotCount.d.ts.map +1 -0
  60. package/dist/modules/fiberTree/hooks/slotCount.js +93 -0
  61. package/dist/modules/fiberTree/hooks/slotCount.js.map +1 -0
  62. package/dist/modules/fiberTree/{hooks.d.ts → hooks/types.d.ts} +1 -34
  63. package/dist/modules/fiberTree/hooks/types.d.ts.map +1 -0
  64. package/dist/modules/fiberTree/hooks/types.js +3 -0
  65. package/dist/modules/fiberTree/hooks/types.js.map +1 -0
  66. package/dist/modules/fiberTree/hooks/value.d.ts +2 -0
  67. package/dist/modules/fiberTree/hooks/value.d.ts.map +1 -0
  68. package/dist/modules/fiberTree/hooks/value.js +89 -0
  69. package/dist/modules/fiberTree/hooks/value.js.map +1 -0
  70. package/dist/modules/fiberTree/utils/constants.d.ts +8 -0
  71. package/dist/modules/fiberTree/utils/constants.d.ts.map +1 -0
  72. package/dist/modules/fiberTree/utils/constants.js +15 -0
  73. package/dist/modules/fiberTree/utils/constants.js.map +1 -0
  74. package/dist/modules/fiberTree/utils/index.d.ts +9 -0
  75. package/dist/modules/fiberTree/utils/index.d.ts.map +1 -0
  76. package/dist/modules/fiberTree/utils/index.js +34 -0
  77. package/dist/modules/fiberTree/utils/index.js.map +1 -0
  78. package/dist/modules/fiberTree/utils/match.d.ts +4 -0
  79. package/dist/modules/fiberTree/utils/match.d.ts.map +1 -0
  80. package/dist/modules/fiberTree/utils/match.js +169 -0
  81. package/dist/modules/fiberTree/utils/match.js.map +1 -0
  82. package/dist/modules/fiberTree/utils/naming.d.ts +4 -0
  83. package/dist/modules/fiberTree/utils/naming.d.ts.map +1 -0
  84. package/dist/modules/fiberTree/utils/naming.js +52 -0
  85. package/dist/modules/fiberTree/utils/naming.js.map +1 -0
  86. package/dist/modules/fiberTree/utils/native.d.ts +5 -0
  87. package/dist/modules/fiberTree/utils/native.d.ts.map +1 -0
  88. package/dist/modules/fiberTree/utils/native.js +101 -0
  89. package/dist/modules/fiberTree/utils/native.js.map +1 -0
  90. package/dist/modules/fiberTree/utils/projection.d.ts +9 -0
  91. package/dist/modules/fiberTree/utils/projection.d.ts.map +1 -0
  92. package/dist/modules/fiberTree/utils/projection.js +75 -0
  93. package/dist/modules/fiberTree/utils/projection.js.map +1 -0
  94. package/dist/modules/fiberTree/utils/root.d.ts +4 -0
  95. package/dist/modules/fiberTree/utils/root.d.ts.map +1 -0
  96. package/dist/modules/fiberTree/utils/root.js +30 -0
  97. package/dist/modules/fiberTree/utils/root.js.map +1 -0
  98. package/dist/modules/fiberTree/utils/screen.d.ts +10 -0
  99. package/dist/modules/fiberTree/utils/screen.d.ts.map +1 -0
  100. package/dist/modules/fiberTree/utils/screen.js +39 -0
  101. package/dist/modules/fiberTree/utils/screen.js.map +1 -0
  102. package/dist/modules/fiberTree/utils/serialize.d.ts +4 -0
  103. package/dist/modules/fiberTree/utils/serialize.d.ts.map +1 -0
  104. package/dist/modules/fiberTree/utils/serialize.js +102 -0
  105. package/dist/modules/fiberTree/utils/serialize.js.map +1 -0
  106. package/dist/modules/fiberTree/utils/traverse.d.ts +12 -0
  107. package/dist/modules/fiberTree/utils/traverse.d.ts.map +1 -0
  108. package/dist/modules/fiberTree/utils/traverse.js +107 -0
  109. package/dist/modules/fiberTree/utils/traverse.js.map +1 -0
  110. package/dist/server/dispatch.d.ts +15 -0
  111. package/dist/server/dispatch.d.ts.map +1 -0
  112. package/dist/server/dispatch.js +121 -0
  113. package/dist/server/dispatch.js.map +1 -0
  114. package/dist/server/helpers.d.ts +97 -0
  115. package/dist/server/helpers.d.ts.map +1 -0
  116. package/dist/server/helpers.js +162 -0
  117. package/dist/server/helpers.js.map +1 -0
  118. package/dist/server/host/deviceResolver/byClient.d.ts +5 -0
  119. package/dist/server/host/deviceResolver/byClient.d.ts.map +1 -0
  120. package/dist/server/host/deviceResolver/byClient.js +171 -0
  121. package/dist/server/host/deviceResolver/byClient.js.map +1 -0
  122. package/dist/server/host/deviceResolver/byId.d.ts +5 -0
  123. package/dist/server/host/deviceResolver/byId.d.ts.map +1 -0
  124. package/dist/server/host/deviceResolver/byId.js +81 -0
  125. package/dist/server/host/deviceResolver/byId.js.map +1 -0
  126. package/dist/server/host/deviceResolver/enrich.d.ts +5 -0
  127. package/dist/server/host/deviceResolver/enrich.d.ts.map +1 -0
  128. package/dist/server/host/deviceResolver/enrich.js +123 -0
  129. package/dist/server/host/deviceResolver/enrich.js.map +1 -0
  130. package/dist/server/host/deviceResolver/index.d.ts +13 -0
  131. package/dist/server/host/deviceResolver/index.d.ts.map +1 -0
  132. package/dist/server/host/deviceResolver/index.js +65 -0
  133. package/dist/server/host/deviceResolver/index.js.map +1 -0
  134. package/dist/server/host/deviceResolver/list.d.ts +10 -0
  135. package/dist/server/host/deviceResolver/list.d.ts.map +1 -0
  136. package/dist/server/host/deviceResolver/list.js +119 -0
  137. package/dist/server/host/deviceResolver/list.js.map +1 -0
  138. package/dist/server/host/deviceResolver/scan.d.ts +4 -0
  139. package/dist/server/host/deviceResolver/scan.d.ts.map +1 -0
  140. package/dist/server/host/deviceResolver/scan.js +102 -0
  141. package/dist/server/host/deviceResolver/scan.js.map +1 -0
  142. package/dist/server/host/{deviceResolver.d.ts → deviceResolver/types.d.ts} +1 -16
  143. package/dist/server/host/deviceResolver/types.d.ts.map +1 -0
  144. package/dist/server/host/deviceResolver/types.js +3 -0
  145. package/dist/server/host/deviceResolver/types.js.map +1 -0
  146. package/dist/server/host/tools/input/android.d.ts +15 -0
  147. package/dist/server/host/tools/input/android.d.ts.map +1 -0
  148. package/dist/server/host/tools/input/android.js +88 -0
  149. package/dist/server/host/tools/input/android.js.map +1 -0
  150. package/dist/server/host/tools/input/constants.d.ts +14 -0
  151. package/dist/server/host/tools/input/constants.d.ts.map +1 -0
  152. package/dist/server/host/tools/input/constants.js +41 -0
  153. package/dist/server/host/tools/input/constants.js.map +1 -0
  154. package/dist/server/host/tools/input/drag.d.ts +4 -0
  155. package/dist/server/host/tools/input/drag.d.ts.map +1 -0
  156. package/dist/server/host/tools/input/drag.js +76 -0
  157. package/dist/server/host/tools/input/drag.js.map +1 -0
  158. package/dist/server/host/tools/input/index.d.ts +8 -0
  159. package/dist/server/host/tools/input/index.d.ts.map +1 -0
  160. package/dist/server/host/tools/input/index.js +18 -0
  161. package/dist/server/host/tools/input/index.js.map +1 -0
  162. package/dist/server/host/tools/input/longPress.d.ts +4 -0
  163. package/dist/server/host/tools/input/longPress.d.ts.map +1 -0
  164. package/dist/server/host/tools/input/longPress.js +49 -0
  165. package/dist/server/host/tools/input/longPress.js.map +1 -0
  166. package/dist/server/host/tools/input/pressKey.d.ts +4 -0
  167. package/dist/server/host/tools/input/pressKey.d.ts.map +1 -0
  168. package/dist/server/host/tools/input/pressKey.js +42 -0
  169. package/dist/server/host/tools/input/pressKey.js.map +1 -0
  170. package/dist/server/host/tools/input/swipe.d.ts +4 -0
  171. package/dist/server/host/tools/input/swipe.d.ts.map +1 -0
  172. package/dist/server/host/tools/input/swipe.js +71 -0
  173. package/dist/server/host/tools/input/swipe.js.map +1 -0
  174. package/dist/server/host/tools/input/tap.d.ts +4 -0
  175. package/dist/server/host/tools/input/tap.d.ts.map +1 -0
  176. package/dist/server/host/tools/input/tap.js +49 -0
  177. package/dist/server/host/tools/input/tap.js.map +1 -0
  178. package/dist/server/host/tools/input/typeText.d.ts +4 -0
  179. package/dist/server/host/tools/input/typeText.d.ts.map +1 -0
  180. package/dist/server/host/tools/input/typeText.js +52 -0
  181. package/dist/server/host/tools/input/typeText.js.map +1 -0
  182. package/dist/server/host/tools/input/typeTextBatch.d.ts +4 -0
  183. package/dist/server/host/tools/input/typeTextBatch.d.ts.map +1 -0
  184. package/dist/server/host/tools/input/typeTextBatch.js +106 -0
  185. package/dist/server/host/tools/input/typeTextBatch.js.map +1 -0
  186. package/dist/server/instructions.d.ts +2 -0
  187. package/dist/server/instructions.d.ts.map +1 -0
  188. package/dist/server/instructions.js +74 -0
  189. package/dist/server/instructions.js.map +1 -0
  190. package/dist/server/mcpServer.d.ts +0 -12
  191. package/dist/server/mcpServer.d.ts.map +1 -1
  192. package/dist/server/mcpServer.js +26 -877
  193. package/dist/server/mcpServer.js.map +1 -1
  194. package/dist/server/predicate.d.ts +31 -0
  195. package/dist/server/predicate.d.ts.map +1 -0
  196. package/dist/server/predicate.js +104 -0
  197. package/dist/server/predicate.js.map +1 -0
  198. package/dist/server/tools/assert.d.ts +4 -0
  199. package/dist/server/tools/assert.d.ts.map +1 -0
  200. package/dist/server/tools/assert.js +79 -0
  201. package/dist/server/tools/assert.js.map +1 -0
  202. package/dist/server/tools/call.d.ts +4 -0
  203. package/dist/server/tools/call.d.ts.map +1 -0
  204. package/dist/server/tools/call.js +38 -0
  205. package/dist/server/tools/call.js.map +1 -0
  206. package/dist/server/tools/connectionStatus.d.ts +4 -0
  207. package/dist/server/tools/connectionStatus.d.ts.map +1 -0
  208. package/dist/server/tools/connectionStatus.js +41 -0
  209. package/dist/server/tools/connectionStatus.js.map +1 -0
  210. package/dist/server/tools/describeTool.d.ts +4 -0
  211. package/dist/server/tools/describeTool.d.ts.map +1 -0
  212. package/dist/server/tools/describeTool.js +130 -0
  213. package/dist/server/tools/describeTool.js.map +1 -0
  214. package/dist/server/tools/listTools.d.ts +4 -0
  215. package/dist/server/tools/listTools.d.ts.map +1 -0
  216. package/dist/server/tools/listTools.js +109 -0
  217. package/dist/server/tools/listTools.js.map +1 -0
  218. package/dist/server/tools/waitUntil.d.ts +4 -0
  219. package/dist/server/tools/waitUntil.d.ts.map +1 -0
  220. package/dist/server/tools/waitUntil.js +119 -0
  221. package/dist/server/tools/waitUntil.js.map +1 -0
  222. package/package.json +2 -2
  223. package/dist/babel/testIdPlugin.d.ts.map +0 -1
  224. package/dist/babel/testIdPlugin.js +0 -585
  225. package/dist/babel/testIdPlugin.js.map +0 -1
  226. package/dist/modules/fiberTree/hooks.d.ts.map +0 -1
  227. package/dist/modules/fiberTree/hooks.js +0 -550
  228. package/dist/modules/fiberTree/hooks.js.map +0 -1
  229. package/dist/modules/fiberTree/utils.d.ts +0 -39
  230. package/dist/modules/fiberTree/utils.d.ts.map +0 -1
  231. package/dist/modules/fiberTree/utils.js +0 -641
  232. package/dist/modules/fiberTree/utils.js.map +0 -1
  233. package/dist/server/host/deviceResolver.d.ts.map +0 -1
  234. package/dist/server/host/deviceResolver.js +0 -621
  235. package/dist/server/host/deviceResolver.js.map +0 -1
  236. package/dist/server/host/tools/input.d.ts +0 -10
  237. package/dist/server/host/tools/input.d.ts.map +0 -1
  238. package/dist/server/host/tools/input.js +0 -503
  239. package/dist/server/host/tools/input.js.map +0 -1
@@ -1,550 +0,0 @@
1
- "use strict";
2
- /**
3
- * Hook introspection — pairs a fiber's `memoizedState` chain with the
4
- * `__mcp_hooks` metadata array emitted by the test-id-plugin. The metadata
5
- * holds the source-level identity of each hook call (`kind` + variable
6
- * name); React itself only stores the runtime slot. Walking both in
7
- * lockstep recovers names like `useState count` instead of `State[0]`.
8
- *
9
- * Two cross-cutting concerns live alongside the walker:
10
- * - Slot-count estimation for unannotated library hooks (`countHookSlots`)
11
- * so a custom hook that internally consumes 3 slots advances the walker
12
- * by 3, not 1 — keeps trailing metadata aligned.
13
- * - Custom-hook recursion (`flattenHookMeta`) so nested `__mcp_hooks` on
14
- * a custom hook's `fn` get inlined into the metadata stream, with the
15
- * parent emitted as an `expanded: true` synthetic record.
16
- *
17
- * Inputs come through `extractHooks` as a single `filter` bag — kinds /
18
- * names / withValues / projection knobs / compiled redact patterns. The
19
- * walker emits a flat array of `{ kind, name, hook?, via?, expanded?,
20
- * value? }`; `format: "tree"` post-processes into a nested shape by
21
- * tracking the `expanded` parents on a small stack.
22
- */
23
- Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.buildHooksOptions = exports.extractHooks = exports.parseNamePattern = void 0;
25
- const redact_1 = require("./redact");
26
- const utils_1 = require("./utils");
27
- // Parse a name pattern: `/regex/flags` → RegExp matcher; anything else →
28
- // exact-string matcher. Same convention as log_box__ignore.
29
- const parseNamePattern = (raw) => {
30
- const m = raw.match(/^\/(.+)\/([gimsuy]*)$/);
31
- if (m && m[1] !== undefined) {
32
- try {
33
- const rx = new RegExp(m[1], m[2] ?? '');
34
- return (n) => {
35
- return rx.test(n);
36
- };
37
- }
38
- catch {
39
- return (n) => {
40
- return n === raw;
41
- };
42
- }
43
- }
44
- return (n) => {
45
- return n === raw;
46
- };
47
- };
48
- exports.parseNamePattern = parseNamePattern;
49
- // Try to treat `current` as a React component / native view instance and
50
- // collapse it to a compact identifier. Native views expose
51
- // `_internalFiberInstanceHandleDEV` / `_reactInternals`; class instances
52
- // expose `_reactInternals`. If we find a fiber, we surface its mcpId /
53
- // testID / component name so the agent can follow up via `query` if needed.
54
- // If it doesn't look like a component, return null to signal "serialize
55
- // normally".
56
- const resolveComponentRef = (current) => {
57
- if (current === null || current === undefined)
58
- return null;
59
- if (typeof current !== 'object')
60
- return null;
61
- const obj = current;
62
- // Pick up a fiber from the typical internal fields used by RN / React.
63
- const fiber = obj._reactInternals ??
64
- obj._reactInternalFiber ??
65
- obj._internalFiberInstanceHandleDEV ??
66
- obj._internalInstanceHandle;
67
- const hasNativeTag = '_nativeTag' in obj;
68
- if (!fiber && !hasNativeTag)
69
- return null;
70
- const out = { __componentRef: true };
71
- if (fiber) {
72
- const props = fiber.memoizedProps;
73
- const mcpId = props?.['data-mcp-id'];
74
- const testID = props?.testID;
75
- if (mcpId)
76
- out.mcpId = mcpId;
77
- if (testID)
78
- out.testID = testID;
79
- const typeName = fiber.type?.displayName ??
80
- fiber.type?.name;
81
- if (typeName)
82
- out.componentName = typeName;
83
- }
84
- if (hasNativeTag) {
85
- out.nativeTag = obj._nativeTag;
86
- const viewConfig = obj.viewConfig;
87
- if (viewConfig?.uiViewClassName)
88
- out.viewClass = viewConfig.uiViewClassName;
89
- }
90
- return out;
91
- };
92
- // Recognise React's effect-record shape: `{ tag: number, create: function,
93
- // deps: null | unknown[] }` with optional `inst` / `destroy` / `next`.
94
- // useState / useReducer / useContext memoizedState values of this exact
95
- // shape in real user code are astronomically unlikely, so we treat this as
96
- // a reliable "definitely not a state slot" signal.
97
- const looksLikeEffectRecord = (raw) => {
98
- if (!raw || typeof raw !== 'object')
99
- return false;
100
- const r = raw;
101
- return (typeof r.tag === 'number' &&
102
- typeof r.create === 'function' &&
103
- (r.deps === null || r.deps === undefined || Array.isArray(r.deps)));
104
- };
105
- // Recognise the useRef shape: `{ current: X }` with NO other keys. A useState
106
- // value that is literally an object whose sole own-key is "current" is so
107
- // improbable in real code that we treat it as a reliable "this slot is a
108
- // ref, not a state" signal — lets State/Custom skip ref slots that leaked in
109
- // through custom-hook internals.
110
- const looksLikeRefShape = (raw) => {
111
- if (!raw || typeof raw !== 'object' || Array.isArray(raw))
112
- return false;
113
- const keys = Object.keys(raw);
114
- return keys.length === 1 && keys[0] === 'current';
115
- };
116
- // Shape-verify a hook slot's memoizedState against its expected kind. When
117
- // a custom hook internally uses multiple built-in hooks, our static metadata
118
- // understates the number of slots — every subsequent pairing drifts. By
119
- // requiring a structural match before consuming a metadata entry we can
120
- // swallow "internal" slots and keep the rest aligned. Permissive kinds
121
- // (State / Reducer / Context / Custom) reject only obvious mis-matches
122
- // (currently: the effect-record shape).
123
- const shapeMatchesKind = (raw, kind) => {
124
- switch (kind) {
125
- case 'Ref':
126
- return !!raw && typeof raw === 'object' && 'current' in raw;
127
- case 'Memo':
128
- case 'Callback':
129
- return Array.isArray(raw) && raw.length === 2 && (raw[1] === null || Array.isArray(raw[1]));
130
- case 'Effect':
131
- case 'LayoutEffect':
132
- case 'InsertionEffect':
133
- return looksLikeEffectRecord(raw);
134
- case 'Transition':
135
- return Array.isArray(raw) && raw.length === 2;
136
- case 'State':
137
- case 'Reducer':
138
- case 'Context':
139
- case 'Optimistic': // useOptimistic — state-like slot, internally a useReducer variant.
140
- case 'ActionState': // useActionState — [state, dispatch, isPending]; slot is state-like.
141
- case 'Use': // use(promise | context) — thenable-state or context-read slot, both state-like.
142
- case 'Custom':
143
- // Permissive but not blind — drop obvious effect-node and ref-shape
144
- // slots so State/Custom metadata doesn't swallow internals of
145
- // preceding custom hooks. React 19 hooks fall into this bucket
146
- // because their slot shape is state-like (not Effect/Memo/Ref).
147
- return !looksLikeEffectRecord(raw) && !looksLikeRefShape(raw);
148
- default:
149
- return true;
150
- }
151
- };
152
- // Pull a "useful" raw value out of a hook's memoizedState by kind. Does NOT
153
- // project — leaves the result raw so the final `applyProjection` sees the
154
- // real value tree (so `path` drill into hook values works). The shape here
155
- // is purely about *which slot field* to expose for each kind (e.g. Ref's
156
- // `.current`, Memo/Callback's first element of `[value, deps]`).
157
- const serializeHookValue = (raw, kind) => {
158
- const walk = (v) => {
159
- return v;
160
- };
161
- switch (kind) {
162
- case 'Ref': {
163
- if (!raw || typeof raw !== 'object' || !('current' in raw)) {
164
- return walk(raw);
165
- }
166
- const current = raw.current;
167
- const componentRef = resolveComponentRef(current);
168
- if (componentRef) {
169
- return { current: componentRef };
170
- }
171
- return { current: walk(current) };
172
- }
173
- case 'Memo':
174
- case 'Callback':
175
- if (Array.isArray(raw) && raw.length === 2) {
176
- return { deps: raw[1], value: walk(raw[0]) };
177
- }
178
- return walk(raw);
179
- case 'Effect':
180
- case 'LayoutEffect':
181
- case 'InsertionEffect': {
182
- // React's hook slot for effects holds { tag, create, destroy, deps, next }.
183
- // Only `deps` is safe and useful to surface.
184
- const effect = raw;
185
- return effect && typeof effect === 'object' && 'deps' in effect
186
- ? { deps: effect.deps ?? null }
187
- : null;
188
- }
189
- default:
190
- return walk(raw);
191
- }
192
- };
193
- // Estimate how many slots in fiber.memoizedState a hook function consumes.
194
- // Used by the slot-walker to advance past unannotated black-box library
195
- // hooks (e.g. `useSelector` from react-redux) which our babel plugin couldn't
196
- // expand statically — without this they'd consume only one fiber slot during
197
- // alignment, drifting the rest of the metadata out of sync.
198
- //
199
- // Three cascading strategies, falling through on miss:
200
- // 1. `fn.__mcp_hooks` recursive — accurate for any hook our plugin saw.
201
- // Custom sub-entries recurse; built-in entries count as 1.
202
- // 2. `fn.toString()` regex — counts `useXxx(` calls in the source. Works
203
- // even after Metro bundling because hook references survive as
204
- // property accesses (`(0, _react.useState)(...)`) — property names
205
- // aren't mangled. Underestimates when nested customs themselves expand
206
- // to multiple slots, but better than 1.
207
- // 3. Default 1 — native functions, bound functions, or sources we can't
208
- // parse. Same as the original behavior.
209
- //
210
- // Cached per-function via WeakMap so cost is paid once per hook fn per
211
- // session.
212
- const HOOK_SLOTS_CACHE = new WeakMap();
213
- // Counts hook-call occurrences inside a function's source text. Matches
214
- // `useXxx(` (classic) and bare `use(` (React 19's `use`). Negative
215
- // lookbehind on the bare-`use` arm filters out `.use(` method calls so
216
- // `database.use(middleware)` / `app.use(...)` don't inflate the count.
217
- const HOOK_NAME_RE = /\b(?<!\.)use(?:[A-Z]\w*)?\s*\(/g;
218
- const STRING_LITERAL_RE = /(['"`])(?:\\.|(?!\1).)*\1/g;
219
- const BLOCK_COMMENT_RE = /\/\*[\s\S]*?\*\//g;
220
- const LINE_COMMENT_RE = /\/\/[^\n]*/g;
221
- const countHookSlots = (fn, depth = 0, seen) => {
222
- if (depth > 8)
223
- return 1;
224
- if (typeof fn !== 'function')
225
- return 1;
226
- const fnObj = fn;
227
- const cached = HOOK_SLOTS_CACHE.get(fnObj);
228
- if (cached !== undefined)
229
- return cached;
230
- const localSeen = seen ?? new WeakSet();
231
- if (localSeen.has(fnObj))
232
- return 1;
233
- localSeen.add(fnObj);
234
- // (1) Annotated metadata: recurse into sub-entries, summing their slot
235
- // counts. Each built-in entry contributes 1; each Custom contributes
236
- // however many its own fn does (recurse).
237
- const annotated = fn.__mcp_hooks;
238
- if (Array.isArray(annotated)) {
239
- let total = 0;
240
- for (const entry of annotated) {
241
- if (entry && entry.kind === 'Custom' && typeof entry.fn === 'function') {
242
- total += countHookSlots(entry.fn, depth + 1, localSeen);
243
- }
244
- else {
245
- total += 1;
246
- }
247
- }
248
- const result = Math.max(total, 1);
249
- HOOK_SLOTS_CACHE.set(fnObj, result);
250
- return result;
251
- }
252
- // (2) toString-based parsing. Strip strings/comments first to avoid
253
- // matching `'useState'` inside literals. Each `useXxx(` occurrence in
254
- // remaining source counts as one hook call (≥ 1 slot). Custom hook calls
255
- // we encounter here can't be resolved further (no scope binding from the
256
- // outer function), so we bottom out at 1 slot per occurrence — still
257
- // beats the original constant-1 fallback when the source has multiple
258
- // hook calls (e.g. `useSyncExternalStoreWithSelector` internals).
259
- let src;
260
- try {
261
- src = Function.prototype.toString.call(fn);
262
- }
263
- catch {
264
- HOOK_SLOTS_CACHE.set(fnObj, 1);
265
- return 1;
266
- }
267
- if (!src || src.includes('[native code]')) {
268
- HOOK_SLOTS_CACHE.set(fnObj, 1);
269
- return 1;
270
- }
271
- const stripped = src
272
- .replace(STRING_LITERAL_RE, '""')
273
- .replace(BLOCK_COMMENT_RE, '')
274
- .replace(LINE_COMMENT_RE, '');
275
- HOOK_NAME_RE.lastIndex = 0;
276
- const matches = stripped.match(HOOK_NAME_RE);
277
- const result = matches ? matches.length : 1;
278
- HOOK_SLOTS_CACHE.set(fnObj, result);
279
- return result;
280
- };
281
- // Flatten a metadata array by recursively inlining custom-hook sub-metadata.
282
- // Stops on cycles (hook references itself) and on Custom entries whose `fn`
283
- // isn't annotated (library hooks that bypassed the babel plugin — usually
284
- // pre-compiled node_modules). Such unannotated entries stay as single
285
- // records and rely on shape-check for alignment.
286
- //
287
- // Custom entries with annotated `fn` produce TWO records: a parent (marked
288
- // `expanded: true`, no slot consumption) followed by all flattened
289
- // children. This keeps the call-site visible in the output — without it
290
- // the agent would see e.g. `wrapperAnimStyle.areAnimationsActive` deep
291
- // in `via:` but never the `wrapperAnimStyle = useAnimatedStyle(...)`
292
- // invocation that owns those slots.
293
- const flattenHookMeta = (meta, via = [], seen = new WeakSet(), maxDepth = Infinity) => {
294
- const out = [];
295
- for (const entry of meta) {
296
- const fn = entry.fn;
297
- const sub = fn && typeof fn === 'function' && Array.isArray(fn.__mcp_hooks) ? fn.__mcp_hooks : undefined;
298
- // Stop expanding once `via.length` would reach the cap — at that point
299
- // the current entry is treated as a leaf (Custom record without
300
- // children). The slot-walker still pairs it with one slot, so output
301
- // stays internally consistent.
302
- if (sub && !seen.has(fn) && via.length < maxDepth) {
303
- seen.add(fn);
304
- out.push({ ...entry, expanded: true, via });
305
- out.push(...flattenHookMeta(sub, [...via, entry.name], seen, maxDepth));
306
- seen.delete(fn);
307
- }
308
- else {
309
- out.push({ ...entry, via });
310
- }
311
- }
312
- return out;
313
- };
314
- const flatHooksToTree = (flat) => {
315
- const root = [];
316
- // Stack of currently-open parents, indexed by their depth (= via.length
317
- // of THEIR own entry, since their children sit at via.length + 1).
318
- const parents = [];
319
- for (const entry of flat) {
320
- const depth = entry.via?.length ?? 0;
321
- while (parents.length > depth)
322
- parents.pop();
323
- const node = { kind: entry.kind, name: entry.name };
324
- if (entry.hook !== undefined)
325
- node.hook = entry.hook;
326
- if (entry.mcpId !== undefined)
327
- node.mcpId = entry.mcpId;
328
- if (entry.value !== undefined)
329
- node.value = entry.value;
330
- if (parents.length === 0) {
331
- root.push(node);
332
- }
333
- else {
334
- const parent = parents[parents.length - 1];
335
- if (parent) {
336
- parent.children = parent.children ?? [];
337
- parent.children.push(node);
338
- }
339
- else {
340
- root.push(node);
341
- }
342
- }
343
- if (entry.expanded) {
344
- // Push as the new active parent at this depth. Subsequent entries
345
- // with via.length > depth become this node's descendants.
346
- parents.push(node);
347
- }
348
- }
349
- return root;
350
- };
351
- const extractHooks = (fiber, filter) => {
352
- // React's wrapper machinery makes "where does metadata live" depend on
353
- // the exact HOC chain. We try the most likely homes in order:
354
- //
355
- // 1. `fiber.type.__mcp_hooks` — bare components, FunctionDeclarations,
356
- // and the outer memo fiber when the chain is just memo(fn).
357
- // 2. `fiber.elementType.__mcp_hooks` — memo(fn) without compare.
358
- // React converts the fiber to SimpleMemoComponent and rewrites
359
- // `fiber.type` to the inner function (see `updateMemoComponent` in
360
- // ReactFabric); our metadata sits on the outer memo wrapper, which
361
- // survives only on `elementType`.
362
- // 3. `fiber.type.render.__mcp_hooks` — forwardRef wrapper. React lays
363
- // out memo(forwardRef(fn)) as three fibers (memo → forwardRef →
364
- // function). When the user queries by displayName they tend to
365
- // match the middle ForwardRef fiber (whose displayName resolves
366
- // via `render.displayName`); fiber.type there is the forwardRef
367
- // wrapper, which holds the inner fn at `.render`. The babel plugin
368
- // put plain metadata on that fn via the FunctionDecl visitor.
369
- // 4. `fiber.type.type.__mcp_hooks` — memo wrapper around forwardRef
370
- // (or any non-function inner). Not the SimpleMemoComponent path,
371
- // so `fiber.type` stays as the memo wrapper and `.type` is the
372
- // inner forwardRef / class / etc. This catches getter installations
373
- // on the wrapper layer too.
374
- const candidates = [
375
- fiber.type,
376
- fiber.elementType,
377
- fiber.type?.render,
378
- fiber.type?.type,
379
- ];
380
- let rawMeta;
381
- for (const c of candidates) {
382
- const m = c?.__mcp_hooks;
383
- if (Array.isArray(m)) {
384
- rawMeta = m;
385
- break;
386
- }
387
- }
388
- if (!Array.isArray(rawMeta))
389
- return null;
390
- const meta = flattenHookMeta(rawMeta, [], new WeakSet(), filter.expansionDepth);
391
- const out = [];
392
- let state = fiber.memoizedState;
393
- let metaIdx = 0;
394
- // Walk the fiber's hook chain and pair each slot with the next metadata
395
- // entry whose `kind` is shape-compatible with the slot. Strongly-shaped
396
- // kinds (Ref / Memo / Callback / Effect) match only the corresponding
397
- // React hook shape. Permissive kinds (State / Reducer / Context / Custom)
398
- // reject obvious mismatches (effect-record, ref-shape) so they don't
399
- // swallow slots belonging to preceding custom hooks.
400
- //
401
- // For Custom-leaf entries — typically black-box library hooks
402
- // (`useSelector`, `useQuery`, etc.) where flattenHookMeta couldn't expand
403
- // because `fn.__mcp_hooks` was missing — we estimate slot count via
404
- // `countHookSlots` and advance the fiber chain by that many slots in one
405
- // step. Without this, a hook that consumes 3 internal slots only
406
- // advances by 1 in the walker, drifting all trailing entries off the end
407
- // of the chain.
408
- const emitEntry = (entry, rawValueSlot) => {
409
- const { hook, kind, mcpId, name, via } = entry;
410
- const passesKind = !filter.kindsSet || filter.kindsSet.has(kind);
411
- const passesName = !filter.nameMatchers ||
412
- filter.nameMatchers.some((m) => {
413
- return m(name);
414
- });
415
- const passesMcpId = !filter.mcpIdMatchers ||
416
- (mcpId !== undefined &&
417
- filter.mcpIdMatchers.some((m) => {
418
- return m(mcpId);
419
- }));
420
- if (!(passesKind && passesName && passesMcpId))
421
- return;
422
- const record = { kind, name };
423
- // Prefer the babel-emitted hook name; fall back to fn.name for entries
424
- // produced by older bundles that predate the `hook` field.
425
- const resolvedHook = hook ?? (typeof entry.fn === 'function' ? entry.fn.name : undefined);
426
- if (resolvedHook)
427
- record.hook = resolvedHook;
428
- if (mcpId)
429
- record.mcpId = mcpId;
430
- if (filter.withValues && rawValueSlot !== undefined) {
431
- // Redaction guard: mask the value (but keep kind/name/hook visible)
432
- // when the entry's name OR any ancestor in `via` matches a redact
433
- // pattern. Catches both direct sensitive hooks (`password` State)
434
- // and leaves nested under sensitive customs (a `value` field of
435
- // `useCredentials()` won't slip through).
436
- const isRedacted = (0, redact_1.matchesAnyRedactPattern)(name, filter.redactPatterns) ||
437
- (via?.some((v) => {
438
- return (0, redact_1.matchesAnyRedactPattern)(v, filter.redactPatterns);
439
- }) ??
440
- false);
441
- if (isRedacted) {
442
- record.value = redact_1.REDACTED_VALUE;
443
- }
444
- else {
445
- let value;
446
- try {
447
- // Kind-aware extraction (Ref's .current, Memo's first slot, ...)
448
- // returns RAW. Then project with the user-given hook-value options
449
- // (path / depth / maxBytes from select.hooks). Default depth=1 so
450
- // each hook value stays compact even when withValues:true.
451
- const extracted = serializeHookValue(rawValueSlot, kind);
452
- value = (0, utils_1.projectFiberValue)(extracted, {
453
- depth: filter.valueDepth ?? 1,
454
- maxBytes: filter.valueMaxBytes,
455
- path: filter.valuePath,
456
- });
457
- // Final cycle / non-serialisable check — the MCP bridge will
458
- // stringify this for transport, so bail now rather than killing
459
- // the whole response if one stray value carries a cycle past our
460
- // WeakSet (e.g. Proxy, lazy getter, native-bridged object).
461
- JSON.stringify(value);
462
- }
463
- catch {
464
- value = '[Unserialisable value]';
465
- }
466
- record.value = value;
467
- }
468
- }
469
- if (via && via.length > 0)
470
- record.via = via;
471
- if (entry.expanded)
472
- record.expanded = true;
473
- out.push(record);
474
- };
475
- const advanceState = (steps) => {
476
- for (let i = 0; i < steps && state; i++)
477
- state = state.next;
478
- };
479
- while (state && metaIdx < meta.length) {
480
- const entry = meta[metaIdx];
481
- if (!entry) {
482
- metaIdx++;
483
- continue;
484
- }
485
- // Expanded parent (synthetic, marks the call-site of a recursively
486
- // expanded custom hook). Emit without consuming any fiber slot — the
487
- // children that follow are the real slot-bearing entries.
488
- if (entry.expanded) {
489
- emitEntry(entry, undefined);
490
- metaIdx++;
491
- continue;
492
- }
493
- // Custom-leaf with a known fn → recurse into source to estimate slot
494
- // count, then consume that many slots at once. The first slot's value
495
- // is exposed (best approximation of "this hook's value"); the rest are
496
- // skipped silently as internals of the library hook.
497
- if (entry.kind === 'Custom' && typeof entry.fn === 'function') {
498
- const slots = countHookSlots(entry.fn);
499
- if (slots > 1) {
500
- emitEntry(entry, state.memoizedState);
501
- advanceState(slots);
502
- metaIdx++;
503
- continue;
504
- }
505
- }
506
- if (!shapeMatchesKind(state.memoizedState, entry.kind)) {
507
- state = state.next;
508
- continue;
509
- }
510
- emitEntry(entry, state.memoizedState);
511
- metaIdx++;
512
- state = state.next;
513
- }
514
- // Any metadata entries left after the fiber chain ran dry didn't get a
515
- // slot match. Emit them anyway (without value) so the agent at least
516
- // sees the hook exists — this is strictly better than silently dropping,
517
- // and helps debug alignment issues. Common cause: a preceding Custom
518
- // hook consumed more slots than countHookSlots estimated.
519
- while (metaIdx < meta.length) {
520
- const entry = meta[metaIdx];
521
- if (entry)
522
- emitEntry(entry, undefined);
523
- metaIdx++;
524
- }
525
- return filter.format === 'tree' ? flatHooksToTree(out) : out;
526
- };
527
- exports.extractHooks = extractHooks;
528
- /**
529
- * Normalise a raw `select.hooks` object into the strict `HooksOptions`
530
- * shape the extractor walks against. Splits ambiguous fields (`depth` →
531
- * `valueDepth`, etc.) and compiles name-pattern strings via
532
- * `parseNamePattern`. Used by `parseProjection`.
533
- */
534
- const buildHooksOptions = (raw) => {
535
- return {
536
- expansionDepth: typeof raw?.expansionDepth === 'number' && raw.expansionDepth >= 0
537
- ? Math.floor(raw.expansionDepth)
538
- : Infinity,
539
- format: raw?.format === 'tree' ? 'tree' : 'flat',
540
- kindsSet: Array.isArray(raw?.kinds) ? new Set(raw.kinds) : null,
541
- mcpIdMatchers: Array.isArray(raw?.mcpIds) ? raw.mcpIds.map(exports.parseNamePattern) : null,
542
- nameMatchers: Array.isArray(raw?.names) ? raw.names.map(exports.parseNamePattern) : null,
543
- valueDepth: typeof raw?.depth === 'number' && raw.depth >= 0 ? raw.depth : undefined,
544
- valueMaxBytes: typeof raw?.maxBytes === 'number' && raw.maxBytes >= 0 ? raw.maxBytes : undefined,
545
- valuePath: typeof raw?.path === 'string' ? raw.path : undefined,
546
- withValues: raw?.withValues === true,
547
- };
548
- };
549
- exports.buildHooksOptions = buildHooksOptions;
550
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/modules/fiberTree/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { type ProjectOptions } from '../../shared/projection/projectValue';
2
- import { type Bounds, type ComponentQuery, type SerializedComponent } from './types';
3
- type Fiber = any;
4
- export declare const setRootRef: (ref: unknown) => void;
5
- export declare const getFiberRoot: () => Fiber | null;
6
- export declare const getComponentName: (fiber: Fiber) => string;
7
- /**
8
- * Projection helper used everywhere fiber values are serialised (props, hook
9
- * values, fiber refs). Pre-applies the fiber-aware collapse rule + skip list
10
- * over the shared `projectValue`. Callers can pass `path` / `depth` / etc.
11
- * through `options` like with `projectValue` directly.
12
- */
13
- export declare const projectFiberValue: (value: unknown, options?: ProjectOptions) => unknown;
14
- export declare const serializeFiber: (fiber: Fiber, maxDepth: number, currentDepth?: number) => SerializedComponent | null;
15
- export declare const findFiber: (root: Fiber, predicate: (fiber: Fiber) => boolean) => Fiber | null;
16
- export declare const findAllFibers: (root: Fiber, predicate: (fiber: Fiber) => boolean) => Fiber[];
17
- export declare const findByMcpId: (root: Fiber, mcpId: string) => Fiber | null;
18
- export declare const findByTestID: (root: Fiber, testID: string) => Fiber | null;
19
- export declare const findByName: (root: Fiber, name: string) => Fiber | null;
20
- export declare const findByText: (root: Fiber, text: string) => Fiber | null;
21
- export declare const matchesQuery: (fiber: Fiber, query: ComponentQuery) => boolean;
22
- export declare const findAllByQuery: (root: Fiber, query: ComponentQuery) => Fiber[];
23
- export declare const getDirectChildren: (fiber: Fiber) => Fiber[];
24
- export declare const getSiblings: (fiber: Fiber) => Fiber[];
25
- export declare const getAncestors: (fiber: Fiber) => Fiber[];
26
- export declare const findHostFiber: (fiber: Fiber) => Fiber | null;
27
- /**
28
- * Locate the screen fiber rendering the given React Navigation route key.
29
- * Route keys are unique per mounted screen; React Navigation forwards the
30
- * `route` prop down a short wrapper chain (SceneView → StaticContainer → …→
31
- * user component). Returns the deepest non-wrapper match so queries land on
32
- * the developer's screen component, not on a generated wrapper.
33
- */
34
- export declare const findScreenFiberByRouteKey: (root: Fiber, routeKey: string) => Fiber | null;
35
- export declare const getNativeInstance: (fiber: Fiber) => unknown;
36
- export declare const measureFiber: (fiber: Fiber) => Promise<Bounds | null>;
37
- export declare const getAvailableMethods: (instance: unknown) => string[];
38
- export {};
39
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/modules/fiberTree/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,cAAc,EAGnB,KAAK,mBAAmB,EACzB,MAAM,SAAS,CAAC;AAYjB,KAAK,KAAK,GAAG,GAAG,CAAC;AAKjB,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,IAEzC,CAAC;AAeF,eAAO,MAAM,YAAY,QAAO,KAAK,GAAG,IAKvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,KAAK,KAAG,MAqC/C,CAAC;AA6EF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,UAAW,OAAO,YAAW,cAAc,KAAQ,OAMhF,CAAC;AAoBF,eAAO,MAAM,cAAc,UAClB,KAAK,YACF,MAAM,4BAEf,mBAAmB,GAAG,IAaxB,CAAC;AA+EF,eAAO,MAAM,SAAS,SAAU,KAAK,aAAa,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,IAWrF,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU,KAAK,aAAa,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,EAgBtF,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,KAAK,SAAS,MAAM,KAAG,KAAK,GAAG,IAIhE,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,KAAK,UAAU,MAAM,KAAG,KAAK,GAAG,IAIlE,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,KAAK,QAAQ,MAAM,KAAG,KAAK,GAAG,IAI9D,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,KAAK,QAAQ,MAAM,KAAG,KAAK,GAAG,IAK9D,CAAC;AA4FF,eAAO,MAAM,YAAY,UAAW,KAAK,SAAS,cAAc,KAAG,OA8DlE,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,KAAK,SAAS,cAAc,KAAG,KAAK,EAIxE,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAAW,KAAK,KAAG,KAAK,EAQrD,CAAC;AAGF,eAAO,MAAM,WAAW,UAAW,KAAK,KAAG,KAAK,EAM/C,CAAC;AAGF,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,KAAK,EAQhD,CAAC;AAGF,eAAO,MAAM,aAAa,UAAW,KAAK,KAAG,KAAK,GAAG,IAUpD,CAAC;AAaF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,SAAU,KAAK,YAAY,MAAM,KAAG,KAAK,GAAG,IAajF,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAAW,KAAK,KAAG,OAoBhD,CAAC;AAYF,eAAO,MAAM,YAAY,UAAiB,KAAK,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAgDtE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAc,OAAO,KAAG,MAAM,EAiB7D,CAAC"}