@fluentui-react-native/desktop-driver 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/.cache/tsconfig.tsbuildinfo +1 -0
  2. package/AGENTS.md +68 -0
  3. package/CHANGELOG.md +16 -0
  4. package/PLAN.md +1394 -0
  5. package/README.md +223 -0
  6. package/SPEC.md +105 -0
  7. package/config/cli.cjs +8 -0
  8. package/jest.config.cjs +9 -0
  9. package/lib/agent/DesktopAgent.d.ts +56 -0
  10. package/lib/agent/DesktopAgent.d.ts.map +1 -0
  11. package/lib/agent/DesktopAgent.js +118 -0
  12. package/lib/agent/DesktopAgent.js.map +1 -0
  13. package/lib/agent/DesktopAgent.test.d.ts +2 -0
  14. package/lib/agent/DesktopAgent.test.d.ts.map +1 -0
  15. package/lib/agent/DesktopAgent.test.js +97 -0
  16. package/lib/agent/DesktopAgent.test.js.map +1 -0
  17. package/lib/agent/agent.contract.cjs +66 -0
  18. package/lib/agent/agent.contract.cjs.map +1 -0
  19. package/lib/agent/agent.contract.d.cts +2 -0
  20. package/lib/agent/agent.contract.d.cts.map +1 -0
  21. package/lib/agent/index.d.ts +3 -0
  22. package/lib/agent/index.d.ts.map +1 -0
  23. package/lib/agent/index.js +2 -0
  24. package/lib/agent/index.js.map +1 -0
  25. package/lib/artifacts/ArtifactManager.d.ts +13 -0
  26. package/lib/artifacts/ArtifactManager.d.ts.map +1 -0
  27. package/lib/artifacts/ArtifactManager.js +88 -0
  28. package/lib/artifacts/ArtifactManager.js.map +1 -0
  29. package/lib/artifacts/ArtifactManager.test.d.ts +2 -0
  30. package/lib/artifacts/ArtifactManager.test.d.ts.map +1 -0
  31. package/lib/artifacts/ArtifactManager.test.js +19 -0
  32. package/lib/artifacts/ArtifactManager.test.js.map +1 -0
  33. package/lib/artifacts/index.d.ts +2 -0
  34. package/lib/artifacts/index.d.ts.map +1 -0
  35. package/lib/artifacts/index.js +2 -0
  36. package/lib/artifacts/index.js.map +1 -0
  37. package/lib/authoring/index.d.ts +4 -0
  38. package/lib/authoring/index.d.ts.map +1 -0
  39. package/lib/authoring/index.js +2 -0
  40. package/lib/authoring/index.js.map +1 -0
  41. package/lib/authoring/results.d.ts +43 -0
  42. package/lib/authoring/results.d.ts.map +1 -0
  43. package/lib/authoring/results.js +2 -0
  44. package/lib/authoring/results.js.map +1 -0
  45. package/lib/authoring/storyTests.d.ts +81 -0
  46. package/lib/authoring/storyTests.d.ts.map +1 -0
  47. package/lib/authoring/storyTests.js +272 -0
  48. package/lib/authoring/storyTests.js.map +1 -0
  49. package/lib/authoring/storyTests.test.d.ts +2 -0
  50. package/lib/authoring/storyTests.test.d.ts.map +1 -0
  51. package/lib/authoring/storyTests.test.js +46 -0
  52. package/lib/authoring/storyTests.test.js.map +1 -0
  53. package/lib/cli/DesktopDriverCli.test.d.ts +2 -0
  54. package/lib/cli/DesktopDriverCli.test.d.ts.map +1 -0
  55. package/lib/cli/DesktopDriverCli.test.js +141 -0
  56. package/lib/cli/DesktopDriverCli.test.js.map +1 -0
  57. package/lib/cli/createDesktopDriverCommand.d.ts +8 -0
  58. package/lib/cli/createDesktopDriverCommand.d.ts.map +1 -0
  59. package/lib/cli/createDesktopDriverCommand.js +242 -0
  60. package/lib/cli/createDesktopDriverCommand.js.map +1 -0
  61. package/lib/cli/index.d.ts +3 -0
  62. package/lib/cli/index.d.ts.map +1 -0
  63. package/lib/cli/index.js +2 -0
  64. package/lib/cli/index.js.map +1 -0
  65. package/lib/client/DesktopDriverClient.d.ts +60 -0
  66. package/lib/client/DesktopDriverClient.d.ts.map +1 -0
  67. package/lib/client/DesktopDriverClient.js +155 -0
  68. package/lib/client/DesktopDriverClient.js.map +1 -0
  69. package/lib/client/index.d.ts +3 -0
  70. package/lib/client/index.d.ts.map +1 -0
  71. package/lib/client/index.js +2 -0
  72. package/lib/client/index.js.map +1 -0
  73. package/lib/host/types.d.ts +153 -0
  74. package/lib/host/types.d.ts.map +1 -0
  75. package/lib/host/types.js +2 -0
  76. package/lib/host/types.js.map +1 -0
  77. package/lib/hosts/fake/FakeDesktopHost.d.ts +72 -0
  78. package/lib/hosts/fake/FakeDesktopHost.d.ts.map +1 -0
  79. package/lib/hosts/fake/FakeDesktopHost.js +452 -0
  80. package/lib/hosts/fake/FakeDesktopHost.js.map +1 -0
  81. package/lib/index.d.ts +23 -0
  82. package/lib/index.d.ts.map +1 -0
  83. package/lib/index.js +11 -0
  84. package/lib/index.js.map +1 -0
  85. package/lib/protocol/actions.d.ts +11 -0
  86. package/lib/protocol/actions.d.ts.map +1 -0
  87. package/lib/protocol/actions.js +137 -0
  88. package/lib/protocol/actions.js.map +1 -0
  89. package/lib/protocol/capabilities.d.ts +11 -0
  90. package/lib/protocol/capabilities.d.ts.map +1 -0
  91. package/lib/protocol/capabilities.js +103 -0
  92. package/lib/protocol/capabilities.js.map +1 -0
  93. package/lib/protocol/constants.d.ts +2 -0
  94. package/lib/protocol/constants.d.ts.map +1 -0
  95. package/lib/protocol/constants.js +2 -0
  96. package/lib/protocol/constants.js.map +1 -0
  97. package/lib/protocol/errors.d.ts +37 -0
  98. package/lib/protocol/errors.d.ts.map +1 -0
  99. package/lib/protocol/errors.js +66 -0
  100. package/lib/protocol/errors.js.map +1 -0
  101. package/lib/protocol/timeouts.d.ts +2 -0
  102. package/lib/protocol/timeouts.d.ts.map +1 -0
  103. package/lib/protocol/timeouts.js +23 -0
  104. package/lib/protocol/timeouts.js.map +1 -0
  105. package/lib/protocol/types.d.ts +46 -0
  106. package/lib/protocol/types.d.ts.map +1 -0
  107. package/lib/protocol/types.js +2 -0
  108. package/lib/protocol/types.js.map +1 -0
  109. package/lib/runner/StoryTestRunner.d.ts +38 -0
  110. package/lib/runner/StoryTestRunner.d.ts.map +1 -0
  111. package/lib/runner/StoryTestRunner.js +497 -0
  112. package/lib/runner/StoryTestRunner.js.map +1 -0
  113. package/lib/runner/StoryTestRunner.test.d.ts +2 -0
  114. package/lib/runner/StoryTestRunner.test.d.ts.map +1 -0
  115. package/lib/runner/StoryTestRunner.test.js +349 -0
  116. package/lib/runner/StoryTestRunner.test.js.map +1 -0
  117. package/lib/runner/index.d.ts +3 -0
  118. package/lib/runner/index.d.ts.map +1 -0
  119. package/lib/runner/index.js +2 -0
  120. package/lib/runner/index.js.map +1 -0
  121. package/lib/server/SessionManager.d.ts +52 -0
  122. package/lib/server/SessionManager.d.ts.map +1 -0
  123. package/lib/server/SessionManager.js +208 -0
  124. package/lib/server/SessionManager.js.map +1 -0
  125. package/lib/server/TargetRegistry.d.ts +9 -0
  126. package/lib/server/TargetRegistry.d.ts.map +1 -0
  127. package/lib/server/TargetRegistry.js +24 -0
  128. package/lib/server/TargetRegistry.js.map +1 -0
  129. package/lib/server/createDesktopDriverServer.d.ts +19 -0
  130. package/lib/server/createDesktopDriverServer.d.ts.map +1 -0
  131. package/lib/server/createDesktopDriverServer.js +609 -0
  132. package/lib/server/createDesktopDriverServer.js.map +1 -0
  133. package/lib/server/desktopDriver.test.d.ts +2 -0
  134. package/lib/server/desktopDriver.test.d.ts.map +1 -0
  135. package/lib/server/desktopDriver.test.js +389 -0
  136. package/lib/server/desktopDriver.test.js.map +1 -0
  137. package/lib/server/index.d.ts +6 -0
  138. package/lib/server/index.d.ts.map +1 -0
  139. package/lib/server/index.js +4 -0
  140. package/lib/server/index.js.map +1 -0
  141. package/lib/server/webdriverio.contract.cjs +35 -0
  142. package/lib/server/webdriverio.contract.cjs.map +1 -0
  143. package/lib/server/webdriverio.contract.d.cts +2 -0
  144. package/lib/server/webdriverio.contract.d.cts.map +1 -0
  145. package/lib/server/webdriverio.test.d.ts +2 -0
  146. package/lib/server/webdriverio.test.d.ts.map +1 -0
  147. package/lib/server/webdriverio.test.js +40 -0
  148. package/lib/server/webdriverio.test.js.map +1 -0
  149. package/lib/storybook.d.ts +36 -0
  150. package/lib/storybook.d.ts.map +1 -0
  151. package/lib/storybook.js +2 -0
  152. package/lib/storybook.js.map +1 -0
  153. package/lib/testing/FakeStoryOrchestrator.d.ts +21 -0
  154. package/lib/testing/FakeStoryOrchestrator.d.ts.map +1 -0
  155. package/lib/testing/FakeStoryOrchestrator.js +44 -0
  156. package/lib/testing/FakeStoryOrchestrator.js.map +1 -0
  157. package/lib/testing/fakeStoryElements.d.ts +4 -0
  158. package/lib/testing/fakeStoryElements.d.ts.map +1 -0
  159. package/lib/testing/fakeStoryElements.js +143 -0
  160. package/lib/testing/fakeStoryElements.js.map +1 -0
  161. package/lib/testing/fakeStoryElements.test.d.ts +2 -0
  162. package/lib/testing/fakeStoryElements.test.d.ts.map +1 -0
  163. package/lib/testing/fakeStoryElements.test.js +38 -0
  164. package/lib/testing/fakeStoryElements.test.js.map +1 -0
  165. package/lib/testing/index.d.ts +7 -0
  166. package/lib/testing/index.d.ts.map +1 -0
  167. package/lib/testing/index.js +5 -0
  168. package/lib/testing/index.js.map +1 -0
  169. package/lib/testing/protocolHarness.d.ts +17 -0
  170. package/lib/testing/protocolHarness.d.ts.map +1 -0
  171. package/lib/testing/protocolHarness.js +46 -0
  172. package/lib/testing/protocolHarness.js.map +1 -0
  173. package/lib/wdio/DesktopWebdriver.d.ts +47 -0
  174. package/lib/wdio/DesktopWebdriver.d.ts.map +1 -0
  175. package/lib/wdio/DesktopWebdriver.js +76 -0
  176. package/lib/wdio/DesktopWebdriver.js.map +1 -0
  177. package/lib/wdio/DesktopWebdriver.test.d.ts +2 -0
  178. package/lib/wdio/DesktopWebdriver.test.d.ts.map +1 -0
  179. package/lib/wdio/DesktopWebdriver.test.js +74 -0
  180. package/lib/wdio/DesktopWebdriver.test.js.map +1 -0
  181. package/lib/wdio/index.d.ts +3 -0
  182. package/lib/wdio/index.d.ts.map +1 -0
  183. package/lib/wdio/index.js +2 -0
  184. package/lib/wdio/index.js.map +1 -0
  185. package/lib/wdio/wdioRunner.contract.cjs +64 -0
  186. package/lib/wdio/wdioRunner.contract.cjs.map +1 -0
  187. package/lib/wdio/wdioRunner.contract.d.cts +2 -0
  188. package/lib/wdio/wdioRunner.contract.d.cts.map +1 -0
  189. package/package.json +96 -0
  190. package/src/agent/DesktopAgent.test.ts +102 -0
  191. package/src/agent/DesktopAgent.ts +170 -0
  192. package/src/agent/agent.contract.cjs +32 -0
  193. package/src/agent/index.ts +8 -0
  194. package/src/artifacts/ArtifactManager.test.ts +20 -0
  195. package/src/artifacts/ArtifactManager.ts +105 -0
  196. package/src/artifacts/index.ts +1 -0
  197. package/src/authoring/index.ts +26 -0
  198. package/src/authoring/results.ts +47 -0
  199. package/src/authoring/storyTests.test.ts +58 -0
  200. package/src/authoring/storyTests.ts +345 -0
  201. package/src/cli/DesktopDriverCli.test.ts +150 -0
  202. package/src/cli/createDesktopDriverCommand.ts +290 -0
  203. package/src/cli/index.ts +2 -0
  204. package/src/client/DesktopDriverClient.ts +218 -0
  205. package/src/client/index.ts +2 -0
  206. package/src/host/types.ts +158 -0
  207. package/src/hosts/fake/FakeDesktopHost.ts +558 -0
  208. package/src/index.ts +101 -0
  209. package/src/protocol/actions.ts +163 -0
  210. package/src/protocol/capabilities.ts +129 -0
  211. package/src/protocol/constants.ts +1 -0
  212. package/src/protocol/errors.ts +76 -0
  213. package/src/protocol/timeouts.ts +26 -0
  214. package/src/protocol/types.ts +55 -0
  215. package/src/runner/StoryTestRunner.test.ts +362 -0
  216. package/src/runner/StoryTestRunner.ts +624 -0
  217. package/src/runner/index.ts +9 -0
  218. package/src/server/SessionManager.ts +302 -0
  219. package/src/server/TargetRegistry.ts +29 -0
  220. package/src/server/createDesktopDriverServer.ts +775 -0
  221. package/src/server/desktopDriver.test.ts +421 -0
  222. package/src/server/index.ts +5 -0
  223. package/src/server/webdriverio.contract.cjs +38 -0
  224. package/src/server/webdriverio.test.ts +41 -0
  225. package/src/storybook.ts +40 -0
  226. package/src/testing/FakeStoryOrchestrator.ts +55 -0
  227. package/src/testing/fakeStoryElements.test.ts +40 -0
  228. package/src/testing/fakeStoryElements.ts +167 -0
  229. package/src/testing/index.ts +6 -0
  230. package/src/testing/protocolHarness.ts +66 -0
  231. package/src/wdio/DesktopWebdriver.test.ts +76 -0
  232. package/src/wdio/DesktopWebdriver.ts +130 -0
  233. package/src/wdio/index.ts +2 -0
  234. package/src/wdio/wdioRunner.contract.cjs +30 -0
  235. package/tsconfig.json +15 -0
