devlens-mcp 0.3.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 (162) hide show
  1. package/README.md +10 -21
  2. package/docs/setup-guide.md +11 -31
  3. package/package.json +1 -1
  4. package/.claude/settings.json +0 -12
  5. package/.claude/settings.local.json +0 -17
  6. package/bin/cli.ts +0 -22
  7. package/bin/register.ts +0 -96
  8. package/dist/src/config/devlens-config.d.ts +0 -92
  9. package/dist/src/config/devlens-config.d.ts.map +0 -1
  10. package/dist/src/config/devlens-config.js +0 -70
  11. package/dist/src/config/devlens-config.js.map +0 -1
  12. package/dist/src/index.d.ts +0 -35
  13. package/dist/src/index.d.ts.map +0 -1
  14. package/dist/src/index.js +0 -8
  15. package/dist/src/index.js.map +0 -1
  16. package/dist/src/metro/cdp-client.d.ts +0 -48
  17. package/dist/src/metro/cdp-client.d.ts.map +0 -1
  18. package/dist/src/metro/cdp-client.js +0 -127
  19. package/dist/src/metro/cdp-client.js.map +0 -1
  20. package/dist/src/metro/log-collector.d.ts +0 -30
  21. package/dist/src/metro/log-collector.d.ts.map +0 -1
  22. package/dist/src/metro/log-collector.js +0 -114
  23. package/dist/src/metro/log-collector.js.map +0 -1
  24. package/dist/src/metro/metro-bridge.d.ts +0 -56
  25. package/dist/src/metro/metro-bridge.d.ts.map +0 -1
  26. package/dist/src/metro/metro-bridge.js +0 -255
  27. package/dist/src/metro/metro-bridge.js.map +0 -1
  28. package/dist/src/metro/network-inspector.d.ts +0 -34
  29. package/dist/src/metro/network-inspector.d.ts.map +0 -1
  30. package/dist/src/metro/network-inspector.js +0 -100
  31. package/dist/src/metro/network-inspector.js.map +0 -1
  32. package/dist/src/platform/android/adb.d.ts +0 -50
  33. package/dist/src/platform/android/adb.d.ts.map +0 -1
  34. package/dist/src/platform/android/adb.js +0 -137
  35. package/dist/src/platform/android/adb.js.map +0 -1
  36. package/dist/src/platform/android/android-device.d.ts +0 -21
  37. package/dist/src/platform/android/android-device.d.ts.map +0 -1
  38. package/dist/src/platform/android/android-device.js +0 -94
  39. package/dist/src/platform/android/android-device.js.map +0 -1
  40. package/dist/src/platform/android/ui-automator.d.ts +0 -17
  41. package/dist/src/platform/android/ui-automator.d.ts.map +0 -1
  42. package/dist/src/platform/android/ui-automator.js +0 -126
  43. package/dist/src/platform/android/ui-automator.js.map +0 -1
  44. package/dist/src/platform/device-manager.d.ts +0 -28
  45. package/dist/src/platform/device-manager.d.ts.map +0 -1
  46. package/dist/src/platform/device-manager.js +0 -185
  47. package/dist/src/platform/device-manager.js.map +0 -1
  48. package/dist/src/platform/device.d.ts +0 -86
  49. package/dist/src/platform/device.d.ts.map +0 -1
  50. package/dist/src/platform/device.js +0 -7
  51. package/dist/src/platform/device.js.map +0 -1
  52. package/dist/src/platform/ios/accessibility.d.ts +0 -17
  53. package/dist/src/platform/ios/accessibility.d.ts.map +0 -1
  54. package/dist/src/platform/ios/accessibility.js +0 -159
  55. package/dist/src/platform/ios/accessibility.js.map +0 -1
  56. package/dist/src/platform/ios/ios-device.d.ts +0 -22
  57. package/dist/src/platform/ios/ios-device.d.ts.map +0 -1
  58. package/dist/src/platform/ios/ios-device.js +0 -97
  59. package/dist/src/platform/ios/ios-device.js.map +0 -1
  60. package/dist/src/platform/ios/simctl.d.ts +0 -54
  61. package/dist/src/platform/ios/simctl.d.ts.map +0 -1
  62. package/dist/src/platform/ios/simctl.js +0 -192
  63. package/dist/src/platform/ios/simctl.js.map +0 -1
  64. package/dist/src/server.d.ts +0 -3
  65. package/dist/src/server.d.ts.map +0 -1
  66. package/dist/src/server.js +0 -176
  67. package/dist/src/server.js.map +0 -1
  68. package/dist/src/snapshot/formatter.d.ts +0 -18
  69. package/dist/src/snapshot/formatter.d.ts.map +0 -1
  70. package/dist/src/snapshot/formatter.js +0 -86
  71. package/dist/src/snapshot/formatter.js.map +0 -1
  72. package/dist/src/snapshot/ref-registry.d.ts +0 -67
  73. package/dist/src/snapshot/ref-registry.d.ts.map +0 -1
  74. package/dist/src/snapshot/ref-registry.js +0 -169
  75. package/dist/src/snapshot/ref-registry.js.map +0 -1
  76. package/dist/src/snapshot/snapshot-differ.d.ts +0 -57
  77. package/dist/src/snapshot/snapshot-differ.d.ts.map +0 -1
  78. package/dist/src/snapshot/snapshot-differ.js +0 -153
  79. package/dist/src/snapshot/snapshot-differ.js.map +0 -1
  80. package/dist/src/tools/app-tools.d.ts +0 -71
  81. package/dist/src/tools/app-tools.d.ts.map +0 -1
  82. package/dist/src/tools/app-tools.js +0 -97
  83. package/dist/src/tools/app-tools.js.map +0 -1
  84. package/dist/src/tools/device-tools.d.ts +0 -53
  85. package/dist/src/tools/device-tools.d.ts.map +0 -1
  86. package/dist/src/tools/device-tools.js +0 -86
  87. package/dist/src/tools/device-tools.js.map +0 -1
  88. package/dist/src/tools/ds-tools.d.ts +0 -65
  89. package/dist/src/tools/ds-tools.d.ts.map +0 -1
  90. package/dist/src/tools/ds-tools.js +0 -314
  91. package/dist/src/tools/ds-tools.js.map +0 -1
  92. package/dist/src/tools/interaction-tools.d.ts +0 -248
  93. package/dist/src/tools/interaction-tools.d.ts.map +0 -1
  94. package/dist/src/tools/interaction-tools.js +0 -391
  95. package/dist/src/tools/interaction-tools.js.map +0 -1
  96. package/dist/src/tools/metro-tools.d.ts +0 -115
  97. package/dist/src/tools/metro-tools.d.ts.map +0 -1
  98. package/dist/src/tools/metro-tools.js +0 -270
  99. package/dist/src/tools/metro-tools.js.map +0 -1
  100. package/dist/src/tools/navigation-tools.d.ts +0 -36
  101. package/dist/src/tools/navigation-tools.d.ts.map +0 -1
  102. package/dist/src/tools/navigation-tools.js +0 -60
  103. package/dist/src/tools/navigation-tools.js.map +0 -1
  104. package/dist/src/tools/screenshot-tools.d.ts +0 -298
  105. package/dist/src/tools/screenshot-tools.d.ts.map +0 -1
  106. package/dist/src/tools/screenshot-tools.js +0 -565
  107. package/dist/src/tools/screenshot-tools.js.map +0 -1
  108. package/dist/src/tools/snapshot-tools.d.ts +0 -161
  109. package/dist/src/tools/snapshot-tools.d.ts.map +0 -1
  110. package/dist/src/tools/snapshot-tools.js +0 -479
  111. package/dist/src/tools/snapshot-tools.js.map +0 -1
  112. package/dist/src/utils/image-preprocess.d.ts +0 -49
  113. package/dist/src/utils/image-preprocess.d.ts.map +0 -1
  114. package/dist/src/utils/image-preprocess.js +0 -322
  115. package/dist/src/utils/image-preprocess.js.map +0 -1
  116. package/dist/src/utils/retry.d.ts +0 -21
  117. package/dist/src/utils/retry.d.ts.map +0 -1
  118. package/dist/src/utils/retry.js +0 -33
  119. package/dist/src/utils/retry.js.map +0 -1
  120. package/dist/src/visual/comparator.d.ts +0 -51
  121. package/dist/src/visual/comparator.d.ts.map +0 -1
  122. package/dist/src/visual/comparator.js +0 -119
  123. package/dist/src/visual/comparator.js.map +0 -1
  124. package/dist/src/visual/layout-analyzer.d.ts +0 -64
  125. package/dist/src/visual/layout-analyzer.d.ts.map +0 -1
  126. package/dist/src/visual/layout-analyzer.js +0 -198
  127. package/dist/src/visual/layout-analyzer.js.map +0 -1
  128. package/dist/src/visual/screenshot.d.ts +0 -17
  129. package/dist/src/visual/screenshot.d.ts.map +0 -1
  130. package/dist/src/visual/screenshot.js +0 -39
  131. package/dist/src/visual/screenshot.js.map +0 -1
  132. package/src/config/devlens-config.ts +0 -76
  133. package/src/index.ts +0 -5
  134. package/src/metro/cdp-client.ts +0 -160
  135. package/src/metro/log-collector.ts +0 -137
  136. package/src/metro/metro-bridge.ts +0 -307
  137. package/src/metro/network-inspector.ts +0 -134
  138. package/src/platform/android/adb.ts +0 -200
  139. package/src/platform/android/android-device.ts +0 -116
  140. package/src/platform/android/ui-automator.ts +0 -141
  141. package/src/platform/device-manager.ts +0 -229
  142. package/src/platform/device.ts +0 -110
  143. package/src/platform/ios/accessibility.ts +0 -189
  144. package/src/platform/ios/ios-device.ts +0 -116
  145. package/src/platform/ios/simctl.ts +0 -244
  146. package/src/server.ts +0 -228
  147. package/src/snapshot/formatter.ts +0 -102
  148. package/src/snapshot/ref-registry.ts +0 -230
  149. package/src/snapshot/snapshot-differ.ts +0 -220
  150. package/src/tools/app-tools.ts +0 -111
  151. package/src/tools/device-tools.ts +0 -96
  152. package/src/tools/ds-tools.ts +0 -395
  153. package/src/tools/interaction-tools.ts +0 -467
  154. package/src/tools/metro-tools.ts +0 -320
  155. package/src/tools/navigation-tools.ts +0 -71
  156. package/src/tools/screenshot-tools.ts +0 -698
  157. package/src/tools/snapshot-tools.ts +0 -585
  158. package/src/utils/image-preprocess.ts +0 -430
  159. package/src/utils/retry.ts +0 -51
  160. package/src/visual/comparator.ts +0 -191
  161. package/src/visual/layout-analyzer.ts +0 -283
  162. package/src/visual/screenshot.ts +0 -49
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deviceToolSchemas = void 0;
4
- exports.createDeviceToolHandlers = createDeviceToolHandlers;
5
- const zod_1 = require("zod");
6
- exports.deviceToolSchemas = {
7
- devlens_list_devices: {
8
- description: "List all running iOS Simulators and Android Emulators. Returns device IDs, names, platforms, and OS versions.",
9
- parameters: zod_1.z.object({}),
10
- },
11
- devlens_device_info: {
12
- description: "Get detailed information about a specific device: screen size, OS version, orientation. If no deviceId is provided, uses the first available device.",
13
- parameters: zod_1.z.object({
14
- deviceId: zod_1.z
15
- .string()
16
- .optional()
17
- .describe("Device ID from devlens_list_devices. Optional."),
18
- }),
19
- },
20
- devlens_set_orientation: {
21
- description: "Set the device orientation to portrait or landscape.",
22
- parameters: zod_1.z.object({
23
- orientation: zod_1.z
24
- .enum(["portrait", "landscape"])
25
- .describe("Target orientation"),
26
- }),
27
- },
28
- };
29
- function createDeviceToolHandlers(deviceManager) {
30
- return {
31
- devlens_list_devices: async () => {
32
- const devices = await deviceManager.discoverDevices();
33
- if (devices.length === 0) {
34
- return {
35
- content: [
36
- {
37
- type: "text",
38
- text: "No running simulators or emulators found.\n\nTo start a device:\n- Android: Open Android Studio → Device Manager → Start an emulator\n- iOS: Open Xcode → Window → Devices and Simulators → Boot a simulator",
39
- },
40
- ],
41
- };
42
- }
43
- const lines = devices.map((d) => `${d.isBooted ? "●" : "○"} ${d.name} (${d.platform}, ${d.osVersion}) — id: ${d.id}`);
44
- return {
45
- content: [
46
- {
47
- type: "text",
48
- text: `Found ${devices.length} device(s):\n\n${lines.join("\n")}`,
49
- },
50
- ],
51
- };
52
- },
53
- devlens_device_info: async (params) => {
54
- const device = await deviceManager.getDevice(params.deviceId);
55
- const info = await device.getInfo();
56
- return {
57
- content: [
58
- {
59
- type: "text",
60
- text: [
61
- `Device: ${info.name}`,
62
- `Platform: ${info.platform}`,
63
- `OS Version: ${info.osVersion}`,
64
- `Screen: ${info.screenWidth}x${info.screenHeight}`,
65
- `Orientation: ${info.orientation}`,
66
- `ID: ${info.id}`,
67
- ].join("\n"),
68
- },
69
- ],
70
- };
71
- },
72
- devlens_set_orientation: async (params) => {
73
- const device = await deviceManager.getDevice();
74
- await device.setOrientation(params.orientation);
75
- return {
76
- content: [
77
- {
78
- type: "text",
79
- text: `Orientation set to ${params.orientation}.`,
80
- },
81
- ],
82
- };
83
- },
84
- };
85
- }
86
- //# sourceMappingURL=device-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-tools.js","sourceRoot":"","sources":["../../../src/tools/device-tools.ts"],"names":[],"mappings":";;;AA6BA,4DAkEC;AA/FD,6BAAwB;AAGX,QAAA,iBAAiB,GAAG;IAC/B,oBAAoB,EAAE;QACpB,WAAW,EACT,+GAA+G;QACjH,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KACzB;IACD,mBAAmB,EAAE;QACnB,WAAW,EACT,sJAAsJ;QACxJ,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,OAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;SAC9D,CAAC;KACH;IACD,uBAAuB,EAAE;QACvB,WAAW,EAAE,sDAAsD;QACnE,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,OAAC;iBACX,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;iBAC/B,QAAQ,CAAC,oBAAoB,CAAC;SAClC,CAAC;KACH;CACF,CAAC;AAEF,SAAgB,wBAAwB,CAAC,aAA4B;IACnE,OAAO;QACL,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,8MAA8M;yBACrN;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,EAAE,EAAE,CACtF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,mBAAmB,EAAE,KAAK,EAAE,MAA6B,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEpC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,WAAW,IAAI,CAAC,IAAI,EAAE;4BACtB,aAAa,IAAI,CAAC,QAAQ,EAAE;4BAC5B,eAAe,IAAI,CAAC,SAAS,EAAE;4BAC/B,WAAW,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;4BAClD,gBAAgB,IAAI,CAAC,WAAW,EAAE;4BAClC,OAAO,IAAI,CAAC,EAAE,EAAE;yBACjB,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAED,uBAAuB,EAAE,KAAK,EAAE,MAE/B,EAAE,EAAE;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,MAAM,CAAC,WAAW,GAAG;qBAClD;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,65 +0,0 @@
1
- import { z } from "zod";
2
- import type { DesignSystemConfig } from "../config/devlens-config.js";
3
- /**
4
- * Design System Context tool.
5
- *
6
- * When devlens.config.json is configured with a designSystem block,
7
- * this tool scans the consumer project and returns:
8
- * - Design token values (colors, spacing, typography, etc.)
9
- * - TypeScript prop interfaces for DS components
10
- * - Component usage patterns found in the codebase
11
- *
12
- * The AI uses this context to write DS-compliant code when fixing
13
- * differences found by devlens_compare_with_figma.
14
- */
15
- export interface TokenEntry {
16
- name: string;
17
- value: string;
18
- group: string;
19
- }
20
- export interface ComponentUsagePattern {
21
- componentName: string;
22
- importedFrom: string;
23
- usageCount: number;
24
- /** prop name → distinct values seen in the codebase */
25
- sampleProps: Record<string, string[]>;
26
- sourceFiles: string[];
27
- }
28
- export declare const dsToolSchemas: {
29
- devlens_ds_context: {
30
- description: string;
31
- parameters: z.ZodObject<{
32
- includeTokens: z.ZodDefault<z.ZodBoolean>;
33
- includeComponents: z.ZodDefault<z.ZodBoolean>;
34
- includeInterfaces: z.ZodDefault<z.ZodBoolean>;
35
- }, "strip", z.ZodTypeAny, {
36
- includeTokens: boolean;
37
- includeComponents: boolean;
38
- includeInterfaces: boolean;
39
- }, {
40
- includeTokens?: boolean | undefined;
41
- includeComponents?: boolean | undefined;
42
- includeInterfaces?: boolean | undefined;
43
- }>;
44
- };
45
- };
46
- export declare function createDsToolHandlers(dsConfig: DesignSystemConfig | undefined): {
47
- devlens_ds_context: (params: {
48
- includeTokens: boolean;
49
- includeComponents: boolean;
50
- includeInterfaces: boolean;
51
- }) => Promise<{
52
- content: {
53
- type: "text";
54
- text: string;
55
- }[];
56
- isError: boolean;
57
- } | {
58
- content: {
59
- type: "text";
60
- text: string;
61
- }[];
62
- isError?: undefined;
63
- }>;
64
- };
65
- //# sourceMappingURL=ds-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ds-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/ds-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAmBzB,CAAC;AAsQF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS;iCAEtC;QACjC,aAAa,EAAE,OAAO,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;KAC5B;;;;;;;;;;;;;EAsEJ"}
@@ -1,314 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dsToolSchemas = void 0;
4
- exports.createDsToolHandlers = createDsToolHandlers;
5
- const zod_1 = require("zod");
6
- const promises_1 = require("fs/promises");
7
- const path_1 = require("path");
8
- // ─── Tool Schema ─────────────────────────────────────────────────────────────
9
- exports.dsToolSchemas = {
10
- devlens_ds_context: {
11
- description: "Get design system context: available DS3 components with their TypeScript prop interfaces, design token values (colors, spacing, typography), and usage patterns from the codebase. Use this before fixing code — it tells you exactly which components and tokens to use. Requires 'designSystem' to be configured in devlens.config.json (pointed to by DEVLENS_CONFIG env var).",
12
- parameters: zod_1.z.object({
13
- includeTokens: zod_1.z
14
- .boolean()
15
- .default(true)
16
- .describe("Include design token values (colors, spacing, typography)"),
17
- includeComponents: zod_1.z
18
- .boolean()
19
- .default(true)
20
- .describe("Scan source files for DS component usage patterns and prop value combinations"),
21
- includeInterfaces: zod_1.z
22
- .boolean()
23
- .default(true)
24
- .describe("Include TypeScript prop interface definitions for each DS component"),
25
- }),
26
- },
27
- };
28
- // ─── Token Parsing ────────────────────────────────────────────────────────────
29
- /**
30
- * Parse a TypeScript constants file for exported const objects.
31
- * Handles patterns like:
32
- * export const FIGMA_COLORS = { KEY: '#hex', ... }
33
- * export const FIGMA_SPACING = { XS: 8, ... }
34
- */
35
- async function parseTokensFile(absolutePath) {
36
- const tokens = [];
37
- let content;
38
- try {
39
- content = await (0, promises_1.readFile)(absolutePath, "utf-8");
40
- }
41
- catch {
42
- return tokens;
43
- }
44
- const blockRegex = /export\s+const\s+(\w+)\s*=\s*\{([^}]+)\}/g;
45
- let blockMatch;
46
- while ((blockMatch = blockRegex.exec(content)) !== null) {
47
- const blockName = blockMatch[1];
48
- const blockBody = blockMatch[2];
49
- const lower = blockName.toLowerCase();
50
- const group = lower.includes("color") ? "colors"
51
- : lower.includes("spacing") ? "spacing"
52
- : lower.includes("typo") ? "typography"
53
- : lower.includes("shape") ? "shapes"
54
- : lower.includes("dimension") ? "dimensions"
55
- : "other";
56
- const entryRegex = /['"]?(\w+)['"]?\s*:\s*([^,\n]+)/g;
57
- let entryMatch;
58
- while ((entryMatch = entryRegex.exec(blockBody)) !== null) {
59
- const name = entryMatch[1].trim();
60
- const raw = entryMatch[2]
61
- .trim()
62
- .replace(/\/\/.*$/, "") // strip trailing comments
63
- .trim()
64
- .replace(/,$/, "") // strip trailing comma
65
- .trim()
66
- .replace(/^['"]/, "") // strip leading quote
67
- .replace(/['"]$/, "") // strip trailing quote
68
- .replace(/\s+as\s+const$/, "") // strip "as const"
69
- .trim();
70
- if (name && raw) {
71
- tokens.push({ name, value: raw, group });
72
- }
73
- }
74
- }
75
- return tokens;
76
- }
77
- // ─── Component Interface Reading ──────────────────────────────────────────────
78
- const SKIP_DIRS = new Set(["node_modules", ".git", "dist", "build", "__tests__", "__mocks__", ".expo"]);
79
- /** Recursively walk a directory and collect .ts/.tsx files */
80
- async function collectSourceFiles(dir) {
81
- const files = [];
82
- async function walk(current) {
83
- let entries;
84
- try {
85
- entries = await (0, promises_1.readdir)(current);
86
- }
87
- catch {
88
- return;
89
- }
90
- for (const entry of entries) {
91
- if (SKIP_DIRS.has(entry))
92
- continue;
93
- const fullPath = (0, path_1.join)(current, entry);
94
- try {
95
- const s = await (0, promises_1.stat)(fullPath);
96
- if (s.isDirectory()) {
97
- await walk(fullPath);
98
- }
99
- else if (entry.endsWith(".tsx") || entry.endsWith(".ts")) {
100
- files.push(fullPath);
101
- }
102
- }
103
- catch {
104
- // ignore permission errors
105
- }
106
- }
107
- }
108
- await walk(dir);
109
- return files;
110
- }
111
- /**
112
- * Read component interface definitions from a DS components directory.
113
- * Expects structure: componentsDir/<ComponentName>/generated/interface.ts
114
- * Returns map of interface name → full TypeScript interface text.
115
- */
116
- async function readComponentInterfaces(componentsDir) {
117
- const interfaces = {};
118
- let entries;
119
- try {
120
- entries = await (0, promises_1.readdir)(componentsDir);
121
- }
122
- catch {
123
- return interfaces;
124
- }
125
- for (const entry of entries) {
126
- // Try common paths for generated interfaces
127
- const candidates = [
128
- (0, path_1.join)(componentsDir, entry, "generated", "interface.ts"),
129
- (0, path_1.join)(componentsDir, entry, "interface.ts"),
130
- (0, path_1.join)(componentsDir, entry, "types.ts"),
131
- ];
132
- for (const interfacePath of candidates) {
133
- try {
134
- const content = await (0, promises_1.readFile)(interfacePath, "utf-8");
135
- // Extract first interface name from "export interface FooProps {"
136
- const nameMatch = content.match(/export\s+(?:interface|type)\s+(\w+)/);
137
- if (nameMatch) {
138
- interfaces[nameMatch[1]] = content.trim();
139
- break; // found one for this component
140
- }
141
- }
142
- catch {
143
- // file not found — try next candidate
144
- }
145
- }
146
- }
147
- return interfaces;
148
- }
149
- // ─── Usage Pattern Scanning ───────────────────────────────────────────────────
150
- /**
151
- * Scan TSX/TS source files for DS component usages and collect prop patterns.
152
- * Detects: <JDS*> components and common React Native DS component names.
153
- */
154
- async function scanComponentUsages(projectRoot) {
155
- const files = await collectSourceFiles(projectRoot);
156
- const usageMap = new Map();
157
- // Matches JSX tags: <JDSText variant="..." /> or <Icon name="..." />
158
- const componentTagRegex = /<(JDS\w+|DS3\w+|(?:Icon|Chip|Divider|JDSButton|JDSInput|JDSText)\b)\s([^>]{0,500})(?:\/?>|>)/g;
159
- const propRegex = /(\w+)=["'{]([^"'}\n]{0,80})["'}]/g;
160
- for (const filePath of files) {
161
- let content;
162
- try {
163
- content = await (0, promises_1.readFile)(filePath, "utf-8");
164
- }
165
- catch {
166
- continue;
167
- }
168
- // Find import lines to identify where components come from
169
- const importLines = content.match(/import[^;]+from\s+['"][^'"]+['"]/g) || [];
170
- componentTagRegex.lastIndex = 0;
171
- let tagMatch;
172
- while ((tagMatch = componentTagRegex.exec(content)) !== null) {
173
- const componentName = tagMatch[1];
174
- const propsStr = tagMatch[2];
175
- // Find import source for this component
176
- const importedFrom = importLines
177
- .find(line => line.includes(componentName))
178
- ?.match(/from\s+['"]([^'"]+)['"]/)?.[1] ?? "unknown";
179
- if (!usageMap.has(componentName)) {
180
- usageMap.set(componentName, {
181
- componentName,
182
- importedFrom,
183
- usageCount: 0,
184
- sampleProps: {},
185
- sourceFiles: [],
186
- });
187
- }
188
- const usage = usageMap.get(componentName);
189
- usage.usageCount++;
190
- if (!usage.sourceFiles.includes(filePath)) {
191
- usage.sourceFiles.push(filePath);
192
- }
193
- propRegex.lastIndex = 0;
194
- let propMatch;
195
- while ((propMatch = propRegex.exec(propsStr)) !== null) {
196
- const propName = propMatch[1];
197
- const propValue = propMatch[2];
198
- if (!usage.sampleProps[propName]) {
199
- usage.sampleProps[propName] = [];
200
- }
201
- if (!usage.sampleProps[propName].includes(propValue)) {
202
- usage.sampleProps[propName].push(propValue);
203
- }
204
- }
205
- }
206
- }
207
- return Array.from(usageMap.values()).sort((a, b) => b.usageCount - a.usageCount);
208
- }
209
- // ─── Formatting ───────────────────────────────────────────────────────────────
210
- function formatOutput(dsName, tokens, componentInterfaces, components) {
211
- const lines = [`=== Design System: ${dsName} ===`, ""];
212
- // Tokens grouped by category
213
- if (tokens.length > 0) {
214
- const groups = new Map();
215
- for (const t of tokens) {
216
- if (!groups.has(t.group))
217
- groups.set(t.group, []);
218
- groups.get(t.group).push(t);
219
- }
220
- for (const [group, groupTokens] of groups) {
221
- lines.push(`--- ${group.toUpperCase()} ---`);
222
- for (const t of groupTokens) {
223
- lines.push(` ${t.name}: ${t.value}`);
224
- }
225
- lines.push("");
226
- }
227
- }
228
- // Component TypeScript interfaces
229
- if (Object.keys(componentInterfaces).length > 0) {
230
- lines.push("--- COMPONENT INTERFACES ---");
231
- for (const [, iface] of Object.entries(componentInterfaces)) {
232
- lines.push("", iface);
233
- }
234
- lines.push("");
235
- }
236
- // Usage patterns
237
- if (components.length > 0) {
238
- lines.push("--- COMPONENT USAGE PATTERNS ---");
239
- lines.push("(props and values observed in the codebase)");
240
- for (const c of components.slice(0, 20)) {
241
- lines.push(`\n${c.componentName} (${c.usageCount} uses, from '${c.importedFrom}')`);
242
- for (const [prop, values] of Object.entries(c.sampleProps)) {
243
- lines.push(` ${prop}: ${values.slice(0, 10).join(" | ")}`);
244
- }
245
- }
246
- }
247
- return lines.join("\n");
248
- }
249
- // ─── Handler Factory ──────────────────────────────────────────────────────────
250
- function createDsToolHandlers(dsConfig) {
251
- return {
252
- devlens_ds_context: async (params) => {
253
- if (!dsConfig) {
254
- return {
255
- content: [
256
- {
257
- type: "text",
258
- text: [
259
- "No design system configured.",
260
- "",
261
- "To enable DS context, create devlens.config.json in your app root:",
262
- JSON.stringify({
263
- designSystem: {
264
- name: "jds3",
265
- projectRoot: "/absolute/path/to/your-app",
266
- tokensFile: "src/constants/figmaTokens.ts",
267
- componentsDir: "src/jds-components",
268
- componentsGlob: "src/**/*.tsx",
269
- },
270
- }, null, 2),
271
- "",
272
- "Then point to it in your MCP config env block:",
273
- ' "DEVLENS_CONFIG": "/absolute/path/to/your-app/devlens.config.json"',
274
- ].join("\n"),
275
- },
276
- ],
277
- isError: true,
278
- };
279
- }
280
- const absoluteProjectRoot = (0, path_1.resolve)(dsConfig.projectRoot);
281
- const absoluteTokensFile = (0, path_1.join)(absoluteProjectRoot, dsConfig.tokensFile);
282
- const absoluteComponentsDir = dsConfig.componentsDir
283
- ? (0, path_1.join)(absoluteProjectRoot, dsConfig.componentsDir)
284
- : null;
285
- // Run all analyses in parallel
286
- const [tokens, componentInterfaces, components] = await Promise.all([
287
- params.includeTokens
288
- ? parseTokensFile(absoluteTokensFile)
289
- : Promise.resolve([]),
290
- params.includeInterfaces && absoluteComponentsDir
291
- ? readComponentInterfaces(absoluteComponentsDir)
292
- : Promise.resolve({}),
293
- params.includeComponents
294
- ? scanComponentUsages(absoluteProjectRoot)
295
- : Promise.resolve([]),
296
- ]);
297
- const summary = [
298
- `${tokens.length} tokens`,
299
- `${Object.keys(componentInterfaces).length} component interfaces`,
300
- `${components.reduce((s, c) => s + c.usageCount, 0)} component usages across ${components.length} component types`,
301
- ].join(", ");
302
- console.error(`[devlens] DS context: ${summary}`);
303
- return {
304
- content: [
305
- {
306
- type: "text",
307
- text: formatOutput(dsConfig.name, tokens, componentInterfaces, components),
308
- },
309
- ],
310
- };
311
- },
312
- };
313
- }
314
- //# sourceMappingURL=ds-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ds-tools.js","sourceRoot":"","sources":["../../../src/tools/ds-tools.ts"],"names":[],"mappings":";;;AA8TA,oDA4EC;AA1YD,6BAAwB;AACxB,0CAAsD;AACtD,+BAAqC;AAiCrC,gFAAgF;AAEnE,QAAA,aAAa,GAAG;IAC3B,kBAAkB,EAAE;QAClB,WAAW,EACT,oXAAoX;QACtX,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,aAAa,EAAE,OAAC;iBACb,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,2DAA2D,CAAC;YACxE,iBAAiB,EAAE,OAAC;iBACjB,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,+EAA+E,CAAC;YAC5F,iBAAiB,EAAE,OAAC;iBACjB,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,qEAAqE,CAAC;SACnF,CAAC;KACH;CACF,CAAC;AAEF,iFAAiF;AAEjF;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,YAAoB;IACjD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,2CAA2C,CAAC;IAC/D,IAAI,UAAkC,CAAC;IAEvC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ;YACpC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;gBACvC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY;oBACvC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ;wBACpC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY;4BAC5C,CAAC,CAAC,OAAO,CAAC;QAEtB,MAAM,UAAU,GAAG,kCAAkC,CAAC;QACtD,IAAI,UAAkC,CAAC;QAEvC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC;iBACtB,IAAI,EAAE;iBACN,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAG,0BAA0B;iBACnD,IAAI,EAAE;iBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAS,uBAAuB;iBACjD,IAAI,EAAE;iBACN,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAM,sBAAsB;iBAChD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAM,uBAAuB;iBACjD,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,mBAAmB;iBACjD,IAAI,EAAE,CAAC;YAEV,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAExG,8DAA8D;AAC9D,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,UAAU,IAAI,CAAC,OAAe;QACjC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,uBAAuB,CAAC,aAAqB;IAC1D,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,4CAA4C;QAC5C,MAAM,UAAU,GAAG;YACjB,IAAA,WAAI,EAAC,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC;YACvD,IAAA,WAAI,EAAC,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC;YAC1C,IAAA,WAAI,EAAC,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC;SACvC,CAAC;QAEF,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACvD,kEAAkE;gBAClE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACvE,IAAI,SAAS,EAAE,CAAC;oBACd,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC1C,MAAM,CAAC,+BAA+B;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAChC,WAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE1D,qEAAqE;IACrE,MAAM,iBAAiB,GAAG,+FAA+F,CAAC;IAC1H,MAAM,SAAS,GAAG,mCAAmC,CAAC;IAEtD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,2DAA2D;QAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,IAAI,EAAE,CAAC;QAE7E,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;QAChC,IAAI,QAAgC,CAAC;QAErC,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE7B,wCAAwC;YACxC,MAAM,YAAY,GAAG,WAAW;iBAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC3C,EAAE,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAEvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE;oBAC1B,aAAa;oBACb,YAAY;oBACZ,UAAU,EAAE,CAAC;oBACb,WAAW,EAAE,EAAE;oBACf,WAAW,EAAE,EAAE;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;YAC3C,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YAED,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACxB,IAAI,SAAiC,CAAC;YACtC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrD,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AACnF,CAAC;AAED,iFAAiF;AAEjF,SAAS,YAAY,CACnB,MAAc,EACd,MAAoB,EACpB,mBAA2C,EAC3C,UAAmC;IAEnC,MAAM,KAAK,GAAa,CAAC,sBAAsB,MAAM,MAAM,EAAE,EAAE,CAAC,CAAC;IAEjE,6BAA6B;IAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,iBAAiB;IACjB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,UAAU,gBAAgB,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACrF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iFAAiF;AAEjF,SAAgB,oBAAoB,CAAC,QAAwC;IAC3E,OAAO;QACL,kBAAkB,EAAE,KAAK,EAAE,MAI1B,EAAE,EAAE;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE;gCACJ,8BAA8B;gCAC9B,EAAE;gCACF,oEAAoE;gCACpE,IAAI,CAAC,SAAS,CACZ;oCACE,YAAY,EAAE;wCACZ,IAAI,EAAE,MAAM;wCACZ,WAAW,EAAE,4BAA4B;wCACzC,UAAU,EAAE,8BAA8B;wCAC1C,aAAa,EAAE,oBAAoB;wCACnC,cAAc,EAAE,cAAc;qCAC/B;iCACF,EACD,IAAI,EACJ,CAAC,CACF;gCACD,EAAE;gCACF,gDAAgD;gCAChD,sEAAsE;6BACvE,CAAC,IAAI,CAAC,IAAI,CAAC;yBACb;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,mBAAmB,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,kBAAkB,GAAG,IAAA,WAAI,EAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1E,MAAM,qBAAqB,GAAG,QAAQ,CAAC,aAAa;gBAClD,CAAC,CAAC,IAAA,WAAI,EAAC,mBAAmB,EAAE,QAAQ,CAAC,aAAa,CAAC;gBACnD,CAAC,CAAC,IAAI,CAAC;YAET,+BAA+B;YAC/B,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClE,MAAM,CAAC,aAAa;oBAClB,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC;oBACrC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAkB,CAAC;gBACvC,MAAM,CAAC,iBAAiB,IAAI,qBAAqB;oBAC/C,CAAC,CAAC,uBAAuB,CAAC,qBAAqB,CAAC;oBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAA4B,CAAC;gBACjD,MAAM,CAAC,iBAAiB;oBACtB,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;oBAC1C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAA6B,CAAC;aACnD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG;gBACd,GAAG,MAAM,CAAC,MAAM,SAAS;gBACzB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,uBAAuB;gBACjE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,4BAA4B,UAAU,CAAC,MAAM,kBAAkB;aACnH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;YAElD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,CAAC;qBAC3E;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}