gestament 0.4.0 → 0.5.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 (71) hide show
  1. package/README.md +20 -5
  2. package/dist/displaySession.d.ts +2 -2
  3. package/dist/displaySession.d.ts.map +1 -1
  4. package/dist/element.d.ts +2 -2
  5. package/dist/errors.d.ts +2 -2
  6. package/dist/generated/packageMetadata.d.ts +4 -4
  7. package/dist/gestament-config.d.ts +2 -2
  8. package/dist/gestament-launcher-driver.cjs +91 -5
  9. package/dist/gestament-launcher-driver.cjs.map +1 -1
  10. package/dist/gestament-launcher-driver.d.ts +2 -2
  11. package/dist/gestament-launcher-driver.mjs +91 -5
  12. package/dist/gestament-launcher-driver.mjs.map +1 -1
  13. package/dist/gestament-tray-host.cjs +9 -1
  14. package/dist/gestament-tray-host.cjs.map +1 -1
  15. package/dist/gestament-tray-host.d.ts +2 -2
  16. package/dist/gestament-tray-host.mjs +9 -1
  17. package/dist/gestament-tray-host.mjs.map +1 -1
  18. package/dist/gestament-xvfb-pool-probe.cjs +1 -1
  19. package/dist/gestament-xvfb-pool-probe.d.ts +2 -2
  20. package/dist/gestament-xvfb-pool-probe.mjs +1 -1
  21. package/dist/gestament-xvfb-worker.d.ts +2 -2
  22. package/dist/gestament-xvfb.d.ts +2 -2
  23. package/dist/gestament.cjs +279 -0
  24. package/dist/gestament.cjs.map +1 -0
  25. package/dist/gestament.d.ts +29 -0
  26. package/dist/gestament.d.ts.map +1 -0
  27. package/dist/gestament.mjs +278 -0
  28. package/dist/gestament.mjs.map +1 -0
  29. package/dist/index.cjs +1 -1
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.mjs +1 -1
  32. package/dist/{launchGtkApp-BfELuV-H.cjs → launchGtkApp-CzYcrc9f.cjs} +693 -76
  33. package/dist/launchGtkApp-CzYcrc9f.cjs.map +1 -0
  34. package/dist/{launchGtkApp-Bst1BFbD.js → launchGtkApp-EI6OIpPI.js} +691 -74
  35. package/dist/launchGtkApp-EI6OIpPI.js.map +1 -0
  36. package/dist/launchGtkApp.d.ts +2 -2
  37. package/dist/launchGtkApp.d.ts.map +1 -1
  38. package/dist/launcherDriverProtocol.d.ts +26 -4
  39. package/dist/launcherDriverProtocol.d.ts.map +1 -1
  40. package/dist/{native-C6MsIBNF.js → native-DlCBBWlV.js} +2 -2
  41. package/dist/native-DlCBBWlV.js.map +1 -0
  42. package/dist/{native-BUWDWMBB.cjs → native-Kfm95Uxw.cjs} +6 -6
  43. package/dist/native-Kfm95Uxw.cjs.map +1 -0
  44. package/dist/native.d.ts +2 -2
  45. package/dist/output.d.ts +27 -0
  46. package/dist/output.d.ts.map +1 -0
  47. package/dist/packageMetadata-CewXH0iF.cjs +4 -0
  48. package/dist/packageMetadata-CewXH0iF.cjs.map +1 -0
  49. package/dist/packageMetadata-DjxyJCJm.js +5 -0
  50. package/dist/packageMetadata-DjxyJCJm.js.map +1 -0
  51. package/dist/prerequisites.d.ts +2 -2
  52. package/dist/testing.d.ts +2 -2
  53. package/dist/tray.d.ts +2 -2
  54. package/dist/types.d.ts +183 -3
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/wait.d.ts +2 -2
  57. package/package.json +8 -7
  58. package/prebuilds/linux-arm/gtk3/node.napi.armv7.glibc.node +0 -0
  59. package/prebuilds/linux-arm/gtk4/node.napi.armv7.glibc.node +0 -0
  60. package/prebuilds/linux-arm64/gtk3/node.napi.glibc.node +0 -0
  61. package/prebuilds/linux-arm64/gtk4/node.napi.glibc.node +0 -0
  62. package/prebuilds/linux-ia32/gtk3/node.napi.glibc.node +0 -0
  63. package/prebuilds/linux-ia32/gtk4/node.napi.glibc.node +0 -0
  64. package/prebuilds/linux-riscv64/gtk3/node.napi.glibc.node +0 -0
  65. package/prebuilds/linux-riscv64/gtk4/node.napi.glibc.node +0 -0
  66. package/prebuilds/linux-x64/gtk3/node.napi.glibc.node +0 -0
  67. package/prebuilds/linux-x64/gtk4/node.napi.glibc.node +0 -0
  68. package/dist/launchGtkApp-BfELuV-H.cjs.map +0 -1
  69. package/dist/launchGtkApp-Bst1BFbD.js.map +0 -1
  70. package/dist/native-BUWDWMBB.cjs.map +0 -1
  71. package/dist/native-C6MsIBNF.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;AAOA,gEAAgE;AAChE,MAAM,MAAM,sBAAsB,GAC9B,YAAY,GACZ,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,GAClB,eAAe,GACf,SAAS,GACT,uBAAuB,CAAC;AAE5B,8CAA8C;AAC9C,MAAM,WAAW,kBAAmB,SAAQ,KAAK;IAC/C,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAID;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;CAC5C;AAID;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,GACP,MAAM,GACN,UAAU,GACV,QAAQ,GACR,OAAO,GACP,cAAc,GACd,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,UAAU,GACV,MAAM,GACN,UAAU,GACV,OAAO,GACP,WAAW,GACX,OAAO,GACP,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAE7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAE7B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK,SAAS,gBAAgB;IAC/D;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAEhE;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B,CAC1C,KAAK,SAAS,gBAAgB,CAC9B,SAAQ,iBAAiB,CAAC,KAAK,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtD;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,CACxB,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBACf,SAAQ,UAAU,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;IACvD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE1D;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,mBACf,SAAQ,UAAU,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;IACvD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU,EAAE,YAAY;IAChE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,UAAU,EAAE,cAAc;IACjE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,UAAU,EAAE,cAAc;IACjE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,cAAc;IAChE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBACf,SAAQ,UAAU,EAAE,YAAY,EAAE,YAAY;IAC9C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBACf,SAAQ,UAAU,EAAE,YAAY,EAAE,YAAY;IAC9C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eACf,SAAQ,UAAU,EAAE,YAAY,EAAE,YAAY;IAC9C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBACf,SAAQ,UAAU,EAAE,YAAY,EAAE,YAAY;IAC9C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAElC;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU,EAAE,eAAe;IACnE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBACf,SAAQ,UAAU,EAAE,eAAe,EAAE,oBAAoB;IACzD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU,EAAE,eAAe;IACxE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU,EAAE,YAAY;IAClE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU,EAAE,YAAY;IAClE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,kBACf,SACE,UAAU,EACV,YAAY,EACZ,2BAA2B,CAAC,sBAAsB,CAAC;IACrD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cACf,SAAQ,UAAU,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;IACnE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3E;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,UAAU,EAAE,iBAAiB;IACpE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,CACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,cACf,SAAQ,UAAU,EAAE,iBAAiB,CAAC,kBAAkB,CAAC;IACzD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,sBAAsB,GACtB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,eAAe,GACf,mBAAmB,GACnB,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,CAAC,IAAI,SAAS,aAAa,IAAI,OAAO,CAChE,gBAAgB,EAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CACxB,CAAC;AAIF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IACE;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,GACD;IACE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,aAAa,EAAE,YAAY;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAChE;AAID;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,eAAe;IACjD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;CAC3C;AAID;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,6EAA6E;AAC7E,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrE;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,MAAO,SAAQ,UAAU,EAAE,aAAa;IACvD;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5D;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAE7E;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAE5E;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,CACrB,QAAQ,EAAE,mBAAmB,KAC1B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAE9E;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9C;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9E;;;;;;;OAOG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAErE;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAEtD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,CACf,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,2BAA2B,KAClC,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB"}
package/dist/wait.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: gestament
3
- * version: 0.4.0
3
+ * version: 0.5.0
4
4
  * description: TypeScript based test driver for GTK
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/gestament.git
8
- * git.commit.hash: 99e5b39d6b18c635721584cf2d8b9381d0b1df66
8
+ * git.commit.hash: 368fd995a6a10f20aea97cb0389ac3e12cfbedb3
9
9
  */
10
10
 
