@gtkx/testing 1.0.0-rc.1 → 1.0.0-rc.2

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 (182) hide show
  1. package/dist/act.d.ts +6 -6
  2. package/dist/act.d.ts.map +1 -1
  3. package/dist/act.js +34 -26
  4. package/dist/act.js.map +1 -1
  5. package/dist/bound-queries.d.ts +4 -3
  6. package/dist/bound-queries.d.ts.map +1 -1
  7. package/dist/bound-queries.js.map +1 -1
  8. package/dist/build-queries.d.ts +5 -5
  9. package/dist/build-queries.d.ts.map +1 -1
  10. package/dist/build-queries.js +21 -9
  11. package/dist/build-queries.js.map +1 -1
  12. package/dist/cleanup-registry.d.ts +4 -3
  13. package/dist/cleanup-registry.d.ts.map +1 -1
  14. package/dist/cleanup-registry.js +13 -3
  15. package/dist/cleanup-registry.js.map +1 -1
  16. package/dist/config.d.ts +5 -4
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +11 -9
  19. package/dist/config.js.map +1 -1
  20. package/dist/editable.d.ts +6 -5
  21. package/dist/editable.d.ts.map +1 -1
  22. package/dist/editable.js +7 -5
  23. package/dist/editable.js.map +1 -1
  24. package/dist/errors.d.ts +7 -6
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +64 -48
  27. package/dist/errors.js.map +1 -1
  28. package/dist/fire-event.d.ts +2 -1
  29. package/dist/fire-event.d.ts.map +1 -1
  30. package/dist/fire-event.js +2 -1
  31. package/dist/fire-event.js.map +1 -1
  32. package/dist/frame-sync.d.ts +2 -1
  33. package/dist/frame-sync.d.ts.map +1 -1
  34. package/dist/frame-sync.js +28 -21
  35. package/dist/frame-sync.js.map +1 -1
  36. package/dist/index.d.ts +2 -2
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/matchers.d.ts +38 -34
  41. package/dist/matchers.d.ts.map +1 -1
  42. package/dist/matchers.js +72 -58
  43. package/dist/matchers.js.map +1 -1
  44. package/dist/pretty-widget.d.ts +6 -4
  45. package/dist/pretty-widget.d.ts.map +1 -1
  46. package/dist/pretty-widget.js +64 -24
  47. package/dist/pretty-widget.js.map +1 -1
  48. package/dist/queries.d.ts +143 -86
  49. package/dist/queries.d.ts.map +1 -1
  50. package/dist/queries.js +231 -147
  51. package/dist/queries.js.map +1 -1
  52. package/dist/register-test-hooks.js +2 -1
  53. package/dist/register-test-hooks.js.map +1 -1
  54. package/dist/render-hook.d.ts +3 -2
  55. package/dist/render-hook.d.ts.map +1 -1
  56. package/dist/render-hook.js +2 -1
  57. package/dist/render-hook.js.map +1 -1
  58. package/dist/render.d.ts +3 -2
  59. package/dist/render.d.ts.map +1 -1
  60. package/dist/render.js +24 -18
  61. package/dist/render.js.map +1 -1
  62. package/dist/role-helpers.d.ts +6 -5
  63. package/dist/role-helpers.d.ts.map +1 -1
  64. package/dist/role-helpers.js +16 -12
  65. package/dist/role-helpers.js.map +1 -1
  66. package/dist/screen.d.ts +4 -3
  67. package/dist/screen.d.ts.map +1 -1
  68. package/dist/screen.js +13 -11
  69. package/dist/screen.js.map +1 -1
  70. package/dist/screenshot.d.ts +4 -3
  71. package/dist/screenshot.d.ts.map +1 -1
  72. package/dist/screenshot.js +43 -36
  73. package/dist/screenshot.js.map +1 -1
  74. package/dist/suggestions.d.ts +11 -6
  75. package/dist/suggestions.d.ts.map +1 -1
  76. package/dist/suggestions.js +10 -5
  77. package/dist/suggestions.js.map +1 -1
  78. package/dist/traversal.d.ts +7 -7
  79. package/dist/traversal.d.ts.map +1 -1
  80. package/dist/traversal.js +17 -11
  81. package/dist/traversal.js.map +1 -1
  82. package/dist/types.d.ts +39 -24
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js.map +1 -1
  85. package/dist/user-event/adjustment.d.ts +5 -3
  86. package/dist/user-event/adjustment.d.ts.map +1 -1
  87. package/dist/user-event/adjustment.js +6 -4
  88. package/dist/user-event/adjustment.js.map +1 -1
  89. package/dist/user-event/click.d.ts +6 -5
  90. package/dist/user-event/click.d.ts.map +1 -1
  91. package/dist/user-event/click.js +29 -21
  92. package/dist/user-event/click.js.map +1 -1
  93. package/dist/user-event/controller.d.ts +6 -5
  94. package/dist/user-event/controller.d.ts.map +1 -1
  95. package/dist/user-event/controller.js +9 -6
  96. package/dist/user-event/controller.js.map +1 -1
  97. package/dist/user-event/dispatch.d.ts +3 -3
  98. package/dist/user-event/dispatch.d.ts.map +1 -1
  99. package/dist/user-event/dispatch.js +3 -2
  100. package/dist/user-event/dispatch.js.map +1 -1
  101. package/dist/user-event/event-wrapper.d.ts +2 -1
  102. package/dist/user-event/event-wrapper.d.ts.map +1 -1
  103. package/dist/user-event/event-wrapper.js +27 -16
  104. package/dist/user-event/event-wrapper.js.map +1 -1
  105. package/dist/user-event/gesture.d.ts +18 -14
  106. package/dist/user-event/gesture.d.ts.map +1 -1
  107. package/dist/user-event/gesture.js +70 -37
  108. package/dist/user-event/gesture.js.map +1 -1
  109. package/dist/user-event/index.d.ts +17 -10
  110. package/dist/user-event/index.d.ts.map +1 -1
  111. package/dist/user-event/index.js +7 -3
  112. package/dist/user-event/index.js.map +1 -1
  113. package/dist/user-event/keyboard.d.ts +4 -3
  114. package/dist/user-event/keyboard.d.ts.map +1 -1
  115. package/dist/user-event/keyboard.js +89 -58
  116. package/dist/user-event/keyboard.js.map +1 -1
  117. package/dist/user-event/pointer.d.ts +7 -3
  118. package/dist/user-event/pointer.d.ts.map +1 -1
  119. package/dist/user-event/pointer.js +4 -1
  120. package/dist/user-event/pointer.js.map +1 -1
  121. package/dist/user-event/selection.d.ts +3 -2
  122. package/dist/user-event/selection.d.ts.map +1 -1
  123. package/dist/user-event/selection.js +26 -27
  124. package/dist/user-event/selection.js.map +1 -1
  125. package/dist/user-event/state.d.ts +3 -2
  126. package/dist/user-event/state.d.ts.map +1 -1
  127. package/dist/user-event/state.js +2 -1
  128. package/dist/user-event/state.js.map +1 -1
  129. package/dist/user-event/text.d.ts +8 -7
  130. package/dist/user-event/text.d.ts.map +1 -1
  131. package/dist/user-event/text.js +39 -33
  132. package/dist/user-event/text.js.map +1 -1
  133. package/dist/wait-for.d.ts +5 -5
  134. package/dist/wait-for.d.ts.map +1 -1
  135. package/dist/wait-for.js +45 -30
  136. package/dist/wait-for.js.map +1 -1
  137. package/dist/widget-accessible-properties.d.ts +26 -25
  138. package/dist/widget-accessible-properties.d.ts.map +1 -1
  139. package/dist/widget-accessible-properties.js +106 -61
  140. package/dist/widget-accessible-properties.js.map +1 -1
  141. package/dist/within.d.ts +2 -1
  142. package/dist/within.d.ts.map +1 -1
  143. package/dist/within.js +2 -1
  144. package/dist/within.js.map +1 -1
  145. package/package.json +11 -9
  146. package/src/act.ts +44 -35
  147. package/src/bound-queries.ts +5 -4
  148. package/src/build-queries.ts +84 -43
  149. package/src/cleanup-registry.ts +18 -5
  150. package/src/config.ts +16 -12
  151. package/src/editable.ts +13 -6
  152. package/src/errors.ts +106 -45
  153. package/src/fire-event.ts +3 -1
  154. package/src/frame-sync.ts +38 -21
  155. package/src/index.ts +2 -1
  156. package/src/matchers.ts +158 -107
  157. package/src/pretty-widget.ts +114 -42
  158. package/src/queries.ts +422 -233
  159. package/src/register-test-hooks.ts +4 -1
  160. package/src/render-hook.tsx +10 -4
  161. package/src/render.tsx +58 -33
  162. package/src/role-helpers.ts +29 -16
  163. package/src/screen.ts +17 -12
  164. package/src/screenshot.ts +61 -38
  165. package/src/suggestions.ts +29 -10
  166. package/src/traversal.ts +35 -15
  167. package/src/types.ts +65 -32
  168. package/src/user-event/adjustment.ts +23 -10
  169. package/src/user-event/click.ts +49 -20
  170. package/src/user-event/controller.ts +21 -7
  171. package/src/user-event/dispatch.ts +4 -2
  172. package/src/user-event/event-wrapper.ts +42 -16
  173. package/src/user-event/gesture.ts +135 -50
  174. package/src/user-event/index.ts +19 -12
  175. package/src/user-event/keyboard.ts +147 -61
  176. package/src/user-event/pointer.ts +20 -8
  177. package/src/user-event/selection.ts +69 -32
  178. package/src/user-event/state.ts +4 -2
  179. package/src/user-event/text.ts +73 -38
  180. package/src/wait-for.ts +77 -36
  181. package/src/widget-accessible-properties.ts +218 -74
  182. package/src/within.ts +7 -4
