craftdriver 0.0.3 → 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 (192) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +186 -10
  3. package/bin/craftdriver.mjs +26 -0
  4. package/dist/cli/client.d.ts +17 -0
  5. package/dist/cli/client.d.ts.map +1 -0
  6. package/dist/cli/client.js +88 -0
  7. package/dist/cli/client.js.map +1 -0
  8. package/dist/cli/daemon.d.ts +15 -0
  9. package/dist/cli/daemon.d.ts.map +1 -0
  10. package/dist/cli/daemon.js +145 -0
  11. package/dist/cli/daemon.js.map +1 -0
  12. package/dist/cli/defaults.d.ts +10 -0
  13. package/dist/cli/defaults.d.ts.map +1 -0
  14. package/dist/cli/defaults.js +42 -0
  15. package/dist/cli/defaults.js.map +1 -0
  16. package/dist/cli/dispatcher.d.ts +28 -0
  17. package/dist/cli/dispatcher.d.ts.map +1 -0
  18. package/dist/cli/dispatcher.js +319 -0
  19. package/dist/cli/dispatcher.js.map +1 -0
  20. package/dist/cli/index.d.ts +2 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +404 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cli/init.d.ts +24 -0
  25. package/dist/cli/init.d.ts.map +1 -0
  26. package/dist/cli/init.js +192 -0
  27. package/dist/cli/init.js.map +1 -0
  28. package/dist/cli/mcp/artifacts.d.ts +43 -0
  29. package/dist/cli/mcp/artifacts.d.ts.map +1 -0
  30. package/dist/cli/mcp/artifacts.js +104 -0
  31. package/dist/cli/mcp/artifacts.js.map +1 -0
  32. package/dist/cli/mcp/server.d.ts +34 -0
  33. package/dist/cli/mcp/server.d.ts.map +1 -0
  34. package/dist/cli/mcp/server.js +214 -0
  35. package/dist/cli/mcp/server.js.map +1 -0
  36. package/dist/cli/mcp/tools.d.ts +34 -0
  37. package/dist/cli/mcp/tools.d.ts.map +1 -0
  38. package/dist/cli/mcp/tools.js +236 -0
  39. package/dist/cli/mcp/tools.js.map +1 -0
  40. package/dist/cli/parseArgs.d.ts +37 -0
  41. package/dist/cli/parseArgs.d.ts.map +1 -0
  42. package/dist/cli/parseArgs.js +215 -0
  43. package/dist/cli/parseArgs.js.map +1 -0
  44. package/dist/cli/protocol.d.ts +34 -0
  45. package/dist/cli/protocol.d.ts.map +1 -0
  46. package/dist/cli/protocol.js +2 -0
  47. package/dist/cli/protocol.js.map +1 -0
  48. package/dist/cli/selector.d.ts +29 -0
  49. package/dist/cli/selector.d.ts.map +1 -0
  50. package/dist/cli/selector.js +100 -0
  51. package/dist/cli/selector.js.map +1 -0
  52. package/dist/cli/snapshot.d.ts +48 -0
  53. package/dist/cli/snapshot.d.ts.map +1 -0
  54. package/dist/cli/snapshot.js +179 -0
  55. package/dist/cli/snapshot.js.map +1 -0
  56. package/dist/index.d.ts +14 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +17 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/lib/a11y.d.ts +81 -0
  61. package/dist/lib/a11y.d.ts.map +1 -0
  62. package/dist/lib/a11y.js +171 -0
  63. package/dist/lib/a11y.js.map +1 -0
  64. package/dist/lib/bidi/connection.d.ts +62 -0
  65. package/dist/lib/bidi/connection.d.ts.map +1 -0
  66. package/dist/lib/bidi/connection.js +227 -0
  67. package/dist/lib/bidi/connection.js.map +1 -0
  68. package/dist/lib/bidi/index.d.ts +101 -0
  69. package/dist/lib/bidi/index.d.ts.map +1 -0
  70. package/dist/lib/bidi/index.js +163 -0
  71. package/dist/lib/bidi/index.js.map +1 -0
  72. package/dist/lib/bidi/logs.d.ts +104 -0
  73. package/dist/lib/bidi/logs.d.ts.map +1 -0
  74. package/dist/lib/bidi/logs.js +273 -0
  75. package/dist/lib/bidi/logs.js.map +1 -0
  76. package/dist/lib/bidi/network.d.ts +165 -0
  77. package/dist/lib/bidi/network.d.ts.map +1 -0
  78. package/dist/lib/bidi/network.js +477 -0
  79. package/dist/lib/bidi/network.js.map +1 -0
  80. package/dist/lib/bidi/storage.d.ts +83 -0
  81. package/dist/lib/bidi/storage.d.ts.map +1 -0
  82. package/dist/lib/bidi/storage.js +299 -0
  83. package/dist/lib/bidi/storage.js.map +1 -0
  84. package/dist/lib/bidi/types.d.ts +323 -0
  85. package/dist/lib/bidi/types.d.ts.map +1 -0
  86. package/dist/lib/bidi/types.js +6 -0
  87. package/dist/lib/bidi/types.js.map +1 -0
  88. package/dist/lib/browser.d.ts +776 -13
  89. package/dist/lib/browser.d.ts.map +1 -1
  90. package/dist/lib/browser.js +1547 -70
  91. package/dist/lib/browser.js.map +1 -1
  92. package/dist/lib/browserContext.d.ts +486 -0
  93. package/dist/lib/browserContext.d.ts.map +1 -0
  94. package/dist/lib/browserContext.js +937 -0
  95. package/dist/lib/browserContext.js.map +1 -0
  96. package/dist/lib/builder.d.ts +3 -0
  97. package/dist/lib/builder.d.ts.map +1 -1
  98. package/dist/lib/builder.js +31 -4
  99. package/dist/lib/builder.js.map +1 -1
  100. package/dist/lib/by.d.ts +18 -2
  101. package/dist/lib/by.d.ts.map +1 -1
  102. package/dist/lib/by.js +20 -2
  103. package/dist/lib/by.js.map +1 -1
  104. package/dist/lib/chrome.d.ts +13 -1
  105. package/dist/lib/chrome.d.ts.map +1 -1
  106. package/dist/lib/chrome.js +13 -17
  107. package/dist/lib/chrome.js.map +1 -1
  108. package/dist/lib/clock.d.ts +115 -0
  109. package/dist/lib/clock.d.ts.map +1 -0
  110. package/dist/lib/clock.js +407 -0
  111. package/dist/lib/clock.js.map +1 -0
  112. package/dist/lib/driver.d.ts +45 -0
  113. package/dist/lib/driver.d.ts.map +1 -1
  114. package/dist/lib/driver.js +129 -1
  115. package/dist/lib/driver.js.map +1 -1
  116. package/dist/lib/driverManager.d.ts +25 -0
  117. package/dist/lib/driverManager.d.ts.map +1 -0
  118. package/dist/lib/driverManager.js +399 -0
  119. package/dist/lib/driverManager.js.map +1 -0
  120. package/dist/lib/elementHandle.d.ts +69 -2
  121. package/dist/lib/elementHandle.d.ts.map +1 -1
  122. package/dist/lib/elementHandle.js +215 -40
  123. package/dist/lib/elementHandle.js.map +1 -1
  124. package/dist/lib/errors.d.ts +71 -0
  125. package/dist/lib/errors.d.ts.map +1 -0
  126. package/dist/lib/errors.js +73 -0
  127. package/dist/lib/errors.js.map +1 -0
  128. package/dist/lib/expect.d.ts +6 -1
  129. package/dist/lib/expect.d.ts.map +1 -1
  130. package/dist/lib/expect.js +55 -37
  131. package/dist/lib/expect.js.map +1 -1
  132. package/dist/lib/firefox.d.ts +18 -0
  133. package/dist/lib/firefox.d.ts.map +1 -0
  134. package/dist/lib/firefox.js +33 -0
  135. package/dist/lib/firefox.js.map +1 -0
  136. package/dist/lib/frame.d.ts +57 -0
  137. package/dist/lib/frame.d.ts.map +1 -0
  138. package/dist/lib/frame.js +277 -0
  139. package/dist/lib/frame.js.map +1 -0
  140. package/dist/lib/keyboard.d.ts +1 -1
  141. package/dist/lib/keyboard.d.ts.map +1 -1
  142. package/dist/lib/keyboard.js +1 -1
  143. package/dist/lib/keyboard.js.map +1 -1
  144. package/dist/lib/locator.d.ts +71 -2
  145. package/dist/lib/locator.d.ts.map +1 -1
  146. package/dist/lib/locator.js +289 -31
  147. package/dist/lib/locator.js.map +1 -1
  148. package/dist/lib/mouse.d.ts +1 -1
  149. package/dist/lib/mouse.d.ts.map +1 -1
  150. package/dist/lib/mouse.js +1 -1
  151. package/dist/lib/mouse.js.map +1 -1
  152. package/dist/lib/page.d.ts +107 -0
  153. package/dist/lib/page.d.ts.map +1 -0
  154. package/dist/lib/page.js +388 -0
  155. package/dist/lib/page.js.map +1 -0
  156. package/dist/lib/tracing.d.ts +128 -0
  157. package/dist/lib/tracing.d.ts.map +1 -0
  158. package/dist/lib/tracing.js +272 -0
  159. package/dist/lib/tracing.js.map +1 -0
  160. package/dist/lib/wait.d.ts.map +1 -1
  161. package/dist/lib/wait.js +14 -1
  162. package/dist/lib/wait.js.map +1 -1
  163. package/dist/lib/webelement.d.ts +2 -0
  164. package/dist/lib/webelement.d.ts.map +1 -1
  165. package/dist/lib/webelement.js +18 -0
  166. package/dist/lib/webelement.js.map +1 -1
  167. package/docs/accessibility.md +177 -0
  168. package/docs/api-reference.md +71 -0
  169. package/docs/assertions.md +182 -0
  170. package/docs/bidi-features.md +462 -0
  171. package/docs/browser-api.md +673 -0
  172. package/docs/browser-context.md +522 -0
  173. package/docs/cli.md +233 -0
  174. package/docs/clock.md +245 -0
  175. package/docs/dialogs.md +143 -0
  176. package/docs/driver-configuration.md +64 -0
  177. package/docs/element-api.md +219 -0
  178. package/docs/emulation.md +155 -0
  179. package/docs/error-codes.md +67 -0
  180. package/docs/getting-started.md +168 -0
  181. package/docs/keyboard-mouse.md +250 -0
  182. package/docs/mcp.md +250 -0
  183. package/docs/mobile-emulation.md +194 -0
  184. package/docs/screenshots.md +146 -0
  185. package/docs/selectors.md +382 -0
  186. package/docs/session-management.md +229 -0
  187. package/docs/tracing.md +282 -0
  188. package/package.json +25 -5
  189. package/skills/craftdriver/SKILL.md +84 -0
  190. package/skills/craftdriver/cheatsheet.md +194 -0
  191. package/skills/craftdriver/cli.md +104 -0
  192. package/skills/craftdriver/patterns.md +139 -0