11
11
  /** Options shared by GTK wait helpers. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gestament",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "TypeScript based test driver for GTK",
5
5
  "keywords": [
6
6
  "test",
@@ -34,6 +34,7 @@
34
34
  }
35
35
  },
36
36
  "bin": {
37
+ "gestament": "./dist/gestament.cjs",
37
38
  "gestament-config": "./dist/gestament-config.cjs",
38
39
  "gestament-xvfb": "./dist/gestament-xvfb.cjs"
39
40
  },
@@ -75,18 +76,18 @@
75
76
  },
76
77
  "git": {
77
78
  "tags": [
78
- "0.4.0"
79
+ "0.5.0"
79
80
  ],
80
81
  "branches": [
81
82
  "main"
82
83
  ],
83
84
  "commit": {
84
- "hash": "99e5b39d6b18c635721584cf2d8b9381d0b1df66",
85
- "shortHash": "99e5b39",
86
- "date": "2026-05-20T16:18:27+09:00",
85
+ "hash": "368fd995a6a10f20aea97cb0389ac3e12cfbedb3",
86
+ "shortHash": "368fd99",
87
+ "date": "2026-05-21T19:27:29+09:00",
87
88
  "message": "Merge branch 'develop'"
88
89
  },
89
- "version": "0.4.0"
90
+ "version": "0.5.0"
90
91
  },
91
- "buildDate": "2026-05-21T09:50:46+09:00"
92
+ "buildDate": "2026-05-22T01:40:28+09:00"
92
93
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"launchGtkApp-BfELuV-H.cjs","sources":["../src/displaySession.ts","../src/element.ts","../src/tray.ts","../src/launchGtkApp.ts"],"sourcesContent":["// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport { spawn, type ChildProcessByStdio } from 'node:child_process';\nimport { existsSync, mkdtempSync, rmSync } from 'node:fs';\nimport {\n createConnection,\n createServer,\n type Server,\n type Socket,\n} from 'node:net';\nimport { tmpdir } from 'node:os';\nimport { dirname, join, resolve } from 'node:path';\nimport type { Readable } from 'node:stream';\nimport { fileURLToPath } from 'node:url';\n\nimport {\n createGtkAppExitedError,\n createGtkInvalidArgumentError,\n createGtkOperationFailedError,\n} from './errors';\nimport { currentWaitDeadlineMs } from './wait';\nimport { appendPrerequisiteInstallHint } from './prerequisites';\nimport type {\n DriverAppRef,\n DriverCommand,\n DriverEnvironmentPayload,\n DriverElementRef,\n DriverErrorResponse,\n DriverLaunchPayload,\n DriverReadyMessage,\n DriverRequest,\n DriverResponse,\n DriverSuccessResponse,\n DriverTrayItemRef,\n SerializedDriverError,\n WireCapture,\n WireGtkAppEnvironment,\n WireImageInfo,\n} from './launcherDriverProtocol';\nimport type {\n GtkApp,\n GtkAppDisplay,\n GtkAppEnvironment,\n GtkAppLauncher,\n GtkAppLauncherOptions,\n GtkCapture,\n GtkCaptureBounds,\n GtkElementInfo,\n GtkImageInfo,\n GtkTrayItem,\n GtkTrayItemMetadata,\n GtkTrayItemSelector,\n GtkValueInfo,\n GtkWidgetElement,\n GtkWindowResizeHints,\n GtkX11WindowInfo,\n GtkXvfbPool,\n} from './types';\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\ninterface XvfbSessionOptions {\n readonly screen: string;\n readonly trayHost: boolean;\n readonly pool: ResolvedXvfbPool | undefined;\n}\n\ninterface EffectiveDisplay {\n readonly kind: 'host' | 'xvfb';\n readonly hostDisplay: string | undefined;\n readonly hostWaylandDisplay: string | undefined;\n readonly xvfb: XvfbSessionOptions | undefined;\n}\n\ninterface HostDisplayState {\n readonly display: string | undefined;\n readonly waylandDisplay: string | undefined;\n}\n\ninterface DriverSession {\n readonly request: <Result>(\n command: DriverCommand,\n payload: unknown\n ) => Promise<Result>;\n readonly release: () => Promise<void>;\n readonly terminate: () => Promise<void>;\n}\n\ninterface PooledXvfb {\n readonly child: ChildProcessByStdio<null, Readable, Readable>;\n readonly display: string;\n readonly displayNumber: number;\n readonly key: string;\n readonly screen: string;\n readonly stderr: string[];\n readonly stdout: string[];\n lastUsedAt: number;\n}\n\ninterface PooledAllSession {\n readonly key: string;\n readonly session: DriverSession;\n readonly xvfb: PooledXvfb;\n lastUsedAt: number;\n}\n\ninterface XvfbPoolLimits {\n readonly maxIdlePerKey: number;\n readonly maxIdleTotal: number;\n}\n\ninterface ResolvedXvfbPool extends XvfbPoolLimits {\n readonly type: 'xvfb' | 'all';\n}\n\ninterface XvfbProbeResult {\n readonly bounds: {\n readonly height: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n };\n readonly mappedWindowCount: number;\n}\n\ninterface DriverResetResult {\n readonly appCount: number;\n readonly elementCount: number;\n readonly imageInfoCount: number;\n readonly trayItemCount: number;\n}\n\ninterface DriverSessionPoolOptions {\n readonly allKey: string | undefined;\n readonly limits: XvfbPoolLimits;\n readonly mode: 'none' | 'xvfb' | 'all';\n readonly xvfb: PooledXvfb | undefined;\n readonly allowedMappedWindowCount: number;\n}\n\ninterface StartupConnection {\n readonly socket: Socket;\n readonly bufferedInput: string;\n}\n\ninterface PendingRequest {\n readonly reject: (error: Error) => void;\n readonly resolve: (value: unknown) => void;\n}\n\ninterface DriverProcess {\n readonly child: ChildProcessByStdio<null, Readable, Readable>;\n readonly commandLine: string;\n readonly stderr: string[];\n readonly stdout: string[];\n}\n\nconst defaultDisplay: GtkAppDisplay = 'xvfb';\nconst defaultGSettings = 'memory';\nconst defaultTheme = 'Adwaita';\nconst defaultXvfbScreen = '1280x720x24';\nconst defaultXvfbTrayHost = true;\nconst defaultXvfbPoolMaxIdlePerKey = 1;\nconst defaultXvfbPoolMaxIdleTotal = 4;\nconst screenPattern = /^[1-9][0-9]*x[1-9][0-9]*x[1-9][0-9]*$/;\nconst sessionStartupTimeoutMs = 30_000;\nconst sessionReleaseTimeoutMs = 5_000;\nconst xvfbStartupTimeoutMs = 10_000;\nconst xvfbPoolProbeTimeoutMs = 5_000;\nconst firstPooledDisplayNumber = 90;\nconst lastPooledDisplayNumber = 590;\nconst sessionOwnedEnvironmentKeys = [\n 'DISPLAY',\n 'WAYLAND_DISPLAY',\n 'GDK_BACKEND',\n 'DBUS_SESSION_BUS_ADDRESS',\n 'AT_SPI_BUS_ADDRESS',\n 'NO_AT_BRIDGE',\n 'XAUTHORITY',\n 'GESTAMENT_XVFB_ACTIVE',\n 'XDG_SESSION_TYPE',\n] as const;\n\nlet socketCounter = 0;\nconst leasedDisplayNumbers = new Set<number>();\nconst idleXvfbByKey = new Map<string, PooledXvfb[]>();\nconst idleAllByKey = new Map<string, PooledAllSession[]>();\nconst directXvfbs = new Set<PooledXvfb>();\nlet poolCleanupInstalled = false;\n\nconst hasValue = (value: string | undefined): value is string =>\n value !== undefined && value.length > 0;\n\nconst delay = (timeoutMs: number): Promise<void> =>\n new Promise<void>((resolveDelay) => {\n setTimeout(resolveDelay, timeoutMs);\n });\n\nconst appendOutput = (lines: string[], chunk: Buffer): void => {\n lines.push(chunk.toString('utf8'));\n if (lines.length > 40) {\n lines.splice(0, lines.length - 40);\n }\n};\n\nconst unrefHandle = (handle: unknown): void => {\n const maybeRefHandle = handle as { readonly unref?: unknown };\n if (typeof maybeRefHandle.unref === 'function') {\n maybeRefHandle.unref();\n }\n};\n\nconst formatOutputTail = (\n stdout: readonly string[],\n stderr: readonly string[]\n): string => {\n const stdoutText = stdout.join('').trim();\n const stderrText = stderr.join('').trim();\n if (stdoutText.length === 0 && stderrText.length === 0) {\n return '';\n }\n return `\\nstdout:\\n${stdoutText}\\nstderr:\\n${stderrText}`;\n};\n\nconst getHostDisplayState = (): HostDisplayState => ({\n display: process.env.DISPLAY,\n waylandDisplay: process.env.WAYLAND_DISPLAY,\n});\n\nconst resolveHostDisplayKind = (\n state: HostDisplayState\n): 'x11' | 'wayland' | undefined => {\n if (hasValue(state.waylandDisplay)) {\n return 'wayland';\n }\n if (hasValue(state.display)) {\n return 'x11';\n }\n return undefined;\n};\n\nconst resolveDisplay = (display: GtkAppDisplay | undefined): GtkAppDisplay => {\n if (display === undefined) {\n return defaultDisplay;\n }\n if (display === 'xvfb' || display === 'host') {\n return display;\n }\n throw createGtkInvalidArgumentError(\n `display must be \"xvfb\" or \"host\": ${String(display)}`\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst resolvePoolLimit = (\n name: string,\n value: number | undefined,\n defaultValue: number\n): number => {\n if (value === undefined) {\n return defaultValue;\n }\n if (!Number.isInteger(value) || value < 0) {\n throw createGtkInvalidArgumentError(`${name} must be an integer >= 0.`);\n }\n return value;\n};\n\nconst resolveXvfbPool = (\n pool: GtkXvfbPool | undefined\n): ResolvedXvfbPool | undefined => {\n if (pool === undefined) {\n return undefined;\n }\n if (!isRecord(pool)) {\n throw createGtkInvalidArgumentError(\n 'xvfbPool must be an object with type \"xvfb\" or \"all\".'\n );\n }\n\n const { type } = pool;\n if (type !== 'xvfb' && type !== 'all') {\n throw createGtkInvalidArgumentError(\n `xvfbPool.type must be \"xvfb\" or \"all\": ${String(type)}`\n );\n }\n\n return {\n maxIdlePerKey: resolvePoolLimit(\n 'xvfbPool.maxIdlePerKey',\n pool.maxIdlePerKey,\n defaultXvfbPoolMaxIdlePerKey\n ),\n maxIdleTotal: resolvePoolLimit(\n 'xvfbPool.maxIdleTotal',\n pool.maxIdleTotal,\n defaultXvfbPoolMaxIdleTotal\n ),\n type,\n };\n};\n\nconst nonePoolLimits = (): XvfbPoolLimits => ({\n maxIdlePerKey: 0,\n maxIdleTotal: 0,\n});\n\nconst poolLimits = (pool: ResolvedXvfbPool): XvfbPoolLimits => ({\n maxIdlePerKey: pool.maxIdlePerKey,\n maxIdleTotal: pool.maxIdleTotal,\n});\n\nconst shouldRetainIdlePool = (limits: XvfbPoolLimits): boolean =>\n limits.maxIdlePerKey > 0 && limits.maxIdleTotal > 0;\n\nconst removeArrayEntry = <Entry>(\n map: Map<string, Entry[]>,\n key: string,\n entry: Entry\n): void => {\n const entries = map.get(key);\n if (entries === undefined) {\n return;\n }\n\n const index = entries.indexOf(entry);\n if (index >= 0) {\n entries.splice(index, 1);\n }\n if (entries.length === 0) {\n map.delete(key);\n }\n};\n\nconst pushArrayEntry = <Entry>(\n map: Map<string, Entry[]>,\n key: string,\n entry: Entry\n): void => {\n const entries = map.get(key);\n if (entries === undefined) {\n map.set(key, [entry]);\n return;\n }\n entries.push(entry);\n};\n\nconst popArrayEntry = <Entry>(\n map: Map<string, Entry[]>,\n key: string\n): Entry | undefined => {\n const entries = map.get(key);\n if (entries === undefined) {\n return undefined;\n }\n\n const entry = entries.pop();\n if (entries.length === 0) {\n map.delete(key);\n }\n return entry;\n};\n\nconst totalArrayEntryCount = <Entry>(map: Map<string, Entry[]>): number =>\n [...map.values()].reduce((total, entries) => total + entries.length, 0);\n\nconst oldestEntry = <Entry extends { readonly lastUsedAt: number }>(\n entries: readonly Entry[]\n): Entry | undefined =>\n [...entries].sort((first, second) => first.lastUsedAt - second.lastUsedAt)[0];\n\nconst allIdleXvfbs = (): PooledXvfb[] => [...idleXvfbByKey.values()].flat();\n\nconst allIdleAllSessions = (): PooledAllSession[] =>\n [...idleAllByKey.values()].flat();\n\nconst totalIdlePoolSize = (): number =>\n totalArrayEntryCount(idleXvfbByKey) + totalArrayEntryCount(idleAllByKey);\n\nconst candidateOldestIdlePool = ():\n | { readonly kind: 'all'; readonly session: PooledAllSession }\n | { readonly kind: 'xvfb'; readonly xvfb: PooledXvfb }\n | undefined => {\n const candidates = [\n ...allIdleXvfbs().map((xvfb) => ({\n kind: 'xvfb' as const,\n lastUsedAt: xvfb.lastUsedAt,\n xvfb,\n })),\n ...allIdleAllSessions().map((session) => ({\n kind: 'all' as const,\n lastUsedAt: session.lastUsedAt,\n session,\n })),\n ].sort((first, second) => first.lastUsedAt - second.lastUsedAt);\n const candidate = candidates[0];\n if (candidate === undefined) {\n return undefined;\n }\n return candidate.kind === 'xvfb'\n ? { kind: 'xvfb', xvfb: candidate.xvfb }\n : { kind: 'all', session: candidate.session };\n};\n\nconst evictIdleXvfb = async (xvfb: PooledXvfb): Promise<void> => {\n removeArrayEntry(idleXvfbByKey, xvfb.key, xvfb);\n await terminateXvfb(xvfb);\n};\n\nconst evictIdleAllSession = async (\n session: PooledAllSession\n): Promise<void> => {\n removeArrayEntry(idleAllByKey, session.key, session);\n await session.session.terminate();\n};\n\nconst evictIdlePools = async (maxIdleTotal: number): Promise<void> => {\n while (totalIdlePoolSize() > maxIdleTotal) {\n const candidate = candidateOldestIdlePool();\n if (candidate === undefined) {\n return;\n }\n if (candidate.kind === 'xvfb') {\n await evictIdleXvfb(candidate.xvfb);\n } else {\n await evictIdleAllSession(candidate.session);\n }\n }\n};\n\nconst trimIdleXvfbKey = async (\n key: string,\n maxIdlePerKey: number\n): Promise<void> => {\n while ((idleXvfbByKey.get(key)?.length ?? 0) > maxIdlePerKey) {\n const entry = oldestEntry(idleXvfbByKey.get(key) ?? []);\n if (entry === undefined) {\n return;\n }\n await evictIdleXvfb(entry);\n }\n};\n\nconst trimIdleAllKey = async (\n key: string,\n maxIdlePerKey: number\n): Promise<void> => {\n while ((idleAllByKey.get(key)?.length ?? 0) > maxIdlePerKey) {\n const entry = oldestEntry(idleAllByKey.get(key) ?? []);\n if (entry === undefined) {\n return;\n }\n await evictIdleAllSession(entry);\n }\n};\n\nconst retainIdleXvfb = async (\n xvfb: PooledXvfb,\n limits: XvfbPoolLimits\n): Promise<void> => {\n if (!shouldRetainIdlePool(limits)) {\n await terminateXvfb(xvfb);\n return;\n }\n\n xvfb.lastUsedAt = Date.now();\n pushArrayEntry(idleXvfbByKey, xvfb.key, xvfb);\n await trimIdleXvfbKey(xvfb.key, limits.maxIdlePerKey);\n await evictIdlePools(limits.maxIdleTotal);\n};\n\nconst retainIdleAllSession = async (\n session: PooledAllSession,\n limits: XvfbPoolLimits\n): Promise<void> => {\n if (!shouldRetainIdlePool(limits)) {\n await session.session.terminate();\n return;\n }\n\n session.lastUsedAt = Date.now();\n session.xvfb.lastUsedAt = session.lastUsedAt;\n pushArrayEntry(idleAllByKey, session.key, session);\n await trimIdleAllKey(session.key, limits.maxIdlePerKey);\n await evictIdlePools(limits.maxIdleTotal);\n};\n\nconst emptyDriverSessionPoolOptions = (): DriverSessionPoolOptions => ({\n allKey: undefined,\n allowedMappedWindowCount: 0,\n limits: nonePoolLimits(),\n mode: 'none',\n xvfb: undefined,\n});\n\nconst resolveXvfbOptions = (\n options: GtkAppLauncherOptions\n): XvfbSessionOptions => {\n const screen = options.xvfbScreen ?? defaultXvfbScreen;\n if (!screenPattern.test(screen)) {\n throw createGtkInvalidArgumentError(\n `xvfbScreen must be WIDTHxHEIGHTxDEPTH: ${screen}`\n );\n }\n\n return {\n pool: resolveXvfbPool(options.xvfbPool),\n screen,\n trayHost: options.xvfbTrayHost ?? defaultXvfbTrayHost,\n };\n};\n\nconst resolveEffectiveDisplay = (\n display: GtkAppDisplay,\n xvfb: XvfbSessionOptions\n): EffectiveDisplay => {\n if (display === 'xvfb') {\n return {\n hostDisplay: undefined,\n hostWaylandDisplay: undefined,\n kind: 'xvfb',\n xvfb,\n };\n }\n\n const hostDisplay = getHostDisplayState();\n if (resolveHostDisplayKind(hostDisplay) !== undefined) {\n return {\n hostDisplay: hostDisplay.display,\n hostWaylandDisplay: hostDisplay.waylandDisplay,\n kind: 'host',\n xvfb: undefined,\n };\n }\n\n return {\n hostDisplay: undefined,\n hostWaylandDisplay: undefined,\n kind: 'xvfb',\n xvfb,\n };\n};\n\nconst resolveGdkBackend = (effective: EffectiveDisplay): string | undefined => {\n if (effective.kind === 'xvfb') {\n return 'x11';\n }\n if (process.env.GDK_BACKEND !== undefined) {\n return undefined;\n }\n if (hasValue(effective.hostDisplay)) {\n return 'x11';\n }\n if (hasValue(effective.hostWaylandDisplay)) {\n return 'wayland';\n }\n return undefined;\n};\n\nconst toWireEnvironment = (\n env: Record<string, string | undefined>\n): WireGtkAppEnvironment => {\n const wireEnv: Record<string, string | null> = {};\n for (const [key, value] of Object.entries(env)) {\n wireEnv[key] = value ?? null;\n }\n return wireEnv;\n};\n\nconst wireEnvironmentToGtkAppEnvironment = (\n env: WireGtkAppEnvironment\n): GtkAppEnvironment => {\n const appEnv: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(env)) {\n appEnv[key] = value === null ? undefined : value;\n }\n return appEnv;\n};\n\nconst assertNoSessionOwnedEnvironmentOverrides = (\n options: GtkAppLauncherOptions,\n effective: EffectiveDisplay\n): void => {\n if (effective.kind !== 'xvfb' || options.env === undefined) {\n return;\n }\n\n for (const key of sessionOwnedEnvironmentKeys) {\n if (Object.hasOwn(options.env, key)) {\n throw createGtkInvalidArgumentError(\n `options.env must not override ${key} when using internal Xvfb.`\n );\n }\n }\n};\n\nconst resolveLauncherEnvironment = (\n options: GtkAppLauncherOptions,\n effective: EffectiveDisplay\n): WireGtkAppEnvironment => {\n assertNoSessionOwnedEnvironmentOverrides(options, effective);\n return toWireEnvironment({\n GDK_BACKEND: resolveGdkBackend(effective),\n GSETTINGS_BACKEND:\n options.gsettings === null\n ? undefined\n : (options.gsettings ?? defaultGSettings),\n GTK_THEME:\n options.theme === null ? undefined : (options.theme ?? defaultTheme),\n ...options.env,\n });\n};\n\nconst resolveDriverPath = (): string => {\n const driverPath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n '..',\n 'dist',\n 'gestament-launcher-driver.cjs'\n );\n if (!existsSync(driverPath)) {\n throw createGtkOperationFailedError(\n `Internal launcher driver was not found: ${driverPath}`\n );\n }\n return driverPath;\n};\n\nconst resolveXvfbPoolProbePath = (): string => {\n const probePath = resolve(\n dirname(fileURLToPath(import.meta.url)),\n '..',\n 'dist',\n 'gestament-xvfb-pool-probe.cjs'\n );\n if (!existsSync(probePath)) {\n throw createGtkOperationFailedError(\n `Internal Xvfb pool probe was not found: ${probePath}`\n );\n }\n return probePath;\n};\n\nconst createDriverEnvironment = (\n effective: EffectiveDisplay,\n xvfb: PooledXvfb | undefined\n): NodeJS.ProcessEnv => {\n const env: NodeJS.ProcessEnv = { ...process.env };\n delete env.AT_SPI_BUS_ADDRESS;\n delete env.NO_AT_BRIDGE;\n\n if (effective.kind === 'xvfb') {\n delete env.DBUS_SESSION_BUS_ADDRESS;\n delete env.DISPLAY;\n delete env.WAYLAND_DISPLAY;\n delete env.AT_SPI_BUS_ADDRESS;\n delete env.NO_AT_BRIDGE;\n delete env.XAUTHORITY;\n env.GDK_BACKEND = 'x11';\n env.GESTAMENT_XVFB_ACTIVE = '1';\n env.XDG_SESSION_TYPE = 'x11';\n if (xvfb !== undefined) {\n env.DISPLAY = xvfb.display;\n }\n }\n\n return env;\n};\n\nconst xvfbSocketPath = (displayNumber: number): string =>\n `/tmp/.X11-unix/X${displayNumber}`;\n\nconst isDisplayNumberAvailable = (displayNumber: number): boolean =>\n !leasedDisplayNumbers.has(displayNumber) &&\n !existsSync(xvfbSocketPath(displayNumber));\n\nconst connectUnixSocket = (path: string, timeoutMs: number): Promise<void> =>\n new Promise<void>((resolveConnect, rejectConnect) => {\n const socket = createConnection(path);\n let settled = false;\n\n const settle = (callback: () => void): void => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n socket.destroy();\n callback();\n };\n\n const timeout = setTimeout(() => {\n settle(() => {\n rejectConnect(\n createGtkOperationFailedError(`Timed out connecting to ${path}.`)\n );\n });\n }, timeoutMs);\n\n socket.once('connect', () => {\n settle(resolveConnect);\n });\n socket.once('error', (error) => {\n settle(() => {\n rejectConnect(error);\n });\n });\n });\n\nconst waitForXvfbReady = async (displayNumber: number): Promise<void> => {\n const startedAt = Date.now();\n const path = xvfbSocketPath(displayNumber);\n while (Date.now() - startedAt <= xvfbStartupTimeoutMs) {\n if (existsSync(path)) {\n try {\n await connectUnixSocket(path, 250);\n return;\n } catch {\n // Keep polling until the X server accepts local connections.\n }\n }\n await delay(25);\n }\n\n throw createGtkOperationFailedError(\n `Timed out waiting for Xvfb display :${displayNumber}.`\n );\n};\n\nconst killXvfbNow = (xvfb: PooledXvfb): void => {\n if (xvfb.child.exitCode === null && xvfb.child.signalCode === null) {\n xvfb.child.kill('SIGTERM');\n }\n};\n\nconst installPoolCleanup = (): void => {\n if (poolCleanupInstalled) {\n return;\n }\n poolCleanupInstalled = true;\n process.once('exit', () => {\n for (const xvfb of directXvfbs) {\n killXvfbNow(xvfb);\n }\n });\n};\n\nconst spawnDirectXvfb = async (screen: string): Promise<PooledXvfb> => {\n installPoolCleanup();\n for (\n let displayNumber = firstPooledDisplayNumber;\n displayNumber <= lastPooledDisplayNumber;\n displayNumber += 1\n ) {\n if (!isDisplayNumberAvailable(displayNumber)) {\n continue;\n }\n\n leasedDisplayNumbers.add(displayNumber);\n const stdout: string[] = [];\n const stderr: string[] = [];\n const child = spawn(\n 'Xvfb',\n [`:${displayNumber}`, '-screen', '0', screen, '-nolisten', 'tcp'],\n {\n env: process.env,\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n );\n child.stdout.on('data', (chunk: Buffer) => {\n appendOutput(stdout, chunk);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n appendOutput(stderr, chunk);\n });\n child.unref();\n unrefHandle(child.stdout);\n unrefHandle(child.stderr);\n\n try {\n await Promise.race([\n waitForXvfbReady(displayNumber),\n new Promise<never>((_resolve, reject) => {\n child.once('error', reject);\n }),\n new Promise<never>((_resolve, reject) => {\n child.once('exit', (code, signal) => {\n reject(\n createGtkOperationFailedError(\n `Xvfb exited before ready: code=${String(\n code\n )}, signal=${String(signal)}` + formatOutputTail(stdout, stderr)\n )\n );\n });\n }),\n ]);\n const xvfb = {\n child,\n display: `:${displayNumber}`,\n displayNumber,\n key: screen,\n lastUsedAt: Date.now(),\n screen,\n stderr,\n stdout,\n };\n directXvfbs.add(xvfb);\n return xvfb;\n } catch (error) {\n killXvfbNow({\n child,\n display: `:${displayNumber}`,\n displayNumber,\n key: screen,\n lastUsedAt: Date.now(),\n screen,\n stderr,\n stdout,\n });\n leasedDisplayNumbers.delete(displayNumber);\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('ENOENT')) {\n throw createGtkOperationFailedError(\n appendPrerequisiteInstallHint(`Failed to start Xvfb: ${message}`)\n );\n }\n }\n }\n\n throw createGtkOperationFailedError(\n `Failed to allocate a pooled Xvfb display for screen ${screen}.`\n );\n};\n\nconst terminateXvfb = async (xvfb: PooledXvfb): Promise<void> => {\n removeArrayEntry(idleXvfbByKey, xvfb.key, xvfb);\n directXvfbs.delete(xvfb);\n if (xvfb.child.exitCode === null && xvfb.child.signalCode === null) {\n xvfb.child.kill('SIGTERM');\n const startedAt = Date.now();\n while (xvfb.child.exitCode === null && xvfb.child.signalCode === null) {\n if (Date.now() - startedAt > sessionReleaseTimeoutMs) {\n xvfb.child.kill('SIGKILL');\n break;\n }\n await delay(25);\n }\n }\n leasedDisplayNumbers.delete(xvfb.displayNumber);\n};\n\nconst leaseXvfb = async (screen: string): Promise<PooledXvfb> => {\n for (;;) {\n const idle = popArrayEntry(idleXvfbByKey, screen);\n if (idle === undefined) {\n return spawnDirectXvfb(screen);\n }\n\n if (idle.child.exitCode === null && idle.child.signalCode === null) {\n idle.lastUsedAt = Date.now();\n return idle;\n }\n\n await terminateXvfb(idle);\n }\n};\n\nconst runXvfbProbe = (xvfb: PooledXvfb): Promise<XvfbProbeResult> =>\n new Promise<XvfbProbeResult>((resolveProbe, rejectProbe) => {\n const probePath = resolveXvfbPoolProbePath();\n const stdout: string[] = [];\n const stderr: string[] = [];\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n DISPLAY: xvfb.display,\n GDK_BACKEND: 'x11',\n GESTAMENT_XVFB_ACTIVE: '1',\n XDG_SESSION_TYPE: 'x11',\n };\n delete env.AT_SPI_BUS_ADDRESS;\n delete env.DBUS_SESSION_BUS_ADDRESS;\n delete env.NO_AT_BRIDGE;\n delete env.WAYLAND_DISPLAY;\n delete env.XAUTHORITY;\n const child = spawn(process.execPath, [probePath], {\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n const timeout = setTimeout(() => {\n child.kill('SIGKILL');\n rejectProbe(\n createGtkOperationFailedError('Timed out probing Xvfb pool.')\n );\n }, xvfbPoolProbeTimeoutMs);\n\n child.stdout.on('data', (chunk: Buffer) => {\n appendOutput(stdout, chunk);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n appendOutput(stderr, chunk);\n });\n child.once('error', (error) => {\n clearTimeout(timeout);\n rejectProbe(error);\n });\n child.once('exit', (code, signal) => {\n clearTimeout(timeout);\n if (code !== 0) {\n rejectProbe(\n createGtkOperationFailedError(\n `Xvfb pool probe failed: code=${String(code)}, signal=${String(\n signal\n )}` + formatOutputTail(stdout, stderr)\n )\n );\n return;\n }\n\n const output = stdout.join('').trim().split('\\n').at(-1);\n if (output === undefined || output.length === 0) {\n rejectProbe(\n createGtkOperationFailedError(\n 'Xvfb pool probe did not return a result.' +\n formatOutputTail(stdout, stderr)\n )\n );\n return;\n }\n\n try {\n resolveProbe(JSON.parse(output) as XvfbProbeResult);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n rejectProbe(\n createGtkOperationFailedError(\n `Xvfb pool probe returned invalid JSON: ${message}` +\n formatOutputTail(stdout, stderr)\n )\n );\n }\n });\n });\n\nconst cleanCheckXvfb = async (\n xvfb: PooledXvfb,\n allowedMappedWindowCount: number\n): Promise<boolean> => {\n try {\n const probe = await runXvfbProbe(xvfb);\n return probe.mappedWindowCount <= allowedMappedWindowCount;\n } catch {\n return false;\n }\n};\n\nconst returnXvfbToPool = async (\n xvfb: PooledXvfb,\n limits: XvfbPoolLimits\n): Promise<void> => {\n const clean = await cleanCheckXvfb(xvfb, 0);\n if (!clean) {\n await terminateXvfb(xvfb);\n return;\n }\n\n await retainIdleXvfb(xvfb, limits);\n};\n\nconst allPoolKey = (xvfb: XvfbSessionOptions): string =>\n `${xvfb.screen}\\n${xvfb.trayHost ? 'tray' : 'no-tray'}`;\n\nconst spawnDriverProcess = (\n driverPath: string,\n socketPath: string,\n effective: EffectiveDisplay,\n xvfb: PooledXvfb | undefined\n): DriverProcess => {\n const driverArgs = [\n '--socket',\n socketPath,\n ...(effective.kind === 'xvfb' && effective.xvfb?.trayHost === true\n ? ['--with-tray-host']\n : []),\n ];\n const env = createDriverEnvironment(effective, xvfb);\n const stdout: string[] = [];\n const stderr: string[] = [];\n\n const command =\n effective.kind === 'xvfb' && xvfb === undefined\n ? {\n args: [\n '-a',\n '-s',\n `-screen 0 ${effective.xvfb?.screen ?? defaultXvfbScreen}`,\n '--',\n 'dbus-run-session',\n '--',\n process.execPath,\n driverPath,\n ...driverArgs,\n ],\n bin: 'xvfb-run',\n }\n : effective.kind === 'xvfb'\n ? {\n args: ['--', process.execPath, driverPath, ...driverArgs],\n bin: 'dbus-run-session',\n }\n : {\n args: [driverPath, ...driverArgs],\n bin: process.execPath,\n };\n\n const child = spawn(command.bin, command.args, {\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n child.stdout.on('data', (chunk: Buffer) => {\n appendOutput(stdout, chunk);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n appendOutput(stderr, chunk);\n });\n\n const commandLine = [command.bin, ...command.args].join(' ');\n return { child, commandLine, stderr, stdout };\n};\n\nconst listenOnSocket = (server: Server, socketPath: string): Promise<void> =>\n new Promise<void>((resolveListen, rejectListen) => {\n const rejectFromError = (error: Error): void => {\n server.removeListener('listening', resolveFromListening);\n rejectListen(error);\n };\n const resolveFromListening = (): void => {\n server.removeListener('error', rejectFromError);\n resolveListen();\n };\n\n server.once('error', rejectFromError);\n server.once('listening', resolveFromListening);\n server.listen(socketPath);\n });\n\nconst parseReadyMessage = (line: string): DriverReadyMessage | undefined => {\n const value = JSON.parse(line) as unknown;\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n 'type' in value &&\n value.type === 'ready'\n ) {\n return value as DriverReadyMessage;\n }\n return undefined;\n};\n\nconst waitForDriverReady = (\n server: Server,\n processState: DriverProcess\n): Promise<StartupConnection> =>\n new Promise<StartupConnection>((resolveReady, rejectReady) => {\n let socket: Socket | undefined;\n let input = '';\n let settled = false;\n\n const cleanup = (): void => {\n clearTimeout(timeout);\n server.removeListener('connection', acceptConnection);\n server.removeListener('error', rejectFromError);\n processState.child.removeListener('error', rejectFromError);\n processState.child.removeListener('exit', rejectFromExit);\n socket?.removeListener('data', readReadyData);\n socket?.removeListener('error', rejectFromError);\n socket?.removeListener('close', rejectFromSocketClose);\n };\n\n const rejectOnce = (error: Error): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n socket?.destroy();\n rejectReady(error);\n };\n\n const rejectFromError = (error: Error): void => {\n rejectOnce(\n createGtkOperationFailedError(\n appendPrerequisiteInstallHint(\n `Launcher driver failed to start: ${error.message}` +\n formatOutputTail(processState.stdout, processState.stderr)\n )\n )\n );\n };\n\n const rejectFromExit = (\n code: number | null,\n signal: NodeJS.Signals | null\n ): void => {\n rejectOnce(\n createGtkOperationFailedError(\n appendPrerequisiteInstallHint(\n `Launcher driver exited before ready: code=${String(\n code\n )}, signal=${String(signal)}` +\n formatOutputTail(processState.stdout, processState.stderr)\n )\n )\n );\n };\n\n const rejectFromSocketClose = (): void => {\n rejectOnce(\n createGtkOperationFailedError(\n 'Launcher driver socket closed before ready.' +\n formatOutputTail(processState.stdout, processState.stderr)\n )\n );\n };\n\n const readReadyData = (chunk: Buffer): void => {\n input += chunk.toString('utf8');\n let newlineIndex = input.indexOf('\\n');\n while (newlineIndex >= 0) {\n const line = input.slice(0, newlineIndex);\n input = input.slice(newlineIndex + 1);\n try {\n if (parseReadyMessage(line) !== undefined) {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n if (socket === undefined) {\n rejectReady(\n createGtkOperationFailedError(\n 'Launcher driver reported ready without a socket.'\n )\n );\n return;\n }\n resolveReady({ bufferedInput: input, socket });\n return;\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n rejectOnce(\n createGtkOperationFailedError(\n `Launcher driver sent invalid ready message: ${message}` +\n formatOutputTail(processState.stdout, processState.stderr)\n )\n );\n return;\n }\n\n newlineIndex = input.indexOf('\\n');\n }\n };\n\n const acceptConnection = (acceptedSocket: Socket): void => {\n if (socket !== undefined) {\n acceptedSocket.destroy();\n return;\n }\n\n socket = acceptedSocket;\n acceptedSocket.on('data', readReadyData);\n acceptedSocket.once('error', rejectFromError);\n acceptedSocket.once('close', rejectFromSocketClose);\n };\n\n const timeout = setTimeout(() => {\n rejectOnce(\n createGtkOperationFailedError(\n `Timed out waiting for launcher driver: ${processState.commandLine}` +\n formatOutputTail(processState.stdout, processState.stderr)\n )\n );\n }, sessionStartupTimeoutMs);\n\n server.on('connection', acceptConnection);\n server.once('error', rejectFromError);\n processState.child.once('error', rejectFromError);\n processState.child.once('exit', rejectFromExit);\n });\n\nconst serializeRequest = (\n id: number,\n command: DriverCommand,\n payload: unknown\n): string => {\n const deadlineMs = currentWaitDeadlineMs();\n const request: DriverRequest =\n deadlineMs === undefined\n ? { command, id, payload }\n : { command, deadlineMs, id, payload };\n return `${JSON.stringify(request)}\\n`;\n};\n\nconst reconstructDriverError = (error: SerializedDriverError): Error => {\n const reconstructed = new Error(error.message) as Error & {\n code?: string;\n };\n reconstructed.name = error.name;\n if (error.stack !== undefined) {\n reconstructed.stack = error.stack;\n }\n if (error.code !== undefined) {\n Object.defineProperty(reconstructed, 'code', {\n enumerable: true,\n value: error.code,\n });\n }\n return reconstructed;\n};\n\nconst decodeCapture = (capture: WireCapture): GtkCapture => ({\n bounds: capture.bounds,\n clipped: capture.clipped,\n image: Buffer.from(capture.imageBase64, 'base64'),\n visibleBounds: capture.visibleBounds,\n});\n\nconst createDriverSession = (\n socket: Socket,\n bufferedInput: string,\n processState: DriverProcess,\n tempDirectory: string,\n poolOptions: DriverSessionPoolOptions\n): DriverSession => {\n const pending = new Map<number, PendingRequest>();\n let input = bufferedInput;\n let nextRequestId = 1;\n let closed = false;\n\n const rejectPending = (error: Error): void => {\n const entries = [...pending.values()];\n pending.clear();\n for (const entry of entries) {\n entry.reject(error);\n }\n socket.unref();\n };\n\n const markClosed = (): void => {\n if (closed) {\n return;\n }\n closed = true;\n rejectPending(createGtkAppExitedError('Launcher driver has exited.'));\n };\n\n const handleResponse = (line: string): void => {\n const response = JSON.parse(line) as DriverResponse;\n const entry = pending.get(response.id);\n if (entry === undefined) {\n return;\n }\n\n pending.delete(response.id);\n if (pending.size === 0) {\n socket.unref();\n }\n\n if (response.ok) {\n entry.resolve((response as DriverSuccessResponse).value);\n } else {\n entry.reject(\n reconstructDriverError((response as DriverErrorResponse).error)\n );\n }\n };\n\n const readData = (chunk: Buffer): void => {\n input += chunk.toString('utf8');\n let newlineIndex = input.indexOf('\\n');\n while (newlineIndex >= 0) {\n const line = input.slice(0, newlineIndex);\n input = input.slice(newlineIndex + 1);\n try {\n handleResponse(line);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n rejectPending(\n createGtkOperationFailedError(\n `Launcher driver sent an invalid response: ${message}`\n )\n );\n }\n newlineIndex = input.indexOf('\\n');\n }\n };\n\n socket.on('data', readData);\n socket.once('close', markClosed);\n socket.once('error', markClosed);\n processState.child.once('exit', markClosed);\n processState.child.unref();\n unrefHandle(processState.child.stdout);\n unrefHandle(processState.child.stderr);\n socket.unref();\n\n const request = <Result>(\n command: DriverCommand,\n payload: unknown\n ): Promise<Result> => {\n if (closed) {\n return Promise.reject(\n createGtkAppExitedError('Launcher driver has exited.')\n );\n }\n\n const id = nextRequestId;\n nextRequestId += 1;\n socket.ref();\n\n return new Promise<Result>((resolveRequest, rejectRequest) => {\n pending.set(id, {\n reject: rejectRequest,\n resolve: (value: unknown): void => {\n resolveRequest(value as Result);\n },\n });\n socket.write(serializeRequest(id, command, payload), (error) => {\n if (error != null) {\n pending.delete(id);\n if (pending.size === 0) {\n socket.unref();\n }\n rejectRequest(\n createGtkOperationFailedError(\n `Failed to write launcher driver request: ${error.message}`\n )\n );\n }\n });\n });\n };\n\n const waitForExit = async (): Promise<void> => {\n const startedAt = Date.now();\n while (\n processState.child.exitCode === null &&\n processState.child.signalCode === null\n ) {\n if (Date.now() - startedAt > sessionReleaseTimeoutMs) {\n processState.child.kill('SIGKILL');\n break;\n }\n await delay(25);\n }\n };\n\n const closeDriver = async (): Promise<void> => {\n if (!closed) {\n try {\n await request<null>('launcher.release', null);\n } catch (error) {\n if (!closed) {\n throw error;\n }\n }\n }\n\n closed = true;\n socket.destroy();\n await waitForExit();\n rmSync(tempDirectory, { force: true, recursive: true });\n };\n\n const terminate = async (): Promise<void> => {\n try {\n await closeDriver();\n } finally {\n if (poolOptions.xvfb !== undefined) {\n await terminateXvfb(poolOptions.xvfb);\n }\n }\n };\n\n let session: DriverSession;\n\n const release = async (): Promise<void> => {\n if (poolOptions.mode === 'none') {\n await closeDriver();\n return;\n }\n\n if (poolOptions.mode === 'xvfb') {\n try {\n await closeDriver();\n } catch (error) {\n if (poolOptions.xvfb !== undefined) {\n await terminateXvfb(poolOptions.xvfb);\n }\n throw error;\n }\n if (poolOptions.xvfb !== undefined) {\n await returnXvfbToPool(poolOptions.xvfb, poolOptions.limits);\n }\n return;\n }\n\n if (poolOptions.xvfb === undefined || poolOptions.allKey === undefined) {\n await terminate();\n return;\n }\n\n let resetResult: DriverResetResult;\n try {\n resetResult = await request<DriverResetResult>('launcher.reset', null);\n } catch (error) {\n await terminate().catch(() => undefined);\n throw error;\n }\n\n const tablesAreEmpty =\n resetResult.appCount === 0 &&\n resetResult.elementCount === 0 &&\n resetResult.imageInfoCount === 0 &&\n resetResult.trayItemCount === 0;\n const clean =\n tablesAreEmpty &&\n (await cleanCheckXvfb(\n poolOptions.xvfb,\n poolOptions.allowedMappedWindowCount\n ));\n if (!clean) {\n await terminate();\n return;\n }\n\n await retainIdleAllSession(\n {\n key: poolOptions.allKey,\n lastUsedAt: Date.now(),\n session,\n xvfb: poolOptions.xvfb,\n },\n poolOptions.limits\n );\n };\n\n session = { release, request, terminate };\n return session;\n};\n\nconst startFreshDriverSession = async (\n effective: EffectiveDisplay,\n xvfb: PooledXvfb | undefined,\n poolOptions: DriverSessionPoolOptions\n): Promise<DriverSession> => {\n const driverPath = resolveDriverPath();\n const tempDirectory = mkdtempSync(\n join(tmpdir(), `gestament-launcher-${process.pid}-${socketCounter}-`)\n );\n socketCounter += 1;\n const socketPath = join(tempDirectory, 'driver.sock');\n const server = createServer();\n let processState: DriverProcess | undefined;\n\n try {\n await listenOnSocket(server, socketPath);\n server.unref();\n\n processState = spawnDriverProcess(driverPath, socketPath, effective, xvfb);\n const connection = await waitForDriverReady(server, processState);\n server.close();\n const resolvedPoolOptions =\n poolOptions.mode === 'all' && xvfb !== undefined\n ? {\n ...poolOptions,\n allowedMappedWindowCount: (await runXvfbProbe(xvfb))\n .mappedWindowCount,\n }\n : poolOptions;\n return createDriverSession(\n connection.socket,\n connection.bufferedInput,\n processState,\n tempDirectory,\n resolvedPoolOptions\n );\n } catch (error) {\n server.close();\n if (\n processState !== undefined &&\n processState.child.exitCode === null &&\n processState.child.signalCode === null\n ) {\n processState.child.kill('SIGTERM');\n }\n if (xvfb !== undefined) {\n await terminateXvfb(xvfb);\n }\n rmSync(tempDirectory, { force: true, recursive: true });\n throw error;\n }\n};\n\nconst startDriverSession = async (\n options: GtkAppLauncherOptions\n): Promise<DriverSession> => {\n const display = resolveDisplay(options.display);\n const xvfbOptions = resolveXvfbOptions(options);\n const effective = resolveEffectiveDisplay(display, xvfbOptions);\n\n if (effective.kind !== 'xvfb' || effective.xvfb === undefined) {\n return startFreshDriverSession(\n effective,\n undefined,\n emptyDriverSessionPoolOptions()\n );\n }\n\n const pool = effective.xvfb.pool;\n if (pool === undefined) {\n return startFreshDriverSession(\n effective,\n undefined,\n emptyDriverSessionPoolOptions()\n );\n }\n\n if (pool.type === 'xvfb') {\n const xvfb = await leaseXvfb(effective.xvfb.screen);\n return startFreshDriverSession(effective, xvfb, {\n allKey: undefined,\n allowedMappedWindowCount: 0,\n limits: poolLimits(pool),\n mode: 'xvfb',\n xvfb,\n });\n }\n\n const key = allPoolKey(effective.xvfb);\n for (;;) {\n const idle = popArrayEntry(idleAllByKey, key);\n if (idle === undefined) {\n break;\n }\n if (\n idle.xvfb.child.exitCode === null &&\n idle.xvfb.child.signalCode === null\n ) {\n idle.lastUsedAt = Date.now();\n idle.xvfb.lastUsedAt = idle.lastUsedAt;\n return idle.session;\n }\n await idle.session.terminate().catch(() => undefined);\n }\n\n const xvfb = await leaseXvfb(effective.xvfb.screen);\n return startFreshDriverSession(effective, xvfb, {\n allKey: key,\n allowedMappedWindowCount: 0,\n limits: poolLimits(pool),\n mode: 'all',\n xvfb,\n });\n};\n\nconst createLaunchPayload = (\n options: GtkAppLauncherOptions,\n args: readonly string[]\n): DriverLaunchPayload => {\n const display = resolveDisplay(options.display);\n const xvfb = resolveXvfbOptions(options);\n const effective = resolveEffectiveDisplay(display, xvfb);\n\n return {\n appPath: options.appPath,\n args: [...(options.args ?? []), ...args],\n env: resolveLauncherEnvironment(options, effective),\n timeoutMs: options.timeoutMs ?? null,\n };\n};\n\nconst createEnvironmentPayload = (\n options: GtkAppLauncherOptions\n): DriverEnvironmentPayload => {\n const display = resolveDisplay(options.display);\n const xvfb = resolveXvfbOptions(options);\n const effective = resolveEffectiveDisplay(display, xvfb);\n\n return {\n env: resolveLauncherEnvironment(options, effective),\n };\n};\n\nconst elementRefToProxy = (\n session: DriverSession,\n ref: DriverElementRef | null\n): GtkWidgetElement | undefined =>\n ref === null ? undefined : createProxyGtkElement(session, ref);\n\nconst trayRefToProxy = (\n session: DriverSession,\n ref: DriverTrayItemRef | null\n): GtkTrayItem | undefined =>\n ref === null ? undefined : createProxyGtkTrayItem(session, ref);\n\nconst createProxyGtkApp = (\n session: DriverSession,\n ref: DriverAppRef\n): GtkApp => {\n let released = false;\n\n const assertNotReleased = (): void => {\n if (released) {\n throw createGtkAppExitedError('GTK application has been released.');\n }\n };\n\n const appRequest = <Result>(\n command: DriverCommand,\n payload: object = {}\n ): Promise<Result> => {\n assertNotReleased();\n return session.request<Result>(command, {\n appId: ref.appId,\n ...payload,\n });\n };\n\n const release = async (): Promise<void> => {\n if (released) {\n return;\n }\n released = true;\n await session.request<null>('app.release', { appId: ref.appId });\n };\n\n const app: GtkApp = {\n capture: async (): Promise<GtkCapture> =>\n decodeCapture(await appRequest<WireCapture>('app.capture')),\n environment: async (): Promise<GtkAppEnvironment> =>\n wireEnvironmentToGtkAppEnvironment(\n await appRequest<WireGtkAppEnvironment>('app.environment')\n ),\n findById: async (id: string): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await appRequest<DriverElementRef | null>('app.findById', { id })\n ),\n getById: async (id: string): Promise<GtkWidgetElement> =>\n createProxyGtkElement(\n session,\n await appRequest<DriverElementRef>('app.getById', { id })\n ),\n findByPath: async (path: string): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await appRequest<DriverElementRef | null>('app.findByPath', { path })\n ),\n getByPath: async (path: string): Promise<GtkWidgetElement> =>\n createProxyGtkElement(\n session,\n await appRequest<DriverElementRef>('app.getByPath', { path })\n ),\n windowAt: async (index: number): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await appRequest<DriverElementRef | null>('app.windowAt', { index })\n ),\n getWindowCount: (): Promise<number> =>\n appRequest<number>('app.getWindowCount'),\n findTrayItem: async (\n selector: GtkTrayItemSelector\n ): Promise<GtkTrayItem | undefined> =>\n trayRefToProxy(\n session,\n await appRequest<DriverTrayItemRef | null>('app.findTrayItem', {\n selector,\n })\n ),\n getTrayItem: async (selector: GtkTrayItemSelector): Promise<GtkTrayItem> =>\n createProxyGtkTrayItem(\n session,\n await appRequest<DriverTrayItemRef>('app.getTrayItem', { selector })\n ),\n trayItemAt: async (index: number): Promise<GtkTrayItem | undefined> =>\n trayRefToProxy(\n session,\n await appRequest<DriverTrayItemRef | null>('app.trayItemAt', {\n index,\n })\n ),\n getTrayItemCount: (): Promise<number> =>\n appRequest<number>('app.getTrayItemCount'),\n release,\n [Symbol.asyncDispose]: release,\n };\n return app;\n};\n\nconst addChildContainerProxyOperations = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>\n): void => {\n target.childAt = async (\n index: number\n ): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await session.request<DriverElementRef | null>('element.childAt', {\n elementId,\n index,\n })\n );\n target.getChildCount = (): Promise<number> =>\n session.request<number>('element.getChildCount', { elementId });\n};\n\nconst addSelectableChildContainerProxyOperations = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>\n): void => {\n addChildContainerProxyOperations(session, elementId, target);\n target.getSelectedChildCount = (): Promise<number> =>\n session.request<number>('element.getSelectedChildCount', { elementId });\n target.selectedChildAt = async (\n selectedIndex: number\n ): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await session.request<DriverElementRef | null>(\n 'element.selectedChildAt',\n {\n elementId,\n selectedIndex,\n }\n )\n );\n target.isChildSelected = (index: number): Promise<boolean> =>\n session.request<boolean>('element.isChildSelected', { elementId, index });\n target.selectChildAt = (index: number): Promise<void> =>\n session\n .request<null>('element.selectChildAt', { elementId, index })\n .then(() => undefined);\n target.deselectChildAt = (index: number): Promise<void> =>\n session\n .request<null>('element.deselectChildAt', { elementId, index })\n .then(() => undefined);\n target.selectAllChildren = (): Promise<void> =>\n session\n .request<null>('element.selectAllChildren', { elementId })\n .then(() => undefined);\n target.clearSelection = (): Promise<void> =>\n session\n .request<null>('element.clearSelection', { elementId })\n .then(() => undefined);\n};\n\nconst addClickableProxyOperation = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>\n): void => {\n target.click = (): Promise<void> =>\n session.request<null>('element.click', { elementId }).then(() => undefined);\n};\n\nconst addCheckableProxyOperations = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>\n): void => {\n target.isChecked = (): Promise<boolean> =>\n session.request<boolean>('element.isChecked', { elementId });\n target.toggle = (): Promise<void> =>\n session\n .request<null>('element.toggle', { elementId })\n .then(() => undefined);\n};\n\nconst addTextProxyOperation = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>\n): void => {\n target.text = (): Promise<string> =>\n session.request<string>('element.text', { elementId });\n};\n\nconst addValueProxyOperations = (\n session: DriverSession,\n elementId: string,\n target: Record<string, unknown>,\n writable: boolean\n): void => {\n target.value = (): Promise<number> =>\n session.request<number>('element.value', { elementId });\n target.valueInfo = (): Promise<GtkValueInfo> =>\n session.request<GtkValueInfo>('element.valueInfo', { elementId });\n if (writable) {\n target.setValue = (value: number): Promise<void> =>\n session\n .request<null>('element.setValue', { elementId, value })\n .then(() => undefined);\n }\n};\n\nconst createProxyImageInfo = (\n session: DriverSession,\n info: WireImageInfo\n): GtkImageInfo => ({\n bounds: info.bounds,\n capture: async (): Promise<GtkCapture> =>\n decodeCapture(\n await session.request<WireCapture>('imageInfo.capture', {\n imageInfoId: info.imageInfoId,\n })\n ),\n description: info.description,\n locale: info.locale,\n position: info.position,\n size: info.size,\n});\n\nconst createProxyGtkElement = (\n session: DriverSession,\n ref: DriverElementRef\n): GtkWidgetElement => {\n const elementId = ref.elementId;\n const target: Record<string, unknown> = {\n capture: async (): Promise<GtkCapture> =>\n decodeCapture(\n await session.request<WireCapture>('element.capture', { elementId })\n ),\n info: (): Promise<GtkElementInfo> =>\n session.request<GtkElementInfo>('element.info', { elementId }),\n kind: ref.kind,\n };\n\n switch (ref.kind) {\n case 'window':\n target.bounds = (): Promise<GtkCaptureBounds> =>\n session.request<GtkCaptureBounds>('element.bounds', { elementId });\n target.resizeHints = (): Promise<GtkWindowResizeHints> =>\n session.request<GtkWindowResizeHints>('window.resizeHints', {\n elementId,\n });\n target.x11Info = (): Promise<GtkX11WindowInfo> =>\n session.request<GtkX11WindowInfo>('window.x11Info', { elementId });\n addChildContainerProxyOperations(session, elementId, target);\n break;\n case 'container':\n case 'menu':\n addChildContainerProxyOperations(session, elementId, target);\n break;\n case 'button':\n case 'listItem':\n case 'menuItem':\n addClickableProxyOperation(session, elementId, target);\n break;\n case 'label':\n case 'text':\n addTextProxyOperation(session, elementId, target);\n break;\n case 'entry':\n addTextProxyOperation(session, elementId, target);\n target.setText = (text: string): Promise<void> =>\n session\n .request<null>('element.setText', { elementId, text })\n .then(() => undefined);\n break;\n case 'checkbox':\n case 'switch':\n case 'radio':\n case 'toggleButton':\n addClickableProxyOperation(session, elementId, target);\n addCheckableProxyOperations(session, elementId, target);\n break;\n case 'slider':\n addValueProxyOperations(session, elementId, target, true);\n break;\n case 'spinButton':\n addValueProxyOperations(session, elementId, target, true);\n target.increment = (): Promise<void> =>\n session\n .request<null>('element.increment', { elementId })\n .then(() => undefined);\n target.decrement = (): Promise<void> =>\n session\n .request<null>('element.decrement', { elementId })\n .then(() => undefined);\n break;\n case 'progressBar':\n addValueProxyOperations(session, elementId, target, false);\n break;\n case 'comboBox':\n addClickableProxyOperation(session, elementId, target);\n addSelectableChildContainerProxyOperations(session, elementId, target);\n break;\n case 'list':\n addSelectableChildContainerProxyOperations(session, elementId, target);\n break;\n case 'table':\n target.getRowCount = (): Promise<number> =>\n session.request<number>('element.getRowCount', { elementId });\n target.getColumnCount = (): Promise<number> =>\n session.request<number>('element.getColumnCount', { elementId });\n target.cellAt = async (\n row: number,\n column: number\n ): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await session.request<DriverElementRef | null>('element.cellAt', {\n column,\n elementId,\n row,\n })\n );\n target.selectedRows = (): Promise<readonly number[]> =>\n session.request<readonly number[]>('element.selectedRows', {\n elementId,\n });\n target.selectedColumns = (): Promise<readonly number[]> =>\n session.request<readonly number[]>('element.selectedColumns', {\n elementId,\n });\n target.isRowSelected = (row: number): Promise<boolean> =>\n session.request<boolean>('element.isRowSelected', { elementId, row });\n target.isColumnSelected = (column: number): Promise<boolean> =>\n session.request<boolean>('element.isColumnSelected', {\n column,\n elementId,\n });\n target.isCellSelected = (row: number, column: number): Promise<boolean> =>\n session.request<boolean>('element.isCellSelected', {\n column,\n elementId,\n row,\n });\n target.selectRow = (row: number): Promise<void> =>\n session\n .request<null>('element.selectRow', { elementId, row })\n .then(() => undefined);\n target.deselectRow = (row: number): Promise<void> =>\n session\n .request<null>('element.deselectRow', { elementId, row })\n .then(() => undefined);\n target.selectColumn = (column: number): Promise<void> =>\n session\n .request<null>('element.selectColumn', { column, elementId })\n .then(() => undefined);\n target.deselectColumn = (column: number): Promise<void> =>\n session\n .request<null>('element.deselectColumn', { column, elementId })\n .then(() => undefined);\n break;\n case 'image':\n target.imageInfo = async (): Promise<GtkImageInfo> =>\n createProxyImageInfo(\n session,\n await session.request<WireImageInfo>('element.imageInfo', {\n elementId,\n })\n );\n break;\n case 'tableCell':\n case 'unknown':\n break;\n }\n\n return target as unknown as GtkWidgetElement;\n};\n\nconst createProxyGtkTrayItem = (\n session: DriverSession,\n ref: DriverTrayItemRef\n): GtkTrayItem => {\n const trayItemId = ref.trayItemId;\n return {\n capture: async (): Promise<GtkCapture> =>\n decodeCapture(\n await session.request<WireCapture>('tray.capture', { trayItemId })\n ),\n click: (): Promise<void> =>\n session.request<null>('tray.click', { trayItemId }).then(() => undefined),\n element: async (): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await session.request<DriverElementRef | null>('tray.element', {\n trayItemId,\n })\n ),\n metadata: (): Promise<GtkTrayItemMetadata> =>\n session.request<GtkTrayItemMetadata>('tray.metadata', { trayItemId }),\n openMenu: async (): Promise<GtkWidgetElement | undefined> =>\n elementRefToProxy(\n session,\n await session.request<DriverElementRef | null>('tray.openMenu', {\n trayItemId,\n })\n ),\n };\n};\n\n/**\n * Creates a driver-backed launcher that owns a display session per launcher.\n * @param options Launcher options.\n * @returns GtkAppLauncher instance.\n */\nexport const createDriverBackedGtkAppLauncher = (\n options: GtkAppLauncherOptions\n): GtkAppLauncher => {\n let sessionPromise: Promise<DriverSession> | undefined;\n\n const ensureSession = (): Promise<DriverSession> => {\n sessionPromise ??= startDriverSession(options);\n return sessionPromise;\n };\n\n const launch = async (args?: readonly string[]): Promise<GtkApp> => {\n const payload = createLaunchPayload(options, args ?? []);\n const session = await ensureSession();\n const appRef = await session.request<DriverAppRef>(\n 'launcher.launch',\n payload\n );\n return createProxyGtkApp(session, appRef);\n };\n\n const environment = async (): Promise<GtkAppEnvironment> => {\n const payload = createEnvironmentPayload(options);\n const session = await ensureSession();\n return wireEnvironmentToGtkAppEnvironment(\n await session.request<WireGtkAppEnvironment>(\n 'launcher.environment',\n payload\n )\n );\n };\n\n const release = async (): Promise<void> => {\n const releasingSession = sessionPromise;\n sessionPromise = undefined;\n if (releasingSession === undefined) {\n return;\n }\n const session = await releasingSession;\n await session.release();\n };\n\n return {\n environment,\n launch,\n release,\n [Symbol.asyncDispose]: release,\n };\n};\n","// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport {\n nativeBounds,\n nativeCapture,\n nativeCaptureBounds,\n nativeChildAt,\n nativeChildCount,\n nativeClick,\n nativeClearSelection,\n nativeDeselectChildAt,\n nativeIsChildSelected,\n nativeElementInfo,\n nativeImageInfo,\n nativeSelectAllChildren,\n nativeSelectChildAt,\n nativeSelectedChildAt,\n nativeSelectedChildCount,\n nativeSetText,\n nativeSetValue,\n nativeResizeHints,\n nativeTableCellAt,\n nativeTableColumnCount,\n nativeTableDeselectColumn,\n nativeTableDeselectRow,\n nativeTableIsCellSelected,\n nativeTableIsColumnSelected,\n nativeTableIsRowSelected,\n nativeTableRowCount,\n nativeTableSelectColumn,\n nativeTableSelectRow,\n nativeTableSelectedColumns,\n nativeTableSelectedRows,\n nativeText,\n nativeValueInfo,\n nativeX11Info,\n type NativeElementInfo,\n type NativeElementHandle,\n type NativeImageInfo,\n} from './native';\nimport {\n createGtkInvalidArgumentError,\n createGtkOperationFailedError,\n createGtkUnsupportedInterfaceError,\n} from './errors';\nimport type {\n GtkCapture,\n GtkCaptureBounds,\n GtkComboBoxItemElement,\n GtkElement,\n GtkElementInfo,\n GtkImageInfo,\n GtkListItemElement,\n GtkMenuItemElement,\n GtkTableCellElement,\n GtkValueInfo,\n GtkWidgetElement,\n GtkWidgetKind,\n GtkWindowResizeHints,\n GtkX11WindowInfo,\n} from './types';\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\nconst assertNonNegativeIndex = (name: string, index: number): void => {\n if (!Number.isInteger(index) || index < 0) {\n throw createGtkInvalidArgumentError(\n `${name} must be a non-negative integer.`\n );\n }\n};\n\nconst assertFiniteNumber = (name: string, value: number): void => {\n if (!Number.isFinite(value)) {\n throw createGtkInvalidArgumentError(`${name} must be a finite number.`);\n }\n};\n\nconst normalizeRoleName = (roleName: string): string =>\n roleName.trim().toLowerCase().replace(/[_-]+/g, ' ').replace(/\\s+/g, ' ');\n\nconst hasInterface = (info: NativeElementInfo, name: string): boolean =>\n info.interfaces.some(\n (interfaceName) => interfaceName.toLowerCase() === name.toLowerCase()\n );\n\nconst hasState = (info: NativeElementInfo, name: string): boolean =>\n info.states.some((state) => state.toLowerCase() === name.toLowerCase());\n\nconst elementInfoOverrides = new WeakMap<\n NativeElementHandle,\n Partial<GtkElementInfo>\n>();\n\nconst overrideElementInfo = (\n handle: NativeElementHandle,\n override: Partial<GtkElementInfo>\n): NativeElementHandle => {\n elementInfoOverrides.set(handle, override);\n return handle;\n};\n\nconst nativeInfoKind = (handle: NativeElementHandle): GtkWidgetKind =>\n elementInfoOverrides.get(handle)?.kind ??\n widgetKindFromInfo(nativeElementInfo(handle));\n\nconst widgetKindFromInfo = (info: NativeElementInfo): GtkWidgetKind => {\n const roleName = normalizeRoleName(info.roleName);\n if (hasInterface(info, 'TableCell')) {\n return 'tableCell';\n }\n switch (roleName) {\n case 'frame':\n case 'dialog':\n case 'window':\n return 'window';\n case 'filler':\n case 'panel':\n case 'scroll pane':\n case 'layered pane':\n case 'split pane':\n case 'viewport':\n return 'container';\n case 'button':\n case 'push button':\n case 'push button menu':\n return 'button';\n case 'label':\n case 'static':\n return 'label';\n case 'entry':\n case 'password text':\n case 'search box':\n return 'entry';\n case 'text':\n return hasInterface(info, 'EditableText') ||\n hasState(info, 'editable') ||\n hasState(info, 'singleLine')\n ? 'entry'\n : 'text';\n case 'paragraph':\n return 'text';\n case 'check box':\n return 'checkbox';\n case 'switch':\n return 'switch';\n case 'radio button':\n return 'radio';\n case 'toggle button':\n return hasInterface(info, 'Image') || info.name.length > 0\n ? 'toggleButton'\n : 'switch';\n case 'slider':\n return 'slider';\n case 'spin button':\n return 'spinButton';\n case 'progress bar':\n case 'level bar':\n return 'progressBar';\n case 'combo box':\n return 'comboBox';\n case 'list':\n case 'list box':\n return 'list';\n case 'tree':\n return hasInterface(info, 'Table') ? 'table' : 'list';\n case 'list item':\n case 'tree item':\n return 'listItem';\n case 'table':\n case 'tree table':\n return 'table';\n case 'table cell':\n return 'tableCell';\n case 'image':\n case 'icon':\n return 'image';\n case 'menu':\n case 'menu bar':\n case 'popup menu':\n return 'menu';\n case 'menu item':\n case 'check menu item':\n case 'radio menu item':\n case 'tearoff menu item':\n return 'menuItem';\n default:\n return 'unknown';\n }\n};\n\nconst toGtkElementInfo = (info: NativeElementInfo): GtkElementInfo => ({\n ...info,\n kind: widgetKindFromInfo(info),\n});\n\nconst toGtkElementInfoForHandle = (\n handle: NativeElementHandle\n): GtkElementInfo => {\n const info = toGtkElementInfo(nativeElementInfo(handle));\n const override = elementInfoOverrides.get(handle);\n return override === undefined ? info : { ...info, ...override };\n};\n\ntype GtkElementCommon = Omit<GtkElement, 'kind'>;\n\nconst createCommonElement = (\n handle: NativeElementHandle\n): GtkElementCommon => ({\n info: async (): Promise<GtkElementInfo> => toGtkElementInfoForHandle(handle),\n capture: async (): Promise<GtkCapture> => nativeCapture(handle),\n});\n\nconst expectedKindLabel = (expectedKinds: readonly GtkWidgetKind[]): string =>\n expectedKinds.join(', ');\n\nconst assertExpectedKind = <Child extends GtkWidgetElement>(\n element: GtkWidgetElement,\n expectedKinds: readonly GtkWidgetKind[],\n operation: string\n): Child => {\n if (!expectedKinds.includes(element.kind)) {\n throw createGtkUnsupportedInterfaceError(\n `${operation} returned ${element.kind}, expected ${expectedKindLabel(\n expectedKinds\n )}.`\n );\n }\n return element as Child;\n};\n\nconst createGetChildCountOperation =\n (handle: NativeElementHandle): (() => Promise<number>) =>\n async (): Promise<number> =>\n nativeChildCount(handle);\n\nconst createChildAtOperation =\n <Child extends GtkWidgetElement>(\n handle: NativeElementHandle,\n expectedKinds: readonly GtkWidgetKind[] | undefined\n ): ((index: number) => Promise<Child | undefined>) =>\n async (index: number): Promise<Child | undefined> => {\n assertNonNegativeIndex('index', index);\n const childHandle = nativeChildAt(handle, index);\n if (childHandle === undefined) {\n return undefined;\n }\n\n const child = createGtkElement(childHandle);\n return expectedKinds === undefined\n ? (child as Child)\n : assertExpectedKind<Child>(child, expectedKinds, 'childAt()');\n };\n\nconst createChildContainerOperations = <Child extends GtkWidgetElement>(\n handle: NativeElementHandle,\n expectedKinds: readonly GtkWidgetKind[] | undefined\n): {\n readonly childAt: (index: number) => Promise<Child | undefined>;\n readonly getChildCount: () => Promise<number>;\n} => ({\n childAt: createChildAtOperation<Child>(handle, expectedKinds),\n getChildCount: createGetChildCountOperation(handle),\n});\n\nconst createSelectableChildContainerOperations = <\n Child extends GtkWidgetElement,\n>(\n handle: NativeElementHandle,\n expectedKinds: readonly GtkWidgetKind[]\n): {\n readonly childAt: (index: number) => Promise<Child | undefined>;\n readonly getChildCount: () => Promise<number>;\n readonly getSelectedChildCount: () => Promise<number>;\n readonly selectedChildAt: (\n selectedIndex: number\n ) => Promise<Child | undefined>;\n readonly isChildSelected: (index: number) => Promise<boolean>;\n readonly selectChildAt: (index: number) => Promise<void>;\n readonly deselectChildAt: (index: number) => Promise<void>;\n readonly selectAllChildren: () => Promise<void>;\n readonly clearSelection: () => Promise<void>;\n} => ({\n ...createChildContainerOperations<Child>(handle, expectedKinds),\n getSelectedChildCount: async (): Promise<number> =>\n nativeSelectedChildCount(handle),\n selectedChildAt: async (\n selectedIndex: number\n ): Promise<Child | undefined> => {\n assertNonNegativeIndex('selectedIndex', selectedIndex);\n const childHandle = nativeSelectedChildAt(handle, selectedIndex);\n if (childHandle === undefined) {\n return undefined;\n }\n\n const child = createGtkElement(childHandle);\n return assertExpectedKind<Child>(child, expectedKinds, 'selectedChildAt()');\n },\n isChildSelected: async (index: number): Promise<boolean> => {\n assertNonNegativeIndex('index', index);\n return nativeIsChildSelected(handle, index);\n },\n selectChildAt: async (index: number): Promise<void> => {\n assertNonNegativeIndex('index', index);\n nativeSelectChildAt(handle, index);\n },\n deselectChildAt: async (index: number): Promise<void> => {\n assertNonNegativeIndex('index', index);\n nativeDeselectChildAt(handle, index);\n },\n selectAllChildren: async (): Promise<void> => {\n nativeSelectAllChildren(handle);\n },\n clearSelection: async (): Promise<void> => {\n nativeClearSelection(handle);\n },\n});\n\nconst createOperationFailedForOutOfRangeIndex = (index: number): Error =>\n createGtkOperationFailedError(`Child index is out of range: ${index}`);\n\nconst isUnsupportedInterfaceError = (error: unknown): boolean =>\n (error as { code?: unknown }).code === 'UNSUPPORTED_INTERFACE';\n\nconst visitNativeDescendants = (\n handle: NativeElementHandle,\n visitor: (descendantHandle: NativeElementHandle) => boolean,\n maxNodes: number\n): void => {\n const queue: NativeElementHandle[] = [];\n const childCount = nativeChildCount(handle);\n for (let index = 0; index < childCount; index += 1) {\n const childHandle = nativeChildAt(handle, index);\n if (childHandle !== undefined) {\n queue.push(childHandle);\n }\n }\n\n let visitedNodes = 0;\n while (queue.length > 0 && visitedNodes < maxNodes) {\n const currentHandle = queue.shift()!;\n visitedNodes += 1;\n if (visitor(currentHandle)) {\n return;\n }\n\n const currentChildCount = nativeChildCount(currentHandle);\n for (let index = 0; index < currentChildCount; index += 1) {\n const childHandle = nativeChildAt(currentHandle, index);\n if (childHandle !== undefined) {\n queue.push(childHandle);\n }\n }\n }\n};\n\nconst findFirstDescendantName = (\n handle: NativeElementHandle\n): string | undefined => {\n let foundName: string | undefined;\n visitNativeDescendants(\n handle,\n (descendantHandle) => {\n const name = nativeElementInfo(descendantHandle).name;\n if (name.length === 0) {\n return false;\n }\n\n foundName = name;\n return true;\n },\n 64\n );\n return foundName;\n};\n\nconst directChildKindAt = (\n handle: NativeElementHandle,\n index: number\n): GtkWidgetKind | undefined => {\n const childHandle = nativeChildAt(handle, index);\n return childHandle === undefined ? undefined : nativeInfoKind(childHandle);\n};\n\nconst handleContainsComboItems = (handle: NativeElementHandle): boolean => {\n const childCount = nativeChildCount(handle);\n if (childCount === 0) {\n return false;\n }\n\n const firstChildKind = directChildKindAt(handle, 0);\n return firstChildKind === 'listItem' || firstChildKind === 'menuItem';\n};\n\nconst findComboBoxItemContainerHandle = (\n handle: NativeElementHandle\n): NativeElementHandle | undefined => {\n if (handleContainsComboItems(handle)) {\n return handle;\n }\n\n // GTK4 GtkDropDown exposes the expanded popup list as a nested descendant.\n let foundHandle: NativeElementHandle | undefined;\n visitNativeDescendants(\n handle,\n (descendantHandle) => {\n const kind = nativeInfoKind(descendantHandle);\n if (\n (kind === 'list' || kind === 'menu') &&\n handleContainsComboItems(descendantHandle)\n ) {\n foundHandle = descendantHandle;\n return true;\n }\n\n return false;\n },\n 128\n );\n return foundHandle;\n};\n\nconst resolveComboBoxItemContainerHandle = (\n handle: NativeElementHandle\n): NativeElementHandle => {\n const descendantItemContainer = findComboBoxItemContainerHandle(handle);\n if (descendantItemContainer !== undefined) {\n return descendantItemContainer;\n }\n\n const childCount = nativeChildCount(handle);\n if (childCount !== 1) {\n return handle;\n }\n\n const childHandle = nativeChildAt(handle, 0);\n if (childHandle === undefined) {\n return handle;\n }\n\n const childKind = nativeInfoKind(childHandle);\n return childKind === 'menu' || childKind === 'list' ? childHandle : handle;\n};\n\nconst comboBoxClickTargetHandle = (\n handle: NativeElementHandle\n): NativeElementHandle => {\n const childHandle = nativeChildAt(handle, 0);\n if (childHandle === undefined) {\n return handle;\n }\n\n const childKind = nativeInfoKind(childHandle);\n return childKind === 'button' || childKind === 'toggleButton'\n ? childHandle\n : handle;\n};\n\nconst overrideComboBoxItemInfo = (\n handle: NativeElementHandle\n): NativeElementHandle => {\n const info = nativeElementInfo(handle);\n if (info.name.length > 0) {\n return handle;\n }\n\n const descendantName = findFirstDescendantName(handle);\n return descendantName === undefined\n ? handle\n : overrideElementInfo(handle, { name: descendantName });\n};\n\nconst itemIdentityMatches = (\n candidate: GtkElementInfo,\n selected: GtkElementInfo\n): boolean => {\n if (candidate.accessibleId.length > 0 && selected.accessibleId.length > 0) {\n return candidate.accessibleId === selected.accessibleId;\n }\n\n return (\n candidate.kind === selected.kind &&\n candidate.roleName === selected.roleName &&\n candidate.name === selected.name &&\n candidate.description === selected.description\n );\n};\n\ninterface ComboBoxItemLookup {\n readonly itemContainerHandle: NativeElementHandle;\n readonly itemHandle: NativeElementHandle;\n}\n\nconst comboBoxItemLookupAt = (\n handle: NativeElementHandle,\n index: number\n): ComboBoxItemLookup => {\n const itemContainerHandle = resolveComboBoxItemContainerHandle(handle);\n const itemHandle = nativeChildAt(itemContainerHandle, index);\n if (itemHandle === undefined) {\n throw createOperationFailedForOutOfRangeIndex(index);\n }\n\n const itemKind = nativeInfoKind(itemHandle);\n if (itemKind !== 'listItem' && itemKind !== 'menuItem') {\n throw createGtkUnsupportedInterfaceError(\n `ComboBox childAt() returned ${itemKind}, expected listItem, menuItem.`\n );\n }\n\n return {\n itemContainerHandle,\n itemHandle: overrideComboBoxItemInfo(itemHandle),\n };\n};\n\nconst comboBoxItemHandleAt = (\n handle: NativeElementHandle,\n index: number\n): NativeElementHandle => comboBoxItemLookupAt(handle, index).itemHandle;\n\nconst createComboBoxOperations = (\n handle: NativeElementHandle\n): {\n readonly childAt: (\n index: number\n ) => Promise<GtkComboBoxItemElement | undefined>;\n readonly getChildCount: () => Promise<number>;\n readonly getSelectedChildCount: () => Promise<number>;\n readonly selectedChildAt: (\n selectedIndex: number\n ) => Promise<GtkComboBoxItemElement | undefined>;\n readonly isChildSelected: (index: number) => Promise<boolean>;\n readonly selectChildAt: (index: number) => Promise<void>;\n readonly deselectChildAt: (index: number) => Promise<void>;\n readonly selectAllChildren: () => Promise<void>;\n readonly clearSelection: () => Promise<void>;\n} => ({\n childAt: async (\n index: number\n ): Promise<GtkComboBoxItemElement | undefined> => {\n assertNonNegativeIndex('index', index);\n const itemContainerHandle = resolveComboBoxItemContainerHandle(handle);\n const itemHandle = nativeChildAt(itemContainerHandle, index);\n if (itemHandle === undefined) {\n return undefined;\n }\n\n overrideComboBoxItemInfo(itemHandle);\n return assertExpectedKind<GtkComboBoxItemElement>(\n createGtkElement(itemHandle),\n ['listItem', 'menuItem'],\n 'childAt()'\n );\n },\n getChildCount: async (): Promise<number> =>\n nativeChildCount(resolveComboBoxItemContainerHandle(handle)),\n getSelectedChildCount: async (): Promise<number> =>\n nativeSelectedChildCount(handle),\n selectedChildAt: async (\n selectedIndex: number\n ): Promise<GtkComboBoxItemElement | undefined> => {\n assertNonNegativeIndex('selectedIndex', selectedIndex);\n const childHandle = nativeSelectedChildAt(handle, selectedIndex);\n if (childHandle === undefined) {\n return undefined;\n }\n\n return assertExpectedKind<GtkComboBoxItemElement>(\n createGtkElement(childHandle),\n ['listItem', 'menuItem'],\n 'selectedChildAt()'\n );\n },\n isChildSelected: async (index: number): Promise<boolean> => {\n assertNonNegativeIndex('index', index);\n const itemHandle = comboBoxItemHandleAt(handle, index);\n const itemInfo = toGtkElementInfoForHandle(itemHandle);\n const selectedCount = nativeSelectedChildCount(handle);\n for (\n let selectedIndex = 0;\n selectedIndex < selectedCount;\n selectedIndex += 1\n ) {\n const selectedHandle = nativeSelectedChildAt(handle, selectedIndex);\n if (selectedHandle === undefined) {\n continue;\n }\n\n const selectedInfo = toGtkElementInfo(nativeElementInfo(selectedHandle));\n if (itemIdentityMatches(itemInfo, selectedInfo)) {\n return true;\n }\n }\n\n return false;\n },\n selectChildAt: async (index: number): Promise<void> => {\n assertNonNegativeIndex('index', index);\n const { itemContainerHandle, itemHandle } = comboBoxItemLookupAt(\n handle,\n index\n );\n const expectedName = toGtkElementInfoForHandle(itemHandle).name;\n nativeClick(itemHandle);\n if (\n itemContainerHandle !== handle &&\n expectedName.length > 0 &&\n nativeElementInfo(handle).name !== expectedName\n ) {\n throw createGtkOperationFailedError(\n 'ComboBox child selection did not change the selected item.'\n );\n }\n },\n deselectChildAt: async (index: number): Promise<void> => {\n assertNonNegativeIndex('index', index);\n comboBoxItemHandleAt(handle, index);\n nativeDeselectChildAt(handle, 0);\n },\n selectAllChildren: async (): Promise<void> => {\n nativeSelectAllChildren(handle);\n },\n clearSelection: async (): Promise<void> => {\n const selectedBefore = nativeSelectedChildCount(handle);\n nativeClearSelection(handle);\n if (selectedBefore > 0 && nativeSelectedChildCount(handle) > 0) {\n throw createGtkOperationFailedError(\n 'ComboBox selection could not be cleared.'\n );\n }\n },\n});\n\nconst createSetTextOperation =\n (handle: NativeElementHandle): ((text: string) => Promise<void>) =>\n async (text: string): Promise<void> => {\n nativeSetText(handle, text);\n };\n\nconst createClickOperation =\n (handle: NativeElementHandle): (() => Promise<void>) =>\n async (): Promise<void> => {\n nativeClick(handle);\n };\n\nconst createComboBoxClickOperation =\n (handle: NativeElementHandle): (() => Promise<void>) =>\n async (): Promise<void> => {\n nativeClick(comboBoxClickTargetHandle(handle));\n };\n\nconst createTextOperation =\n (handle: NativeElementHandle): (() => Promise<string>) =>\n async (): Promise<string> =>\n nativeText(handle);\n\nconst createIsCheckedOperation =\n (handle: NativeElementHandle): (() => Promise<boolean>) =>\n async (): Promise<boolean> => {\n const info = nativeElementInfo(handle);\n return hasState(info, 'checked') || hasState(info, 'pressed');\n };\n\nconst createToggleOperation =\n (handle: NativeElementHandle): (() => Promise<void>) =>\n async (): Promise<void> => {\n nativeClick(handle);\n };\n\nconst createValueInfoOperation =\n (handle: NativeElementHandle): (() => Promise<GtkValueInfo>) =>\n async (): Promise<GtkValueInfo> =>\n nativeValueInfo(handle);\n\nconst createImageInfoOperation =\n (handle: NativeElementHandle): (() => Promise<GtkImageInfo>) =>\n async (): Promise<GtkImageInfo> => {\n const info: NativeImageInfo = nativeImageInfo(handle);\n return {\n ...info,\n capture: async (): Promise<GtkCapture> =>\n nativeCaptureBounds(info.bounds),\n };\n };\n\nconst createBoundsOperation =\n (handle: NativeElementHandle): (() => Promise<GtkCaptureBounds>) =>\n async (): Promise<GtkCaptureBounds> =>\n nativeBounds(handle);\n\nconst createResizeHintsOperation =\n (handle: NativeElementHandle): (() => Promise<GtkWindowResizeHints>) =>\n async (): Promise<GtkWindowResizeHints> =>\n nativeResizeHints(handle);\n\nconst createX11InfoOperation =\n (handle: NativeElementHandle): (() => Promise<GtkX11WindowInfo>) =>\n async (): Promise<GtkX11WindowInfo> =>\n nativeX11Info(handle);\n\nconst createValueOperation =\n (handle: NativeElementHandle): (() => Promise<number>) =>\n async (): Promise<number> =>\n nativeValueInfo(handle).value;\n\nconst createSetValueOperation =\n (handle: NativeElementHandle): ((value: number) => Promise<void>) =>\n async (value: number): Promise<void> => {\n assertFiniteNumber('value', value);\n nativeSetValue(handle, value);\n };\n\nconst assertUsableValueMetadata = (info: GtkValueInfo): void => {\n if (\n !Number.isFinite(info.value) ||\n !Number.isFinite(info.minimum) ||\n !Number.isFinite(info.maximum) ||\n !Number.isFinite(info.minimumIncrement)\n ) {\n throw createGtkOperationFailedError(\n 'Accessible value metadata does not contain usable numeric values.'\n );\n }\n};\n\nconst valueStep = (info: GtkValueInfo): number => {\n assertUsableValueMetadata(info);\n if (info.minimumIncrement > 0) {\n return info.minimumIncrement;\n }\n\n const range = info.maximum - info.minimum;\n if (!Number.isFinite(range) || range <= 0) {\n throw createGtkOperationFailedError(\n 'Accessible value metadata does not contain a usable increment.'\n );\n }\n return Math.min(1, range);\n};\n\nconst clampedValue = (\n value: number,\n minimum: number,\n maximum: number\n): number => Math.min(Math.max(value, minimum), maximum);\n\nconst createIncrementOperation =\n (handle: NativeElementHandle): (() => Promise<void>) =>\n async (): Promise<void> => {\n const info = nativeValueInfo(handle);\n const step = valueStep(info);\n nativeSetValue(\n handle,\n clampedValue(info.value + step, info.minimum, info.maximum)\n );\n };\n\nconst createDecrementOperation =\n (handle: NativeElementHandle): (() => Promise<void>) =>\n async (): Promise<void> => {\n const info = nativeValueInfo(handle);\n const step = valueStep(info);\n nativeSetValue(\n handle,\n clampedValue(info.value - step, info.minimum, info.maximum)\n );\n };\n\nconst collectDirectTableCellChildren = (\n rowHandle: NativeElementHandle\n): NativeElementHandle[] => {\n const cells: NativeElementHandle[] = [];\n const childCount = nativeChildCount(rowHandle);\n for (let index = 0; index < childCount; index += 1) {\n const childHandle = nativeChildAt(rowHandle, index);\n if (\n childHandle !== undefined &&\n nativeInfoKind(childHandle) === 'tableCell'\n ) {\n cells.push(childHandle);\n }\n }\n return cells;\n};\n\nconst collectFallbackTableRows = (\n handle: NativeElementHandle\n): NativeElementHandle[][] => {\n const rows: NativeElementHandle[][] = [];\n // GTK4 GtkColumnView exposes table rows and cells without the AT-SPI Table\n // interface, so table operations reconstruct the logical grid from children.\n visitNativeDescendants(\n handle,\n (descendantHandle) => {\n const roleName = normalizeRoleName(\n nativeElementInfo(descendantHandle).roleName\n );\n if (roleName !== 'table row') {\n return false;\n }\n\n const cells = collectDirectTableCellChildren(descendantHandle);\n if (cells.length > 0) {\n rows.push(\n cells.map((cellHandle) =>\n overrideElementInfo(cellHandle, { kind: 'tableCell' })\n )\n );\n }\n return false;\n },\n 512\n );\n return rows;\n};\n\nconst fallbackTableRowCount = (handle: NativeElementHandle): number =>\n collectFallbackTableRows(handle).length;\n\nconst fallbackTableColumnCount = (handle: NativeElementHandle): number => {\n const rows = collectFallbackTableRows(handle);\n return rows.reduce((max, row) => Math.max(max, row.length), 0);\n};\n\nconst fallbackTableCellAt = (\n handle: NativeElementHandle,\n row: number,\n column: number\n): NativeElementHandle | undefined => {\n const rows = collectFallbackTableRows(handle);\n return rows[row]?.[column];\n};\n\nconst createTableCellAtOperation =\n (\n handle: NativeElementHandle\n ): ((\n row: number,\n column: number\n ) => Promise<GtkTableCellElement | undefined>) =>\n async (\n row: number,\n column: number\n ): Promise<GtkTableCellElement | undefined> => {\n assertNonNegativeIndex('row', row);\n assertNonNegativeIndex('column', column);\n let cellHandle: NativeElementHandle | undefined;\n try {\n cellHandle = nativeTableCellAt(handle, row, column);\n } catch (error) {\n if (!isUnsupportedInterfaceError(error)) {\n throw error;\n }\n\n cellHandle = fallbackTableCellAt(handle, row, column);\n }\n\n if (cellHandle === undefined) {\n return undefined;\n }\n\n overrideElementInfo(cellHandle, { kind: 'tableCell' });\n return assertExpectedKind<GtkTableCellElement>(\n createGtkElement(cellHandle),\n ['tableCell'],\n 'cellAt()'\n );\n };\n\nconst createTableOperations = (\n handle: NativeElementHandle\n): {\n readonly getRowCount: () => Promise<number>;\n readonly getColumnCount: () => Promise<number>;\n readonly cellAt: (\n row: number,\n column: number\n ) => Promise<GtkTableCellElement | undefined>;\n readonly selectedRows: () => Promise<readonly number[]>;\n readonly selectedColumns: () => Promise<readonly number[]>;\n readonly isRowSelected: (row: number) => Promise<boolean>;\n readonly isColumnSelected: (column: number) => Promise<boolean>;\n readonly isCellSelected: (row: number, column: number) => Promise<boolean>;\n readonly selectRow: (row: number) => Promise<void>;\n readonly deselectRow: (row: number) => Promise<void>;\n readonly selectColumn: (column: number) => Promise<void>;\n readonly deselectColumn: (column: number) => Promise<void>;\n} => ({\n getRowCount: async (): Promise<number> => {\n try {\n return nativeTableRowCount(handle);\n } catch (error) {\n if (!isUnsupportedInterfaceError(error)) {\n throw error;\n }\n return fallbackTableRowCount(handle);\n }\n },\n getColumnCount: async (): Promise<number> => {\n try {\n return nativeTableColumnCount(handle);\n } catch (error) {\n if (!isUnsupportedInterfaceError(error)) {\n throw error;\n }\n return fallbackTableColumnCount(handle);\n }\n },\n cellAt: createTableCellAtOperation(handle),\n selectedRows: async (): Promise<readonly number[]> =>\n nativeTableSelectedRows(handle),\n selectedColumns: async (): Promise<readonly number[]> =>\n nativeTableSelectedColumns(handle),\n isRowSelected: async (row: number): Promise<boolean> => {\n assertNonNegativeIndex('row', row);\n return nativeTableIsRowSelected(handle, row);\n },\n isColumnSelected: async (column: number): Promise<boolean> => {\n assertNonNegativeIndex('column', column);\n return nativeTableIsColumnSelected(handle, column);\n },\n isCellSelected: async (row: number, column: number): Promise<boolean> => {\n assertNonNegativeIndex('row', row);\n assertNonNegativeIndex('column', column);\n return nativeTableIsCellSelected(handle, row, column);\n },\n selectRow: async (row: number): Promise<void> => {\n assertNonNegativeIndex('row', row);\n nativeTableSelectRow(handle, row);\n },\n deselectRow: async (row: number): Promise<void> => {\n assertNonNegativeIndex('row', row);\n nativeTableDeselectRow(handle, row);\n },\n selectColumn: async (column: number): Promise<void> => {\n assertNonNegativeIndex('column', column);\n nativeTableSelectColumn(handle, column);\n },\n deselectColumn: async (column: number): Promise<void> => {\n assertNonNegativeIndex('column', column);\n nativeTableDeselectColumn(handle, column);\n },\n});\n\n/** Creates an element bound to an opaque native accessible handle. */\nexport const createGtkElement = (\n handle: NativeElementHandle\n): GtkWidgetElement => {\n const initialInfo = toGtkElementInfoForHandle(handle);\n const common = createCommonElement(handle);\n\n switch (initialInfo.kind) {\n case 'window':\n return {\n ...common,\n kind: 'window',\n bounds: createBoundsOperation(handle),\n ...createChildContainerOperations<GtkWidgetElement>(handle, undefined),\n resizeHints: createResizeHintsOperation(handle),\n x11Info: createX11InfoOperation(handle),\n };\n case 'button':\n return { ...common, kind: 'button', click: createClickOperation(handle) };\n case 'container':\n return {\n ...common,\n kind: 'container',\n ...createChildContainerOperations<GtkWidgetElement>(handle, undefined),\n };\n case 'label':\n return { ...common, kind: 'label', text: createTextOperation(handle) };\n case 'entry':\n return {\n ...common,\n kind: 'entry',\n setText: createSetTextOperation(handle),\n text: createTextOperation(handle),\n };\n case 'text':\n return { ...common, kind: 'text', text: createTextOperation(handle) };\n case 'checkbox':\n return {\n ...common,\n kind: 'checkbox',\n click: createClickOperation(handle),\n isChecked: createIsCheckedOperation(handle),\n toggle: createToggleOperation(handle),\n };\n case 'switch':\n return {\n ...common,\n kind: 'switch',\n click: createClickOperation(handle),\n isChecked: createIsCheckedOperation(handle),\n toggle: createToggleOperation(handle),\n };\n case 'radio':\n return {\n ...common,\n kind: 'radio',\n click: createClickOperation(handle),\n isChecked: createIsCheckedOperation(handle),\n toggle: createToggleOperation(handle),\n };\n case 'toggleButton':\n return {\n ...common,\n kind: 'toggleButton',\n click: createClickOperation(handle),\n isChecked: createIsCheckedOperation(handle),\n toggle: createToggleOperation(handle),\n };\n case 'slider':\n return {\n ...common,\n kind: 'slider',\n value: createValueOperation(handle),\n valueInfo: createValueInfoOperation(handle),\n setValue: createSetValueOperation(handle),\n };\n case 'spinButton':\n return {\n ...common,\n kind: 'spinButton',\n value: createValueOperation(handle),\n valueInfo: createValueInfoOperation(handle),\n setValue: createSetValueOperation(handle),\n increment: createIncrementOperation(handle),\n decrement: createDecrementOperation(handle),\n };\n case 'progressBar':\n return {\n ...common,\n kind: 'progressBar',\n value: createValueOperation(handle),\n valueInfo: createValueInfoOperation(handle),\n };\n case 'comboBox':\n return {\n ...common,\n kind: 'comboBox',\n click: createComboBoxClickOperation(handle),\n ...createComboBoxOperations(handle),\n };\n case 'list':\n return {\n ...common,\n kind: 'list',\n ...createSelectableChildContainerOperations<GtkListItemElement>(\n handle,\n ['listItem']\n ),\n };\n case 'listItem':\n return {\n ...common,\n kind: 'listItem',\n click: createClickOperation(handle),\n };\n case 'table':\n return { ...common, kind: 'table', ...createTableOperations(handle) };\n case 'tableCell':\n return { ...common, kind: 'tableCell' };\n case 'image':\n return {\n ...common,\n kind: 'image',\n imageInfo: createImageInfoOperation(handle),\n };\n case 'menu':\n return {\n ...common,\n kind: 'menu',\n ...createChildContainerOperations<GtkMenuItemElement>(handle, [\n 'menuItem',\n ]),\n };\n case 'menuItem':\n return {\n ...common,\n kind: 'menuItem',\n click: createClickOperation(handle),\n };\n case 'unknown':\n return { ...common, kind: 'unknown' };\n }\n};\n","// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport {\n createGtkElementNotFoundError,\n createGtkStaleElementError,\n createGtkUnsupportedInterfaceError,\n} from './errors';\nimport { createGtkElement } from './element';\nimport {\n nativeFindAnyById,\n nativeTrayItems,\n type NativeTrayItem,\n} from './native';\nimport type {\n GtkCapture,\n GtkTrayItem,\n GtkTrayItemMetadata,\n GtkTrayItemSelector,\n GtkWidgetElement,\n} from './types';\n\ninterface NativeTrayItemHandle {\n readonly processId: number;\n readonly busName: string;\n readonly objectPath: string;\n}\n\nconst optionalString = (value: string): string | undefined =>\n value.length === 0 ? undefined : value;\n\nconst toMetadata = (item: NativeTrayItem): GtkTrayItemMetadata => {\n const iconName = optionalString(item.iconName);\n const id = optionalString(item.id);\n const status = optionalString(item.status);\n const title = optionalString(item.title);\n\n return {\n backend: 'status-notifier',\n ...(iconName === undefined ? {} : { iconName }),\n ...(id === undefined ? {} : { id }),\n ...(status === undefined ? {} : { status }),\n ...(title === undefined ? {} : { title }),\n };\n};\n\nconst sameTrayItem = (\n first: NativeTrayItemHandle,\n second: NativeTrayItem\n): boolean =>\n first.busName === second.busName && first.objectPath === second.objectPath;\n\nconst staleTrayItemError = (): Error =>\n createGtkStaleElementError('Tray item is no longer registered.');\n\nconst resolveCurrentInfo = (handle: NativeTrayItemHandle): NativeTrayItem => {\n const item = nativeTrayItems(handle.processId).find((candidate) =>\n sameTrayItem(handle, candidate)\n );\n if (item === undefined) {\n throw staleTrayItemError();\n }\n return item;\n};\n\ntype GtkClickableElement = Extract<\n GtkWidgetElement,\n { readonly click: () => Promise<void> }\n>;\n\nconst isClickableElement = (\n element: GtkWidgetElement\n): element is GtkClickableElement => {\n switch (element.kind) {\n case 'button':\n case 'checkbox':\n case 'switch':\n case 'radio':\n case 'toggleButton':\n case 'comboBox':\n case 'listItem':\n case 'menuItem':\n return true;\n default:\n return false;\n }\n};\n\n/** Returns whether a native tray item matches a public selector. */\nexport const nativeTrayItemMatchesSelector = (\n item: NativeTrayItem,\n selector: GtkTrayItemSelector\n): boolean => {\n if ('id' in selector) {\n return item.id === selector.id;\n }\n if ('title' in selector) {\n return item.title === selector.title;\n }\n if ('busName' in selector) {\n return (\n item.busName === selector.busName &&\n (selector.objectPath === undefined ||\n item.objectPath === selector.objectPath)\n );\n }\n return false;\n};\n\n/** Creates a stable logical tray item handle. */\nexport const createGtkTrayItem = (\n processId: number,\n item: NativeTrayItem\n): GtkTrayItem => {\n const handle: NativeTrayItemHandle = {\n busName: item.busName,\n objectPath: item.objectPath,\n processId,\n };\n\n const trayItem: GtkTrayItem = {\n metadata: async (): Promise<GtkTrayItemMetadata> =>\n toMetadata(resolveCurrentInfo(handle)),\n element: async (): Promise<GtkWidgetElement | undefined> => {\n const current = resolveCurrentInfo(handle);\n const elementHandle = nativeFindAnyById(current.accessibleId);\n return elementHandle === undefined\n ? undefined\n : createGtkElement(elementHandle);\n },\n capture: async (): Promise<GtkCapture> => {\n const element = await trayItem.element();\n if (element === undefined) {\n throw createGtkElementNotFoundError(\n 'Tray item is registered but not visible.'\n );\n }\n return element.capture();\n },\n click: async (): Promise<void> => {\n const element = await trayItem.element();\n if (element === undefined) {\n throw createGtkElementNotFoundError(\n 'Tray item is registered but not visible.'\n );\n }\n if (!isClickableElement(element)) {\n throw createGtkUnsupportedInterfaceError(\n `Tray item element does not support click: ${element.kind}.`\n );\n }\n await element.click();\n },\n openMenu: async (): Promise<GtkWidgetElement | undefined> => {\n resolveCurrentInfo(handle);\n return undefined;\n },\n };\n\n return trayItem;\n};\n","// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { delay } from 'async-primitives';\n\nimport {\n createGtkAppExitedError,\n createGtkElementNotFoundError,\n createGtkInvalidArgumentError,\n createGtkOperationFailedError,\n normalizeNativeError,\n} from './errors';\nimport { createDriverBackedGtkAppLauncher } from './displaySession';\nimport { createGtkElement } from './element';\nimport { appendPrerequisiteInstallHint } from './prerequisites';\nimport { effectiveWaitTimeoutMs } from './wait';\nimport {\n nativeFindById,\n nativeCaptureScreen,\n nativeProcessAtspiReadiness,\n nativeTrayItems,\n nativeWindowAt,\n nativeWindowCount,\n type NativeAtspiReadiness,\n} from './native';\nimport { createGtkTrayItem, nativeTrayItemMatchesSelector } from './tray';\nimport type {\n GtkApp,\n GtkAppEnvironment,\n GtkAppLauncher,\n GtkAppLauncherOptions,\n GtkCapture,\n GtkTrayItem,\n GtkTrayItemSelector,\n GtkWidgetElement,\n LaunchGtkAppOptions,\n} from './types';\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\nconst appendOutput = (lines: string[], chunk: Buffer): void => {\n lines.push(chunk.toString('utf8'));\n if (lines.length > 40) {\n lines.splice(0, lines.length - 40);\n }\n};\n\ninterface ProcessState {\n readonly process: ChildProcessWithoutNullStreams;\n readonly stderr: string[];\n readonly stdout: string[];\n atspiReadiness: NativeAtspiReadiness;\n atspiReady: boolean;\n exitCode: number | null;\n exitSignal: NodeJS.Signals | null;\n}\n\ninterface ParsedElementPath {\n readonly id: string;\n readonly childIndexes: readonly number[];\n}\n\ninterface GtkPathChildContainer {\n readonly childAt: (index: number) => Promise<GtkWidgetElement | undefined>;\n}\n\nconst formatProcessOutput = (state: ProcessState): string => {\n const stdout = state.stdout.join('').trim();\n const stderr = state.stderr.join('').trim();\n\n if (stdout.length === 0 && stderr.length === 0) {\n return '';\n }\n\n return `\\nstdout:\\n${stdout}\\nstderr:\\n${stderr}`;\n};\n\nconst assertProcessRunning = (state: ProcessState, command: string): number => {\n if (state.exitCode !== null || state.exitSignal !== null) {\n throw createGtkAppExitedError(\n `GTK application exited before the operation completed: ${command} ` +\n `(code=${String(state.exitCode)}, signal=${String(state.exitSignal)})` +\n formatProcessOutput(state)\n );\n }\n\n const processId = state.process.pid;\n if (processId === undefined) {\n throw createGtkAppExitedError(\n `GTK application did not expose a process id: ${command}`\n );\n }\n\n return processId;\n};\n\nconst assertNonNegativeIndex = (name: string, index: number): void => {\n if (!Number.isInteger(index) || index < 0) {\n throw createGtkInvalidArgumentError(\n `${name} must be a non-negative integer.`\n );\n }\n};\n\nconst parseElementPath = (path: string): ParsedElementPath => {\n const segments = path.split(/[.:;,]/u);\n const id = segments[0];\n if (id === undefined || id.length === 0) {\n throw createGtkInvalidArgumentError(\n 'path must start with an accessible id.'\n );\n }\n\n const childIndexes: number[] = [];\n for (let index = 1; index < segments.length; index += 1) {\n const segment = segments[index];\n if (segment === undefined || !/^\\d+$/u.test(segment)) {\n throw createGtkInvalidArgumentError(\n 'path child indexes must be non-negative decimal integers.'\n );\n }\n\n const childIndex = Number(segment);\n if (!Number.isSafeInteger(childIndex)) {\n throw createGtkInvalidArgumentError(\n 'path child indexes must be safe non-negative integers.'\n );\n }\n\n childIndexes.push(childIndex);\n }\n\n return { id, childIndexes };\n};\n\nconst isPathChildContainer = (\n element: GtkWidgetElement\n): element is GtkWidgetElement & GtkPathChildContainer => 'childAt' in element;\n\nconst waitForAtspiReady = async (\n state: ProcessState,\n command: string,\n timeoutMs: number,\n startedAt: number\n): Promise<number> => {\n if (state.atspiReady) {\n return assertProcessRunning(state, command);\n }\n\n while (Date.now() - startedAt <= timeoutMs) {\n const processId = assertProcessRunning(state, command);\n state.atspiReadiness = nativeProcessAtspiReadiness(processId);\n if (state.atspiReadiness === 'ready') {\n state.atspiReady = true;\n return processId;\n }\n\n await delay(50);\n }\n\n assertProcessRunning(state, command);\n throw createGtkOperationFailedError(\n appendPrerequisiteInstallHint(\n `AT-SPI did not become ready for GTK application: ${command} ` +\n `(last readiness: ${state.atspiReadiness})` +\n formatProcessOutput(state)\n )\n );\n};\n\n/**\n * Creates the child process environment used for gestament GTK automation.\n *\n * @param baseEnv Base environment, usually process.env.\n * @param overrides Optional environment overrides supplied by the caller.\n * @returns Environment object passed to child_process.spawn.\n * @remarks\n * gestament defaults to X11 and in-memory GSettings for stable visual tests.\n * NO_AT_BRIDGE is always removed because it disables AT-SPI automation.\n */\nexport const createGtkAppEnvironment = (\n baseEnv: GtkAppEnvironment,\n overrides: GtkAppEnvironment | undefined\n): NodeJS.ProcessEnv => {\n const env: NodeJS.ProcessEnv = {\n ...baseEnv,\n GDK_BACKEND: baseEnv.GDK_BACKEND ?? 'x11',\n GSETTINGS_BACKEND: baseEnv.GSETTINGS_BACKEND ?? 'memory',\n GTK_THEME: baseEnv.GTK_THEME ?? 'Adwaita',\n ...overrides,\n };\n delete env.NO_AT_BRIDGE;\n for (const key of Object.keys(env)) {\n if (env[key] === undefined) {\n delete env[key];\n }\n }\n return env;\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Launches a GTK application and returns an AT-SPI automation handle.\n * @param appPath - Target GTK application path.\n * @param args - Target GTK application arguments.\n * @param options - Options.\n * @returns GtkApp instanced.\n */\nexport const launchGtkApp = (\n appPath: string,\n args?: readonly string[],\n options?: LaunchGtkAppOptions\n): Promise<GtkApp> => {\n const _args = args ?? [];\n const _timeoutMs = options?.timeoutMs ?? 10_000;\n const appEnvironment = createGtkAppEnvironment(process.env, options?.env);\n\n const child = spawn(appPath, [..._args], {\n env: appEnvironment,\n stdio: 'pipe',\n });\n\n const state: ProcessState = {\n atspiReadiness: 'missing-bus-name',\n atspiReady: false,\n exitCode: null,\n exitSignal: null,\n process: child,\n stderr: [],\n stdout: [],\n };\n\n child.stdout.on('data', (chunk: Buffer) => {\n appendOutput(state.stdout, chunk);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n appendOutput(state.stderr, chunk);\n });\n child.on('exit', (code, signal) => {\n state.exitCode = code;\n state.exitSignal = signal;\n });\n\n const release = async (): Promise<void> => {\n if (state.exitCode !== null || state.exitSignal !== null) {\n return;\n }\n\n child.kill('SIGTERM');\n\n const startedAt = Date.now();\n while (state.exitCode === null && state.exitSignal === null) {\n if (Date.now() - startedAt > 2_000) {\n child.kill('SIGKILL');\n break;\n }\n await delay(25);\n }\n };\n\n const findById = async (\n id: string\n ): Promise<GtkWidgetElement | undefined> => {\n const startedAt = Date.now();\n const timeoutMs = effectiveWaitTimeoutMs(_timeoutMs);\n await waitForAtspiReady(state, appPath, timeoutMs, startedAt);\n\n while (Date.now() - startedAt <= timeoutMs) {\n const processId = assertProcessRunning(state, appPath);\n\n try {\n const handle = nativeFindById(processId, id);\n if (handle !== undefined) {\n return createGtkElement(handle);\n }\n } catch (error) {\n throw normalizeNativeError(error);\n }\n\n await delay(50);\n }\n\n assertProcessRunning(state, appPath);\n return undefined;\n };\n\n const getById = async (id: string): Promise<GtkWidgetElement> => {\n const element = await findById(id);\n if (element === undefined) {\n throw createGtkElementNotFoundError(`Accessible id was not found: ${id}`);\n }\n\n return element;\n };\n\n const findByPath = async (\n path: string\n ): Promise<GtkWidgetElement | undefined> => {\n const parsedPath = parseElementPath(path);\n const startedAt = Date.now();\n const timeoutMs = effectiveWaitTimeoutMs(_timeoutMs);\n await waitForAtspiReady(state, appPath, timeoutMs, startedAt);\n\n while (Date.now() - startedAt <= timeoutMs) {\n const processId = assertProcessRunning(state, appPath);\n\n try {\n const handle = nativeFindById(processId, parsedPath.id);\n if (handle !== undefined) {\n let element = createGtkElement(handle);\n let resolved = true;\n\n for (const childIndex of parsedPath.childIndexes) {\n if (!isPathChildContainer(element)) {\n resolved = false;\n break;\n }\n\n const child = await element.childAt(childIndex);\n if (child === undefined) {\n resolved = false;\n break;\n }\n\n element = child;\n }\n\n if (resolved) {\n return element;\n }\n }\n } catch (error) {\n throw normalizeNativeError(error);\n }\n\n await delay(50);\n }\n\n assertProcessRunning(state, appPath);\n return undefined;\n };\n\n const getByPath = async (path: string): Promise<GtkWidgetElement> => {\n const element = await findByPath(path);\n if (element === undefined) {\n throw createGtkElementNotFoundError(\n `Element path was not found: ${path}`\n );\n }\n\n return element;\n };\n\n const findTrayItem = async (\n selector: GtkTrayItemSelector\n ): Promise<GtkTrayItem | undefined> => {\n const startedAt = Date.now();\n const timeoutMs = effectiveWaitTimeoutMs(_timeoutMs);\n\n while (Date.now() - startedAt <= timeoutMs) {\n const processId = assertProcessRunning(state, appPath);\n\n try {\n const item = nativeTrayItems(processId).find((candidate) =>\n nativeTrayItemMatchesSelector(candidate, selector)\n );\n if (item !== undefined) {\n return createGtkTrayItem(processId, item);\n }\n } catch (error) {\n const normalizedError = normalizeNativeError(error);\n if (\n normalizedError.code === 'OPERATION_FAILED' &&\n normalizedError.message.includes('Timeout was reached')\n ) {\n await delay(50);\n continue;\n }\n throw normalizedError;\n }\n\n await delay(50);\n }\n\n assertProcessRunning(state, appPath);\n return undefined;\n };\n\n const getTrayItem = async (\n selector: GtkTrayItemSelector\n ): Promise<GtkTrayItem> => {\n const trayItem = await findTrayItem(selector);\n if (trayItem === undefined) {\n throw createGtkElementNotFoundError(\n `StatusNotifier tray item was not found: ${JSON.stringify(selector)}`\n );\n }\n\n return trayItem;\n };\n\n const app: GtkApp = {\n capture: async (): Promise<GtkCapture> => {\n assertProcessRunning(state, appPath);\n\n try {\n return nativeCaptureScreen();\n } catch (error) {\n throw normalizeNativeError(error);\n }\n },\n environment: async (): Promise<GtkAppEnvironment> => {\n assertProcessRunning(state, appPath);\n return { ...appEnvironment };\n },\n findById,\n findByPath,\n getById,\n getByPath,\n windowAt: async (index: number): Promise<GtkWidgetElement | undefined> => {\n assertNonNegativeIndex('index', index);\n const startedAt = Date.now();\n const processId = await waitForAtspiReady(\n state,\n appPath,\n effectiveWaitTimeoutMs(_timeoutMs),\n startedAt\n );\n\n try {\n const handle = nativeWindowAt(processId, index);\n return handle === undefined ? undefined : createGtkElement(handle);\n } catch (error) {\n throw normalizeNativeError(error);\n }\n },\n getWindowCount: async (): Promise<number> => {\n const startedAt = Date.now();\n const processId = await waitForAtspiReady(\n state,\n appPath,\n effectiveWaitTimeoutMs(_timeoutMs),\n startedAt\n );\n\n try {\n return nativeWindowCount(processId);\n } catch (error) {\n throw normalizeNativeError(error);\n }\n },\n findTrayItem,\n getTrayItem,\n trayItemAt: async (index: number): Promise<GtkTrayItem | undefined> => {\n assertNonNegativeIndex('index', index);\n const processId = assertProcessRunning(state, appPath);\n\n try {\n const item = nativeTrayItems(processId)[index];\n return item === undefined\n ? undefined\n : createGtkTrayItem(processId, item);\n } catch (error) {\n throw normalizeNativeError(error);\n }\n },\n getTrayItemCount: async (): Promise<number> => {\n const processId = assertProcessRunning(state, appPath);\n\n try {\n return nativeTrayItems(processId).length;\n } catch (error) {\n throw normalizeNativeError(error);\n }\n },\n release,\n [Symbol.asyncDispose]: release,\n };\n\n child.on('error', (error) => {\n appendOutput(state.stderr, Buffer.from(error.message));\n });\n\n return Promise.resolve(app);\n};\n\n/**\n * Creates a reusable GTK application launcher.\n * @param options - Options.\n * @returns GtkAppLauncher instance.\n */\nexport const createGtkAppLauncher = (\n options: GtkAppLauncherOptions\n): GtkAppLauncher => createDriverBackedGtkAppLauncher(options);\n"],"names":["appendOutput","createGtkInvalidArgumentError","resolve","dirname","fileURLToPath","existsSync","createGtkOperationFailedError","createConnection","spawn","appendPrerequisiteInstallHint","currentWaitDeadlineMs","createGtkAppExitedError","rmSync","mkdtempSync","join","tmpdir","createServer","xvfb","assertNonNegativeIndex","nativeElementInfo","nativeCapture","createGtkUnsupportedInterfaceError","nativeChildCount","nativeChildAt","nativeSelectedChildCount","nativeSelectedChildAt","nativeIsChildSelected","nativeSelectChildAt","nativeDeselectChildAt","nativeSelectAllChildren","nativeClearSelection","nativeClick","nativeSetText","nativeText","nativeValueInfo","nativeImageInfo","nativeCaptureBounds","nativeBounds","nativeResizeHints","nativeX11Info","nativeSetValue","nativeTableCellAt","nativeTableRowCount","nativeTableColumnCount","nativeTableSelectedRows","nativeTableSelectedColumns","nativeTableIsRowSelected","nativeTableIsColumnSelected","nativeTableIsCellSelected","nativeTableSelectRow","nativeTableDeselectRow","nativeTableSelectColumn","nativeTableDeselectColumn","createGtkStaleElementError","nativeTrayItems","nativeFindAnyById","createGtkElementNotFoundError","nativeProcessAtspiReadiness","delay","effectiveWaitTimeoutMs","nativeFindById","normalizeNativeError","child","nativeCaptureScreen","nativeWindowAt","nativeWindowCount"],"mappings":"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"}