package/dist/errors.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type * as Gtk from "@gtkx/gi/gtk";
2
2
  import type { Container } from "./traversal.js";
3
3
  import type { ByRoleOptions, Matcher } from "./types.js";
4
- export type QueryDescriptor = {
4
+ type QueryDescriptor = {
5
5
  queryType: "role";
6
6
  role: Gtk.AccessibleRole;
7
7
  options?: ByRoleOptions | undefined;
@@ -21,9 +21,10 @@ export type QueryDescriptor = {
21
21
  queryType: "displayValue";
22
22
  value: Matcher;
23
23
  };
24
- export declare const runWithExpensiveErrorDiagnosticsDisabled: <T>(callback: () => T) => T;
25
- export declare const notFoundError: (container: Container, descriptor: QueryDescriptor) => Error;
26
- export declare const multipleFoundError: (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]) => Error;
27
- export declare const suggestionError: (suggestion: string, container: Container) => Error;
28
- export declare const timeoutError: (timeout: number, lastError: Error | null) => Error;
24
+ declare const runWithExpensiveErrorDiagnosticsDisabled: <T>(callback: () => T) => T;
25
+ declare const notFoundError: (container: Container, descriptor: QueryDescriptor) => Error;
26
+ declare const multipleFoundError: (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]) => Error;
27
+ declare const suggestionError: (suggestion: string, container: Container) => Error;
28
+ declare const timeoutError: (timeout: number, lastError: Error | null) => Error;
29
+ export { runWithExpensiveErrorDiagnosticsDisabled, notFoundError, multipleFoundError, suggestionError, timeoutError, type QueryDescriptor, };
29
30
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAIzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAe,OAAO,EAAE,MAAM,YAAY,CAAC;AAoCtE,MAAM,MAAM,eAAe,GACrB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GACpF;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,SAAS,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAqBpD,eAAO,MAAM,wCAAwC,GAAI,CAAC,YAAY,MAAM,CAAC,KAAG,CAQ/E,CAAC;AAUF,eAAO,MAAM,aAAa,cAAe,SAAS,cAAc,eAAe,KAAG,KASjF,CAAC;AAUF,eAAO,MAAM,kBAAkB,cAAe,SAAS,cAAc,eAAe,WAAW,GAAG,CAAC,MAAM,EAAE,KAAG,KAY7G,CAAC;AAEF,eAAO,MAAM,eAAe,eAAgB,MAAM,aAAa,SAAS,KAAG,KAI1E,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,MAAM,aAAa,KAAK,GAAG,IAAI,KAAG,KAIvE,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAe,OAAO,EAAE,MAAM,YAAY,CAAC;AAKtE,KAAK,eAAe,GACd;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GACtF;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,SAAS,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,SAAS,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAkGlD,QAAA,MAAM,wCAAwC,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,KAAG,CASxE,CAAC;AAYF,QAAA,MAAM,aAAa,GAAI,WAAW,SAAS,EAAE,YAAY,eAAe,KAAG,KAS1E,CAAC;AAWF,QAAA,MAAM,kBAAkB,GAAI,WAAW,SAAS,EAAE,YAAY,eAAe,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,KAAG,KAetG,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,YAAY,MAAM,EAAE,WAAW,SAAS,KAAG,KAKnE,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,WAAW,KAAK,GAAG,IAAI,KAAG,KAKhE,CAAC;AAEF,OAAO,EACH,wCAAwC,EACxC,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,KAAK,eAAe,GACvB,CAAC"}
package/dist/errors.js CHANGED
@@ -1,6 +1,19 @@
1
1
  import { getConfig } from "./config.js";
2
2
  import { prettyWidget } from "./pretty-widget.js";
3
3
  import { formatRole, prettyRoles } from "./role-helpers.js";
