pw-core 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.js +145 -421
  3. package/dist/codegen/action-formatter.d.ts +19 -0
  4. package/dist/codegen/action-formatter.js +160 -0
  5. package/dist/codegen/action-processor.d.ts +23 -0
  6. package/dist/codegen/action-processor.js +112 -0
  7. package/dist/codegen/floating-panel/client.d.ts +14 -1
  8. package/dist/codegen/floating-panel/client.js +20 -25
  9. package/dist/codegen/floating-panel/manager.js +16 -22
  10. package/dist/codegen/generator/action.validator.d.ts +2 -1
  11. package/dist/codegen/generator/action.validator.js +2 -1
  12. package/dist/codegen/generator/candidate-scorer.d.ts +7 -0
  13. package/dist/codegen/generator/candidate-scorer.js +206 -0
  14. package/dist/codegen/generator/dom-scanner.d.ts +39 -0
  15. package/dist/codegen/generator/dom-scanner.js +429 -0
  16. package/dist/codegen/generator/id-stability.d.ts +6 -0
  17. package/dist/codegen/generator/id-stability.js +38 -0
  18. package/dist/codegen/generator/index.d.ts +8 -10
  19. package/dist/codegen/generator/index.js +23 -678
  20. package/dist/codegen/generator/key-builder.d.ts +13 -0
  21. package/dist/codegen/generator/key-builder.js +32 -0
  22. package/dist/codegen/hover-tracker/client.d.ts +5 -0
  23. package/dist/codegen/hover-tracker/client.js +14 -15
  24. package/dist/codegen/hover-tracker/manager.js +2 -6
  25. package/dist/codegen/index.d.ts +9 -32
  26. package/dist/codegen/index.js +9 -1128
  27. package/dist/codegen/key-utils.d.ts +16 -0
  28. package/dist/codegen/key-utils.js +29 -1
  29. package/dist/codegen/project-finder.d.ts +29 -0
  30. package/dist/codegen/project-finder.js +283 -0
  31. package/dist/codegen/registry-matcher.d.ts +27 -0
  32. package/dist/codegen/registry-matcher.js +254 -0
  33. package/dist/codegen/registry-store.d.ts +52 -0
  34. package/dist/codegen/registry-store.js +652 -0
  35. package/dist/codegen/selector-parser.d.ts +16 -0
  36. package/dist/codegen/selector-parser.js +121 -0
  37. package/dist/codegen/types.d.ts +18 -1
  38. package/dist/codegen/uniqueness.d.ts +3 -0
  39. package/dist/codegen/uniqueness.js +15 -0
  40. package/dist/component/table.d.ts +2 -2
  41. package/dist/component/table.js +7 -6
  42. package/dist/index.d.ts +3 -0
  43. package/dist/index.js +19 -0
  44. package/dist/page/actions/locator-actions.d.ts +6 -10
  45. package/dist/page/actions/locator-actions.js +24 -23
  46. package/dist/page/assertions/verify-chain.d.ts +11 -13
  47. package/dist/page/assertions/verify-chain.js +26 -7
  48. package/dist/page/assertions/verify-helpers.d.ts +5 -15
  49. package/dist/page/config.d.ts +25 -25
  50. package/dist/page/locators/dynamic-locator-resolver.js +22 -9
  51. package/dist/page/locators/resolver.d.ts +17 -11
  52. package/dist/page/locators/resolver.js +84 -78
  53. package/dist/page/registry.d.ts +35 -35
  54. package/dist/page/registry.js +86 -82
  55. package/dist/page/typed-page.d.ts +1 -0
  56. package/dist/page/typed-page.js +22 -12
  57. package/dist/page/types/proxy-methods.d.ts +11 -19
  58. package/dist/page/types/validation.d.ts +1 -1
  59. package/dist/page/utils/formatter.d.ts +3 -3
  60. package/dist/page/utils/formatter.js +5 -2
  61. package/package.json +6 -3
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStableId = isStableId;
4
+ /**
5
+ * Checks whether an HTML element's ID attribute is stable and non-generated.
6
+ * Filters out framework auto-generated IDs (React, MUI, HeadlessUI, Ember, Angular),
7
+ * UUIDs, hashes, and purely numeric IDs.
8
+ */
9
+ function isStableId(id) {
10
+ if (!id)
11
+ return false;
12
+ const lower = id.toLowerCase();
13
+ // React/MUI/HeadlessUI/Ember auto-generated patterns
14
+ if (lower.startsWith(':r') && /\d/.test(lower))
15
+ return false;
16
+ if (lower.startsWith('mui-'))
17
+ return false;
18
+ if (lower.startsWith('headlessui-'))
19
+ return false;
20
+ if (lower.startsWith('ember-'))
21
+ return false;
22
+ if (lower.startsWith('ng-'))
23
+ return false;
24
+ // UUID pattern
25
+ const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
26
+ if (uuidRegex.test(lower))
27
+ return false;
28
+ // Long hex hashes or random looking alpha-numeric (e.g. f4c2d91, 8d72b3ef)
29
+ const hexHashRegex = /^[0-9a-f]{7,8}$/i;
30
+ if (hexHashRegex.test(lower))
31
+ return false;
32
+ // Purely numeric or ends with a long random number (e.g. button-12847291)
33
+ if (/^\d+$/.test(lower))
34
+ return false;
35
+ if (/\d{5,}$/.test(lower))
36
+ return false;
37
+ return true;
38
+ }
@@ -1,13 +1,11 @@
1
+ import type { Page } from '@playwright/test';
1
2
  import { LocatorCandidate } from '../types';
2
- export declare function isStableId(id: string): boolean;
3
- export declare function generateKeyFromText(text: string, role?: string): string;
3
+ export { isStableId } from './id-stability';
4
+ export { generateKeyFromText, generateKeyFromCandidate } from './key-builder';
5
+ export { validateAndSelectLocator } from './locator.validator';
6
+ export { normalizeActionName } from './action.validator';
4
7
  /**
5
- * Derive a camelCase key from a candidate's attribute/selector value.
6
- * E.g. data-parent-id="why-pw-core" whyPwCore
8
+ * Evaluates the element at `selector` inside the page, scans candidate locators across the DOM tree,
9
+ * scores and ranks them based on priority, stability, semantics, and uniqueness, and returns the best candidate.
7
10
  */
8
- export declare function generateKeyFromCandidate(candidate: {
9
- strategy: string;
10
- selector: string;
11
- valueToScore?: string;
12
- }, role?: string): string;
13
- export declare function generateSmartLocator(page: any, selector: string): Promise<LocatorCandidate | null>;
11
+ export declare function generateSmartLocator(page: Page, selector: string): Promise<LocatorCandidate | null>;