@@ -0,0 +1,452 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { HostStaleError, HostUnsupportedError } from '../../protocol/errors.js';
3
+ const onePixelPng = Uint8Array.from(Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=', 'base64'));
4
+ const defaultRect = { x: 0, y: 0, width: 800, height: 600 };
5
+ const defaultFeatures = {
6
+ accessibilityClick: true,
7
+ elementScreenshot: true,
8
+ focus: true,
9
+ keyboard: true,
10
+ physicalClick: true,
11
+ screenshot: true,
12
+ setWindowRect: true,
13
+ wheel: true,
14
+ };
15
+ export class FakeDesktopHost {
16
+ endpoint;
17
+ actions = [];
18
+ platformName;
19
+ actionDelayMs;
20
+ closeDelayMs;
21
+ features;
22
+ launchDelayMs;
23
+ screenshot;
24
+ windowsById = new Map();
25
+ elements = new Map();
26
+ initialElements = new Map();
27
+ listeners = new Set();
28
+ constructor(options = {}) {
29
+ this.endpoint = options.endpoint ?? 'windows';
30
+ this.actionDelayMs = options.actionDelayMs ?? 0;
31
+ this.closeDelayMs = options.closeDelayMs ?? 0;
32
+ this.platformName = options.platformName ?? (this.endpoint === 'macos' ? 'macos' : 'windows');
33
+ this.features = { ...defaultFeatures, ...options.features };
34
+ this.launchDelayMs = options.launchDelayMs ?? 0;
35
+ this.screenshot = options.screenshot ?? onePixelPng;
36
+ const windows = options.windows ?? [createDefaultWindow(options.storyRootTestId)];
37
+ for (const window of windows) {
38
+ this.windowsById.set(window.id, {
39
+ id: window.id,
40
+ title: window.title,
41
+ rect: { ...defaultRect, ...window.rect },
42
+ });
43
+ for (const element of window.elements) {
44
+ this.elements.set(element.id, toSnapshot(element));
45
+ }
46
+ }
47
+ for (const [id, element] of this.elements) {
48
+ this.initialElements.set(id, cloneElement(element));
49
+ }
50
+ }
51
+ setElementName(elementId, name) {
52
+ this.requireElement(elementId).name = name;
53
+ }
54
+ setElementStateUnsupported(elementId, state, reason) {
55
+ const update = (element) => {
56
+ switch (state) {
57
+ case 'checked':
58
+ element.checked = { supported: false, reason };
59
+ break;
60
+ case 'enabled':
61
+ element.enabled = { supported: false, reason };
62
+ break;
63
+ case 'expanded':
64
+ element.expanded = { supported: false, reason };
65
+ break;
66
+ case 'focused':
67
+ element.focused = { supported: false, reason };
68
+ break;
69
+ case 'selected':
70
+ element.selected = { supported: false, reason };
71
+ break;
72
+ case 'visible':
73
+ element.visible = { supported: false, reason };
74
+ break;
75
+ }
76
+ };
77
+ update(this.requireElement(elementId));
78
+ const initial = this.initialElements.get(elementId);
79
+ if (initial) {
80
+ update(initial);
81
+ }
82
+ }
83
+ async probe(signal) {
84
+ throwIfAborted(signal);
85
+ return {
86
+ endpoint: this.endpoint,
87
+ features: { ...this.features },
88
+ platformName: this.platformName,
89
+ protocolVersion: 1,
90
+ };
91
+ }
92
+ async launch(target, signal) {
93
+ this.actions.push({ type: 'launch', target: target.id });
94
+ await delay(this.launchDelayMs, signal);
95
+ return { id: randomUUID(), ownership: 'launched', processId: 1000, processStartedAt: new Date(0).toISOString() };
96
+ }
97
+ async attach(target, signal) {
98
+ this.actions.push({ type: 'attach', target: target.id });
99
+ await delay(this.launchDelayMs, signal);
100
+ return { id: randomUUID(), ownership: 'attached', processId: 1000, processStartedAt: new Date(0).toISOString() };
101
+ }
102
+ async closeApplication(lease, signal) {
103
+ throwIfAborted(signal);
104
+ this.actions.push({ type: 'close-application-start', lease: lease.id });
105
+ await delay(this.closeDelayMs, signal);
106
+ this.actions.push({ type: 'close-application', lease: lease.id, ownership: lease.ownership });
107
+ }
108
+ async windows(_lease) {
109
+ return [...this.windowsById.values()].map(cloneWindow);
110
+ }
111
+ async closeWindow(windowId) {
112
+ if (!this.windowsById.delete(windowId)) {
113
+ throw new HostStaleError(`Window "${windowId}" is no longer available.`);
114
+ }
115
+ for (const [id, element] of this.elements) {
116
+ if (element.windowId === windowId) {
117
+ this.elements.delete(id);
118
+ }
119
+ }
120
+ for (const listener of this.listeners) {
121
+ listener({ type: 'window-closed', windowId });
122
+ }
123
+ }
124
+ async activate(windowId) {
125
+ this.requireWindow(windowId);
126
+ this.actions.push({ type: 'activate', windowId });
127
+ }
128
+ async getWindowRect(windowId) {
129
+ return { ...this.requireWindow(windowId).rect };
130
+ }
131
+ async setWindowRect(windowId, rect) {
132
+ if (!this.features.setWindowRect) {
133
+ throw new HostUnsupportedError('The fake target does not support setting the window rectangle.');
134
+ }
135
+ const window = this.requireWindow(windowId);
136
+ window.rect = { ...window.rect, ...rect };
137
+ return { ...window.rect };
138
+ }
139
+ async find(root, selector) {
140
+ this.requireWindow(root.windowId);
141
+ if (root.elementId) {
142
+ this.requireElement(root.elementId);
143
+ }
144
+ return [...this.elements.values()]
145
+ .filter((element) => element.windowId === root.windowId)
146
+ .filter((element) => !root.elementId || isDescendantOf(element, root.elementId, this.elements))
147
+ .filter((element) => matches(element, selector))
148
+ .map(cloneElement);
149
+ }
150
+ async snapshot(elementId) {
151
+ return cloneElement(this.requireElement(elementId));
152
+ }
153
+ async activeElement(windowId) {
154
+ this.requireWindow(windowId);
155
+ const focused = [...this.elements.values()].find((element) => element.windowId === windowId && element.focused.supported && element.focused.value);
156
+ return focused ? cloneElement(focused) : null;
157
+ }
158
+ async hitTest(windowId, x, y) {
159
+ this.requireWindow(windowId);
160
+ const matchesPoint = [...this.elements.values()].filter((element) => element.windowId === windowId &&
161
+ isSupportedTrue(element.visible) &&
162
+ x >= element.rect.x &&
163
+ y >= element.rect.y &&
164
+ x <= element.rect.x + element.rect.width &&
165
+ y <= element.rect.y + element.rect.height);
166
+ const element = matchesPoint.at(-1);
167
+ return element ? cloneElement(element) : null;
168
+ }
169
+ async click(elementId, mode, signal) {
170
+ throwIfAborted(signal);
171
+ const element = this.requireElement(elementId);
172
+ const resolvedMode = mode === 'auto' ? (this.features.physicalClick ? 'physical' : this.features.accessibilityClick ? 'accessibility' : undefined) : mode;
173
+ if (!resolvedMode ||
174
+ (resolvedMode === 'physical' && !this.features.physicalClick) ||
175
+ (resolvedMode === 'accessibility' && !this.features.accessibilityClick)) {
176
+ throw new HostUnsupportedError(`Click mode "${mode}" is unavailable.`);
177
+ }
178
+ for (const current of this.elements.values()) {
179
+ if (current.windowId === element.windowId && current.focused.supported) {
180
+ current.focused = { supported: true, value: current.id === element.id };
181
+ }
182
+ }
183
+ if (element.role === 'checkbox' && element.checked.supported) {
184
+ element.checked = { supported: true, value: element.checked.value === true ? false : true };
185
+ }
186
+ this.actions.push({ type: 'click', elementId, mode: resolvedMode });
187
+ }
188
+ async clear(elementId, signal) {
189
+ throwIfAborted(signal);
190
+ const element = this.requireElement(elementId);
191
+ element.value = '';
192
+ element.text = '';
193
+ this.actions.push({ type: 'clear', elementId });
194
+ }
195
+ async sendKeys(elementId, text, signal) {
196
+ throwIfAborted(signal);
197
+ const element = this.requireElement(elementId);
198
+ element.value = `${element.value ?? ''}${text}`;
199
+ element.text = element.value;
200
+ this.actions.push({ type: 'send-keys', elementId, text });
201
+ }
202
+ async performActions(actions, signal) {
203
+ this.actions.push({ type: 'actions-start' });
204
+ await delay(this.actionDelayMs, signal);
205
+ this.actions.push({ type: 'actions', actions });
206
+ }
207
+ async releaseActions(signal) {
208
+ throwIfAborted(signal);
209
+ this.actions.push({ type: 'release-actions' });
210
+ }
211
+ async captureWindow(windowId) {
212
+ this.requireWindow(windowId);
213
+ if (!this.features.screenshot) {
214
+ throw new HostUnsupportedError('The fake target does not support screenshots.');
215
+ }
216
+ return createImage(this.screenshot);
217
+ }
218
+ async captureElement(elementId) {
219
+ this.requireElement(elementId);
220
+ if (!this.features.elementScreenshot) {
221
+ throw new HostUnsupportedError('The fake target does not support element screenshots.');
222
+ }
223
+ return createImage(this.screenshot);
224
+ }
225
+ async source(windowId) {
226
+ this.requireWindow(windowId);
227
+ const roots = [...this.elements.values()].filter((element) => element.windowId === windowId && !element.parentId);
228
+ return `<application>${roots.map((element) => serializeElement(element, this.elements)).join('')}</application>`;
229
+ }
230
+ async tree(windowId) {
231
+ this.requireWindow(windowId);
232
+ return [...this.elements.values()].filter((element) => element.windowId === windowId).map(cloneElement);
233
+ }
234
+ subscribe(listener) {
235
+ this.listeners.add(listener);
236
+ return () => this.listeners.delete(listener);
237
+ }
238
+ async dispose(signal) {
239
+ throwIfAborted(signal);
240
+ this.listeners.clear();
241
+ this.actions.push({ type: 'dispose' });
242
+ }
243
+ removeElement(elementId) {
244
+ if (this.elements.delete(elementId)) {
245
+ for (const [id, element] of this.elements) {
246
+ if (element.parentId === elementId) {
247
+ this.removeElement(id);
248
+ }
249
+ }
250
+ }
251
+ }
252
+ replacePreview(elements) {
253
+ for (const [id, element] of this.elements) {
254
+ if (element.scope === 'preview') {
255
+ this.elements.delete(id);
256
+ }
257
+ }
258
+ for (const element of elements) {
259
+ this.elements.set(element.id, toSnapshot(element));
260
+ }
261
+ for (const windowId of new Set(elements.map((element) => element.windowId))) {
262
+ for (const listener of this.listeners) {
263
+ listener({ type: 'structure-changed', windowId });
264
+ }
265
+ }
266
+ }
267
+ resetPreview() {
268
+ for (const [id, element] of this.elements) {
269
+ if (element.scope === 'preview') {
270
+ this.elements.delete(id);
271
+ }
272
+ }
273
+ for (const [id, element] of this.initialElements) {
274
+ if (element.scope === 'preview') {
275
+ this.elements.set(id, cloneElement(element));
276
+ }
277
+ }
278
+ }
279
+ requireWindow(windowId) {
280
+ const window = this.windowsById.get(windowId);
281
+ if (!window) {
282
+ throw new HostStaleError(`Window "${windowId}" is no longer available.`);
283
+ }
284
+ return window;
285
+ }
286
+ requireElement(elementId) {
287
+ const element = this.elements.get(elementId);
288
+ if (!element) {
289
+ throw new HostStaleError(`Element "${elementId}" is no longer available.`);
290
+ }
291
+ return element;
292
+ }
293
+ }
294
+ function createDefaultWindow(storyRootTestId = 'story-root') {
295
+ return {
296
+ id: 'window-1',
297
+ title: 'Fake Desktop App',
298
+ elements: [
299
+ {
300
+ id: 'root',
301
+ automationId: 'app-root',
302
+ enabled: true,
303
+ focused: false,
304
+ rect: defaultRect,
305
+ role: 'application',
306
+ scope: 'application',
307
+ selected: false,
308
+ visible: true,
309
+ windowId: 'window-1',
310
+ },
311
+ {
312
+ id: 'story-root',
313
+ automationId: storyRootTestId,
314
+ enabled: true,
315
+ focused: false,
316
+ name: JSON.stringify({ previewGeneration: 0, storyId: 'initial--story' }),
317
+ parentId: 'root',
318
+ rect: defaultRect,
319
+ role: 'group',
320
+ scope: 'preview',
321
+ selected: false,
322
+ visible: true,
323
+ windowId: 'window-1',
324
+ },
325
+ {
326
+ id: 'button',
327
+ automationId: 'button-primary',
328
+ enabled: true,
329
+ focused: false,
330
+ name: 'Primary',
331
+ parentId: 'root',
332
+ rect: { x: 10, y: 10, width: 120, height: 40 },
333
+ role: 'button',
334
+ scope: 'preview',
335
+ selected: false,
336
+ text: 'Primary',
337
+ visible: true,
338
+ windowId: 'window-1',
339
+ },
340
+ {
341
+ id: 'input',
342
+ automationId: 'input-name',
343
+ enabled: true,
344
+ focused: false,
345
+ name: 'Name',
346
+ parentId: 'root',
347
+ rect: { x: 10, y: 60, width: 200, height: 40 },
348
+ role: 'textbox',
349
+ scope: 'preview',
350
+ selected: false,
351
+ value: '',
352
+ visible: true,
353
+ windowId: 'window-1',
354
+ },
355
+ ],
356
+ };
357
+ }
358
+ function toSnapshot(element) {
359
+ return {
360
+ ...element,
361
+ rect: { ...element.rect },
362
+ checked: { supported: true, value: element.checked ?? false },
363
+ enabled: { supported: true, value: element.enabled ?? true },
364
+ expanded: { supported: true, value: element.expanded ?? false },
365
+ focused: { supported: true, value: element.focused ?? false },
366
+ selected: { supported: true, value: element.selected ?? false },
367
+ visible: { supported: true, value: element.visible ?? true },
368
+ };
369
+ }
370
+ function cloneElement(element) {
371
+ return {
372
+ ...element,
373
+ rect: { ...element.rect },
374
+ checked: { ...element.checked },
375
+ enabled: { ...element.enabled },
376
+ expanded: { ...element.expanded },
377
+ focused: { ...element.focused },
378
+ selected: { ...element.selected },
379
+ visible: { ...element.visible },
380
+ };
381
+ }
382
+ function cloneWindow(window) {
383
+ return { ...window, rect: { ...window.rect } };
384
+ }
385
+ function isDescendantOf(element, ancestorId, elements) {
386
+ let parentId = element.parentId;
387
+ while (parentId) {
388
+ if (parentId === ancestorId) {
389
+ return true;
390
+ }
391
+ parentId = elements.get(parentId)?.parentId;
392
+ }
393
+ return false;
394
+ }
395
+ function matches(element, selector) {
396
+ switch (selector.strategy) {
397
+ case '-furn:text':
398
+ return element.text?.includes(selector.value) ?? element.value?.includes(selector.value) ?? false;
399
+ case 'accessibility id':
400
+ return element.automationId === selector.value;
401
+ case 'tag name':
402
+ return element.role === selector.value;
403
+ case 'link text':
404
+ return element.name === selector.value;
405
+ case 'partial link text':
406
+ return element.name?.includes(selector.value) ?? false;
407
+ }
408
+ }
409
+ function isSupportedTrue(value) {
410
+ return value.supported && value.value;
411
+ }
412
+ function createImage(data) {
413
+ return { data: Uint8Array.from(data), height: 1, mimeType: 'image/png', scaleFactor: 1, width: 1 };
414
+ }
415
+ function serializeElement(element, elements) {
416
+ const attributes = [
417
+ `id="${escapeXml(element.automationId ?? '')}"`,
418
+ `name="${escapeXml(element.name ?? '')}"`,
419
+ `role="${escapeXml(element.role)}"`,
420
+ ].join(' ');
421
+ const children = [...elements.values()]
422
+ .filter((candidate) => candidate.parentId === element.id)
423
+ .map((child) => serializeElement(child, elements))
424
+ .join('');
425
+ return `<element ${attributes}>${children}</element>`;
426
+ }
427
+ function escapeXml(value) {
428
+ return value.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
429
+ }
430
+ function throwIfAborted(signal) {
431
+ if (signal?.aborted) {
432
+ throw signal.reason instanceof Error ? signal.reason : new Error('Fake desktop host operation was aborted.');
433
+ }
434
+ }
435
+ function delay(milliseconds, signal) {
436
+ throwIfAborted(signal);
437
+ if (!signal) {
438
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
439
+ }
440
+ return new Promise((resolve, reject) => {
441
+ const timer = setTimeout(() => {
442
+ signal.removeEventListener('abort', onAbort);
443
+ resolve();
444
+ }, milliseconds);
445
+ const onAbort = () => {
446
+ clearTimeout(timer);
447
+ reject(signal.reason instanceof Error ? signal.reason : new Error('Fake desktop host operation was aborted.'));
448
+ };
449
+ signal.addEventListener('abort', onAbort, { once: true });
450
+ });
451
+ }
452
+ //# sourceMappingURL=FakeDesktopHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeDesktopHost.js","sourceRoot":"","sources":["../../../src/hosts/fake/FakeDesktopHost.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ export { createDesktopDriverClient, DesktopDriverClient, DesktopElementClient, DesktopSessionClient, } from './client/DesktopDriverClient.js';
2
+ export type { DesktopDriverClientOptions } from './client/DesktopDriverClient.js';
3
+ export { connectDesktopAgent, DesktopAgent } from './agent/DesktopAgent.js';
4
+ export type { DesktopAgentCheckResult, DesktopAgentDescribeOptions, DesktopAgentElement, DesktopAgentOptions, DesktopAgentStory, } from './agent/DesktopAgent.js';
5
+ export { ArtifactManager } from './artifacts/ArtifactManager.js';
6
+ export { createDesktopDriverCommand, runDesktopDriverCli } from './cli/createDesktopDriverCommand.js';
7
+ export type { CreateDesktopDriverCommandOptions } from './cli/createDesktopDriverCommand.js';
8
+ export type { DesktopArtifact, DesktopRunStatus, DesktopStepStatus, DesktopStoryRunResult, DesktopStoryStepResult, DesktopStoryTestResult, DesktopTestStatus, } from './authoring/results.js';
9
+ export { defineDesktopStoryTests, desktopBy, desktopStoryCapabilities, desktopStoryPlatforms, validateDesktopStoryTests, } from './authoring/storyTests.js';
10
+ export type { DesktopStoryCapability, DesktopStoryExpectation, DesktopStoryPlatform, DesktopStorySelector, DesktopStoryState, DesktopStoryStep, DesktopStoryTest, DesktopStoryTests, } from './authoring/storyTests.js';
11
+ export type { ApplicationLease, DesktopHost, DesktopHostFeatures, DesktopHostInfo, DesktopTarget, DesktopTreeNode, DesktopWindow, NativeElementScope, NativeElementSnapshot, NativeImage, NativeAction, NativeActionOrigin, NativeActionSequence, NativeSearchRoot, NativeSelector, Rect, SupportedValue, } from './host/types.js';
12
+ export { webElementIdentifier } from './protocol/constants.js';
13
+ export { HostStaleError, HostUnsupportedError, WebDriverError } from './protocol/errors.js';
14
+ export type { WebDriverErrorCode } from './protocol/errors.js';
15
+ export { type DesktopClickMode, type DesktopEndpoint, type DesktopPlatformName, type DesktopRenderer, type DesktopTimeouts, type NewSessionCapabilities, type NewSessionRequest, type WebDriverAction, type WebDriverActionSequence, type WebDriverElement, type WebDriverErrorResponse, type WebDriverResponse, type WebDriverTimeouts, } from './protocol/types.js';
16
+ export { createDesktopDriverServer, SessionManager, TargetRegistry } from './server/index.js';
17
+ export type { DesktopDriverServer, DesktopDriverServerOptions, DesktopSession, ElementRecord } from './server/index.js';
18
+ export type { DesktopStoryManifest, DesktopStoryManifestEntry, StoryOrchestrator, StoryReadyResult, StorySelectionRequest, } from './storybook.js';
19
+ export { assertDesktopExpectation, DesktopAssertionError, findDesktopElement, findDesktopElements, runDesktopStoryTests, selectDesktopStoryTests, } from './runner/StoryTestRunner.js';
20
+ export type { DesktopStoryTestRunnerOptions, DesktopStoryTestSelection } from './runner/StoryTestRunner.js';
21
+ export { connectDesktopWebdriver, DesktopWebdriverSession } from './wdio/DesktopWebdriver.js';
22
+ export type { DesktopWebdriverOptions, DesktopWebdriverRunOptions } from './wdio/DesktopWebdriver.js';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5E,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AACtG,YAAY,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAC7F,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9F,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxH,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,YAAY,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { createDesktopDriverClient, DesktopDriverClient, DesktopElementClient, DesktopSessionClient, } from './client/DesktopDriverClient.js';
2
+ export { connectDesktopAgent, DesktopAgent } from './agent/DesktopAgent.js';
3
+ export { ArtifactManager } from './artifacts/ArtifactManager.js';
4
+ export { createDesktopDriverCommand, runDesktopDriverCli } from './cli/createDesktopDriverCommand.js';
5
+ export { defineDesktopStoryTests, desktopBy, desktopStoryCapabilities, desktopStoryPlatforms, validateDesktopStoryTests, } from './authoring/storyTests.js';
6
+ export { webElementIdentifier } from './protocol/constants.js';
7
+ export { HostStaleError, HostUnsupportedError, WebDriverError } from './protocol/errors.js';
8
+ export { createDesktopDriverServer, SessionManager, TargetRegistry } from './server/index.js';
9
+ export { assertDesktopExpectation, DesktopAssertionError, findDesktopElement, findDesktopElements, runDesktopStoryTests, selectDesktopStoryTests, } from './runner/StoryTestRunner.js';
10
+ export { connectDesktopWebdriver, DesktopWebdriverSession } from './wdio/DesktopWebdriver.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQ5E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAWtG,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AA8BnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiB5F,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAS9F,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { WebDriverActionSequence } from './types.js';
2
+ export type WebDriverInputState = {
3
+ pressedButtons: Set<number>;
4
+ pressedKeys: Set<string>;
5
+ };
6
+ export declare function createInputState(): WebDriverInputState;
7
+ export declare function parseActionSequences(value: unknown, current: WebDriverInputState): {
8
+ actions: WebDriverActionSequence[];
9
+ nextState: WebDriverInputState;
10
+ };
11
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/protocol/actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,mBAAmB,CAEtD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,mBAAmB,GAC3B;IACD,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAWA"}