@ia-qa/self-healing 0.9.0 → 0.10.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 (55) hide show
  1. package/README.md +35 -2
  2. package/TUTORIAL.md +25 -0
  3. package/dist/aom.d.ts +11 -0
  4. package/dist/aom.js +16 -1
  5. package/dist/aom.js.map +1 -1
  6. package/dist/browser/contract.js +40 -8
  7. package/dist/browser/contract.js.map +1 -1
  8. package/dist/browser/extract.js +67 -6
  9. package/dist/browser/extract.js.map +1 -1
  10. package/dist/browser/match.d.ts +2 -1
  11. package/dist/browser/match.js +14 -10
  12. package/dist/browser/match.js.map +1 -1
  13. package/dist/captureMerge.d.ts +35 -0
  14. package/dist/captureMerge.js +152 -0
  15. package/dist/captureMerge.js.map +1 -0
  16. package/dist/cli/baseline.js +2 -0
  17. package/dist/cli/baseline.js.map +1 -1
  18. package/dist/cli/diff.d.ts +71 -0
  19. package/dist/cli/diff.js +119 -41
  20. package/dist/cli/diff.js.map +1 -1
  21. package/dist/cli/fix.js +27 -4
  22. package/dist/cli/fix.js.map +1 -1
  23. package/dist/cli/index.js +20 -1
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/ingest.d.ts +13 -0
  26. package/dist/cli/ingest.js +105 -0
  27. package/dist/cli/ingest.js.map +1 -0
  28. package/dist/cli/init.js +21 -0
  29. package/dist/cli/init.js.map +1 -1
  30. package/dist/cli/run.d.ts +15 -0
  31. package/dist/cli/run.js +157 -0
  32. package/dist/cli/run.js.map +1 -0
  33. package/dist/config.d.ts +11 -0
  34. package/dist/config.js.map +1 -1
  35. package/dist/fixEngine.d.ts +2 -0
  36. package/dist/fixEngine.js +3 -2
  37. package/dist/fixEngine.js.map +1 -1
  38. package/dist/index.d.ts +6 -0
  39. package/dist/index.js +15 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/ingest.d.ts +46 -0
  42. package/dist/ingest.js +0 -0
  43. package/dist/ingest.js.map +1 -0
  44. package/dist/mapUrl.d.ts +1 -1
  45. package/dist/mapUrl.js +5 -13
  46. package/dist/mapUrl.js.map +1 -1
  47. package/dist/pageName.d.ts +31 -0
  48. package/dist/pageName.js +38 -0
  49. package/dist/pageName.js.map +1 -0
  50. package/dist/playwright/capture.d.ts +27 -0
  51. package/dist/playwright/capture.js +187 -0
  52. package/dist/playwright/capture.js.map +1 -0
  53. package/dist/playwright/healer.js +14 -15
  54. package/dist/playwright/healer.js.map +1 -1
  55. package/package.json +16 -1
package/dist/fixEngine.js CHANGED
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PW_ACTIONS = void 0;
36
37
  exports.computeLocatorRewrites = computeLocatorRewrites;
37
38
  exports.locatorExpression = locatorExpression;
38
39
  exports.computeRewrites = computeRewrites;
@@ -85,7 +86,7 @@ function locatorExpression(t) {
85
86
  return `getByRole('${t.role}', { name: ${JSON.stringify(t.name)}, exact: true })`;
86
87
  }
87
88
  /** Playwright shorthands that take a selector as their first argument. */