@@ -1,88 +1,263 @@
1
+ import { By } from './by.js';
1
2
  import { until } from './wait.js';
2
3
  import fs from 'fs/promises';
3
4
  import { expectSelector } from './expect.js';
4
5
  import { getKeyValue } from './keys.js';
6
+ import { A11y } from './a11y.js';
5
7
  export class ElementHandle {
6
8
  driver;
7
9
  by;
8
- constructor(driver, by) {
10
+ getDefaultTimeout;
11
+ /** Set only for snapshot handles created via `ElementHandle.fromWebElement()`. */
12
+ _webElement;
13
+ /** Optional context switcher for frame/window scoping. */
14
+ _contextSwitcher;
15
+ constructor(driver, by,
16
+ /** Returns the browser-level default timeout so per-call opts can fall back to it. */
17
+ getDefaultTimeout = () => 5000) {
9
18
  this.driver = driver;
10
19
  this.by = by;
20
+ this.getDefaultTimeout = getDefaultTimeout;
21
+ }
22
+ /**
23
+ * Bind this handle to a browsing context (iframe or tab).
24
+ * Element resolution will switch into the context before finding and switch out after.
25
+ */
26
+ withContext(switcher) {
27
+ this._contextSwitcher = switcher;
28
+ return this;
29
+ }
30
+ async _withContext(fn) {
31
+ if (this._contextSwitcher) {
32
+ await this._contextSwitcher.in();
33
+ try {
34
+ return await fn();
35
+ }
36
+ finally {
37
+ await this._contextSwitcher.out();
38
+ }
39
+ }
40
+ return fn();
41
+ }
42
+ /**
43
+ * Create a snapshot `ElementHandle` backed by an already-resolved WebElement.
44
+ * Used by `Locator.all()` and `Browser.findAll()`.
45
+ */
46
+ static fromWebElement(driver, webElement, getDefaultTimeout) {
47
+ const handle = new ElementHandle(driver, By.css('*'), getDefaultTimeout);
48
+ handle._webElement = webElement;
49
+ return handle;
50
+ }
51
+ /** Resolve to a located (not necessarily visible) WebElement. */
52
+ async _resolveLocated(options) {
53
+ if (this._webElement)
54
+ return this._webElement;
55
+ return this.driver.wait(until.elementLocated(this.by), {
56
+ timeout: options?.timeout ?? this.getDefaultTimeout(),
57
+ });
58
+ }
59
+ /** Resolve to a visible WebElement. */
60
+ async _resolveVisible(options) {
61
+ if (this._webElement)
62
+ return this._webElement;
63
+ return this.driver.wait(until.elementIsVisible(this.by), {
64
+ timeout: options?.timeout ?? this.getDefaultTimeout(),
65
+ });
11
66
  }
12
67
  async click(options) {
13
- const el = await this.driver.wait(until.elementIsVisible(this.by), { timeout: options?.timeout ?? 5000 });
14
- await el.click();
68
+ return this._withContext(async () => {
69
+ const el = await this._resolveVisible(options);
70
+ await el.click();
71
+ });
15
72
  }
16
73
  async fill(text, options) {
17
- const el = await this.driver.wait(until.elementIsVisible(this.by), {
18
- timeout: options?.timeout ?? 5000,
74
+ return this._withContext(async () => {
75
+ const el = await this._resolveVisible(options);
76
+ await el.click();
77
+ await el.clear();
78
+ await el.sendKeys(text);
19
79
  });
20
- await el.click();
21
- await el.clear();
22
- await el.sendKeys(text);
23
80
  }
24
81
  async clear(options) {
25
- const el = await this.driver.wait(until.elementIsVisible(this.by), {
26
- timeout: options?.timeout ?? 5000,
82
+ return this._withContext(async () => {
83
+ const el = await this._resolveVisible(options);
84
+ await el.clear();
27
85
  });
28
- await el.clear();
29
86
  }
30
87
  async press(key, options) {
31
- // assumes element is focused after click/type; ensure focus by clicking first
32
- const el = await this.driver.wait(until.elementIsVisible(this.by), { timeout: options?.timeout ?? 5000 });
33
- await el.click();
34
- const code = getKeyValue(key);
35
- await this.driver.keyPressCode(code, 1);
36
- }
37
- async screenshot(path, options) {
38
- const el = await this.driver.wait(until.elementIsVisible(this.by), { timeout: options?.timeout ?? 5000 });
39
- const b64 = await el.screenshotBase64();
40
- const buf = Buffer.from(b64, 'base64');
41
- if (path)
42
- await fs.writeFile(path, buf);
43
- return buf;
88
+ return this._withContext(async () => {
89
+ const el = await this._resolveVisible(options);
90
+ await el.click();
91
+ const code = getKeyValue(key);
92
+ await this.driver.keyPressCode(code, 1);
93
+ });
94
+ }
95
+ /**
96
+ * Capture a screenshot of just this element. Optionally writes the PNG
97
+ * to `opts.path`. Returns the raw PNG buffer.
98
+ *
99
+ * @example
100
+ * const buf = await browser.find('#chart').screenshot();
101
+ * await browser.find('#logo').screenshot({ path: 'logo.png' });
102
+ */
103
+ async screenshot(opts) {
104
+ return this._withContext(async () => {
105
+ const el = await this._resolveVisible(opts);
106
+ const b64 = await el.screenshotBase64();
107
+ const buf = Buffer.from(b64, 'base64');
108
+ if (opts?.path)
109
+ await fs.writeFile(opts.path, buf);
110
+ return buf;
111
+ });
44
112
  }
45
113
  async text(options) {
46
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
47
- return await el.getText();
114
+ return this._withContext(async () => {
115
+ const el = await this._resolveLocated(options);
116
+ return el.getText();
117
+ });
48
118
  }
49
119
  async value(options) {
50
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
51
- const val = await el.getProperty('value');
52
- return String(val ?? '');
120
+ return this._withContext(async () => {
121
+ const el = await this._resolveLocated(options);
122
+ const val = await el.getProperty('value');
123
+ return String(val ?? '');
124
+ });
125
+ }
126
+ async tagName(options) {
127
+ return this._withContext(async () => {
128
+ const el = await this._resolveLocated(options);
129
+ return el.getTagName();
130
+ });
53
131
  }
54
132
  async getAttribute(name, options) {
55
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
56
- return await el.getAttribute(name);
133
+ return this._withContext(async () => {
134
+ const el = await this._resolveLocated(options);
135
+ return el.getAttribute(name);
136
+ });
57
137
  }
58
138
  async isVisible(options) {
59
139
  try {
60
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 1000 });
61
- return await el.isDisplayed();
140
+ return await this._withContext(async () => {
141
+ const timeout = options?.timeout ?? Math.min(this.getDefaultTimeout(), 1000);
142
+ const el = await this._resolveLocated({ timeout });
143
+ return el.isDisplayed();
144
+ });
62
145
  }
63
146
  catch {
64
147
  return false;
65
148
  }
66
149
  }
67
150
  async isEnabled(options) {
68
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
69
- return await el.isEnabled();
151
+ return this._withContext(async () => {
152
+ const el = await this._resolveLocated(options);
153
+ return el.isEnabled();
154
+ });
70
155
  }
71
156
  async isChecked(options) {
72
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
73
- return await el.isSelected();
157
+ return this._withContext(async () => {
158
+ const el = await this._resolveLocated(options);
159
+ return el.isSelected();
160
+ });
74
161
  }
75
162
  async boundingBox(options) {
76
163
  try {
77
- const el = await this.driver.wait(until.elementLocated(this.by), { timeout: options?.timeout ?? 5000 });
78
- return await el.getRect();
164
+ return await this._withContext(async () => {
165
+ const el = await this._resolveLocated(options);
166
+ return el.getRect();
167
+ });
79
168
  }
80
169
  catch {
81
170
  return null;
82
171
  }
83
172
  }
173
+ async hover(options) {
174
+ return this._withContext(async () => {
175
+ const el = await this._resolveVisible(options);
176
+ const rect = await el.getRect();
177
+ const centerX = rect.x + rect.width / 2;
178
+ const centerY = rect.y + rect.height / 2;
179
+ await this.driver.pointerMoveTo(undefined, centerX, centerY);
180
+ });
181
+ }
182
+ async select(value, options) {
183
+ return this._withContext(async () => {
184
+ const el = await this._resolveLocated(options);
185
+ const tagName = await el.getTagName();
186
+ if (tagName !== 'select') {
187
+ throw new Error(`select() can only be used on <select> elements. Found <${tagName}> instead. ` +
188
+ `Use browser.click('#selector option[value="..."]') for other element types.`);
189
+ }
190
+ const script = `
191
+ const select = arguments[0];
192
+ const value = arguments[1];
193
+ const option = Array.from(select.options).find(opt => opt.value === value);
194
+ if (!option) {
195
+ throw new Error('Option with value "' + value + '" not found in <select>');
196
+ }
197
+ select.value = value;
198
+ select.dispatchEvent(new Event('change', { bubbles: true }));
199
+ return true;
200
+ `;
201
+ await this.driver.executeScript(script, [el, value]);
202
+ });
203
+ }
84
204
  expect() {
85
- return expectSelector(this.driver, this.by);
205
+ return expectSelector(this.driver, this.by, this.getDefaultTimeout, this._contextSwitcher);
206
+ }
207
+ /**
208
+ * Set the value of an `<input type="file">` element.
209
+ * Accepts a single path or an array (for `multiple` inputs).
210
+ * Paths must be absolute and point to existing files.
211
+ *
212
+ * @throws if the element is not an `<input type="file">`.
213
+ */
214
+ async setInputFiles(filePaths, options) {
215
+ return this._withContext(async () => {
216
+ const paths = Array.isArray(filePaths) ? filePaths : [filePaths];
217
+ const el = await this._resolveLocated(options);
218
+ const tagName = await el.getTagName();
219
+ if (tagName.toLowerCase() !== 'input') {
220
+ throw new Error(`setInputFiles() requires an <input type="file"> element. Found <${tagName}> instead.`);
221
+ }
222
+ const type = await el.getAttribute('type');
223
+ if ((type ?? '').toLowerCase() !== 'file') {
224
+ throw new Error(`setInputFiles() requires an <input type="file"> element. ` +
225
+ `Found <input type="${type ?? ''}"> instead.`);
226
+ }
227
+ await el.sendKeys(paths.join('\n'));
228
+ });
229
+ }
230
+ /**
231
+ * Execute JavaScript in the page with this element as the first argument.
232
+ *
233
+ * ```ts
234
+ * const tag = await browser.find('#btn').evaluate(el => el.tagName);
235
+ * const text = await browser.find('#btn').evaluate((el, cls) => el.classList.contains(cls), 'active');
236
+ * ```
237
+ *
238
+ * Uses Classic WebDriver `executeScript` so it works with or without BiDi.
239
+ */
240
+ async evaluate(fn, ...args) {
241
+ return this._withContext(async () => {
242
+ const el = await this._resolveLocated();
243
+ const fnSrc = fn.toString();
244
+ return this.driver.executeScript(`return (${fnSrc}).apply(null, arguments)`, [el, ...args]);
245
+ });
246
+ }
247
+ _a11y;
248
+ /**
249
+ * Element-scoped accessibility audit via axe-core.
250
+ * The audit is restricted to this element and its descendants.
251
+ */
252
+ get a11y() {
253
+ if (!this._a11y) {
254
+ this._a11y = new A11y({
255
+ driver: this.driver,
256
+ resolveTarget: () => this._resolveLocated(),
257
+ withContext: (fn) => this._withContext(fn),
258
+ });
259
+ }
260
+ return this._a11y;
86
261
  }
87
262
  }
88
263
  //# sourceMappingURL=elementHandle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"elementHandle.js","sourceRoot":"","sources":["../../src/lib/elementHandle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elementHandle.js","sourceRoot":"","sources":["../../src/lib/elementHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAiB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,OAAO,aAAa;IAQd;IACA;IAEA;IAVV,kFAAkF;IAC1E,WAAW,CAAc;IAEjC,0DAA0D;IAClD,gBAAgB,CAAmB;IAE3C,YACU,MAAc,EACd,EAAM;IACd,sFAAsF;IAC9E,oBAAkC,GAAG,EAAE,CAAC,IAAI;QAH5C,WAAM,GAAN,MAAM,CAAQ;QACd,OAAE,GAAF,EAAE,CAAI;QAEN,sBAAiB,GAAjB,iBAAiB,CAA2B;IAClD,CAAC;IAEL;;;OAGG;IACH,WAAW,CAAC,QAAyB;QACnC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,YAAY,CAAI,EAAoB;QAChD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc,CACnB,MAAc,EACd,UAAsB,EACtB,iBAA+B;QAE/B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzE,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iEAAiE;IACzD,KAAK,CAAC,eAAe,CAAC,OAAwB;QACpD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACrD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED,uCAAuC;IAC/B,KAAK,CAAC,eAAe,CAAC,OAAwB;QACpD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACvD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAwB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAAwB;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAwB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAa,EAAE,OAAwB;QACjD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,IAAyC;QACxD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE,IAAI;gBAAE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAwB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,OAAwB;QACvD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAwB;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;gBACxC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC7E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnD,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAwB;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAwB;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;gBACxC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAwB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAwB;QAClD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,0DAA0D,OAAO,aAAa;oBAC9E,6EAA6E,CAC9E,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG;;;;;;;;;;OAUd,CAAC;YAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7F,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,SAA4B,EAAE,OAAwB;QACxE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,mEAAmE,OAAO,YAAY,CACvF,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,2DAA2D;oBAC3D,sBAAsB,IAAI,IAAI,EAAE,aAAa,CAC9C,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CACZ,EAA0C,EAC1C,GAAG,IAAe;QAElB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAC9B,WAAW,KAAK,0BAA0B,EAC1C,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CACd,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAQ;IACrB;;;OAGG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC;gBACpB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC3C,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Stable, machine-readable error codes for the public craftdriver API.
3
+ *
4
+ * Agents (CLI, MCP, in-process recovery loops) match on `code`, not on
5
+ * prose. Every public throw site should produce a `CraftdriverError`
6
+ * carrying one of these codes plus optional `detail`.
7
+ *
8
+ * Codes are documented in [docs/error-codes.md](../../docs/error-codes.md).
9
+ * Never repurpose a code; add a new one instead.
10
+ */
11
+ export declare const ErrorCode: {
12
+ /** Selector matched zero elements at t=0. Fix the selector. */
13
+ readonly NO_MATCH: "NO_MATCH";
14
+ /** Selector matched, but element never became visible within timeout. */
15
+ readonly TIMEOUT_WAITING_VISIBLE: "TIMEOUT_WAITING_VISIBLE";
16
+ /** Element visible, but never reached requested state (enabled, checked, attached/detached, hidden). */
17
+ readonly TIMEOUT_WAITING_STATE: "TIMEOUT_WAITING_STATE";
18
+ /** Page never reached the requested load state within timeout. */
19
+ readonly TIMEOUT_WAITING_LOAD: "TIMEOUT_WAITING_LOAD";
20
+ /** Network idle / specific request / response not seen within timeout. */
21
+ readonly TIMEOUT_WAITING_NETWORK: "TIMEOUT_WAITING_NETWORK";
22
+ /** Dialog of the requested type did not appear within timeout. */
23
+ readonly TIMEOUT_WAITING_DIALOG: "TIMEOUT_WAITING_DIALOG";
24
+ /** Generic timeout where no more specific code applies. */
25
+ readonly TIMEOUT: "TIMEOUT";
26
+ /** An `expect(...)` assertion failed after auto-waiting. */
27
+ readonly EXPECT_MISMATCH: "EXPECT_MISMATCH";
28
+ /** Accessibility audit returned one or more violations. */
29
+ readonly A11Y_VIOLATIONS: "A11Y_VIOLATIONS";
30
+ /** evaluate() callback threw inside the page. */
31
+ readonly EVAL_THREW: "EVAL_THREW";
32
+ /** Argument passed to evaluate() / addInitScript() was not JSON-serializable. */
33
+ readonly EVAL_BAD_ARG: "EVAL_BAD_ARG";
34
+ /** Caller passed an invalid argument (bad enum value, wrong shape, etc.). */
35
+ readonly INVALID_ARGUMENT: "INVALID_ARGUMENT";
36
+ /** Feature exists but is not available on this browser/transport (e.g. Chromium-only over Firefox). */
37
+ readonly UNSUPPORTED: "UNSUPPORTED";
38
+ /** Method called in an invalid state (e.g. `clock.tick()` before `install()`). */
39
+ readonly STATE_INVALID: "STATE_INVALID";
40
+ /** Driver-level / transport-level failure surfaced to the caller. */
41
+ readonly DRIVER_ERROR: "DRIVER_ERROR";
42
+ };
43
+ export type ErrorCodeName = keyof typeof ErrorCode;
44
+ export type ErrorCodeValue = (typeof ErrorCode)[ErrorCodeName];
45
+ export interface CraftdriverErrorOptions {
46
+ /** Structured, JSON-serializable context for agents. */
47
+ detail?: Record<string, unknown>;
48
+ /** Optional underlying cause (preserved as `error.cause`). */
49
+ cause?: unknown;
50
+ /** Optional one-line remediation hint shown after the message. */
51
+ hint?: string;
52
+ }
53
+ /**
54
+ * Base class for every error thrown from the public API.
55
+ *
56
+ * - `code` is the stable machine identifier (see `ErrorCode`).
57
+ * - `detail` is a JSON-serializable object with structured context
58
+ * (selector, timeout, candidates, etc.). Agents read this directly.
59
+ * - `hint` is a one-line remediation suggestion. Optional.
60
+ *
61
+ * `instanceof Error` remains `true`; existing catch sites keep working.
62
+ */
63
+ export declare class CraftdriverError extends Error {
64
+ readonly code: ErrorCodeValue;
65
+ readonly detail?: Record<string, unknown>;
66
+ readonly hint?: string;
67
+ constructor(code: ErrorCodeValue, message: string, options?: CraftdriverErrorOptions);
68
+ /** Type guard: does this error carry the given code? */
69
+ static is(err: unknown, code?: ErrorCodeValue): err is CraftdriverError;
70
+ }
71
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS;IACpB,+DAA+D;;IAE/D,yEAAyE;;IAEzE,wGAAwG;;IAExG,kEAAkE;;IAElE,0EAA0E;;IAE1E,kEAAkE;;IAElE,2DAA2D;;IAE3D,4DAA4D;;IAE5D,2DAA2D;;IAE3D,iDAAiD;;IAEjD,iFAAiF;;IAEjF,6EAA6E;;IAE7E,uGAAuG;;IAEvG,kFAAkF;;IAElF,qEAAqE;;CAE7D,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,SAAS,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAQpF,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,IAAI,gBAAgB;CAIxE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Stable, machine-readable error codes for the public craftdriver API.
3
+ *
4
+ * Agents (CLI, MCP, in-process recovery loops) match on `code`, not on
5
+ * prose. Every public throw site should produce a `CraftdriverError`
6
+ * carrying one of these codes plus optional `detail`.
7
+ *
8
+ * Codes are documented in [docs/error-codes.md](../../docs/error-codes.md).
9
+ * Never repurpose a code; add a new one instead.
10
+ */
11
+ export const ErrorCode = {
12
+ /** Selector matched zero elements at t=0. Fix the selector. */
13
+ NO_MATCH: 'NO_MATCH',
14
+ /** Selector matched, but element never became visible within timeout. */
15
+ TIMEOUT_WAITING_VISIBLE: 'TIMEOUT_WAITING_VISIBLE',
16
+ /** Element visible, but never reached requested state (enabled, checked, attached/detached, hidden). */
17
+ TIMEOUT_WAITING_STATE: 'TIMEOUT_WAITING_STATE',
18
+ /** Page never reached the requested load state within timeout. */
19
+ TIMEOUT_WAITING_LOAD: 'TIMEOUT_WAITING_LOAD',
20
+ /** Network idle / specific request / response not seen within timeout. */
21
+ TIMEOUT_WAITING_NETWORK: 'TIMEOUT_WAITING_NETWORK',
22
+ /** Dialog of the requested type did not appear within timeout. */
23
+ TIMEOUT_WAITING_DIALOG: 'TIMEOUT_WAITING_DIALOG',
24
+ /** Generic timeout where no more specific code applies. */
25
+ TIMEOUT: 'TIMEOUT',
26
+ /** An `expect(...)` assertion failed after auto-waiting. */
27
+ EXPECT_MISMATCH: 'EXPECT_MISMATCH',
28
+ /** Accessibility audit returned one or more violations. */
29
+ A11Y_VIOLATIONS: 'A11Y_VIOLATIONS',
30
+ /** evaluate() callback threw inside the page. */
31
+ EVAL_THREW: 'EVAL_THREW',
32
+ /** Argument passed to evaluate() / addInitScript() was not JSON-serializable. */
33
+ EVAL_BAD_ARG: 'EVAL_BAD_ARG',
34
+ /** Caller passed an invalid argument (bad enum value, wrong shape, etc.). */
35
+ INVALID_ARGUMENT: 'INVALID_ARGUMENT',
36
+ /** Feature exists but is not available on this browser/transport (e.g. Chromium-only over Firefox). */
37
+ UNSUPPORTED: 'UNSUPPORTED',
38
+ /** Method called in an invalid state (e.g. `clock.tick()` before `install()`). */
39
+ STATE_INVALID: 'STATE_INVALID',
40
+ /** Driver-level / transport-level failure surfaced to the caller. */
41
+ DRIVER_ERROR: 'DRIVER_ERROR',
42
+ };
43
+ /**
44
+ * Base class for every error thrown from the public API.
45
+ *
46
+ * - `code` is the stable machine identifier (see `ErrorCode`).
47
+ * - `detail` is a JSON-serializable object with structured context
48
+ * (selector, timeout, candidates, etc.). Agents read this directly.
49
+ * - `hint` is a one-line remediation suggestion. Optional.
50
+ *
51
+ * `instanceof Error` remains `true`; existing catch sites keep working.
52
+ */
53
+ export class CraftdriverError extends Error {
54
+ code;
55
+ detail;
56
+ hint;
57
+ constructor(code, message, options) {
58
+ super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
59
+ this.name = 'CraftdriverError';
60
+ this.code = code;
61
+ if (options?.detail)
62
+ this.detail = options.detail;
63
+ if (options?.hint)
64
+ this.hint = options.hint;
65
+ }
66
+ /** Type guard: does this error carry the given code? */
67
+ static is(err, code) {
68
+ if (!(err instanceof CraftdriverError))
69
+ return false;
70
+ return code === undefined || err.code === code;
71
+ }
72
+ }
73
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,+DAA+D;IAC/D,QAAQ,EAAE,UAAU;IACpB,yEAAyE;IACzE,uBAAuB,EAAE,yBAAyB;IAClD,wGAAwG;IACxG,qBAAqB,EAAE,uBAAuB;IAC9C,kEAAkE;IAClE,oBAAoB,EAAE,sBAAsB;IAC5C,0EAA0E;IAC1E,uBAAuB,EAAE,yBAAyB;IAClD,kEAAkE;IAClE,sBAAsB,EAAE,wBAAwB;IAChD,2DAA2D;IAC3D,OAAO,EAAE,SAAS;IAClB,4DAA4D;IAC5D,eAAe,EAAE,iBAAiB;IAClC,2DAA2D;IAC3D,eAAe,EAAE,iBAAiB;IAClC,iDAAiD;IACjD,UAAU,EAAE,YAAY;IACxB,iFAAiF;IACjF,YAAY,EAAE,cAAc;IAC5B,6EAA6E;IAC7E,gBAAgB,EAAE,kBAAkB;IACpC,uGAAuG;IACvG,WAAW,EAAE,aAAa;IAC1B,kFAAkF;IAClF,aAAa,EAAE,eAAe;IAC9B,qEAAqE;IACrE,YAAY,EAAE,cAAc;CACpB,CAAC;AAcX;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAiB;IACrB,MAAM,CAA2B;IACjC,IAAI,CAAU;IAEvB,YAAY,IAAoB,EAAE,OAAe,EAAE,OAAiC;QAClF,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAClD,IAAI,OAAO,EAAE,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,GAAY,EAAE,IAAqB;QAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,gBAAgB,CAAC;YAAE,OAAO,KAAK,CAAC;QACrD,OAAO,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;IACjD,CAAC;CACF"}
@@ -1,5 +1,10 @@
1
1
  import type { By } from './by.js';
2
2
  import type { Driver } from './driver.js';
3
+ /** Context switcher for frame/window scoping — used by Frame and Page. */
4
+ export type ContextSwitcher = {
5
+ in: () => Promise<void>;
6
+ out: () => Promise<void>;
7
+ };
3
8
  export interface ExpectApi {
4
9
  toHaveText(text: string | RegExp, opts?: {
5
10
  timeout?: number;
@@ -58,5 +63,5 @@ export interface ExpectApi {
58
63
  }): Promise<void>;
59
64
  };
60
65
  }
61
- export declare function expectSelector(driver: Driver, by: By): ExpectApi;
66
+ export declare function expectSelector(driver: Driver, by: By, getDefaultTimeout?: () => number, contextSwitcher?: ContextSwitcher): ExpectApi;
62
67
  //# sourceMappingURL=expect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../src/lib/expect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../src/lib/expect.ts"],"names":[],"mappings":"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"}