4
+ const roleOptionFormatters = [
5
+ (o) => (o.name ? `name ${formatTextMatcher(o.name)}` : null),
6
+ (o) => (o.checked === undefined ? null : `checked=${String(o.checked)}`),
7
+ (o) => (o.pressed === undefined ? null : `pressed=${String(o.pressed)}`),
8
+ (o) => (o.selected === undefined ? null : `selected=${String(o.selected)}`),
9
+ (o) => (o.expanded === undefined ? null : `expanded=${String(o.expanded)}`),
10
+ (o) => (o.level === undefined ? null : `level=${String(o.level)}`),
11
+ (o) => (o.busy === undefined ? null : `busy=${String(o.busy)}`),
12
+ (o) => (o.description ? `description ${formatTextMatcher(o.description)}` : null),
13
+ (o) => (o.value ? `value ${formatByRoleValue(o.value)}` : null),
14
+ (o) => (o.hidden === undefined ? null : `hidden=${String(o.hidden)}`),
15
+ ];
16
+ const expensiveErrorDiagnostics = { isDisabled: false };
4
17
  const formatTextMatcher = (text) => {
5
18
  if (typeof text === "function") {
6
19
  return "custom function";
@@ -8,82 +21,84 @@ const formatTextMatcher = (text) => {
8
21
  if (text instanceof RegExp) {
9
22
  return text.toString();
10
23
  }
11
- return `'${text}'`;
24
+ return `'${String(text)}'`;
12
25
  };
13
26
  const formatByRoleValue = (value) => {
14
27
  const parts = [];
15
- if (value.now !== undefined)
16
- parts.push(`now=${value.now}`);
17
- if (value.min !== undefined)
18
- parts.push(`min=${value.min}`);
19
- if (value.max !== undefined)
20
- parts.push(`max=${value.max}`);
21
- if (value.text !== undefined)
28
+ if (value.now !== undefined) {
29
+ parts.push(`now=${String(value.now)}`);
30
+ }
31
+ if (value.min !== undefined) {
32
+ parts.push(`min=${String(value.min)}`);
33
+ }
34
+ if (value.max !== undefined) {
35
+ parts.push(`max=${String(value.max)}`);
36
+ }
37
+ if (value.text !== undefined) {
22
38
  parts.push(`text ${formatTextMatcher(value.text)}`);
39
+ }
23
40
  return parts.join(", ");
24
41
  };
42
+ const roleOptionParts = (options) => {
43
+ const parts = [];
44
+ for (const formatter of roleOptionFormatters) {
45
+ const part = formatter(options);
46
+ if (part !== null) {
47
+ parts.push(part);
48
+ }
49
+ }
50
+ return parts;
51
+ };
25
52
  const formatByRoleDescription = (role, options) => {
26
53
  const parts = [`role '${formatRole(role).toUpperCase()}'`];
27
- if (options?.name)
28
- parts.push(`name ${formatTextMatcher(options.name)}`);
29
- if (options?.checked !== undefined)
30
- parts.push(`checked=${options.checked}`);
31
- if (options?.pressed !== undefined)
32
- parts.push(`pressed=${options.pressed}`);
33
- if (options?.selected !== undefined)
34
- parts.push(`selected=${options.selected}`);
35
- if (options?.expanded !== undefined)
36
- parts.push(`expanded=${options.expanded}`);
37
- if (options?.level !== undefined)
38
- parts.push(`level=${options.level}`);
39
- if (options?.busy !== undefined)
40
- parts.push(`busy=${options.busy}`);
41
- if (options?.description)
42
- parts.push(`description ${formatTextMatcher(options.description)}`);
43
- if (options?.value)
44
- parts.push(`value ${formatByRoleValue(options.value)}`);
45
- if (options?.hidden !== undefined)
46
- parts.push(`hidden=${options.hidden}`);
54
+ if (options) {
55
+ parts.push(...roleOptionParts(options));
56
+ }
47
57
  return parts.join(" and ");
48
58
  };
49
59
  const formatQueryDescription = (descriptor) => {
50
60
  switch (descriptor.queryType) {
51
- case "role":
61
+ case "role": {
52
62
  return formatByRoleDescription(descriptor.role, descriptor.options);
53
- case "text":
63
+ }
64
+ case "text": {
54
65
  return `text ${formatTextMatcher(descriptor.text)}`;
55
- case "labelText":
66
+ }
67
+ case "labelText": {
56
68
  return `label text ${formatTextMatcher(descriptor.text)}`;
57
- case "name":
69
+ }
70
+ case "name": {
58
71
  return `name ${formatTextMatcher(descriptor.name)}`;
59
- case "placeholderText":
72
+ }
73
+ case "placeholderText": {
60
74
  return `placeholder text ${formatTextMatcher(descriptor.text)}`;
61
- case "displayValue":
75
+ }
76
+ case "displayValue": {
62
77
  return `display value ${formatTextMatcher(descriptor.value)}`;
78
+ }
63
79
  }
64
80
  };
65
- let expensiveErrorDiagnosticsDisabled = false;
66
- export const runWithExpensiveErrorDiagnosticsDisabled = (callback) => {
67
- const previous = expensiveErrorDiagnosticsDisabled;
68
- expensiveErrorDiagnosticsDisabled = true;
81
+ const runWithExpensiveErrorDiagnosticsDisabled = (callback) => {
82
+ const isPrevious = expensiveErrorDiagnostics.isDisabled;
83
+ expensiveErrorDiagnostics.isDisabled = true;
69
84
  try {
70
85
  return callback();
71
86
  }
72
87
  finally {
73
- expensiveErrorDiagnosticsDisabled = previous;
88
+ expensiveErrorDiagnostics.isDisabled = isPrevious;
74
89
  }
75
90
  };
76
91
  const buildElementError = (container, headLines) => {
77
92
  const config = getConfig();
78
- const lines = expensiveErrorDiagnosticsDisabled
93
+ const lines = expensiveErrorDiagnostics.isDisabled
79
94
  ? headLines
80
95
  : [...headLines, "", prettyWidget(container, { highlight: false })];
81
96
  return config.getElementError(lines.join("\n"), container);
82
97
  };
83
- export const notFoundError = (container, descriptor) => {
98
+ const notFoundError = (container, descriptor) => {
84
99
  const description = formatQueryDescription(descriptor);
85
100
  const headLines = [`Unable to find an element with ${description}`];
86
- if (!expensiveErrorDiagnosticsDisabled && descriptor.queryType === "role") {
101
+ if (!expensiveErrorDiagnostics.isDisabled && descriptor.queryType === "role") {
87
102
  headLines.push("", "Here are the accessible roles:", "", prettyRoles(container));
88
103
  }
89
104
  return buildElementError(container, headLines);
@@ -93,27 +108,28 @@ const allByVariantHint = (descriptor) => {
93
108
  return ("(If this is intentional, use the *AllBy* variant of the query, " +
94
109
  `e.g. queryAllBy*/getAllBy*/findAllBy*, such as ${variant}.)`);
95
110
  };
96
- export const multipleFoundError = (container, descriptor, matches) => {
111
+ const multipleFoundError = (container, descriptor, matches) => {
97
112
  const description = formatQueryDescription(descriptor);
98
113
  const headLines = [
99
- `Found ${matches.length} elements with ${description}, but expected only one`,
114
+ `Found ${String(matches.length)} elements with ${description}, but expected only one`,
100
115
  "",
101
116
  allByVariantHint(descriptor),
102
117
  ];
103
- if (!expensiveErrorDiagnosticsDisabled) {
118
+ if (!expensiveErrorDiagnostics.isDisabled) {
104
119
  const renderedMatches = matches.map((widget) => prettyWidget(widget, { highlight: false }));
105
120
  headLines.push("", "Here are the matching elements:", "", ...renderedMatches);
106
121
  }
107
122
  return buildElementError(container, headLines);
108
123
  };
109
- export const suggestionError = (suggestion, container) => {
124
+ const suggestionError = (suggestion, container) => {
110
125
  const config = getConfig();
111
126
  const message = `A better query is available, try this:\n${suggestion}\n`;
112
127
  return config.getElementError(message, container);
113
128
  };
114
- export const timeoutError = (timeout, lastError) => {
115
- const baseMessage = `Timed out after ${timeout}ms`;
129
+ const timeoutError = (timeout, lastError) => {
130
+ const baseMessage = `Timed out after ${String(timeout)}ms`;
116
131
  const message = lastError ? `${baseMessage}.\n\n${lastError.message}` : baseMessage;
117
132
  return getConfig().getElementError(message);
118
133
  };
134
+ export { runWithExpensiveErrorDiagnosticsDisabled, notFoundError, multipleFoundError, suggestionError, timeoutError, };
119
135
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI5D,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAU,EAAE;IAChD,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,IAAI,GAAG,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAkB,EAAU,EAAE;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAwB,EAAE,OAAuB,EAAU,EAAE;IAC1F,MAAM,KAAK,GAAG,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3D,IAAI,OAAO,EAAE,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChF,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChF,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,EAAE,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9F,IAAI,OAAO,EAAE,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC;AAUF,MAAM,sBAAsB,GAAG,CAAC,UAA2B,EAAU,EAAE;IACnE,QAAQ,UAAU,CAAC,SAAS,EAAE,CAAC;QAC3B,KAAK,MAAM;YACP,OAAO,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACxE,KAAK,MAAM;YACP,OAAO,QAAQ,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,KAAK,WAAW;YACZ,OAAO,cAAc,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM;YACP,OAAO,QAAQ,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,KAAK,iBAAiB;YAClB,OAAO,oBAAoB,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,KAAK,cAAc;YACf,OAAO,iBAAiB,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACtE,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,iCAAiC,GAAG,KAAK,CAAC;AAE9C,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAI,QAAiB,EAAK,EAAE;IAChF,MAAM,QAAQ,GAAG,iCAAiC,CAAC;IACnD,iCAAiC,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC;QACD,OAAO,QAAQ,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACP,iCAAiC,GAAG,QAAQ,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAoB,EAAE,SAAmB,EAAS,EAAE;IAC3E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,iCAAiC;QAC3C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAoB,EAAE,UAA2B,EAAS,EAAE;IACtF,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;IAEpE,IAAI,CAAC,iCAAiC,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACxE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,UAA2B,EAAU,EAAE;IAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IAC/E,OAAO,CACH,iEAAiE;QACjE,kDAAkD,OAAO,IAAI,CAChE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAE,UAA2B,EAAE,OAAqB,EAAS,EAAE;IAClH,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG;QACd,SAAS,OAAO,CAAC,MAAM,kBAAkB,WAAW,yBAAyB;QAC7E,EAAE;QACF,gBAAgB,CAAC,UAAU,CAAC;KAC/B,CAAC;IACF,IAAI,CAAC,iCAAiC,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5F,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,SAAoB,EAAS,EAAE;IAC/E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,2CAA2C,UAAU,IAAI,CAAC;IAC1E,OAAO,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,SAAuB,EAAS,EAAE;IAC5E,MAAM,WAAW,GAAG,mBAAmB,OAAO,IAAI,CAAC;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,QAAQ,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACpF,OAAO,SAAS,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport { getConfig } from \"./config.js\";\nimport { prettyWidget } from \"./pretty-widget.js\";\nimport { formatRole, prettyRoles } from \"./role-helpers.js\";\nimport type { Container } from \"./traversal.js\";\nimport type { ByRoleOptions, ByRoleValue, Matcher } from \"./types.js\";\n\nconst formatTextMatcher = (text: Matcher): string => {\n if (typeof text === \"function\") {\n return \"custom function\";\n }\n if (text instanceof RegExp) {\n return text.toString();\n }\n return `'${text}'`;\n};\n\nconst formatByRoleValue = (value: ByRoleValue): string => {\n const parts: string[] = [];\n if (value.now !== undefined) parts.push(`now=${value.now}`);\n if (value.min !== undefined) parts.push(`min=${value.min}`);\n if (value.max !== undefined) parts.push(`max=${value.max}`);\n if (value.text !== undefined) parts.push(`text ${formatTextMatcher(value.text)}`);\n return parts.join(\", \");\n};\n\nconst formatByRoleDescription = (role: Gtk.AccessibleRole, options?: ByRoleOptions): string => {\n const parts = [`role '${formatRole(role).toUpperCase()}'`];\n if (options?.name) parts.push(`name ${formatTextMatcher(options.name)}`);\n if (options?.checked !== undefined) parts.push(`checked=${options.checked}`);\n if (options?.pressed !== undefined) parts.push(`pressed=${options.pressed}`);\n if (options?.selected !== undefined) parts.push(`selected=${options.selected}`);\n if (options?.expanded !== undefined) parts.push(`expanded=${options.expanded}`);\n if (options?.level !== undefined) parts.push(`level=${options.level}`);\n if (options?.busy !== undefined) parts.push(`busy=${options.busy}`);\n if (options?.description) parts.push(`description ${formatTextMatcher(options.description)}`);\n if (options?.value) parts.push(`value ${formatByRoleValue(options.value)}`);\n if (options?.hidden !== undefined) parts.push(`hidden=${options.hidden}`);\n return parts.join(\" and \");\n};\n\nexport type QueryDescriptor =\n | { queryType: \"role\"; role: Gtk.AccessibleRole; options?: ByRoleOptions | undefined }\n | { queryType: \"text\"; text: Matcher }\n | { queryType: \"labelText\"; text: Matcher }\n | { queryType: \"name\"; name: Matcher }\n | { queryType: \"placeholderText\"; text: Matcher }\n | { queryType: \"displayValue\"; value: Matcher };\n\nconst formatQueryDescription = (descriptor: QueryDescriptor): string => {\n switch (descriptor.queryType) {\n case \"role\":\n return formatByRoleDescription(descriptor.role, descriptor.options);\n case \"text\":\n return `text ${formatTextMatcher(descriptor.text)}`;\n case \"labelText\":\n return `label text ${formatTextMatcher(descriptor.text)}`;\n case \"name\":\n return `name ${formatTextMatcher(descriptor.name)}`;\n case \"placeholderText\":\n return `placeholder text ${formatTextMatcher(descriptor.text)}`;\n case \"displayValue\":\n return `display value ${formatTextMatcher(descriptor.value)}`;\n }\n};\n\nlet expensiveErrorDiagnosticsDisabled = false;\n\nexport const runWithExpensiveErrorDiagnosticsDisabled = <T>(callback: () => T): T => {\n const previous = expensiveErrorDiagnosticsDisabled;\n expensiveErrorDiagnosticsDisabled = true;\n try {\n return callback();\n } finally {\n expensiveErrorDiagnosticsDisabled = previous;\n }\n};\n\nconst buildElementError = (container: Container, headLines: string[]): Error => {\n const config = getConfig();\n const lines = expensiveErrorDiagnosticsDisabled\n ? headLines\n : [...headLines, \"\", prettyWidget(container, { highlight: false })];\n return config.getElementError(lines.join(\"\\n\"), container);\n};\n\nexport const notFoundError = (container: Container, descriptor: QueryDescriptor): Error => {\n const description = formatQueryDescription(descriptor);\n const headLines = [`Unable to find an element with ${description}`];\n\n if (!expensiveErrorDiagnosticsDisabled && descriptor.queryType === \"role\") {\n headLines.push(\"\", \"Here are the accessible roles:\", \"\", prettyRoles(container));\n }\n\n return buildElementError(container, headLines);\n};\n\nconst allByVariantHint = (descriptor: QueryDescriptor): string => {\n const variant = descriptor.queryType === \"role\" ? \"getAllByRole\" : \"getAllBy*\";\n return (\n \"(If this is intentional, use the *AllBy* variant of the query, \" +\n `e.g. queryAllBy*/getAllBy*/findAllBy*, such as ${variant}.)`\n );\n};\n\nexport const multipleFoundError = (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]): Error => {\n const description = formatQueryDescription(descriptor);\n const headLines = [\n `Found ${matches.length} elements with ${description}, but expected only one`,\n \"\",\n allByVariantHint(descriptor),\n ];\n if (!expensiveErrorDiagnosticsDisabled) {\n const renderedMatches = matches.map((widget) => prettyWidget(widget, { highlight: false }));\n headLines.push(\"\", \"Here are the matching elements:\", \"\", ...renderedMatches);\n }\n return buildElementError(container, headLines);\n};\n\nexport const suggestionError = (suggestion: string, container: Container): Error => {\n const config = getConfig();\n const message = `A better query is available, try this:\\n${suggestion}\\n`;\n return config.getElementError(message, container);\n};\n\nexport const timeoutError = (timeout: number, lastError: Error | null): Error => {\n const baseMessage = `Timed out after ${timeout}ms`;\n const message = lastError ? `${baseMessage}.\\n\\n${lastError.message}` : baseMessage;\n return getConfig().getElementError(message);\n};\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { Container } from \"./traversal.js\";\nimport type { ByRoleOptions, ByRoleValue, Matcher } from \"./types.js\";\nimport { getConfig } from \"./config.js\";\nimport { prettyWidget } from \"./pretty-widget.js\";\nimport { formatRole, prettyRoles } from \"./role-helpers.js\";\n\ntype QueryDescriptor =\n | { queryType: \"role\"; role: Gtk.AccessibleRole; options?: ByRoleOptions | undefined } |\n { queryType: \"text\"; text: Matcher } |\n { queryType: \"labelText\"; text: Matcher } |\n { queryType: \"name\"; name: Matcher } |\n { queryType: \"placeholderText\"; text: Matcher } |\n { queryType: \"displayValue\"; value: Matcher };\n\nconst roleOptionFormatters: ((options: ByRoleOptions) => string | null)[] = [\n (o) => (o.name ? `name ${formatTextMatcher(o.name)}` : null),\n (o) => (o.checked === undefined ? null : `checked=${String(o.checked)}`),\n (o) => (o.pressed === undefined ? null : `pressed=${String(o.pressed)}`),\n (o) => (o.selected === undefined ? null : `selected=${String(o.selected)}`),\n (o) => (o.expanded === undefined ? null : `expanded=${String(o.expanded)}`),\n (o) => (o.level === undefined ? null : `level=${String(o.level)}`),\n (o) => (o.busy === undefined ? null : `busy=${String(o.busy)}`),\n (o) => (o.description ? `description ${formatTextMatcher(o.description)}` : null),\n (o) => (o.value ? `value ${formatByRoleValue(o.value)}` : null),\n (o) => (o.hidden === undefined ? null : `hidden=${String(o.hidden)}`),\n];\n\nconst expensiveErrorDiagnostics = { isDisabled: false };\n\nconst formatTextMatcher = (text: Matcher): string => {\n if (typeof text === \"function\") {\n return \"custom function\";\n }\n\n if (text instanceof RegExp) {\n return text.toString();\n }\n\n return `'${String(text)}'`;\n};\n\nconst formatByRoleValue = (value: ByRoleValue): string => {\n const parts: string[] = [];\n\n if (value.now !== undefined) {\n parts.push(`now=${String(value.now)}`);\n }\n\n if (value.min !== undefined) {\n parts.push(`min=${String(value.min)}`);\n }\n\n if (value.max !== undefined) {\n parts.push(`max=${String(value.max)}`);\n }\n\n if (value.text !== undefined) {\n parts.push(`text ${formatTextMatcher(value.text)}`);\n }\n\n return parts.join(\", \");\n};\n\nconst roleOptionParts = (options: ByRoleOptions): string[] => {\n const parts: string[] = [];\n\n for (const formatter of roleOptionFormatters) {\n const part = formatter(options);\n\n if (part !== null) {\n parts.push(part);\n }\n }\n\n return parts;\n};\n\nconst formatByRoleDescription = (role: Gtk.AccessibleRole, options?: ByRoleOptions): string => {\n const parts = [`role '${formatRole(role).toUpperCase()}'`];\n\n if (options) {\n parts.push(...roleOptionParts(options));\n }\n\n return parts.join(\" and \");\n};\n\nconst formatQueryDescription = (descriptor: QueryDescriptor): string => {\n switch (descriptor.queryType) {\n case \"role\": {\n return formatByRoleDescription(descriptor.role, descriptor.options);\n }\n case \"text\": {\n return `text ${formatTextMatcher(descriptor.text)}`;\n }\n case \"labelText\": {\n return `label text ${formatTextMatcher(descriptor.text)}`;\n }\n case \"name\": {\n return `name ${formatTextMatcher(descriptor.name)}`;\n }\n case \"placeholderText\": {\n return `placeholder text ${formatTextMatcher(descriptor.text)}`;\n }\n case \"displayValue\": {\n return `display value ${formatTextMatcher(descriptor.value)}`;\n }\n }\n};\n\nconst runWithExpensiveErrorDiagnosticsDisabled = <T>(callback: () => T): T => {\n const isPrevious = expensiveErrorDiagnostics.isDisabled;\n expensiveErrorDiagnostics.isDisabled = true;\n\n try {\n return callback();\n } finally {\n expensiveErrorDiagnostics.isDisabled = isPrevious;\n }\n};\n\nconst buildElementError = (container: Container, headLines: string[]): Error => {\n const config = getConfig();\n\n const lines = expensiveErrorDiagnostics.isDisabled\n ? headLines\n : [...headLines, \"\", prettyWidget(container, { highlight: false })];\n\n return config.getElementError(lines.join(\"\\n\"), container);\n};\n\nconst notFoundError = (container: Container, descriptor: QueryDescriptor): Error => {\n const description = formatQueryDescription(descriptor);\n const headLines = [`Unable to find an element with ${description}`];\n\n if (!expensiveErrorDiagnostics.isDisabled && descriptor.queryType === \"role\") {\n headLines.push(\"\", \"Here are the accessible roles:\", \"\", prettyRoles(container));\n }\n\n return buildElementError(container, headLines);\n};\n\nconst allByVariantHint = (descriptor: QueryDescriptor): string => {\n const variant = descriptor.queryType === \"role\" ? \"getAllByRole\" : \"getAllBy*\";\n\n return (\n \"(If this is intentional, use the *AllBy* variant of the query, \" +\n `e.g. queryAllBy*/getAllBy*/findAllBy*, such as ${variant}.)`\n );\n};\n\nconst multipleFoundError = (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]): Error => {\n const description = formatQueryDescription(descriptor);\n\n const headLines = [\n `Found ${String(matches.length)} elements with ${description}, but expected only one`,\n \"\",\n allByVariantHint(descriptor),\n ];\n\n if (!expensiveErrorDiagnostics.isDisabled) {\n const renderedMatches = matches.map((widget) => prettyWidget(widget, { highlight: false }));\n headLines.push(\"\", \"Here are the matching elements:\", \"\", ...renderedMatches);\n }\n\n return buildElementError(container, headLines);\n};\n\nconst suggestionError = (suggestion: string, container: Container): Error => {\n const config = getConfig();\n const message = `A better query is available, try this:\\n${suggestion}\\n`;\n\n return config.getElementError(message, container);\n};\n\nconst timeoutError = (timeout: number, lastError: Error | null): Error => {\n const baseMessage = `Timed out after ${String(timeout)}ms`;\n const message = lastError ? `${baseMessage}.\\n\\n${lastError.message}` : baseMessage;\n\n return getConfig().getElementError(message);\n};\n\nexport {\n runWithExpensiveErrorDiagnosticsDisabled,\n notFoundError,\n multipleFoundError,\n suggestionError,\n timeoutError,\n type QueryDescriptor,\n};\n"]}
@@ -7,5 +7,6 @@ import type * as GObject from "@gtkx/gi/gobject";
7
7
  * @param signalName Name of the signal to emit.
8
8
  * @param args Arguments passed to the signal handlers.
9
9
  */
10
- export declare const fireEvent: (element: GObject.Object, signalName: string, ...args: unknown[]) => Promise<void>;
10
+ declare const fireEvent: (element: GObject.Object, signalName: string, ...args: unknown[]) => Promise<void>;
11
+ export { fireEvent };
11
12
  //# sourceMappingURL=fire-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fire-event.d.ts","sourceRoot":"","sources":["../src/fire-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAGjD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,YAAmB,OAAO,CAAC,MAAM,cAAc,MAAM,WAAW,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAI7G,CAAC"}
1
+ {"version":3,"file":"fire-event.d.ts","sourceRoot":"","sources":["../src/fire-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAGjD;;;;;;;GAOG;AACH,QAAA,MAAM,SAAS,GAAU,SAAS,OAAO,CAAC,MAAM,EAAE,YAAY,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAItG,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -7,9 +7,10 @@ import { runInAct } from "./act.js";
7
7
  * @param signalName Name of the signal to emit.
8
8
  * @param args Arguments passed to the signal handlers.
9
9
  */
10
- export const fireEvent = async (element, signalName, ...args) => {
10
+ const fireEvent = async (element, signalName, ...args) => {
11
11
  await runInAct(() => {
12
12
  element.emit(signalName, ...args);
13
13
  });
14
14
  };
15
+ export { fireEvent };
15
16
  //# sourceMappingURL=fire-event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fire-event.js","sourceRoot":"","sources":["../src/fire-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAuB,EAAE,UAAkB,EAAE,GAAG,IAAe,EAAiB,EAAE;IAC9G,MAAM,QAAQ,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport { runInAct } from \"./act.js\";\n\n/**\n * Emits a GObject signal on a widget or object inside React's act environment,\n * so any resulting state updates are flushed before the promise resolves.\n *\n * @param element The GObject instance to emit the signal on.\n * @param signalName Name of the signal to emit.\n * @param args Arguments passed to the signal handlers.\n */\nexport const fireEvent = async (element: GObject.Object, signalName: string, ...args: unknown[]): Promise<void> => {\n await runInAct(() => {\n element.emit(signalName, ...args);\n });\n};\n"]}
1
+ {"version":3,"file":"fire-event.js","sourceRoot":"","sources":["../src/fire-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,SAAS,GAAG,KAAK,EAAE,OAAuB,EAAE,UAAkB,EAAE,GAAG,IAAe,EAAiB,EAAE;IACvG,MAAM,QAAQ,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport { runInAct } from \"./act.js\";\n\n/**\n * Emits a GObject signal on a widget or object inside React's act environment,\n * so any resulting state updates are flushed before the promise resolves.\n *\n * @param element The GObject instance to emit the signal on.\n * @param signalName Name of the signal to emit.\n * @param args Arguments passed to the signal handlers.\n */\nconst fireEvent = async (element: GObject.Object, signalName: string, ...args: unknown[]): Promise<void> => {\n await runInAct(() => {\n element.emit(signalName, ...args);\n });\n};\n\nexport { fireEvent };\n"]}
@@ -1,3 +1,4 @@
1
1
  import type * as Gtk from "@gtkx/gi/gtk";
2
- export declare const scheduleAfterLayout: (widget: Gtk.Widget | null, callback: () => void) => void;
2
+ declare const scheduleAfterLayout: (widget: Gtk.Widget | null, callback: () => void) => void;
3
+ export { scheduleAfterLayout };
3
4
  //# sourceMappingURL=frame-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame-sync.d.ts","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAIzC,eAAO,MAAM,mBAAmB,WAAY,GAAG,CAAC,MAAM,GAAG,IAAI,YAAY,MAAM,IAAI,KAAG,IA6BrF,CAAC"}
1
+ {"version":3,"file":"frame-sync.d.ts","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAsCzC,QAAA,MAAM,mBAAmB,GAAI,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,UAAU,MAAM,IAAI,KAAG,IAU9E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,30 +1,37 @@
1
+ import * as GLib from "@gtkx/gi/glib";
1
2
  const CLOCK_STALL_FALLBACK_MS = 500;
2
- export const scheduleAfterLayout = (widget, callback) => {
3
- let done = false;
4
- let removeTick = null;
5
- let fallback = null;
6
- const finish = () => {
7
- if (done)
3
+ const once = (callback) => {
4
+ let isCalled = false;
5
+ return () => {
6
+ if (isCalled) {
8
7
  return;
9
- done = true;
10
- if (fallback !== null)
11
- clearTimeout(fallback);
12
- removeTick?.();
13
- removeTick = null;
14
- fallback = null;
8
+ }
9
+ isCalled = true;
15
10
  callback();
16
11
  };
17
- if (widget === null || widget.getFrameClock() === null || widget.getWidth() > 0) {
12
+ };
13
+ const runWhenSized = (widget, finish) => {
14
+ let tickId = 0;
15
+ const fallback = setTimeout(() => {
16
+ widget.removeTickCallback(tickId);
17
+ finish();
18
+ }, CLOCK_STALL_FALLBACK_MS);
19
+ tickId = widget.addTickCallback(() => {
20
+ if (widget.getWidth() === 0) {
21
+ return GLib.SOURCE_CONTINUE;
22
+ }
23
+ clearTimeout(fallback);
24
+ finish();
25
+ return GLib.SOURCE_REMOVE;
26
+ });
27
+ };
28
+ const scheduleAfterLayout = (widget, callback) => {
29
+ const finish = once(callback);
30
+ if (widget?.getFrameClock() == null || widget.getWidth() > 0) {
18
31
  queueMicrotask(finish);
19
32
  return;
20
33
  }
21
- fallback = setTimeout(finish, CLOCK_STALL_FALLBACK_MS);
22
- const tickId = widget.addTickCallback(() => {
23
- if (widget.getWidth() === 0)
24
- return true;
25
- finish();
26
- return false;
27
- });
28
- removeTick = () => widget.removeTickCallback(tickId);
34
+ runWhenSized(widget, finish);
29
35
  };
36
+ export { scheduleAfterLayout };
30
37
  //# sourceMappingURL=frame-sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame-sync.js","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAyB,EAAE,QAAoB,EAAQ,EAAE;IACzF,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,UAAU,GAAwB,IAAI,CAAC;IAC3C,IAAI,QAAQ,GAAyC,IAAI,CAAC;IAE1D,MAAM,MAAM,GAAG,GAAS,EAAE;QACtB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,IAAI,QAAQ,KAAK,IAAI;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9C,UAAU,EAAE,EAAE,CAAC;QACf,UAAU,GAAG,IAAI,CAAC;QAClB,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9E,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO;IACX,CAAC;IAED,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\n\nconst CLOCK_STALL_FALLBACK_MS = 500;\n\nexport const scheduleAfterLayout = (widget: Gtk.Widget | null, callback: () => void): void => {\n let done = false;\n let removeTick: (() => void) | null = null;\n let fallback: ReturnType<typeof setTimeout> | null = null;\n\n const finish = (): void => {\n if (done) return;\n done = true;\n if (fallback !== null) clearTimeout(fallback);\n removeTick?.();\n removeTick = null;\n fallback = null;\n callback();\n };\n\n if (widget === null || widget.getFrameClock() === null || widget.getWidth() > 0) {\n queueMicrotask(finish);\n return;\n }\n\n fallback = setTimeout(finish, CLOCK_STALL_FALLBACK_MS);\n\n const tickId = widget.addTickCallback(() => {\n if (widget.getWidth() === 0) return true;\n finish();\n return false;\n });\n\n removeTick = () => widget.removeTickCallback(tickId);\n};\n"]}
1
+ {"version":3,"file":"frame-sync.js","sourceRoot":"","sources":["../src/frame-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAEtC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,IAAI,GAAG,CAAC,QAAoB,EAAgB,EAAE;IAChD,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,GAAG,EAAE;QACR,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAkB,EAAE,MAAkB,EAAQ,EAAE;IAClE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;QAC7B,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE,CAAC;IACb,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAE5B,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QACjC,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QAED,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAyB,EAAE,QAAoB,EAAQ,EAAE;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9B,IAAI,MAAM,EAAE,aAAa,EAAE,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3D,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO;IACX,CAAC;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport * as GLib from \"@gtkx/gi/glib\";\n\nconst CLOCK_STALL_FALLBACK_MS = 500;\n\nconst once = (callback: () => void): (() => void) => {\n let isCalled = false;\n\n return () => {\n if (isCalled) {\n return;\n }\n\n isCalled = true;\n callback();\n };\n};\n\nconst runWhenSized = (widget: Gtk.Widget, finish: () => void): void => {\n let tickId = 0;\n\n const fallback = setTimeout(() => {\n widget.removeTickCallback(tickId);\n finish();\n }, CLOCK_STALL_FALLBACK_MS);\n\n tickId = widget.addTickCallback(() => {\n if (widget.getWidth() === 0) {\n return GLib.SOURCE_CONTINUE;\n }\n\n clearTimeout(fallback);\n finish();\n\n return GLib.SOURCE_REMOVE;\n });\n};\n\nconst scheduleAfterLayout = (widget: Gtk.Widget | null, callback: () => void): void => {\n const finish = once(callback);\n\n if (widget?.getFrameClock() == null || widget.getWidth() > 0) {\n queueMicrotask(finish);\n\n return;\n }\n\n runWhenSized(widget, finish);\n};\n\nexport { scheduleAfterLayout };\n"]}
package/dist/index.d.ts CHANGED
@@ -9,8 +9,8 @@ export { matchers, registerMatchers } from "./matchers.js";
9
9
  export type { PrettyWidgetOptions } from "./pretty-widget.js";
10
10
  export { logWidget, prettyWidget } from "./pretty-widget.js";
11
11
  export { findAllByDisplayValue, findAllByLabelText, findAllByName, findAllByPlaceholderText, findAllByRole, findAllByText, findByDisplayValue, findByLabelText, findByName, findByPlaceholderText, findByRole, findByText, getAllByDisplayValue, getAllByLabelText, getAllByName, getAllByPlaceholderText, getAllByRole, getAllByText, getByDisplayValue, getByLabelText, getByName, getByPlaceholderText, getByRole, getByText, getDefaultNormalizer, queryAllByDisplayValue, queryAllByLabelText, queryAllByName, queryAllByPlaceholderText, queryAllByRole, queryAllByText, queryByDisplayValue, queryByLabelText, queryByName, queryByPlaceholderText, queryByRole, queryByText, } from "./queries.js";
12
- export { cleanup, render } from "./render.js";
13
12
  export { renderHook } from "./render-hook.js";
13
+ export { cleanup, render } from "./render.js";
14
14
  export { formatRole, getRoles, logRoles, prettyRoles } from "./role-helpers.js";
15
15
  export { screen } from "./screen.js";
16
16
  export { captureAndSaveScreenshot, logScreenshotPath, screenshot } from "./screenshot.js";
@@ -18,7 +18,7 @@ export type { Method, Suggestion, Variant } from "./suggestions.js";
18
18
  export { getSuggestedQuery } from "./suggestions.js";
19
19
  export type { Container } from "./traversal.js";
20
20
  export type { ByRoleOptions, ByRoleValue, Matcher, MatcherFunction, MatcherOptions, NormalizerFn, NormalizerOptions, RenderHookOptions, RenderHookResult, RenderOptions, ScreenshotOptions, ScreenshotResult, WaitForOptions, WindowSelector, WrapperComponent, } from "./types.js";
21
- export type { DragOffset, DragOptions, DropContent, DropOptions, PointerInput, TabOptions, TypeOptions, UserEvent, } from "./user-event/index.js";
21
+ export type { DragOffset, DragOptions, DropContent, DropOptions, PointerInput, ScrollDelta, TabOptions, TypeOptions, UserEvent, } from "./user-event/index.js";
22
22
  export { userEvent } from "./user-event/index.js";
23
23
  export { waitFor, waitForElementToBeRemoved } from "./wait-for.js";
24
24
  export { getWidgetErrorMessage, getWidgetInvalidState, getWidgetNodeText, } from "./widget-accessible-properties.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,WAAW,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1F,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACR,aAAa,EACb,WAAW,EACX,OAAO,EACP,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,WAAW,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1F,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACR,aAAa,EACb,WAAW,EACX,OAAO,EACP,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -5,8 +5,8 @@ export { fireEvent } from "./fire-event.js";
5
5
  export { matchers, registerMatchers } from "./matchers.js";
6
6
  export { logWidget, prettyWidget } from "./pretty-widget.js";
7
7
  export { findAllByDisplayValue, findAllByLabelText, findAllByName, findAllByPlaceholderText, findAllByRole, findAllByText, findByDisplayValue, findByLabelText, findByName, findByPlaceholderText, findByRole, findByText, getAllByDisplayValue, getAllByLabelText, getAllByName, getAllByPlaceholderText, getAllByRole, getAllByText, getByDisplayValue, getByLabelText, getByName, getByPlaceholderText, getByRole, getByText, getDefaultNormalizer, queryAllByDisplayValue, queryAllByLabelText, queryAllByName, queryAllByPlaceholderText, queryAllByRole, queryAllByText, queryByDisplayValue, queryByLabelText, queryByName, queryByPlaceholderText, queryByRole, queryByText, } from "./queries.js";
8
- export { cleanup, render } from "./render.js";
9
8
  export { renderHook } from "./render-hook.js";
9
+ export { cleanup, render } from "./render.js";
10
10
  export { formatRole, getRoles, logRoles, prettyRoles } from "./role-helpers.js";
11
11
  export { screen } from "./screen.js";
12
12
  export { captureAndSaveScreenshot, logScreenshotPath, screenshot } from "./screenshot.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,WAAW,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA6BrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC","sourcesContent":["import \"./register-test-hooks.js\";\n\nexport { act } from \"./act.js\";\nexport type { BoundQueries, RenderResult, Screen } from \"./bound-queries.js\";\nexport type { Config, ConfigFn } from \"./config.js\";\nexport { configure, getConfig } from \"./config.js\";\nexport { fireEvent } from \"./fire-event.js\";\nexport type { TextExpectation } from \"./matchers.js\";\nexport { matchers, registerMatchers } from \"./matchers.js\";\nexport type { PrettyWidgetOptions } from \"./pretty-widget.js\";\nexport { logWidget, prettyWidget } from \"./pretty-widget.js\";\nexport {\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByName,\n findAllByPlaceholderText,\n findAllByRole,\n findAllByText,\n findByDisplayValue,\n findByLabelText,\n findByName,\n findByPlaceholderText,\n findByRole,\n findByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByName,\n getAllByPlaceholderText,\n getAllByRole,\n getAllByText,\n getByDisplayValue,\n getByLabelText,\n getByName,\n getByPlaceholderText,\n getByRole,\n getByText,\n getDefaultNormalizer,\n queryAllByDisplayValue,\n queryAllByLabelText,\n queryAllByName,\n queryAllByPlaceholderText,\n queryAllByRole,\n queryAllByText,\n queryByDisplayValue,\n queryByLabelText,\n queryByName,\n queryByPlaceholderText,\n queryByRole,\n queryByText,\n} from \"./queries.js\";\nexport { cleanup, render } from \"./render.js\";\nexport { renderHook } from \"./render-hook.js\";\nexport { formatRole, getRoles, logRoles, prettyRoles } from \"./role-helpers.js\";\nexport { screen } from \"./screen.js\";\nexport { captureAndSaveScreenshot, logScreenshotPath, screenshot } from \"./screenshot.js\";\nexport type { Method, Suggestion, Variant } from \"./suggestions.js\";\nexport { getSuggestedQuery } from \"./suggestions.js\";\nexport type { Container } from \"./traversal.js\";\nexport type {\n ByRoleOptions,\n ByRoleValue,\n Matcher,\n MatcherFunction,\n MatcherOptions,\n NormalizerFn,\n NormalizerOptions,\n RenderHookOptions,\n RenderHookResult,\n RenderOptions,\n ScreenshotOptions,\n ScreenshotResult,\n WaitForOptions,\n WindowSelector,\n WrapperComponent,\n} from \"./types.js\";\nexport type {\n DragOffset,\n DragOptions,\n DropContent,\n DropOptions,\n PointerInput,\n TabOptions,\n TypeOptions,\n UserEvent,\n} from \"./user-event/index.js\";\nexport { userEvent } from \"./user-event/index.js\";\nexport { waitFor, waitForElementToBeRemoved } from \"./wait-for.js\";\nexport {\n getWidgetErrorMessage,\n getWidgetInvalidState,\n getWidgetNodeText,\n} from \"./widget-accessible-properties.js\";\nexport { within } from \"./within.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,WAAW,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA8BrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC","sourcesContent":["import \"./register-test-hooks.js\";\n\nexport { act } from \"./act.js\";\nexport type { BoundQueries, RenderResult, Screen } from \"./bound-queries.js\";\nexport type { Config, ConfigFn } from \"./config.js\";\nexport { configure, getConfig } from \"./config.js\";\nexport { fireEvent } from \"./fire-event.js\";\nexport type { TextExpectation } from \"./matchers.js\";\nexport { matchers, registerMatchers } from \"./matchers.js\";\nexport type { PrettyWidgetOptions } from \"./pretty-widget.js\";\nexport { logWidget, prettyWidget } from \"./pretty-widget.js\";\nexport {\n findAllByDisplayValue,\n findAllByLabelText,\n findAllByName,\n findAllByPlaceholderText,\n findAllByRole,\n findAllByText,\n findByDisplayValue,\n findByLabelText,\n findByName,\n findByPlaceholderText,\n findByRole,\n findByText,\n getAllByDisplayValue,\n getAllByLabelText,\n getAllByName,\n getAllByPlaceholderText,\n getAllByRole,\n getAllByText,\n getByDisplayValue,\n getByLabelText,\n getByName,\n getByPlaceholderText,\n getByRole,\n getByText,\n getDefaultNormalizer,\n queryAllByDisplayValue,\n queryAllByLabelText,\n queryAllByName,\n queryAllByPlaceholderText,\n queryAllByRole,\n queryAllByText,\n queryByDisplayValue,\n queryByLabelText,\n queryByName,\n queryByPlaceholderText,\n queryByRole,\n queryByText,\n} from \"./queries.js\";\nexport { renderHook } from \"./render-hook.js\";\nexport { cleanup, render } from \"./render.js\";\nexport { formatRole, getRoles, logRoles, prettyRoles } from \"./role-helpers.js\";\nexport { screen } from \"./screen.js\";\nexport { captureAndSaveScreenshot, logScreenshotPath, screenshot } from \"./screenshot.js\";\nexport type { Method, Suggestion, Variant } from \"./suggestions.js\";\nexport { getSuggestedQuery } from \"./suggestions.js\";\nexport type { Container } from \"./traversal.js\";\nexport type {\n ByRoleOptions,\n ByRoleValue,\n Matcher,\n MatcherFunction,\n MatcherOptions,\n NormalizerFn,\n NormalizerOptions,\n RenderHookOptions,\n RenderHookResult,\n RenderOptions,\n ScreenshotOptions,\n ScreenshotResult,\n WaitForOptions,\n WindowSelector,\n WrapperComponent,\n} from \"./types.js\";\nexport type {\n DragOffset,\n DragOptions,\n DropContent,\n DropOptions,\n PointerInput,\n ScrollDelta,\n TabOptions,\n TypeOptions,\n UserEvent,\n} from \"./user-event/index.js\";\nexport { userEvent } from \"./user-event/index.js\";\nexport { waitFor, waitForElementToBeRemoved } from \"./wait-for.js\";\nexport {\n getWidgetErrorMessage,\n getWidgetInvalidState,\n getWidgetNodeText,\n} from \"./widget-accessible-properties.js\";\nexport { within } from \"./within.js\";\n"]}
@@ -1,25 +1,13 @@
1
1
  /** The expected value for a text matcher: an exact string or a regular expression. */
2
- export type TextExpectation = string | RegExp;
2
+ type TextExpectation = string | RegExp;
3
3
  type MatcherResult = {
4
4
  pass: boolean;
5
5
  message: () => string;
6
6
  };
7
- interface MatcherContext {
8
- isNot: boolean;
9
- }
10
- type TextMatcher = (this: MatcherContext, received: unknown, expected?: TextExpectation) => MatcherResult;
11
- type StateMatcher = (this: MatcherContext, received: unknown) => MatcherResult;
12
- type ValueMatcher = (this: MatcherContext, received: unknown, expected: number) => MatcherResult;
13
- export declare const toHaveDisplayValue: TextMatcher;
14
- export declare const toHaveTextContent: TextMatcher;
15
- export declare const toHaveAccessibleName: TextMatcher;
16
- export declare const toHavePlaceholderText: TextMatcher;
17
- export declare const toBeChecked: StateMatcher;
18
- export declare const toBePressed: StateMatcher;
19
- export declare const toBeExpanded: StateMatcher;
20
- export declare const toBeSelected: StateMatcher;
21
- export declare const toHaveValue: ValueMatcher;
22
- interface MatcherImplementations {
7
+ type TextMatcher = (received: unknown, expected?: TextExpectation) => MatcherResult;
8
+ type StateMatcher = (received: unknown) => MatcherResult;
9
+ type ValueMatcher = (received: unknown, expected: number) => MatcherResult;
10
+ type MatcherImplementations = {
23
11
  toHaveDisplayValue: TextMatcher;
24
12
  toHaveTextContent: TextMatcher;
25
13
  toHaveAccessibleName: TextMatcher;
@@ -29,27 +17,43 @@ interface MatcherImplementations {
29
17
  toBeExpanded: StateMatcher;
30
18
  toBeSelected: StateMatcher;
31
19
  toHaveValue: ValueMatcher;
32
- }
20
+ };
21
+ declare const toHaveDisplayValue: TextMatcher;
22
+ declare const toHaveTextContent: TextMatcher;
23
+ declare const toHaveAccessibleName: TextMatcher;
24
+ declare const toHavePlaceholderText: TextMatcher;
25
+ declare const toBeChecked: StateMatcher;
26
+ declare const toBePressed: StateMatcher;
27
+ declare const toBeExpanded: StateMatcher;
28
+ declare const toBeSelected: StateMatcher;
33
29
  /** The widget assertion matchers keyed by name, suitable for passing to `expect.extend`. */
34
- export declare const matchers: MatcherImplementations;
30
+ declare const matchers: MatcherImplementations;
31
+ declare function toHaveValue(received: unknown, expected: number): MatcherResult;
35
32
  /** Registers the widget matchers on the global `expect`, when one is available. Safe to call more than once. */
36
- export declare const registerMatchers: () => void;
37
- interface WidgetMatchers<R = void> {
38
- toHaveDisplayValue(expected?: TextExpectation): R;
39
- toHaveTextContent(expected?: TextExpectation): R;
40
- toHaveAccessibleName(expected?: TextExpectation): R;
41
- toHavePlaceholderText(expected?: TextExpectation): R;
42
- toBeChecked(): R;
43
- toBePressed(): R;
44
- toBeExpanded(): R;
45
- toBeSelected(): R;
46
- toHaveValue(expected: number): R;
47
- }
33
+ declare const registerMatchers: () => void;
48
34
  declare module "@vitest/expect" {
49
- interface Assertion<T = any> extends WidgetMatchers {
35
+ interface Assertion {
36
+ toHaveDisplayValue(expected?: TextExpectation): void;
37
+ toHaveTextContent(expected?: TextExpectation): void;
38
+ toHaveAccessibleName(expected?: TextExpectation): void;
39
+ toHavePlaceholderText(expected?: TextExpectation): void;
40
+ toBeChecked(): void;
41
+ toBePressed(): void;
42
+ toBeExpanded(): void;
43
+ toBeSelected(): void;
44
+ toHaveValue(expected: number): void;
50
45
  }
51
- interface AsymmetricMatchersContaining extends WidgetMatchers {
46
+ interface AsymmetricMatchersContaining {
47
+ toHaveDisplayValue(expected?: TextExpectation): void;
48
+ toHaveTextContent(expected?: TextExpectation): void;
49
+ toHaveAccessibleName(expected?: TextExpectation): void;
50
+ toHavePlaceholderText(expected?: TextExpectation): void;
51
+ toBeChecked(): void;
52
+ toBePressed(): void;
53
+ toBeExpanded(): void;
54
+ toBeSelected(): void;
55
+ toHaveValue(expected: number): void;
52
56
  }
53
57
  }
54
- export {};
58
+ export { toHaveDisplayValue, toHaveTextContent, toHaveAccessibleName, toHavePlaceholderText, toBeChecked, toBePressed, toBeExpanded, toBeSelected, matchers, toHaveValue, registerMatchers, type TextExpectation, };
55
59
  //# sourceMappingURL=matchers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../src/matchers.ts"],"names":[],"mappings":"AAcA,sFAAsF;AACtF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,MAAM,CAAA;CAAE,CAAC;AAE9D,UAAU,cAAc;IACpB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,eAAe,KAAK,aAAa,CAAC;AAC1G,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,KAAK,aAAa,CAAC;AAC/E,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;AA0EjG,eAAO,MAAM,kBAAkB,EAAE,WAA+E,CAAC;AACjH,eAAO,MAAM,iBAAiB,EAAE,WAI/B,CAAC;AACF,eAAO,MAAM,oBAAoB,EAAE,WAAmF,CAAC;AACvH,eAAO,MAAM,qBAAqB,EAAE,WAInC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,YAAmF,CAAC;AAC9G,eAAO,MAAM,WAAW,EAAE,YAAmF,CAAC;AAC9G,eAAO,MAAM,YAAY,EAAE,YAAsF,CAAC;AAClH,eAAO,MAAM,YAAY,EAAE,YAAsF,CAAC;AAElH,eAAO,MAAM,WAAW,EAAE,YAkBzB,CAAC;AAEF,UAAU,sBAAsB;IAC5B,kBAAkB,EAAE,WAAW,CAAC;IAChC,iBAAiB,EAAE,WAAW,CAAC;IAC/B,oBAAoB,EAAE,WAAW,CAAC;IAClC,qBAAqB,EAAE,WAAW,CAAC;IACnC,WAAW,EAAE,YAAY,CAAC;IAC1B,WAAW,EAAE,YAAY,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,YAAY,CAAC;CAC7B;AAED,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,EAAE,sBAUtB,CAAC;AAcF,gHAAgH;AAChH,eAAO,MAAM,gBAAgB,QAAO,IAMnC,CAAC;AAEF,UAAU,cAAc,CAAC,CAAC,GAAG,IAAI;IAC7B,kBAAkB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IAClD,iBAAiB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IACjD,oBAAoB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IACpD,qBAAqB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IACrD,WAAW,IAAI,CAAC,CAAC;IACjB,WAAW,IAAI,CAAC,CAAC;IACjB,YAAY,IAAI,CAAC,CAAC;IAClB,YAAY,IAAI,CAAC,CAAC;IAClB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;CACpC;AAED,OAAO,QAAQ,gBAAgB,CAAC;IAE5B,UAAU,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,cAAc;KAAG;IACtD,UAAU,4BAA6B,SAAQ,cAAc;KAAG;CACnE"}
1
+ {"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../src/matchers.ts"],"names":[],"mappings":"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"}