88
- const PW_ACTIONS = [
89
+ exports.PW_ACTIONS = [
89
90
  'click', 'dblclick', 'fill', 'check', 'uncheck', 'hover', 'focus',
90
91
  'press', 'type', 'selectOption', 'tap', 'clear', 'setInputFiles', 'textContent', 'inputValue', 'isVisible', 'isChecked', 'isEnabled', 'getAttribute', 'waitForSelector',
91
92
  ];
@@ -123,7 +124,7 @@ function applyRewritesToText(text, rewrites, locators) {
123
124
  for (const q of QUOTES) {
124
125
  const lit = q + from + q;
125
126
  variants.push({ needle: `.locator(${lit})`, replacement: `.${expr}`, pair });
126
- for (const a of PW_ACTIONS) {
127
+ for (const a of exports.PW_ACTIONS) {
127
128
  variants.push({ needle: `.${a}(${lit})`, replacement: `.${expr}.${a}()`, pair });
128
129
  variants.push({ needle: `.${a}(${lit}, `, replacement: `.${expr}.${a}(`, pair });
129
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fixEngine.js","sourceRoot":"","sources":["../src/fixEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixEngine.js","sourceRoot":"","sources":["../src/fixEngine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,wDAgBC;AAED,8CAEC;AAwBD,0CAQC;AAWD,kDAoEC;AAOD,sCAgCC;AAUD,sCAkBC;AAQD,oCAsBC;AApRD,uCAAyB;AACzB,2CAA6B;AAuB7B,oFAAoF;AACpF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ;CAC1F,CAAC,CAAC;AAEH,uFAAuF;AACvF,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEpG;;;;;;;;;;;;;GAaG;AACH,SAAgB,sBAAsB,CACpC,IAAmB,EACnB,aAAoD;IAEpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,cAAc;YAAE,SAAS;QAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;YAAE,SAAS;QAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,iBAAiB,CAAC,CAAgB;IAChD,OAAO,cAAc,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACpF,CAAC;AAED,0EAA0E;AAC7D,QAAA,UAAU,GAAG;IACxB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;IACjE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB;CACxK,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAevE,kEAAkE;AAClE,SAAgB,eAAe,CAAC,IAAmB;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAC9D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CACjC,IAAY,EACZ,QAA6B,EAC7B,QAAqC;IAErC,MAAM,KAAK,GAAwC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAiE,EAAE,CAAC;IAElF,iFAAiF;IACjF,gFAAgF;IAChF,iFAAiF;IACjF,gDAAgD;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,KAAK,MAAM,CAAC,IAAI,kBAAU,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8C,CAAC;IACrE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,+EAA+E;QAC/E,oBAAoB;QACpB,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;gBACvB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;gBACrB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACvD,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM,EAAE,CAAC;QAC/B,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,EAAE,CAAC;IACN,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QACrD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAC3B,KAAe,EACf,QAA6B,EAC7B,MAAe,EACf,QAAqC;IAErC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/C,2EAA2E;YAC3E,2EAA2E;YAC3E,uBAAuB;YACvB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC7F,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM;oBAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACnC,iBAAiB,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,KAAK;QACL,iBAAiB;QACjB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/B;;;;;GAKG;AACH,SAAgB,aAAa,CAC3B,IAAY,EACZ,MAAc,EACd,MAAc;IAEd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5C,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;CAC/D,CAAC,CAAC;AAEH,wFAAwF;AACxF,SAAgB,YAAY,CAAC,KAAe,EAAE,MAA4B;IACxE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;YACnC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,GAAW,EAAE,GAAwB;IACpD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACvC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,12 @@ export { extractInteractiveElements, loadMapping, saveMapping } from './aom';
4
4
  export type { MappedElement, PageMapping } from './aom';
5
5
  export { renderPageContract, saveMarkdown, markdownPath } from './markdown';
6
6
  export { mapUrl, pageNameFromUrl } from './mapUrl';
7
+ export { resolvePageName } from './pageName';
8
+ export type { PageNameResolution } from './pageName';
9
+ export { scanText, ingestPaths, saveUsage, loadUsage, usageFiles, usagePath } from './ingest';
10
+ export type { Usage, SelectorSite, SelectorShape } from './ingest';
11
+ export { mergeCaptures, unionElements, captureDir, CAPTURE_DIRNAME } from './captureMerge';
12
+ export type { CaptureShard, CaptureShardPage, MergeResult } from './captureMerge';
7
13
  export { launchBrowser } from './launcher';
8
14
  export type { BrowserChoice, LaunchedBrowser } from './launcher';
9
15
  export type { MapUrlOptions, MapUrlResult } from './mapUrl';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.LAYOUT_DIRNAME = exports.layoutPath = exports.layoutDir = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
3
+ exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.LAYOUT_DIRNAME = exports.layoutPath = exports.layoutDir = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = exports.CAPTURE_DIRNAME = exports.captureDir = exports.unionElements = exports.mergeCaptures = exports.usagePath = exports.usageFiles = exports.loadUsage = exports.saveUsage = exports.ingestPaths = exports.scanText = exports.resolvePageName = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
4
4
  var healer_1 = require("./playwright/healer");
5
5
  Object.defineProperty(exports, "aiClick", { enumerable: true, get: function () { return healer_1.aiClick; } });
6
6
  Object.defineProperty(exports, "aiFill", { enumerable: true, get: function () { return healer_1.aiFill; } });
@@ -16,6 +16,20 @@ Object.defineProperty(exports, "markdownPath", { enumerable: true, get: function
16
16
  var mapUrl_1 = require("./mapUrl");
17
17
  Object.defineProperty(exports, "mapUrl", { enumerable: true, get: function () { return mapUrl_1.mapUrl; } });
18
18
  Object.defineProperty(exports, "pageNameFromUrl", { enumerable: true, get: function () { return mapUrl_1.pageNameFromUrl; } });
19
+ var pageName_1 = require("./pageName");
20
+ Object.defineProperty(exports, "resolvePageName", { enumerable: true, get: function () { return pageName_1.resolvePageName; } });
21
+ var ingest_1 = require("./ingest");
22
+ Object.defineProperty(exports, "scanText", { enumerable: true, get: function () { return ingest_1.scanText; } });
23
+ Object.defineProperty(exports, "ingestPaths", { enumerable: true, get: function () { return ingest_1.ingestPaths; } });
24
+ Object.defineProperty(exports, "saveUsage", { enumerable: true, get: function () { return ingest_1.saveUsage; } });
25
+ Object.defineProperty(exports, "loadUsage", { enumerable: true, get: function () { return ingest_1.loadUsage; } });
26
+ Object.defineProperty(exports, "usageFiles", { enumerable: true, get: function () { return ingest_1.usageFiles; } });
27
+ Object.defineProperty(exports, "usagePath", { enumerable: true, get: function () { return ingest_1.usagePath; } });
28
+ var captureMerge_1 = require("./captureMerge");
29
+ Object.defineProperty(exports, "mergeCaptures", { enumerable: true, get: function () { return captureMerge_1.mergeCaptures; } });
30
+ Object.defineProperty(exports, "unionElements", { enumerable: true, get: function () { return captureMerge_1.unionElements; } });
31
+ Object.defineProperty(exports, "captureDir", { enumerable: true, get: function () { return captureMerge_1.captureDir; } });
32
+ Object.defineProperty(exports, "CAPTURE_DIRNAME", { enumerable: true, get: function () { return captureMerge_1.CAPTURE_DIRNAME; } });
19
33
  var launcher_1 = require("./launcher");
20
34
  Object.defineProperty(exports, "launchBrowser", { enumerable: true, get: function () { return launcher_1.launchBrowser; } });
21
35
  var fixEngine_1 = require("./fixEngine");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAuE;AAA9D,iGAAA,OAAO,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEzC,6BAA6E;AAApE,iHAAA,0BAA0B,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE7D,uCAA4E;AAAnE,8GAAA,kBAAkB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AACvD,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAGtB,yCAA0F;AAAjF,4GAAA,eAAe,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AACpE,mCAA4F;AAAnF,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAEzE,mCAAkF;AAAzE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAE/D,uCAcoB;AAblB,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAuE;AAA9D,iGAAA,OAAO,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEzC,6BAA6E;AAApE,iHAAA,0BAA0B,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE7D,uCAA4E;AAAnE,8GAAA,kBAAkB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AACvD,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAAE,yGAAA,eAAe,OAAA;AAChC,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAExB,mCAA8F;AAArF,kGAAA,QAAQ,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAE3E,+CAA2F;AAAlF,6GAAA,aAAa,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,+GAAA,eAAe,OAAA;AAElE,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAGtB,yCAA0F;AAAjF,4GAAA,eAAe,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AACpE,mCAA4F;AAAnF,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAEzE,mCAAkF;AAAzE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAE/D,uCAcoB;AAblB,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Static selector inventory — `ia-qa-heal ingest`.
3
+ *
4
+ * Scans the user's test/POM files for the selectors they actually use and writes
5
+ * `.ia-qa/usage.json`. The contract knows every element on a page; the suite only
6
+ * ever touches some of them. Without this file, `diff` weighs a drifted element
7
+ * nobody tests the same as one that breaks the suite, and `fix` cannot run
8
+ * without being handed the test paths every time.
9
+ *
10
+ * Purely static and deterministic: quoted literals in known call shapes, no
11
+ * execution, no AST. A selector built by string concatenation is invisible here —
12
+ * acceptable, because such a selector is invisible to `fix`'s literal rewrite too.
13
+ */
14
+ export type SelectorShape = 'playwright' | 'cypress' | 'selenium' | 'pom';
15
+ export interface SelectorSite {
16
+ file: string;
17
+ line: number;
18
+ shape: SelectorShape;
19
+ }
20
+ export interface Usage {
21
+ generatedAt: string;
22
+ /** Number of files scanned (sites reference only the files that matched). */
23
+ scanned: number;
24
+ selectors: Record<string, SelectorSite[]>;
25
+ }
26
+ export declare const USAGE_FILENAME = "usage.json";
27
+ export declare function usagePath(cwd?: string): string;
28
+ /**
29
+ * Shared call shapes (`.type`, `.press`, `.fill`…) take text in one framework and
30
+ * a selector in another, so a captured literal is only recorded when it *reads*
31
+ * like a selector. A bare tag (`click('button')`) is the accepted miss.
32
+ */
33
+ export declare function plausibleSelector(value: string): boolean;
34
+ export declare function scanText(text: string, file: string): Array<{
35
+ selector: string;
36
+ site: SelectorSite;
37
+ }>;
38
+ export interface IngestResult {
39
+ usage: Usage;
40
+ skipped: string[];
41
+ }
42
+ export declare function ingestPaths(paths: string[], cwd?: string): IngestResult;
43
+ export declare function saveUsage(usage: Usage, cwd?: string): string;
44
+ export declare function loadUsage(cwd?: string): Usage | null;
45
+ /** The files `fix` should edit when no test paths are given: the ones that hold selectors. */
46
+ export declare function usageFiles(usage: Usage, cwd?: string): string[];
package/dist/ingest.js ADDED
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"}
package/dist/mapUrl.d.ts CHANGED
@@ -34,7 +34,7 @@ export interface MapUrlResult {
34
34
  /** Which browser was actually used (bundled, system channel, explicit path). */
35
35
  browser: string;
36
36
  }
37
- export declare function pageNameFromUrl(url: string): string;
37
+ export { pageNameFromUrl } from './pageName';
38
38
  export declare function mapUrl(url: string, options?: MapUrlOptions): Promise<MapUrlResult>;
39
39
  /** Convenience for logs: a relative path when possible. */
40
40
  export declare function rel(p: string): string;
package/dist/mapUrl.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.pageNameFromUrl = pageNameFromUrl;
36
+ exports.pageNameFromUrl = void 0;
37
37
  exports.mapUrl = mapUrl;
38
38
  exports.rel = rel;
39
39
  const path = __importStar(require("path"));
@@ -41,19 +41,11 @@ const aom_1 = require("./aom");
41
41
  const markdown_1 = require("./markdown");
42
42
  const config_1 = require("./config");
43
43
  const launcher_1 = require("./launcher");
44
- function pageNameFromUrl(url) {
45
- let pathname = '/';
46
- try {
47
- pathname = new URL(url).pathname;
48
- }
49
- catch {
50
- /* fall through to default */
51
- }
52
- const slug = pathname.replace(/^\/+|\/+$/g, '').replace(/\//g, '-');
53
- return slug || 'home';
54
- }
44
+ const pageName_1 = require("./pageName");
45
+ var pageName_2 = require("./pageName");
46
+ Object.defineProperty(exports, "pageNameFromUrl", { enumerable: true, get: function () { return pageName_2.pageNameFromUrl; } });
55
47
  async function mapUrl(url, options = {}) {
56
- const pageName = options.pageName || pageNameFromUrl(url);
48
+ const pageName = options.pageName || (0, pageName_1.pageNameFromUrl)(url);
57
49
  const waitUntil = options.waitUntil || 'networkidle';
58
50
  const timeout = options.timeout ?? 30000;
59
51
  const { browser, using } = await (0, launcher_1.launchBrowser)(options);
@@ -1 +1 @@
1
- {"version":3,"file":"mapUrl.js","sourceRoot":"","sources":["../src/mapUrl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0CASC;AAED,wBAmCC;AAGD,kBAEC;AA9FD,2CAA6B;AAC7B,+BAA4F;AAC5F,yCAA0C;AAC1C,qCAAsC;AACtC,yCAA0D;AAuC1D,SAAgB,eAAe,CAAC,GAAW;IACzC,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,UAAyB,EAAE;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAEzC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;YACtC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAoB,MAAM,IAAA,gCAA0B,EAAC,IAAI,CAAC,CAAC;QACzE,MAAM,OAAO,GAAgB;YAC3B,IAAI,EAAE,QAAQ;YACd,GAAG;YACH,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,QAAQ;SACT,CAAC;QAEF,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAA,mBAAU,GAAE,CAAC;YAC3C,MAAM,CAAC,QAAQ,GAAG,IAAA,iBAAW,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,GAAG,IAAA,uBAAY,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,SAAgB,GAAG,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"mapUrl.js","sourceRoot":"","sources":["../src/mapUrl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,wBAmCC;AAGD,kBAEC;AAtFD,2CAA6B;AAC7B,+BAA4F;AAC5F,yCAA0C;AAC1C,qCAAsC;AACtC,yCAA0D;AAC1D,yCAA6C;AAuC7C,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAEjB,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,UAAyB,EAAE;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAA,0BAAe,EAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAEzC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;YACtC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAoB,MAAM,IAAA,gCAA0B,EAAC,IAAI,CAAC,CAAC;QACzE,MAAM,OAAO,GAAgB;YAC3B,IAAI,EAAE,QAAQ;YACd,GAAG;YACH,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,QAAQ;SACT,CAAC;QAEF,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAA,mBAAU,GAAE,CAAC;YAC3C,MAAM,CAAC,QAAQ,GAAG,IAAA,iBAAW,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,GAAG,IAAA,uBAAY,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,SAAgB,GAAG,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { IaQaConfig } from './config';
2
+ /**
3
+ * URL → logical page name, the one resolver every capture path must share.
4
+ *
5
+ * `diff` pairs baseline/ and mapping/ by filename, so two features that name the
6
+ * same page differently produce contracts that never meet: every page becomes a
7
+ * phantom lost/new pair and the diff is garbage. The healer, `map`, and run-time
8
+ * capture all funnel through here for exactly that reason.
9
+ */
10
+ export declare function pageNameFromUrl(url: string): string;
11
+ export type PageNameResolution =
12
+ /** The URL is a configured page — use the name its contract already has. */
13
+ {
14
+ kind: 'configured';
15
+ name: string;
16
+ }
17
+ /** No config, or the URL is not in it — a slug is the best available name. */
18
+ | {
19
+ kind: 'unconfigured';
20
+ name: string;
21
+ }
22
+ /**
23
+ * The URL is claimed by configured views reached through `steps`. Several of
24
+ * them share it, so the URL alone cannot say which one is on screen — naming
25
+ * a contract here would be a guess written to disk.
26
+ */
27
+ | {
28
+ kind: 'steps';
29
+ candidates: string[];
30
+ };
31
+ export declare function resolvePageName(url: string, config: IaQaConfig | null): PageNameResolution;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pageNameFromUrl = pageNameFromUrl;
4
+ exports.resolvePageName = resolvePageName;
5
+ /**
6
+ * URL → logical page name, the one resolver every capture path must share.
7
+ *
8
+ * `diff` pairs baseline/ and mapping/ by filename, so two features that name the
9
+ * same page differently produce contracts that never meet: every page becomes a
10
+ * phantom lost/new pair and the diff is garbage. The healer, `map`, and run-time
11
+ * capture all funnel through here for exactly that reason.
12
+ */
13
+ function pageNameFromUrl(url) {
14
+ let pathname = '/';
15
+ try {
16
+ pathname = new URL(url).pathname;
17
+ }
18
+ catch {
19
+ /* fall through to default */
20
+ }
21
+ const slug = pathname.replace(/^\/+|\/+$/g, '').replace(/\//g, '-');
22
+ return slug || 'home';
23
+ }
24
+ function resolvePageName(url, config) {
25
+ if (!config)
26
+ return { kind: 'unconfigured', name: pageNameFromUrl(url) };
27
+ const currentPath = new URL(url).pathname.replace(/\/+$/, '') || '/';
28
+ const samePath = (p) => (new URL(p.url, config.baseUrl).pathname.replace(/\/+$/, '') || '/') === currentPath;
29
+ const match = config.pages.find((p) => !p.steps?.length && samePath(p));
30
+ if (match)
31
+ return { kind: 'configured', name: match.name };
32
+ const behindSteps = config.pages.filter((p) => p.steps?.length && samePath(p));
33
+ if (behindSteps.length > 0) {
34
+ return { kind: 'steps', candidates: behindSteps.map((p) => p.name) };
35
+ }
36
+ return { kind: 'unconfigured', name: pageNameFromUrl(url) };
37
+ }
38
+ //# sourceMappingURL=pageName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageName.js","sourceRoot":"","sources":["../src/pageName.ts"],"names":[],"mappings":";;AAWA,0CASC;AAcD,0CAgBC;AAhDD;;;;;;;GAOG;AAEH,SAAgB,eAAe,CAAC,GAAW;IACzC,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC;AAcD,SAAgB,eAAe,CAAC,GAAW,EAAE,MAAyB;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IAEzE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IACrE,MAAM,QAAQ,GAAG,CAAC,CAAa,EAAE,EAAE,CACjC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,WAAW,CAAC;IAEvF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAE3D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Capture the page contracts *during* the user's own test run.
3
+ *
4
+ * `map` only reaches what a URL plus a scripted login can reach. The user's
5
+ * suite already walks the rich states — post-login, modals, wizards — with
6
+ * credentials it already manages. One line in a spec borrows that walk:
7
+ *
8
+ * import { test, expect } from '@ia-qa/self-healing/capture';
9
+ *
10
+ * (or `withCapture(myExtendedTest)` for suites with their own fixtures).
11
+ *
12
+ * Inert unless IAQA_CAPTURE=1 — a normal run pays nothing. When armed, each
13
+ * worker records what it saw into `.ia-qa/mapping/.capture/worker-<n>.json`;
14
+ * the next CLI verb merges the shards into real contracts (see captureMerge.ts).
15
+ * Nothing here may ever fail or slow the user's suite beyond the extraction
16
+ * itself: every capture path swallows its own errors.
17
+ */
18
+ export declare const CAPTURE_ENV = "IAQA_CAPTURE";
19
+ export declare function captureEnabled(): boolean;
20
+ /**
21
+ * Wrap an already-extended `test` (for suites with their own fixtures).
22
+ * Returns it untouched when capture is not armed.
23
+ */
24
+ export declare function withCapture<T>(baseTest: T): T;
25
+ /** Drop-in for `import { test, expect } from '@playwright/test'`. */
26
+ export declare const test: unknown;
27
+ export declare const expect: unknown;
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.expect = exports.test = exports.CAPTURE_ENV = void 0;
37
+ exports.captureEnabled = captureEnabled;
38
+ exports.withCapture = withCapture;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const config_1 = require("../config");
42
+ const aom_1 = require("../aom");
43
+ const pageName_1 = require("../pageName");
44
+ const captureMerge_1 = require("../captureMerge");
45
+ /**
46
+ * Capture the page contracts *during* the user's own test run.
47
+ *
48
+ * `map` only reaches what a URL plus a scripted login can reach. The user's
49
+ * suite already walks the rich states — post-login, modals, wizards — with
50
+ * credentials it already manages. One line in a spec borrows that walk:
51
+ *
52
+ * import { test, expect } from '@ia-qa/self-healing/capture';
53
+ *
54
+ * (or `withCapture(myExtendedTest)` for suites with their own fixtures).
55
+ *
56
+ * Inert unless IAQA_CAPTURE=1 — a normal run pays nothing. When armed, each
57
+ * worker records what it saw into `.ia-qa/mapping/.capture/worker-<n>.json`;
58
+ * the next CLI verb merges the shards into real contracts (see captureMerge.ts).
59
+ * Nothing here may ever fail or slow the user's suite beyond the extraction
60
+ * itself: every capture path swallows its own errors.
61
+ */
62
+ exports.CAPTURE_ENV = 'IAQA_CAPTURE';
63
+ function captureEnabled() {
64
+ return process.env[exports.CAPTURE_ENV] === '1';
65
+ }
66
+ const DEBOUNCE_MS = 300;
67
+ const state = { config: null, configLoaded: false, pages: new Map() };
68
+ function config() {
69
+ if (!state.configLoaded) {
70
+ state.configLoaded = true;
71
+ try {
72
+ state.config = (0, config_1.loadConfig)();
73
+ }
74
+ catch {
75
+ state.config = null;
76
+ }
77
+ }
78
+ return state.config;
79
+ }
80
+ async function capturePage(page) {
81
+ try {
82
+ const url = page.url();
83
+ if (!url || url === 'about:blank')
84
+ return;
85
+ const resolved = (0, pageName_1.resolvePageName)(url, config());
86
+ // Step-reached views share a URL, so a run-time capture cannot know which
87
+ // one it is looking at — naming a contract here would be a guess. `map`
88
+ // stays the path for those.
89
+ if (resolved.kind === 'steps')
90
+ return;
91
+ const elements = await (0, aom_1.extractInteractiveElements)(page);
92
+ if (elements.length === 0)
93
+ return;
94
+ const prev = state.pages.get(resolved.name);
95
+ state.pages.set(resolved.name, {
96
+ url,
97
+ elements: prev ? (0, captureMerge_1.unionElements)(prev.elements, elements) : elements,
98
+ });
99
+ }
100
+ catch {
101
+ /* the user's test must never fail because of the capture */
102
+ }
103
+ }
104
+ function writeShard() {
105
+ try {
106
+ if (state.pages.size === 0)
107
+ return;
108
+ const dir = (0, captureMerge_1.captureDir)();
109
+ fs.mkdirSync(dir, { recursive: true });
110
+ const worker = process.env.TEST_WORKER_INDEX ?? String(process.pid);
111
+ const pages = Array.from(state.pages, ([name, c]) => ({
112
+ page: name,
113
+ url: c.url,
114
+ elements: c.elements,
115
+ }));
116
+ fs.writeFileSync(path.join(dir, `worker-${worker}.json`), JSON.stringify({ pages }, null, 2) + '\n', 'utf8');
117
+ }
118
+ catch {
119
+ /* a failed shard write loses one worker's capture, never the test run */
120
+ }
121
+ }
122
+ /**
123
+ * Wrap an already-extended `test` (for suites with their own fixtures).
124
+ * Returns it untouched when capture is not armed.
125
+ */
126
+ function withCapture(baseTest) {
127
+ if (!captureEnabled())
128
+ return baseTest;
129
+ return baseTest.extend({
130
+ page: async ({ page }, use) => {
131
+ let timer;
132
+ const onNavigated = (frame) => {
133
+ try {
134
+ if (frame !== page.mainFrame())
135
+ return;
136
+ if (timer)
137
+ clearTimeout(timer);
138
+ // Debounced: SPAs navigate in bursts, and the settled state is the one
139
+ // worth a contract.
140
+ timer = setTimeout(() => void capturePage(page), DEBOUNCE_MS);
141
+ }
142
+ catch {
143
+ /* never the test's problem */
144
+ }
145
+ };
146
+ page.on('framenavigated', onNavigated);
147
+ try {
148
+ await use(page);
149
+ }
150
+ finally {
151
+ if (timer)
152
+ clearTimeout(timer);
153
+ try {
154
+ page.off('framenavigated', onNavigated);
155
+ }
156
+ catch {
157
+ /* page may already be closed */
158
+ }
159
+ // Final state — the modal or wizard step the test ended on, which no
160
+ // navigation event will ever announce.
161
+ await capturePage(page);
162
+ writeShard();
163
+ }
164
+ },
165
+ });
166
+ }
167
+ function playwrightTest() {
168
+ // Resolved from the suite's own directory first: the `test` object must be the
169
+ // *same instance* the consumer's runner uses, or Playwright sees fixtures from
170
+ // a foreign runner. With this package npm-linked, a plain require() would walk
171
+ // up from the package's real path and pick a different Playwright.
172
+ for (const id of ['@playwright/test', 'playwright/test']) {
173
+ try {
174
+ return require(require.resolve(id, { paths: [process.cwd(), __dirname] }));
175
+ }
176
+ catch {
177
+ /* try the next id */
178
+ }
179
+ }
180
+ throw new Error(`@ia-qa/self-healing/capture needs Playwright's test runner ('@playwright/test' or ` +
181
+ `'playwright' >= 1.40) installed in the project running the suite.`);
182
+ }
183
+ const pw = playwrightTest();
184
+ /** Drop-in for `import { test, expect } from '@playwright/test'`. */
185
+ exports.test = withCapture(pw.test);
186
+ exports.expect = pw.expect;
187
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/playwright/capture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,wCAEC;AAsED,kCAiCC;AArID,uCAAyB;AACzB,2CAA6B;AAE7B,sCAAmD;AACnD,gCAAmE;AACnE,0CAA8C;AAC9C,kDAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AAEU,QAAA,WAAW,GAAG,cAAc,CAAC;AAE1C,SAAgB,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAW,CAAC,KAAK,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,WAAW,GAAG,GAAG,CAAC;AAQxB,MAAM,KAAK,GAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAEnF,SAAS,MAAM;IACb,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAU;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO;QAC1C,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,0EAA0E;QAC1E,wEAAwE;QACxE,4BAA4B;QAC5B,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,gCAA0B,EAAC,IAAI,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC7B,GAAG;YACH,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAA,4BAAa,EAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;SACnE,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,MAAM,GAAG,GAAG,IAAA,yBAAU,GAAE,CAAC;QACzB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,KAAK,GAAuB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC,CAAC;QACJ,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,MAAM,OAAO,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACzC,MAAM,CACP,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAI,QAAW;IACxC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAQ,QAAoD,CAAC,MAAM,CAAC;QAClE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAkB,EAAE,GAAkC,EAAE,EAAE;YAC3E,IAAI,KAAgD,CAAC;YACrD,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;gBACnC,IAAI,CAAC;oBACH,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;wBAAE,OAAO;oBACvC,IAAI,KAAK;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,uEAAuE;oBACvE,oBAAoB;oBACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC;oBACH,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,gCAAgC;gBAClC,CAAC;gBACD,qEAAqE;gBACrE,uCAAuC;gBACvC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxB,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc;IACrB,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,mEAAmE;IACnE,KAAK,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oFAAoF;QAClF,mEAAmE,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;AAE5B,qEAAqE;AACxD,QAAA,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC"}
@@ -7,6 +7,7 @@ exports.inferPageName = inferPageName;
7
7
  const config_1 = require("../config");
8
8
  const aom_1 = require("../aom");
9
9
  const match_1 = require("../browser/match");
10
+ const pageName_1 = require("../pageName");
10
11
  const DEFAULT_TIMEOUT = 5000;
11
12
  async function aiClick(page, selector, options = {}) {
12
13
  const timeout = options.timeout ?? DEFAULT_TIMEOUT;
@@ -67,22 +68,20 @@ async function llmResolverStub(_target, _candidates) {
67
68
  return null;
68
69
  }
69
70
  function inferPageName(page) {
70
- const currentPath = new URL(page.url()).pathname.replace(/\/+$/, '') || '/';
71
- const config = (0, config_1.loadConfig)();
72
- const samePath = (p) => (new URL(p.url, config.baseUrl).pathname.replace(/\/+$/, '') || '/') === currentPath;
73
- // Targets with steps share their URL with the page they start from, so a URL cannot say
74
- // which of them is on screen. Guessing would load one view's contract to heal another —
75
- // silently, and matching against the wrong element list. Only the plain target is
76
- // addressable here; the rest are reachable by name.
77
- const match = config.pages.find((p) => !p.steps?.length && samePath(p));
78
- if (match)
79
- return match.name;
80
- const behindSteps = config.pages.filter((p) => p.steps?.length && samePath(p));
81
- if (behindSteps.length > 0) {
82
- throw new Error(`Cannot infer the mapping name for ${page.url()}: ${behindSteps.length} configured ` +
83
- `${behindSteps.length === 1 ? 'view shares' : 'views share'} this URL and are reached by ` +
71
+ // Resolution is shared with run-time capture (`resolvePageName`): the healer and
72
+ // the capture naming the same URL differently would produce contracts that
73
+ // never pair up in a diff. Only the consequences differ capture skips or
74
+ // slugs, the healer must refuse out loud, because healing against the wrong
75
+ // contract is silent.
76
+ const resolved = (0, pageName_1.resolvePageName)(page.url(), (0, config_1.loadConfig)());
77
+ if (resolved.kind === 'configured')
78
+ return resolved.name;
79
+ if (resolved.kind === 'steps') {
80
+ const names = resolved.candidates;
81
+ throw new Error(`Cannot infer the mapping name for ${page.url()}: ${names.length} configured ` +
82
+ `${names.length === 1 ? 'view shares' : 'views share'} this URL and are reached by ` +
84
83
  `clicking, so the URL alone cannot say which one you are on. Pass the view explicitly — ` +
85
- `{ page: '${behindSteps[0].name}' } — choosing from: ${behindSteps.map((p) => p.name).join(', ')}.`);
84
+ `{ page: '${names[0]}' } — choosing from: ${names.join(', ')}.`);
86
85
  }
87
86
  throw new Error(`Cannot infer the mapping name for ${page.url()} — no entry in config.pages matches this path. Pass { page: '<name>' } explicitly.`);
88
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"healer.js","sourceRoot":"","sources":["../../src/playwright/healer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"healer.js","sourceRoot":"","sources":["../../src/playwright/healer.ts"],"names":[],"mappings":"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"}