@gtkx/runtime 1.6.0 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +5 -5
  2. package/dist/application-class.d.ts +1 -1
  3. package/dist/application-class.d.ts.map +1 -1
  4. package/dist/application-class.js +1 -2
  5. package/dist/application-class.js.map +1 -1
  6. package/dist/arg.d.ts +4 -1
  7. package/dist/arg.d.ts.map +1 -1
  8. package/dist/arg.js.map +1 -1
  9. package/dist/bind.d.ts.map +1 -1
  10. package/dist/bind.js +1 -9
  11. package/dist/bind.js.map +1 -1
  12. package/dist/callback.d.ts +6 -1
  13. package/dist/callback.d.ts.map +1 -1
  14. package/dist/callback.js +33 -21
  15. package/dist/callback.js.map +1 -1
  16. package/dist/closure.d.ts +3 -1
  17. package/dist/closure.d.ts.map +1 -1
  18. package/dist/closure.js +17 -6
  19. package/dist/closure.js.map +1 -1
  20. package/dist/descriptors.d.ts +22 -51
  21. package/dist/descriptors.d.ts.map +1 -1
  22. package/dist/descriptors.js +53 -27
  23. package/dist/descriptors.js.map +1 -1
  24. package/dist/fn.d.ts.map +1 -1
  25. package/dist/fn.js +23 -9
  26. package/dist/fn.js.map +1 -1
  27. package/dist/folded-lengths.d.ts +2 -1
  28. package/dist/folded-lengths.d.ts.map +1 -1
  29. package/dist/folded-lengths.js +17 -7
  30. package/dist/folded-lengths.js.map +1 -1
  31. package/dist/index.d.ts +2 -24
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -24
  34. package/dist/index.js.map +1 -1
  35. package/dist/internal.d.ts +18 -2
  36. package/dist/internal.d.ts.map +1 -1
  37. package/dist/internal.js +14 -2
  38. package/dist/internal.js.map +1 -1
  39. package/dist/listeners.d.ts +3 -13
  40. package/dist/listeners.d.ts.map +1 -1
  41. package/dist/listeners.js +12 -12
  42. package/dist/listeners.js.map +1 -1
  43. package/dist/mixin.d.ts +5 -3
  44. package/dist/mixin.d.ts.map +1 -1
  45. package/dist/mixin.js +36 -9
  46. package/dist/mixin.js.map +1 -1
  47. package/dist/native-value.d.ts +9 -1
  48. package/dist/native-value.d.ts.map +1 -1
  49. package/dist/native-value.js +20 -3
  50. package/dist/native-value.js.map +1 -1
  51. package/dist/object.d.ts +11 -0
  52. package/dist/object.d.ts.map +1 -1
  53. package/dist/object.js +18 -25
  54. package/dist/object.js.map +1 -1
  55. package/dist/properties.d.ts +5 -3
  56. package/dist/properties.d.ts.map +1 -1
  57. package/dist/properties.js +67 -23
  58. package/dist/properties.js.map +1 -1
  59. package/dist/property-brand.d.ts +5 -0
  60. package/dist/property-brand.d.ts.map +1 -0
  61. package/dist/property-brand.js +5 -0
  62. package/dist/property-brand.js.map +1 -0
  63. package/dist/register-class.d.ts +142 -264
  64. package/dist/register-class.d.ts.map +1 -1
  65. package/dist/register-class.js +19 -37
  66. package/dist/register-class.js.map +1 -1
  67. package/dist/registry.d.ts +1 -1
  68. package/dist/registry.d.ts.map +1 -1
  69. package/dist/registry.js +4 -4
  70. package/dist/registry.js.map +1 -1
  71. package/dist/signal-brand.d.ts +12 -0
  72. package/dist/signal-brand.d.ts.map +1 -0
  73. package/dist/signal-brand.js +6 -0
  74. package/dist/signal-brand.js.map +1 -0
  75. package/dist/signal.d.ts +39 -2
  76. package/dist/signal.d.ts.map +1 -1
  77. package/dist/signal.js +84 -27
  78. package/dist/signal.js.map +1 -1
  79. package/dist/t.d.ts +5 -21
  80. package/dist/t.d.ts.map +1 -1
  81. package/dist/t.js +1 -5
  82. package/dist/t.js.map +1 -1
  83. package/dist/type.d.ts.map +1 -1
  84. package/dist/type.js +8 -2
  85. package/dist/type.js.map +1 -1
  86. package/dist/value.d.ts.map +1 -1
  87. package/dist/value.js +7 -1
  88. package/dist/value.js.map +1 -1
  89. package/dist/variant.d.ts +2 -6
  90. package/dist/variant.d.ts.map +1 -1
  91. package/dist/variant.js.map +1 -1
  92. package/dist/vfunc-call.d.ts.map +1 -1
  93. package/dist/vfunc-call.js +2 -11
  94. package/dist/vfunc-call.js.map +1 -1
  95. package/package.json +9 -5
  96. package/src/application-class.ts +2 -2
  97. package/src/arg.ts +4 -1
  98. package/src/bind.ts +1 -12
  99. package/src/callback.ts +53 -29
  100. package/src/closure.ts +31 -6
  101. package/src/descriptors.ts +95 -59
  102. package/src/fn.ts +31 -10
  103. package/src/folded-lengths.ts +23 -10
  104. package/src/index.ts +2 -24
  105. package/src/internal.ts +43 -2
  106. package/src/listeners.ts +21 -26
  107. package/src/mixin.ts +55 -9
  108. package/src/native-value.ts +24 -3
  109. package/src/object.ts +55 -5
  110. package/src/properties.ts +90 -26
  111. package/src/property-brand.ts +5 -0
  112. package/src/register-class.ts +338 -341
  113. package/src/registry.ts +4 -4
  114. package/src/signal-brand.ts +29 -0
  115. package/src/signal.ts +185 -39
  116. package/src/t.ts +5 -21
  117. package/src/type.ts +10 -2
  118. package/src/value.ts +9 -1
  119. package/src/variant.ts +2 -6
  120. package/src/vfunc-call.ts +3 -16
@@ -1 +1 @@
1
- {"version":3,"file":"register-class.js","sourceRoot":"","sources":["../src/register-class.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,IAAI,mBAAmB,GAKvC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAiB,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,eAAe,EAGf,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAEjB,UAAU,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,oBAAoB,EAEpB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EAEpB,WAAW,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,cAAc,EACd,YAAY,EACZ,SAAS,EAET,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,OAAO,EACP,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAgUpF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,oBAAoB,GAAgB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAC3E,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAClD,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEhD,MAAM,oBAAoB,GAAwB;IAC9C,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE;IACnF,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE;CACvF,CAAC;AAEF,MAAM,oBAAoB,GAAgB,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACvG,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAC9C,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAC3D,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAgE3C,SAAS,aAAa,CAAC,KAAe,EAAE,UAAmC,EAAE;IACzE,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,CAAC,IAAI,yCAAyC,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC7E,4BAA4B,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG;QAChB,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC;QACtC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;KAChE,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAC5G,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,iBAAiB,CACnC,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,CAAC,EACpE,OAAO,CAAC,MAAM,CACjB,CAAC;IAEF,MAAM,OAAO,GAAW,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC7E,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAC1D,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,OAAgC,EAAE,OAAe;IACtE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;IACX,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe,CAAC,KAAe,EAAE,OAAgC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;IAC/G,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CACf,mBAAmB,IAAI,+DAA+D;YACtF,sEAAsE,CACzE,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe,EAAE,KAAe;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,cAAc,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,MAAM,IAAI,SAAS,CACf,kBAAkB,KAAK,CAAC,IAAI,WAAW,KAAK,sDAAsD,CACrG,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAe,EAAE,OAAmB;IAC/D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe,EAAE,YAAsB,EAAE,OAAoB;IACrF,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,wBAAwB,CAAC,CAAC;IAEnG,IAAI,eAAe,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CACf,kBAAkB,KAAK,CAAC,IAAI,qEAAqE;YACjG,mEAAmE,CACtE,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe,EAAE,YAAsB,EAAE,cAA2B;IAC9F,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACtC,OAAO,CACH,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAEhC,OAAO,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC,CAAC,IAAI,YAAY,CACrB,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,OAAwB,EAAE,KAAa,EAAE,IAAY,EAAE,WAAoB;IAC7F,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO;IACX,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhE,IAAI,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAgB,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,OAAwB,EAAE,KAAe,EAAE,WAAoB;IAClF,MAAM,KAAK,GAAI,KAAgC,CAAC,SAAS,CAAC;IAE1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO;IACX,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe;IAC3C,MAAM,OAAO,GAAoB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACrG,IAAI,GAAG,GAAoB,KAAK,CAAC;IAEjC,OAAO,GAAG,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC;QACxD,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;QAC3C,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CACzB,EAAW,EACX,UAAkB,EAClB,iBAAsE,EACtE,IAA6B;IAE7B,IAAI,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO;QACH,GAAG,UAAU;QACb,UAAU;QACV,cAAc;QACd,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC;KAChD,CAAC;AACN,CAAC;AAED,SAAS,uBAAuB,CAC5B,OAAoB,EACpB,iBAAsE,EACtE,IAAkB;IAElB,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAEjF,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe,EAAE,OAAoB;IAC9D,OAAO,uBAAuB,CAC1B,OAAO,EACP,CAAC,UAAU,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,SAAS,EACxE,oBAAoB,CACvB,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CACd,EAAW,EACX,cAA0D,EAC1D,UAA2B;IAE3B,OAAO,YAAY,CACf,EAAqC,EACrC,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,EACjE,OAAO,CACV,CAAC;AACN,CAAC;AAED,MAAM,iBAAiB,GAAG,CACtB,kBAA+B,EAC/B,iBAA0C,EAC/B,EAAE;IACb,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,aAAuB,EAAE,YAAoB,EAAW,EAAE,CACrG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE9E,SAAS,sBAAsB,CAAC,KAAe,EAAE,UAAkB,EAAE,aAAuB,EAAE,KAAa;IACvG,KAAK,MAAM,YAAY,IAAI,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,SAAS,CACf,kBAAkB,KAAK,CAAC,IAAI,8BAA8B;gBAC1D,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,iBAAiB;gBACnE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAC1C,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAe,EAAE,UAAkB,EAAE,aAAuB;IAC9F,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAChC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CACxB,KAAe,EACf,OAAoB,EACpB,kBAA+B,EAC/B,iBAA0C;IAE1C,MAAM,OAAO,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IAEzE,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CACX,kBAAkB,KAAK,CAAC,IAAI,IAAI,UAAU,0CAA0C;gBACpF,0FAA0F;gBAC1F,oCAAoC,CACvC,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAC9B,OAAoB,EACpB,WAAmB,EACnB,aAAuB,EACvB,kBAA+B;IAE/B,MAAM,QAAQ,GAAgB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,MAAM,GAAgB,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IACxF,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,uBAAuB,CAC5B,OAAoB,EACpB,cAAsB,EACtB,kBAA+B;IAE/B,OAAO,uBAAuB,CAC1B,OAAO,EACP,CAAC,UAAU,EAAE,EAAE,CAAC,4BAA4B,CAAC,cAAc,EAAE,UAAU,CAAC,EACxE,kBAAkB,CACrB,CAAC;AACN,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,QAA0B,EAAE,YAAsB,EAAW,EAAE,CAC5F,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAE7D,SAAS,gBAAgB,CACrB,MAA2B,EAC3B,IAAuB;IAEvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAE1D,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC9D,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC7B,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;IAEtD,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,cAAc,CAAC,MAA2B;IAC/C,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAC5E,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CACjC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,cAA4B,EAAE,KAAa,EAAE,KAAe;IACzE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,cAAc,CAAC,UAA2B;IAC/C,OAAO,CACH,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9C,UAAU,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,IAAI,KAAK,QAAQ,CACnE,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,UAA2B;IACnD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,cAAc,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,kBAAkB,CACvB,KAAe,EACf,UAAkB,EAClB,EAAW,EACX,UAAmB;IAEnB,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,eAAe,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,cAAc,GAAG,UAAU;QAC7B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAClF,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;IAEhC,OAAO;QACH,GAAG,UAAU;QACb,UAAU;QACV,cAAc;QACd,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC;KAChD,CAAC;AACN,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhF,SAAS,yBAAyB,CAAC,KAAe,EAAE,IAAY;IAC5D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,MAAM,IAAI,SAAS,CACf,kBAAkB,KAAK,CAAC,IAAI,yBAAyB,IAAI,uCAAuC;QAChG,oFAAoF;QACpF,kBAAkB,SAAS,CAAC,IAAI,CAAC,GAAG,CACvC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,UAAkB;IACxD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEtD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAoB;IACjE,KAAK,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEzD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACjB,SAAS;QACb,CAAC;QAED,MAAM,OAAO,GAAG,EAAqC,CAAC;QAEtD,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe,EAAE,UAAkB,EAAE,IAAY,EAAE,KAAkB;IAC7F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CACf,0BAA0B,UAAU,QAAQ,KAAK,CAAC,IAAI,oCAAoC;YAC1F,gBAAgB,IAAI,EAAE,CACzB,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAe,EAAE,IAAY,EAAE,IAAgB;IAC5E,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAEnF,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7D,CAAC;AAED,SAAS,qBAAqB,CAC1B,KAAe,EACf,IAAY,EACZ,IAAgB;IAEhB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC5D,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CACvE,CAAC;IAEF,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,MAAM,GAA8B,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAwB,EAAE,UAAU,EAAE,CAAC;IAErD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe,EAAE,OAAmC;IAChF,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAqC,IAAI,GAAG,EAAE,CAAC;IAE1D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAI,SAAwB,EAAE,MAAc;IACtE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAC3B,KAAuB,EACvB,YAAiE;IAEjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC;IAEvC,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO,CAE5B,MAAc,EACd,OAAsB,EACtB,OAAiB;QAEjB,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChG,CAAC;QAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CACxB,KAAuB,EACvB,YAAiE;IAEjE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;IAEjC,KAAK,CAAC,IAAI,GAAG,SAAS,IAAI,CAAe,OAAe,EAAE,GAAG,IAAe;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,qBAAqB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC;AACN,CAAC;AAED,SAAS,4BAA4B,CACjC,KAAe,EACf,KAAuC,EACvC,YAAyB;IAEzB,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAA6B,CAAC;IAElD,MAAM,YAAY,GAAG,CAAC,MAAc,EAAmC,EAAE,CACrE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA8B;IACrD,MAAM,eAAe,GAAiC;QAClD,IAAI,EAAE,OAAO,CAAC,KAAK;QACnB,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;KAC9B,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IAEjD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,eAAe,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5C,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED,SAAS,iBAAiB,CACtB,OAA+C,EAC/C,OAAoC;IAEpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmC,EAAE,MAA+B;IAChG,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACrC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACpB,WAA8B,EAC9B,iBAA0C,EAC1C,UAAwC,EACxC,MAA+B;IAE/B,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,OAAO,EAAkB,aAAa,EAAqC,CAAC","sourcesContent":["import type { Descriptor } from \"@gtkx/native\";\nimport {\n registerClass as nativeRegisterClass,\n type RegisterClassInterface as NativeRegisterClassInterface,\n type RegisterClassOptions as NativeRegisterClassOptions,\n type RegisterClassSignal as NativeRegisterClassSignal,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n} from \"@gtkx/native\";\nimport { type AnyClass, getParentClass, kebabCase, walkClassChain } from \"@gtkx/utils\";\nimport { wrapCallback } from \"./callback.js\";\nimport { insertMixinLayer } from \"./mixin.js\";\nimport {\n buildPropertyDispatch,\n GET_PROPERTY_VFUNC,\n makeGetProperty,\n makeSetProperty,\n type PropertyDispatch,\n type PropertySpec,\n SET_PROPERTY_VFUNC,\n toNativeProperties,\n} from \"./properties.js\";\nimport {\n getClassStructClass,\n getClassType,\n getInterfaceMixin,\n getTypeClassHandle,\n markDerivedClass,\n registerClassType,\n type VfuncDescriptor,\n wrapHandle,\n} from \"./registry.js\";\nimport {\n connectClosureSignal,\n type DeclaredSignalTypes,\n emitDeclaredSignal,\n getSignalBaseName,\n overrideSignalClassClosure,\n signalForHandlerName,\n type SignalHandler,\n signalIdFor,\n} from \"./signal.js\";\nimport {\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_NONE,\n type TypedClass,\n typeFundamental,\n typeInterfacePrerequisites,\n typeInterfaces,\n typeIsA,\n typeName,\n} from \"./type.js\";\nimport { findClassVfuncDescriptor, findInterfaceVfuncDescriptor } from \"./vfunc.js\";\n\n/**\n * A generated interface value, such as `Gio.ListModel`, in the form {@link registerClass} takes it.\n * `__impl__` exists only in the type system: it carries the interface's `Impl` type, of which a class\n * has to match every member it declares itself, which rejects a class value and a member whose\n * signature does not fit the slot it fills. Leaving a slot to the interface is not rejected,\n * because `registerClass` does not reject it either: every member of an `Impl` type is optional,\n * and the `Partial` holds that open whatever the type declares. The `object` beside it keeps\n * TypeScript from also demanding one member in common. An interface that introspection describes\n * no vtable for carries `unknown`, since it has no slot a class could fill.\n */\ntype Interface<TImpl> = AnyClass & {\n /** Type-level slot holding the interface's `Impl` type; no value ever carries it. */\n __impl__: (impl: Partial<TImpl> & object) => void;\n};\n\n/**\n * One key of `RegisterClassOptions.properties` with every underscore turned into the dash a canonical\n * GObject property name separates its words with.\n */\ntype Dashed<TName extends string> = TName extends `${infer THead}_${infer TTail}`\n ? Dashed<`${THead}-${TTail}`>\n : TName;\n\n/**\n * One dashed key in the camelCase spelling the accessors {@link registerClass} installs carry, which is\n * the spelling the hooks that address a property by name take.\n */\ntype Camelized<TName extends string> = TName extends `${infer THead}-${infer TTail}`\n ? `${THead}${Capitalize<Camelized<TTail>>}`\n : TName;\n\n/**\n * The names a registered class carries in its property map: every key of\n * `RegisterClassOptions.properties` in camelCase, whichever spelling it was written in.\n * A `properties` object given a type of its own rather than left to inference has `string` for its key\n * type and names nothing, because a name only known as `string` addresses no member in particular.\n */\ntype InstalledNames<TProperties> = string extends keyof TProperties\n ? never\n : Camelized<Dashed<keyof TProperties & string>>;\n\n/**\n * The base names the signal surface takes for the signals `RegisterClassOptions.signals` declares:\n * each name as written, plus its canonical spelling with underscores turned into dashes, which\n * GObject knows the signal by too.\n */\ntype DeclaredSignalBase<TSignals> = (keyof TSignals & string) | Dashed<keyof TSignals & string>;\n/**\n * The names `connect` and `emit` take for one of the signals `RegisterClassOptions.signals`\n * declares: each spelling of each name, plus its detailed form for a signal emitted with a\n * `::detail` suffix.\n */\ntype DeclaredSignalName<TSignals> = DeclaredSignalBase<TSignals> | `${DeclaredSignalBase<TSignals>}::${string}`;\n\n/**\n * The `connect` and `emit` signatures instances gain for the signals\n * `RegisterClassOptions.signals` declares, widening the inherited ones, which take only the names\n * introspection knows. A class declaring no signals gains nothing, since no name reaches the\n * added signatures.\n */\ntype DeclaredSignalMethods<TSignals> = {\n /**\n * Type-level map from declared signal name to handler signature, feeding the hooks that\n * address a signal by name, such as `useSignal` from `@gtkx/react`; no value ever carries it.\n */\n __signals__?: Record<DeclaredSignalBase<TSignals>, (...args: never[]) => unknown>;\n /** Connects a handler to a signal `RegisterClassOptions.signals` declared. */\n connect(\n signal: DeclaredSignalName<TSignals>,\n handler: (...args: never[]) => unknown,\n isAfter?: boolean,\n ): number;\n /** Emits a signal `RegisterClassOptions.signals` declared. */\n emit(sigName: DeclaredSignalName<TSignals>, ...args: unknown[]): unknown;\n /** Connects a handler to a signal `RegisterClassOptions.signals` declared, for `off` to take off. */\n on(sigName: DeclaredSignalName<TSignals>, callback: (...args: unknown[]) => unknown, isAfter?: boolean): unknown;\n /** Connects a handler to a signal `RegisterClassOptions.signals` declared for one emission. */\n once(sigName: DeclaredSignalName<TSignals>, callback: (...args: unknown[]) => unknown, isAfter?: boolean): unknown;\n /** Disconnects a handler `on` or `once` connected to a signal `RegisterClassOptions.signals` declared. */\n off(sigName: DeclaredSignalName<TSignals>, callback: (...args: unknown[]) => unknown): unknown;\n};\n\n/**\n * An instance of a registered class: everything the class itself declares, plus the property map the\n * hooks that address a property by name, such as `useProperty` from `@gtkx/react`, read the installed\n * names off. Each name is typed with the value type the class declares for the member of that name,\n * so a property the class does not `declare` contributes nothing.\n */\ntype RegisteredInstance<TInstance, TProperties, TSignals> = TInstance &\n DeclaredSignalMethods<TSignals> & {\n /** Type-level map from installed property name to value type; no value ever carries it. */\n __properties__: Pick<TInstance, InstalledNames<TProperties> & keyof TInstance>;\n };\n\n/**\n * The construct signature and prototype a registered class carries, both giving\n * {@link RegisteredInstance}. The signature stays abstract for as long as the class itself is, so\n * registering an abstract base leaves it as impossible to construct as it was.\n */\ntype RegisteredConstructor<TClass, TArgs extends unknown[], TInstance> = {\n /** Object the class's instances inherit from. */\n prototype: TInstance;\n} & (TClass extends new (...args: never) => unknown\n ? new (...args: TArgs) => TInstance\n : abstract new (...args: TArgs) => TInstance);\n\n/** The statics a registered class keeps from the class it was, joined with {@link RegisteredConstructor}. */\ntype RegisteredParts<TClass, TArgs extends unknown[], TInstance> = Omit<TClass, \"prototype\"> &\n RegisteredConstructor<TClass, TArgs, TInstance>;\n\n/**\n * The class {@link registerClass} hands back: the same class, with the same statics, whose instances\n * carry the properties `RegisterClassOptions.properties` installed and take the signals\n * `RegisterClassOptions.signals` declares by name. Binding the call to a name, rather than\n * discarding it, is what carries those names into the type system.\n */\ntype RegisteredClass<TClass extends AnyClass, TProperties, TSignals> =\n TClass extends abstract new (...args: infer TArgs) => infer TInstance\n ? RegisteredParts<TClass, TArgs, RegisteredInstance<TInstance, TProperties, TSignals>>\n : never;\n\n/**\n * A GType in the form `RegisterClassOptions.signals` takes one: the numeric GType itself, such as\n * `TYPE_STRING` from `@gtkx/gi/gobject`, or a class carrying one, which is any generated wrapper\n * class and any class an earlier {@link registerClass} call registered.\n */\ntype SignalGType = bigint | AnyClass<TypedClass>;\n\n/**\n * One signal `RegisterClassOptions.signals` creates on the new type, sitting under the signal's\n * name. Every part is optional: `{}` declares a signal with no arguments and no return value that\n * runs its handlers in the default `RUN_FIRST` stage.\n */\ntype SignalSpec = {\n /**\n * `GObject.SignalFlags` bit mask for the signal, defaulting to `RUN_FIRST`. `DETAILED` lets\n * handlers connect to and emissions name a `::detail` suffix.\n */\n flags?: number;\n /** GType of each argument an emission carries, defaulting to none. */\n paramTypes?: SignalGType[];\n /** GType of the value an emission returns, defaulting to none. */\n returnType?: SignalGType;\n /**\n * How the emission combines what its handlers return, limited to the accumulators GObject\n * ships: `\"first-wins\"` stops the emission at the first handler and keeps its result, and\n * `\"true-handled\"` runs handlers until one returns `true`, which requires a boolean\n * `returnType`. Without one, every handler runs and the last result stands.\n */\n accumulator?: \"first-wins\" | \"true-handled\";\n};\n\n/** What {@link registerClass} adds to the new GType beyond the vtable slots it discovers on the class. */\ntype RegisterClassOptions<\n TInstance extends object,\n TProperties extends Record<string, PropertySpec>,\n TSignals extends Record<string, SignalSpec>,\n> = {\n /**\n * Name to register the new GType under, defaulting to the class's own name. Either way the\n * name has to be a valid GType name: at least three characters, starting with a letter or\n * underscore, the rest letters, digits, `-`, `_` or `+`. Any other name throws a `TypeError`.\n */\n typeName?: string;\n /**\n * Registers the new GType abstract, the way `G_TYPE_FLAG_ABSTRACT` marks a C type: the class\n * still serves as a parent for further registered subclasses, which instantiate as usual, but\n * constructing it directly throws, whether from JavaScript or from a native caller.\n */\n abstract?: boolean;\n /**\n * Name instances of the new type carry in CSS, applied through `gtk_widget_class_set_css_name`\n * from inside the type's `class_init`, so every instance is born with it, wherever it is\n * created from. Requires the class to extend `Gtk.Widget`; registering a non-widget with a\n * `cssName` throws.\n */\n cssName?: string;\n /**\n * Hook run once, synchronously, while `registerClass` registers the type, after its\n * `class_init` has installed the vfuncs, properties and signals declared here. It receives the\n * new type's class struct wrapped in its generated GTypeStruct wrapper, so class-level setup\n * calls such as `Gtk.WidgetClass.installAction`, `Gtk.WidgetClass.addShortcut` and\n * `Gtk.WidgetClass.setLayoutManagerType` have somewhere to land. The wrapper serves the\n * members of every struct in the parent chain on one object: a widget subclass sees\n * `Gtk.WidgetClass` and `GObject.ObjectClass` members alike, so the parameter can be declared\n * as whichever of those types the hook needs. The class struct belongs to the type system for\n * the life of the process, so keeping the wrapper around past the hook is safe, if rarely\n * useful. An exception the hook throws propagates out of `registerClass`, with the type\n * already registered: GObject offers no way to unregister a static type.\n */\n classInit?(typeStruct: object): void;\n /**\n * Interfaces the new type implements on top of the ones it inherits, given as the interface values\n * themselves, such as `Gio.ListModel`. Their vtable slots are filled from the `vfunc`-prefixed methods on\n * the class's prototype chain, each of which has to match the interface's `Impl` type, such as\n * `Gio.ListModelImpl`.\n */\n implements?: Interface<TInstance>[];\n /**\n * Properties to install on the new type, keyed by the name JavaScript addresses each one by and\n * valued with the `GObject.ParamSpec` describing it. A key is read in camelCase however it is\n * written, so `dewPoint`, `dew_point` and `dew-point` all name the same member, and the ParamSpec\n * has to carry a name that reads back as that same member, such as `dew-point`, or registration\n * throws: the ParamSpec's name is the one GObject emits `notify` with, and a name the key does\n * not spell reaches nothing that listens for it. A word starting with a digit is a word of its\n * own on either side of that reading, so `level2Depth` takes a ParamSpec named `level-2-depth`\n * as readily as one named `level2-depth`, the way `WebKit.Settings` names\n * `enable-2d-canvas-acceleration` for its `enable2dCanvasAcceleration` member. An uppercase\n * letter in the ParamSpec's own name is refused, since GObject notifies under that spelling\n * and nothing else reads it back. Every property gains prototype accessors, one for the key as\n * written, one for it with dashes turned into underscores and one for it in camelCase, each\n * unless the class already defines that name. They serve the value from storage of their own on\n * the instance, which is also what the type's `get_property` and `set_property` slots read and\n * write, so a value set from JavaScript, from `g_object_set_property` and at construction all\n * land in the same place.\n *\n * A write the ParamSpec would refuse throws rather than reaching GObject, which reports such a\n * write as a GLib critical and drops it: a `TypeError` for a read-only or construct-only\n * property and for a value of a type the property cannot hold, and a `RangeError` for a value\n * the ParamSpec rejects. The same checks run over a value handed to the constructor, where\n * a construct-only property is the one that is writable. An accepted write emits one `notify`,\n * which a `freeze_notify` batch collects; a write of the value the property already holds is\n * dropped and emits none.\n *\n * `null` and `undefined` both mean NULL, and mean it only where the ParamSpec's own type holds\n * NULL, which is a string, string-array, boxed, object, interface, param, variant or pointer\n * property. Such a property holds the `null` either spelling wrote, so the member, the type's\n * `get_property` slot and `g_object_get_property` serve the same thing, and writing the other\n * spelling over it emits no `notify`. Every other property, so every integer, floating-point,\n * boolean, enum, flags and GType one, refuses both with the same `TypeError` it refuses a\n * string with, and keeps the value it already holds. It refuses them for what it holds rather\n * than for its range, whatever that range is: the type is checked before the range, so a\n * `gint` whose range excludes 0 answers a nullish with that same `TypeError` and never with\n * the `RangeError` that names the value GObject would put in its place. The one place\n * `undefined` means something else is the constructor, which reads it as the property not\n * being given at all and leaves it at the ParamSpec's default, so a property is never handed a\n * value it cannot serve back.\n *\n * A floating-point property takes every JavaScript number, `NaN` and both infinities\n * included, and its ParamSpec alone rules on which of them the range admits: a `gdouble`\n * bounded by `-Infinity` and `Infinity` holds either infinity, and a magnitude a bounded\n * one excludes, like any `NaN`, comes back as the `RangeError` that names what GObject\n * would put in its place rather than as the `TypeError` a type the property cannot hold\n * earns. A `gfloat` property holds what GObject narrows the double to, so it serves `0.1`\n * back as `0.10000000149011612` and a finite magnitude no `gfloat` reaches as an infinity,\n * which the range then rules on in turn. That narrowing belongs to the property alone: the\n * same magnitude written to a `gfloat` through a generated binding, a signal argument or a\n * closure return is refused outright rather than narrowed.\n *\n * A generated property of a wrapped type answers a nullish differently, and the two halves of\n * the API disagree here: that property marshals what it is written through its descriptor\n * rather than through the checks above, so `new Gtk.Label({ widthRequest: null })` and a later\n * write of `null` to that member both land 0, where a `gint` installed here refuses both.\n *\n * A class that defines the camelCase member itself owns the property: its own accessor decides\n * what a write means, the other spellings forward to it, and the type's property slots read\n * and write it rather than the generated storage.\n */\n properties?: TProperties;\n /**\n * Signals to create on the new type, keyed by signal name and valued with the\n * {@link SignalSpec} describing each one. A name has to start with a lowercase letter, continue\n * in lowercase letters, digits, `-` and `_`, and be new to the type: one an ancestor type or a\n * listed interface already carries throws, and so does one carrying an uppercase letter, which\n * GObject would carry under that exact spelling, out of reach of both its dashed spelling and\n * its `on<SignalName>` default handler. Either word separator spells the same signal, so a\n * signal declared as `data_changed` is connected to and emitted as `data-changed` too.\n *\n * Instances connect and emit by name through the same `connect`, `on`, `once`, `off` and\n * `emit` surface inherited signals use: `registerClass` wraps `connect` and `emit` on the\n * class's prototype to serve the declared names, unless the class defines the member itself,\n * and hands every other name to the inherited implementation. A handler receives the\n * emission's arguments without the leading emitter, matching a generated signal, and what it\n * returns becomes the emission's return value when the signal declares one.\n *\n * The declared parameter GTypes rule the emission: `emit` takes exactly one argument per\n * declared parameter, throwing a `TypeError` for any other count, and converts each argument\n * into a `GValue` of the declared type, throwing for a value that type cannot hold. The signals\n * are created with no class closure of their own, but a method named `on<SignalName>`\n * becomes the signal's default handler, the way every `on`-prefixed method that names a\n * signal the type carries does; see {@link registerClass}.\n */\n signals?: TSignals;\n};\n\n/** {@link RegisterClassOptions} with the widest instance and property types {@link registerClass} accepts. */\ntype AnyRegisterClassOptions = RegisterClassOptions<object, Record<string, PropertySpec>, Record<string, SignalSpec>>;\ntype VfuncFn = NativeRegisterClassVfunc[\"fn\"];\ntype DiscoveredVfunc = VfuncDescriptor & { methodName: string; fn: VfuncFn };\ntype MethodTable = Map<string, VfuncFn>;\ntype InstanceMembers = { methods: MethodTable; names: Set<string>; inheritedNames: Set<string> };\n\ntype InterfaceVfuncBinding = {\n gtype: bigint;\n vfuncs: DiscoveredVfunc[];\n};\n\ntype PropertyVfuncSource = {\n klass: AnyClass;\n methods: MethodTable;\n dispatch: PropertyDispatch;\n adoptedTypes: bigint[];\n};\n\ntype PropertyVfuncSpec = {\n methodName: string;\n isValueOut: boolean;\n makeDispatch: (dispatch: PropertyDispatch) => VfuncFn;\n};\n\ntype ArgPatch = { isCallerAllocated: true } | { isCallScoped: true };\ntype DeclaredSignals = { native: NativeRegisterClassSignal[]; table: Map<string, DeclaredSignalTypes> };\n\ntype SignalMethodHost = {\n connect?: (signal: string, handler: SignalHandler, isAfter?: boolean) => number;\n emit?: (sigName: string, ...args: unknown[]) => unknown;\n};\n\nconst INSTANCE_ARG_INDEX = 0;\nconst VALUE_ARG_INDEX = 2;\nconst TEARDOWN_VFUNC_NAMES: Set<string> = new Set([\"dispose\", \"finalize\"]);\nconst ASYNC_INITABLE_TYPE_NAME = \"GAsyncInitable\";\nconst INIT_ASYNC_METHOD_NAME = \"vfuncInitAsync\";\n\nconst PROPERTY_VFUNC_SPECS: PropertyVfuncSpec[] = [\n { methodName: GET_PROPERTY_VFUNC, isValueOut: true, makeDispatch: makeGetProperty },\n { methodName: SET_PROPERTY_VFUNC, isValueOut: false, makeDispatch: makeSetProperty },\n];\n\nconst PROPERTY_VFUNC_NAMES: Set<string> = new Set(PROPERTY_VFUNC_SPECS.map((spec) => spec.methodName));\nconst VFUNC_METHOD_PATTERN = /^vfunc[A-Z0-9]/;\nconst TYPE_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9\\-_+]{2,}$/;\nconst UPPER_CASE_PATTERN = /[A-Z]/;\nconst SIGNAL_OVERRIDE_PATTERN = /^on[A-Z]/;\n\n/**\n * Registers a subclass of a wrapper class as a new GType, wiring up any class and interface\n * virtual functions it overrides, both for the interfaces it inherits and for the ones\n * `RegisterClassOptions.implements` names.\n *\n * Throws when the class does not extend a registered wrapper class, when it has no derivable type\n * name or the name is not a valid GType name, when an entry in\n * `RegisterClassOptions.implements` is not a registered interface, when a\n * listed interface has a prerequisite that neither the parent type nor another listed interface meets,\n * when the list names `Gio.AsyncInitable` as an interface the parent type does not already\n * implement and no method on the chain fills `vfuncInitAsync`, since the default `init_async`\n * would run `vfuncInit` on a worker thread, when an entry in\n * `RegisterClassOptions.properties` names its `GObject.ParamSpec` something the key it sits under\n * does not spell, when an entry in `RegisterClassOptions.signals` carries an invalid name, a name\n * spelled with an uppercase letter rather than dashed, a name the type already knows, a GType\n * that cannot hold a value, or an accumulator the spec does not admit, and when\n * `RegisterClassOptions.cssName` is\n * given for a class that does not extend `Gtk.Widget`. An exception thrown by\n * `RegisterClassOptions.classInit` also propagates, after the type has already been registered.\n *\n * A slot is filled from the `vfunc`-prefixed methods on the class's prototype chain, up to but not\n * including the registered ancestor the class extends, so a method an intermediate base class\n * declares fills a slot the same way one the class itself declares does. A slot nothing on that\n * chain fills is left untouched.\n *\n * Declare every slot as a method: a class field holding a function, such as `vfuncGetNItems = () => 1`,\n * is assigned to each instance after registration and never reaches the vtable.\n *\n * A method named `on<SignalName>` — the signal's name in camelCase after the `on`, so `onClicked`\n * for `clicked` and `onItemsChanged` for `items-changed` — becomes that signal's default handler\n * when the type carries the signal, whether an ancestor type or an implemented interface brings it\n * or `RegisterClassOptions.signals` declares it. The method is installed as a class-closure\n * override, so it runs on every emission, on the instances a native caller creates included, in\n * the stage the signal's flags name rather than alongside connected handlers. It receives the\n * emission's arguments without the leading emitter, with `this` bound to the emitter, and what it\n * returns becomes the emission's result when the signal declares one. The same discovery walks the\n * prototype chain vfunc discovery walks, and a subclass registering its own `on<SignalName>`\n * replaces the handler for its instances, where `super.on<SignalName>()` reaches the replaced one.\n * An `on`-prefixed method naming no signal the type carries is left alone as the ordinary method\n * it is.\n *\n * An override of `vfuncConstructed` runs from inside the base constructor, before JavaScript\n * installs the subclass's field initializers and runs its constructor body, so a field still\n * reads `undefined` there and reading a `#private` field throws. Declare state the override\n * touches without an initializer, and assign private state from the constructor body after\n * `super()`. An instance a native caller creates, through `GObject.newv` or `Gtk.Builder`,\n * never runs the subclass constructor at all, so its declared fields stay uninitialized for\n * the object's whole life.\n *\n * @param klass The subclass to register.\n * @param options What the new GType gains beyond the vtable slots the class overrides.\n * @returns The same class, now registered, with every name in `options.properties` in its property map.\n */\nfunction registerClass<\n T extends AnyClass,\n TProperties extends Record<string, PropertySpec> = Record<never, PropertySpec>,\n TSignals extends Record<string, SignalSpec> = Record<never, SignalSpec>,\n>(\n klass: T,\n options?: RegisterClassOptions<T[\"prototype\"], TProperties, TSignals>,\n): RegisteredClass<T, TProperties, TSignals>;\n\nfunction registerClass(klass: AnyClass, options: AnyRegisterClassOptions = {}): AnyClass {\n const parentType = resolveParentType(klass);\n\n if (parentType === TYPE_INVALID) {\n throw new TypeError(`registerClass: ${klass.name} must extend a registered wrapper class`);\n }\n\n const name = resolveTypeName(klass, options);\n const declaredTypes = resolveInterfaceTypes(klass, options.implements ?? []);\n assertInterfacePrerequisites(klass, parentType, declaredTypes);\n const adoptedTypes = declaredTypes.filter((gtype) => !typeIsA(parentType, gtype));\n const properties = options.properties ?? {};\n const signals = resolveDeclaredSignals(klass, options.signals ?? {});\n const members = collectInstanceMembers(klass);\n const { methods, inheritedNames } = members;\n checkAsyncInitable(klass, adoptedTypes, methods);\n const dispatch = buildPropertyDispatch({ klass, properties, adoptedTypes });\n\n const classVfuncs = [\n ...discoverClassVfuncs(klass, methods),\n ...propertyVfuncs({ klass, methods, dispatch, adoptedTypes }),\n ];\n\n const claimedMethodNames = new Set(classVfuncs.map((vfunc) => vfunc.methodName));\n const interfaceBindings = discoverInterfaceBindings(methods, parentType, declaredTypes, claimedMethodNames);\n assertClaimedVfuncs(klass, methods, claimedMethodNames, interfaceBindings);\n\n const nativeOptions = withNativeSignals(\n toNativeOptions(classVfuncs, interfaceBindings, properties, options),\n signals.native,\n );\n\n const newType: bigint = nativeRegisterClass(name, parentType, nativeOptions);\n registerClassType(klass, newType);\n markDerivedClass(klass);\n installSignalOverrides(newType, methods);\n applyInterfaceMixins(klass, adoptedTypes, inheritedNames);\n installDeclaredSignalMethods(klass, signals.table, members.names);\n invokeClassInit(options, newType);\n\n return klass;\n}\n\nfunction invokeClassInit(options: AnyRegisterClassOptions, newType: bigint): void {\n if (options.classInit === undefined) {\n return;\n }\n\n const structClass = getClassStructClass(newType);\n\n if (structClass === undefined) {\n throw new Error(\"registerClass: no ancestor of the new type registers a class struct wrapper\");\n }\n\n options.classInit(wrapHandle(getTypeClassHandle(newType), structClass));\n}\n\nfunction resolveTypeName(klass: AnyClass, options: AnyRegisterClassOptions): string {\n const name = options.typeName ?? klass.name;\n\n if (!name) {\n throw new TypeError(\"registerClass: cannot derive a GType name (anonymous class with no typeName option)\");\n }\n\n if (!TYPE_NAME_PATTERN.test(name)) {\n throw new TypeError(\n `registerClass: '${name}' is not a valid GType name (a letter or underscore, then at ` +\n \"least two more characters, all from A-Z, a-z, 0-9, '-', '_' and '+')\",\n );\n }\n\n return name;\n}\n\nfunction resolveInterfaceType(klass: AnyClass, entry: AnyClass): bigint {\n const gtype = getClassType(entry);\n\n if (typeFundamental(gtype) !== TYPE_INTERFACE) {\n const label = typeof entry === \"function\" ? entry.name : String(entry);\n\n throw new TypeError(\n `registerClass: ${klass.name} lists '${label}' in implements, which is not a registered interface`,\n );\n }\n\n return gtype;\n}\n\nfunction resolveInterfaceTypes(klass: AnyClass, entries: AnyClass[]): bigint[] {\n return [...new Set(entries.map((entry) => resolveInterfaceType(klass, entry)))];\n}\n\nfunction checkAsyncInitable(klass: AnyClass, adoptedTypes: bigint[], methods: MethodTable): void {\n const isAsyncInitable = adoptedTypes.some((gtype) => typeName(gtype) === ASYNC_INITABLE_TYPE_NAME);\n\n if (isAsyncInitable && !methods.has(INIT_ASYNC_METHOD_NAME)) {\n throw new TypeError(\n `registerClass: ${klass.name} implements Gio.AsyncInitable without overriding 'vfuncInitAsync'; ` +\n \"the default 'init_async' would run 'vfuncInit' on a worker thread\",\n );\n }\n}\n\nfunction applyInterfaceMixins(klass: AnyClass, adoptedTypes: bigint[], inheritedNames: Set<string>): void {\n for (const gtype of adoptedTypes) {\n const mixin = getInterfaceMixin(gtype);\n\n if (mixin !== undefined) {\n insertMixinLayer(klass, mixin, inheritedNames);\n }\n }\n}\n\nfunction resolveParentType(klass: AnyClass): bigint {\n return (\n walkClassChain(getParentClass(klass), (cls) => {\n const gtype = getClassType(cls);\n\n return gtype === TYPE_INVALID ? undefined : gtype;\n }) ?? TYPE_INVALID\n );\n}\n\nfunction addOwnMember(members: InstanceMembers, proto: object, name: string, isInherited: boolean): void {\n if (name === \"constructor\") {\n return;\n }\n\n if (isInherited) {\n members.inheritedNames.add(name);\n }\n\n if (members.names.has(name)) {\n return;\n }\n\n members.names.add(name);\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n\n if (typeof descriptor?.value === \"function\") {\n members.methods.set(name, descriptor.value as VfuncFn);\n }\n}\n\nfunction addOwnMembers(members: InstanceMembers, klass: AnyClass, isInherited: boolean): void {\n const proto = (klass as { prototype?: object }).prototype;\n\n if (proto === undefined) {\n return;\n }\n\n for (const name of Object.getOwnPropertyNames(proto)) {\n addOwnMember(members, proto, name, isInherited);\n }\n}\n\nfunction collectInstanceMembers(klass: AnyClass): InstanceMembers {\n const members: InstanceMembers = { methods: new Map(), names: new Set(), inheritedNames: new Set() };\n let cls: AnyClass | null = klass;\n\n while (cls !== null && getClassType(cls) === TYPE_INVALID) {\n addOwnMembers(members, cls, cls !== klass);\n cls = getParentClass(cls);\n }\n\n return members;\n}\n\nfunction buildDiscoveredVfunc(\n fn: VfuncFn,\n methodName: string,\n resolveDescriptor: (methodName: string) => VfuncDescriptor | undefined,\n skip: Set<string> | undefined,\n): DiscoveredVfunc | undefined {\n if (skip?.has(methodName)) {\n return undefined;\n }\n\n const descriptor = resolveDescriptor(methodName);\n\n if (!descriptor) {\n return undefined;\n }\n\n const argDescriptors = slotArgDescriptors(descriptor);\n\n return {\n ...descriptor,\n methodName,\n argDescriptors,\n fn: wrapVfunc(fn, argDescriptors, descriptor),\n };\n}\n\nfunction collectDiscoveredVfuncs(\n methods: MethodTable,\n resolveDescriptor: (methodName: string) => VfuncDescriptor | undefined,\n skip?: Set<string>,\n): DiscoveredVfunc[] {\n const result: DiscoveredVfunc[] = [];\n\n for (const [methodName, fn] of methods) {\n const discovered = buildDiscoveredVfunc(fn, methodName, resolveDescriptor, skip);\n\n if (discovered) {\n result.push(discovered);\n }\n }\n\n return result;\n}\n\nfunction discoverClassVfuncs(klass: AnyClass, methods: MethodTable): DiscoveredVfunc[] {\n return collectDiscoveredVfuncs(\n methods,\n (methodName) => findClassVfuncDescriptor(klass, methodName) ?? undefined,\n PROPERTY_VFUNC_NAMES,\n );\n}\n\nfunction wrapVfunc(\n fn: VfuncFn,\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"],\n descriptor: VfuncDescriptor,\n): VfuncFn {\n return wrapCallback(\n fn as (...args: unknown[]) => unknown,\n { argDescriptors, returnDescriptor: descriptor.returnDescriptor },\n \"vfunc\",\n );\n}\n\nconst claimedVfuncNames = (\n claimedMethodNames: Set<string>,\n interfaceBindings: InterfaceVfuncBinding[],\n): Set<string> => {\n const claimed = new Set(claimedMethodNames);\n\n for (const binding of interfaceBindings) {\n for (const vfunc of binding.vfuncs) {\n claimed.add(vfunc.methodName);\n }\n }\n\n return claimed;\n};\n\nconst isPrerequisiteMet = (parentType: bigint, declaredTypes: bigint[], prerequisite: bigint): boolean =>\n typeIsA(parentType, prerequisite) || declaredTypes.includes(prerequisite);\n\nfunction assertPrerequisitesFor(klass: AnyClass, parentType: bigint, declaredTypes: bigint[], iface: bigint): void {\n for (const prerequisite of typeInterfacePrerequisites(iface)) {\n if (!isPrerequisiteMet(parentType, declaredTypes, prerequisite)) {\n throw new TypeError(\n `registerClass: ${klass.name} does not meet prerequisite ` +\n `'${typeName(prerequisite) ?? String(prerequisite)}' of interface ` +\n `'${typeName(iface) ?? String(iface)}'`,\n );\n }\n }\n}\n\nfunction assertInterfacePrerequisites(klass: AnyClass, parentType: bigint, declaredTypes: bigint[]): void {\n for (const iface of declaredTypes) {\n assertPrerequisitesFor(klass, parentType, declaredTypes, iface);\n }\n}\n\nfunction assertClaimedVfuncs(\n klass: AnyClass,\n methods: MethodTable,\n claimedMethodNames: Set<string>,\n interfaceBindings: InterfaceVfuncBinding[],\n): void {\n const claimed = claimedVfuncNames(claimedMethodNames, interfaceBindings);\n\n for (const methodName of methods.keys()) {\n if (VFUNC_METHOD_PATTERN.test(methodName) && !claimed.has(methodName)) {\n throw new Error(\n `registerClass: ${klass.name}.${methodName} matches no vtable slot on any ancestor ` +\n \"or implemented interface, so the override would never be called; check the name against \" +\n \"the parent class's virtual methods\",\n );\n }\n }\n}\n\nfunction discoverInterfaceBindings(\n methods: MethodTable,\n parentGtype: bigint,\n declaredTypes: bigint[],\n claimedMethodNames: Set<string>,\n): InterfaceVfuncBinding[] {\n const declared: Set<bigint> = new Set(declaredTypes);\n const gtypes: Set<bigint> = new Set([...typeInterfaces(parentGtype), ...declaredTypes]);\n const bindings: InterfaceVfuncBinding[] = [];\n\n for (const gtype of gtypes) {\n const vfuncs = discoverInterfaceVfuncs(methods, gtype, claimedMethodNames);\n\n if (vfuncs.length > 0 || declared.has(gtype)) {\n bindings.push({ gtype, vfuncs });\n }\n }\n\n return bindings;\n}\n\nfunction discoverInterfaceVfuncs(\n methods: MethodTable,\n interfaceGtype: bigint,\n claimedMethodNames: Set<string>,\n): DiscoveredVfunc[] {\n return collectDiscoveredVfuncs(\n methods,\n (methodName) => findInterfaceVfuncDescriptor(interfaceGtype, methodName),\n claimedMethodNames,\n );\n}\n\nconst hasDispatchedProperties = (dispatch: PropertyDispatch, adoptedTypes: bigint[]): boolean =>\n dispatch.accessors.length > 0 || adoptedTypes.length > 0;\n\nfunction propertyVfuncFor(\n source: PropertyVfuncSource,\n spec: PropertyVfuncSpec,\n): DiscoveredVfunc | undefined {\n const { klass, methods, dispatch, adoptedTypes } = source;\n\n const dispatched = hasDispatchedProperties(dispatch, adoptedTypes)\n ? spec.makeDispatch(dispatch)\n : undefined;\n\n const fn = methods.get(spec.methodName) ?? dispatched;\n\n return fn === undefined ? undefined : buildPropertyVfunc(klass, spec.methodName, fn, spec.isValueOut);\n}\n\nfunction propertyVfuncs(source: PropertyVfuncSource): DiscoveredVfunc[] {\n return PROPERTY_VFUNC_SPECS.map((spec) => propertyVfuncFor(source, spec)).filter(\n (vfunc) => vfunc !== undefined,\n );\n}\n\nfunction markArg(argDescriptors: Descriptor[], index: number, patch: ArgPatch): Descriptor[] {\n return argDescriptors.map((arg, at) => (at === index ? { ...arg, ...patch } : arg));\n}\n\nfunction isTeardownSlot(descriptor: VfuncDescriptor): boolean {\n return (\n TEARDOWN_VFUNC_NAMES.has(descriptor.vfuncName) &&\n descriptor.argDescriptors[INSTANCE_ARG_INDEX]?.kind === \"object\"\n );\n}\n\nfunction slotArgDescriptors(descriptor: VfuncDescriptor): Descriptor[] {\n if (!isTeardownSlot(descriptor)) {\n return descriptor.argDescriptors;\n }\n\n return markArg(descriptor.argDescriptors, INSTANCE_ARG_INDEX, { isCallScoped: true });\n}\n\nfunction buildPropertyVfunc(\n klass: AnyClass,\n methodName: string,\n fn: VfuncFn,\n isValueOut: boolean,\n): DiscoveredVfunc {\n const descriptor = findClassVfuncDescriptor(klass, methodName);\n\n if (!descriptor) {\n throw new Error(`registerClass: the parent class exposes no '${methodName}' vtable slot`);\n }\n\n const argDescriptors = isValueOut\n ? markArg(descriptor.argDescriptors, VALUE_ARG_INDEX, { isCallerAllocated: true })\n : descriptor.argDescriptors;\n\n return {\n ...descriptor,\n methodName,\n argDescriptors,\n fn: wrapVfunc(fn, argDescriptors, descriptor),\n };\n}\n\nconst canonicalSignalName = (name: string): string => name.replaceAll(\"_\", \"-\");\n\nfunction assertLowerCaseSignalName(klass: AnyClass, name: string): void {\n if (!UPPER_CASE_PATTERN.test(name)) {\n return;\n }\n\n throw new TypeError(\n `registerClass: ${klass.name} declares the signal '${name}'; GObject would carry it under that ` +\n \"exact spelling, out of reach of both its dashed spelling and its default handler; \" +\n `declare it as '${kebabCase(name)}'`,\n );\n}\n\nfunction overriddenSignalId(type: bigint, methodName: string): number {\n if (!SIGNAL_OVERRIDE_PATTERN.test(methodName)) {\n return 0;\n }\n\n const signal = signalForHandlerName(type, methodName);\n\n return signal === undefined ? 0 : signalIdFor(type, signal);\n}\n\nfunction installSignalOverrides(newType: bigint, methods: MethodTable): void {\n for (const [methodName, fn] of methods) {\n const signalId = overriddenSignalId(newType, methodName);\n\n if (signalId === 0) {\n continue;\n }\n\n const handler = fn as (...args: unknown[]) => unknown;\n\n overrideSignalClassClosure(newType, signalId, (...args: unknown[]) =>\n handler.apply(args[0], args.slice(1)),\n );\n }\n}\n\nfunction resolveSignalGType(klass: AnyClass, signalName: string, role: string, entry: SignalGType): bigint {\n if (typeof entry === \"bigint\") {\n return entry;\n }\n\n const gtype = getClassType(entry);\n\n if (gtype === TYPE_INVALID) {\n throw new TypeError(\n `registerClass: signal '${signalName}' of ${klass.name} names a class with no registered ` +\n `GType as its ${role}`,\n );\n }\n\n return gtype;\n}\n\nfunction resolveSignalReturnType(klass: AnyClass, name: string, spec: SignalSpec): bigint | undefined {\n if (spec.returnType === undefined) {\n return undefined;\n }\n\n const returnType = resolveSignalGType(klass, name, \"return type\", spec.returnType);\n\n return returnType === TYPE_NONE ? undefined : returnType;\n}\n\nfunction resolveDeclaredSignal(\n klass: AnyClass,\n name: string,\n spec: SignalSpec,\n): { native: NativeRegisterClassSignal; declared: DeclaredSignalTypes } {\n const paramTypes = (spec.paramTypes ?? []).map((entry, index) =>\n resolveSignalGType(klass, name, `parameter ${String(index)}`, entry),\n );\n\n const returnType = resolveSignalReturnType(klass, name, spec);\n const native: NativeRegisterClassSignal = { name, paramTypes };\n const declared: DeclaredSignalTypes = { paramTypes };\n\n if (spec.flags !== undefined) {\n native.flags = spec.flags;\n }\n\n if (spec.accumulator !== undefined) {\n native.accumulator = spec.accumulator;\n }\n\n if (returnType !== undefined) {\n native.returnType = returnType;\n declared.returnType = returnType;\n }\n\n return { native, declared };\n}\n\nfunction resolveDeclaredSignals(klass: AnyClass, signals: Record<string, SignalSpec>): DeclaredSignals {\n const native: NativeRegisterClassSignal[] = [];\n const table: Map<string, DeclaredSignalTypes> = new Map();\n\n for (const [name, spec] of Object.entries(signals)) {\n assertLowerCaseSignalName(klass, name);\n const resolved = resolveDeclaredSignal(klass, name, spec);\n native.push(resolved.native);\n table.set(canonicalSignalName(name), resolved.declared);\n }\n\n return { native, table };\n}\n\nfunction inheritedSignalMethod<T>(inherited: T | undefined, signal: string): T {\n if (inherited === undefined) {\n throw new Error(`Unknown signal '${signal}'`);\n }\n\n return inherited;\n}\n\nfunction installDeclaredConnect(\n proto: SignalMethodHost,\n findDeclared: (signal: string) => DeclaredSignalTypes | undefined,\n): void {\n const inheritedConnect = proto.connect;\n\n proto.connect = function connect(\n this: object,\n signal: string,\n handler: SignalHandler,\n isAfter?: boolean,\n ): number {\n if (findDeclared(signal) === undefined) {\n return inheritedSignalMethod(inheritedConnect, signal).call(this, signal, handler, isAfter);\n }\n\n return connectClosureSignal(this, signal, handler, isAfter ?? false);\n };\n}\n\nfunction installDeclaredEmit(\n proto: SignalMethodHost,\n findDeclared: (signal: string) => DeclaredSignalTypes | undefined,\n): void {\n const inheritedEmit = proto.emit;\n\n proto.emit = function emit(this: object, sigName: string, ...args: unknown[]): unknown {\n const declared = findDeclared(sigName);\n\n if (declared === undefined) {\n return inheritedSignalMethod(inheritedEmit, sigName).call(this, sigName, ...args);\n }\n\n return emitDeclaredSignal(this, sigName, declared, args);\n };\n}\n\nfunction installDeclaredSignalMethods(\n klass: AnyClass,\n table: Map<string, DeclaredSignalTypes>,\n definedNames: Set<string>,\n): void {\n if (table.size === 0) {\n return;\n }\n\n const proto = klass.prototype as SignalMethodHost;\n\n const findDeclared = (signal: string): DeclaredSignalTypes | undefined =>\n table.get(canonicalSignalName(getSignalBaseName(signal)));\n\n if (!definedNames.has(\"connect\")) {\n installDeclaredConnect(proto, findDeclared);\n }\n\n if (!definedNames.has(\"emit\")) {\n installDeclaredEmit(proto, findDeclared);\n }\n}\n\nfunction toNativeInterface(binding: InterfaceVfuncBinding): NativeRegisterClassInterface {\n const nativeInterface: NativeRegisterClassInterface = {\n type: binding.gtype,\n vfuncs: [...binding.vfuncs],\n };\n\n const vtableSize = binding.vfuncs[0]?.vtableSize;\n\n if (vtableSize !== undefined) {\n nativeInterface.vtableSize = vtableSize;\n }\n\n return nativeInterface;\n}\n\nfunction withNativeSignals(\n options: NativeRegisterClassOptions | undefined,\n signals: NativeRegisterClassSignal[],\n): NativeRegisterClassOptions | undefined {\n if (signals.length === 0) {\n return options;\n }\n\n return { ...options, signals };\n}\n\nfunction applyNativeTypeOptions(options: NativeRegisterClassOptions, source: AnyRegisterClassOptions): void {\n if (source.abstract ?? false) {\n options.abstract = true;\n }\n\n if (source.cssName !== undefined) {\n options.cssName = source.cssName;\n }\n}\n\nfunction toNativeOptions(\n classVfuncs: DiscoveredVfunc[],\n interfaceBindings: InterfaceVfuncBinding[],\n properties: Record<string, PropertySpec>,\n source: AnyRegisterClassOptions,\n): NativeRegisterClassOptions | undefined {\n const options: NativeRegisterClassOptions = {};\n applyNativeTypeOptions(options, source);\n\n if (Object.keys(properties).length > 0) {\n options.properties = toNativeProperties(properties);\n }\n\n if (classVfuncs.length > 0) {\n options.vfuncs = [...classVfuncs];\n }\n\n if (interfaceBindings.length > 0) {\n options.interfaces = interfaceBindings.map((binding) => toNativeInterface(binding));\n }\n\n return Object.keys(options).length > 0 ? options : undefined;\n}\n\nexport { type Interface, registerClass, type SignalGType, type SignalSpec };\n"]}
1
+ {"version":3,"file":"register-class.js","sourceRoot":"","sources":["../src/register-class.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Descriptor } from \"@gtkx/native\";\nimport {\n registerClass as nativeRegisterClass,\n type RegisterClassInterface as NativeRegisterClassInterface,\n type RegisterClassOptions as NativeRegisterClassOptions,\n type RegisterClassSignal as NativeRegisterClassSignal,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n} from \"@gtkx/native\";\nimport { type AnyClass, getParentClass, kebabCase, walkClassChain } from \"@gtkx/utils\";\nimport { wrapCallback } from \"./callback.js\";\nimport { insertMixinLayer } from \"./mixin.js\";\nimport {\n buildPropertyDispatch,\n GET_PROPERTY_VFUNC,\n makeGetProperty,\n makeSetProperty,\n type PropertyDispatch,\n type PropertySpec,\n SET_PROPERTY_VFUNC,\n toNativeProperties,\n} from \"./properties.js\";\nimport {\n descriptorFreePropertySpec,\n propertyMapOverride,\n writablePropertyMapOverride,\n} from \"./property-brand.js\";\nimport {\n getClassStructClass,\n getClassType,\n getInterfaceMixin,\n getTypeClassHandle,\n markDerivedClass,\n registerClassType,\n type VfuncDescriptor,\n wrapHandle,\n} from \"./registry.js\";\nimport {\n classSignalMember,\n naturalSignalMember,\n signalEmitMapOverride,\n signalMapOverride,\n} from \"./signal-brand.js\";\nimport {\n canonicalSignalName,\n connectClosureSignal,\n type DeclaredSignalTypes,\n emitDeclaredSignal,\n installSignalDispatch,\n overrideSignalClassClosure,\n signalForHandlerName,\n signalIdFor,\n} from \"./signal.js\";\nimport {\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_NONE,\n type TypedClass,\n typeFundamental,\n typeInterfacePrerequisites,\n typeInterfaces,\n typeIsA,\n typeName,\n} from \"./type.js\";\nimport { findClassVfuncDescriptor, findInterfaceVfuncDescriptor } from \"./vfunc.js\";\n\n/** A generated interface value, such as `Gio.ListModel`, accepted by {@link registerClass}. */\ntype Interface<TImpl, TInstance = object> = AnyClass & {\n /** Type-level slot holding the interface's `Impl` type; no value ever carries it. */\n __impl__: (impl: Partial<TImpl> & object) => TInstance;\n};\n\n/** Converts underscores in a property name to canonical dashes. */\ntype Dashed<TName extends string> = TName extends `${infer THead}_${infer TTail}`\n ? Dashed<`${THead}-${TTail}`>\n : TName;\n\n/** Converts a dashed property name to its JavaScript spelling. */\ntype Camelized<TName extends string> = TName extends `${infer THead}-${infer TTail}`\n ? `${THead}${Capitalize<Camelized<TTail>>}`\n : TName;\n\n/** Property-map keys in the camelCase spelling hooks use. */\ntype InstalledNames<TProperties> = string extends keyof TProperties\n ? never\n : Camelized<Dashed<keyof TProperties & string>>;\n\n/** Declared signal names in their original and canonical spellings. */\ntype DeclaredSignalBase<TSignals> = (keyof TSignals & string) | Dashed<keyof TSignals & string>;\n/** Declared signal names, including detailed forms. */\ntype DeclaredSignalName<TSignals> = DeclaredSignalBase<TSignals> | `${DeclaredSignalBase<TSignals>}::${string}`;\n\n/** Signal methods added for declared names. */\ntype DeclaredSignalMethods<TSignals, TBlockedMembers extends PropertyKey> = {\n /** Type-level map used by signal hooks. */\n __signals__?: Record<DeclaredSignalName<TSignals>, (...args: never[]) => unknown>;\n} &\nPick<\n {\n connect(\n signal: DeclaredSignalName<TSignals>,\n handler: (...args: never[]) => unknown,\n isAfter?: boolean,\n ): number;\n emit(sigName: DeclaredSignalName<TSignals>, ...args: unknown[]): unknown;\n on(sigName: DeclaredSignalName<TSignals>, callback: (...args: never[]) => unknown, isAfter?: boolean): unknown;\n once(\n sigName: DeclaredSignalName<TSignals>,\n callback: (...args: never[]) => unknown,\n isAfter?: boolean,\n ): unknown;\n off(sigName: DeclaredSignalName<TSignals>, callback: (...args: never[]) => unknown): unknown;\n },\n Exclude<\"connect\" | \"emit\" | \"off\" | \"on\" | \"once\", TBlockedMembers>\n>;\n\n/** A registered instance with declared signal methods and property metadata. */\ntype RegisteredInstance<\n TInstance,\n TProperties,\n TSignals,\n TInterfaces extends readonly Interface<TInstance>[],\n TRemainingInterfaces extends readonly Interface<TInstance>[] = TInterfaces,\n TMemberSurface = object,\n TSignalSurface = TInstance extends { [signalMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInstance extends { __signals__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInstance extends { __signals__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n TSignalEmitSurface = TInstance extends { [signalEmitMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInstance extends { __signalEmit__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInstance extends { __signalEmit__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n TPropertySurface = TInstance extends { [propertyMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInstance extends { __properties__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInstance extends { __properties__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n TWritablePropertySurface = TInstance extends { [writablePropertyMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInstance extends { __writableProperties__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInstance extends { __writableProperties__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n TNaturalInstanceMembers extends PropertyKey = TInstance extends {\n [naturalSignalMember]?: infer TMembers;\n }\n ? keyof NonNullable<TMembers>\n : never,\n TClassInstanceSignals extends PropertyKey = TInstance extends {\n [classSignalMember]?: infer TMembers;\n }\n ? keyof NonNullable<TMembers>\n : never,\n TLegacySignalMembers extends PropertyKey = \"connect\" | \"disconnect\" | \"emit\" | \"off\" | \"on\" | \"once\",\n TInstalledPropertyCandidate = TInstance & TMemberSurface,\n TRegisteredPropertySurface = Omit<TPropertySurface, InstalledNames<TProperties>> &\n Pick<\n TInstalledPropertyCandidate,\n (string extends keyof TProperties\n ? never\n : {\n [K in keyof TProperties & string]: TProperties[K] extends {\n readonly [descriptorFreePropertySpec]: true;\n }\n ? Camelized<Dashed<K>>\n : never;\n }[keyof TProperties & string]) & {\n [K in keyof TInstalledPropertyCandidate]-?: Extract<\n TInstalledPropertyCandidate[K],\n (...args: never[]) => unknown\n > extends never\n ? K\n : never;\n }[keyof TInstalledPropertyCandidate]\n >,\n TRegisteredWritablePropertySurface = Omit<TWritablePropertySurface, InstalledNames<TProperties>> &\n Pick<\n TInstalledPropertyCandidate,\n (string extends keyof TProperties\n ? never\n : {\n [K in keyof TProperties & string]: TProperties[K] extends {\n readonly [descriptorFreePropertySpec]: true;\n }\n ? Camelized<Dashed<K>>\n : never;\n }[keyof TProperties & string]) & {\n [K in keyof TInstalledPropertyCandidate]-?: Extract<\n TInstalledPropertyCandidate[K],\n (...args: never[]) => unknown\n > extends never\n ? (<U>(probe: U) => U extends { [P in K]: TInstalledPropertyCandidate[P] } ? 1 : 2) extends\n (<U>(probe: U) =>\n U extends { -readonly [P in K]: TInstalledPropertyCandidate[P] } ? 1 : 2)\n ? K\n : never\n : never;\n }[keyof TInstalledPropertyCandidate]\n >,\n> = TRemainingInterfaces extends readonly [\n infer TInterface extends Interface<TInstance>,\n ...infer TRest extends readonly Interface<TInstance>[],\n]\n ? (ReturnType<TInterface[\"__impl__\"]> extends infer TInterfaceInstance extends object\n ? RegisteredInstance<\n TInstance,\n TProperties,\n TSignals,\n TInterfaces,\n TRest,\n TMemberSurface &\n Omit<\n TInterfaceInstance,\n | keyof TInstance |\n keyof TMemberSurface |\n \"__properties__\" |\n \"__writableProperties__\" |\n \"__signalEmit__\" |\n \"__signals__\" |\n TLegacySignalMembers\n > & {\n [K in Extract<\n TInterfaceInstance extends { [naturalSignalMember]?: infer TMembers }\n ? keyof NonNullable<TMembers>\n : never,\n TLegacySignalMembers\n > as K extends TNaturalInstanceMembers | keyof TMemberSurface\n ? never\n : K]: K extends keyof TInterfaceInstance ? TInterfaceInstance[K] : never;\n },\n TInterfaceInstance extends { __signals__?: infer TNextSignalMap } ? Omit<\n TSignalSurface,\n keyof {\n [K in keyof NonNullable<TNextSignalMap> as K extends string\n ? Dashed<\n K extends `${infer TBase}::${string}` ? TBase : K\n > extends TClassInstanceSignals | Dashed<keyof TSignals & string>\n ? never\n : K\n : K]: NonNullable<TNextSignalMap>[K];\n }\n > & {\n [K in keyof NonNullable<TNextSignalMap> as K extends string\n ? Dashed<\n K extends `${infer TBase}::${string}` ? TBase : K\n > extends TClassInstanceSignals | Dashed<keyof TSignals & string>\n ? never\n : K\n : K]: NonNullable<TNextSignalMap>[K];\n }\n : TSignalSurface,\n TInterfaceInstance extends { __signalEmit__?: infer TNextSignalEmitMap } ? Omit<\n TSignalEmitSurface,\n keyof {\n [K in keyof NonNullable<TNextSignalEmitMap> as K extends string\n ? Dashed<\n K extends `${infer TBase}::${string}` ? TBase : K\n > extends TClassInstanceSignals | Dashed<keyof TSignals & string>\n ? never\n : K\n : K]: NonNullable<TNextSignalEmitMap>[K];\n }\n > & {\n [K in keyof NonNullable<TNextSignalEmitMap> as K extends string\n ? Dashed<\n K extends `${infer TBase}::${string}` ? TBase : K\n > extends TClassInstanceSignals | Dashed<keyof TSignals & string>\n ? never\n : K\n : K]: NonNullable<TNextSignalEmitMap>[K];\n }\n : TSignalEmitSurface,\n TPropertySurface &\n Omit<\n TInterfaceInstance extends { [propertyMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInterfaceInstance extends { __properties__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInterfaceInstance extends { __properties__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n keyof TPropertySurface\n >,\n TWritablePropertySurface &\n Omit<\n TInterfaceInstance extends { [writablePropertyMapOverride]?: infer TResolver }\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TInterfaceInstance extends { __writableProperties__?: infer TMap }\n ? NonNullable<TMap>\n : object\n : TInterfaceInstance extends { __writableProperties__?: infer TMap }\n ? NonNullable<TMap>\n : object,\n keyof TWritablePropertySurface\n >,\n TNaturalInstanceMembers,\n TClassInstanceSignals,\n TLegacySignalMembers\n >\n : never) : TInstance &\n TMemberSurface &\n DeclaredSignalMethods<\n TSignals,\n TNaturalInstanceMembers | Extract<keyof TMemberSurface, TLegacySignalMembers>\n > & {\n [naturalSignalMember]?: Record<\n TNaturalInstanceMembers | Extract<keyof TMemberSurface, TLegacySignalMembers>,\n true\n >;\n [classSignalMember]?: Record<\n TClassInstanceSignals | Dashed<keyof TSignals & string>,\n true\n >;\n [signalMapOverride]?: () => Omit<TSignalSurface, DeclaredSignalName<TSignals>> &\n Record<DeclaredSignalName<TSignals>, (...args: never[]) => unknown>;\n [signalEmitMapOverride]?: () => Omit<TSignalEmitSurface, DeclaredSignalName<TSignals>> &\n Record<DeclaredSignalName<TSignals>, { args: unknown[]; result: unknown }>;\n [propertyMapOverride]?: () => TRegisteredPropertySurface;\n [writablePropertyMapOverride]?: () => TRegisteredWritablePropertySurface;\n __properties__: TRegisteredPropertySurface;\n __writableProperties__: TRegisteredWritablePropertySurface;\n };\n\n/** A registered class's construct signature and prototype. */\ntype RegisteredConstructor<TClass, TArgs extends unknown[], TInstance> = {\n /** Object the class's instances inherit from. */\n prototype: TInstance;\n} & (TClass extends new (...args: never) => unknown\n ? new (...args: TArgs) => TInstance\n : abstract new (...args: TArgs) => TInstance);\n\n/** The statics a registered class keeps from the class it was, joined with {@link RegisteredConstructor}. */\ntype RegisteredParts<TClass, TArgs extends unknown[], TInstance> = Omit<TClass, \"prototype\"> &\n RegisteredConstructor<TClass, TArgs, TInstance>;\n\n/** The registered class with its declared properties and signals. */\ntype RegisteredClass<\n TClass extends AnyClass,\n TProperties,\n TSignals,\n TInterfaces extends readonly Interface<TClass[\"prototype\"]>[],\n> =\n TClass extends abstract new (...args: infer TArgs) => infer TInstance\n ? RegisteredParts<TClass, TArgs, RegisteredInstance<TInstance, TProperties, TSignals, TInterfaces>>\n : never;\n\n/** A numeric GType or a generated or registered wrapper class. */\ntype SignalGType = bigint | AnyClass<TypedClass>;\n\n/** A signal installed by {@link registerClass}. */\ntype SignalSpec = {\n /** `GObject.SignalFlags` bit mask, defaulting to `RUN_FIRST`. */\n flags?: number;\n /** Argument GTypes, defaulting to none. */\n paramTypes?: SignalGType[];\n /** Return GType, defaulting to none. */\n returnType?: SignalGType;\n /** Combines handler results; omitted means the last result wins. */\n accumulator?: \"first-wins\" | \"true-handled\";\n};\n\n/** What {@link registerClass} adds to the new GType beyond the vtable slots it discovers on the class. */\ntype RegisterClassOptions<\n TInstance extends object,\n TProperties extends Record<string, PropertySpec>,\n TSignals extends Record<string, SignalSpec>,\n TInterfaces extends readonly Interface<TInstance>[],\n> = {\n /** Registered GType name, defaulting to the class name. */\n typeName?: string;\n /** Prevents direct construction while allowing registered subclasses. */\n abstract?: boolean;\n /** CSS node name for a `Gtk.Widget` subclass. */\n cssName?: string;\n /**\n * Runs once after registration with the wrapped class struct. An exception propagates after\n * the static GType has already been registered and cannot be undone.\n */\n classInit?(typeStruct: object): void;\n /** Interfaces implemented through matching `vfunc` methods. */\n implements?: TInterfaces;\n /**\n * ParamSpecs keyed by their JavaScript property names. Keys and ParamSpec names must canonicalize\n * to the same member. Writes validate flags, types, and ranges and notify only on changes.\n * Nullish values require a nullable GType; constructor `undefined` means omitted. An existing\n * camelCase accessor remains authoritative.\n */\n properties?: TProperties;\n /**\n * New canonical signal names and specs. Declared GTypes validate emissions, and a matching\n * `on<SignalName>` method becomes the default handler.\n */\n signals?: TSignals;\n};\n\n/** {@link RegisterClassOptions} with the widest instance and property types {@link registerClass} accepts. */\ntype AnyRegisterClassOptions = RegisterClassOptions<\n object,\n Record<string, PropertySpec>,\n Record<string, SignalSpec>,\n Interface<object>[]\n>;\ntype VfuncFn = NativeRegisterClassVfunc[\"fn\"];\ntype DiscoveredVfunc = VfuncDescriptor & { methodName: string; fn: VfuncFn };\ntype MethodTable = Map<string, VfuncFn>;\ntype InstanceMembers = { methods: MethodTable; names: Set<string>; inheritedNames: Set<string> };\n\ntype InterfaceVfuncBinding = {\n gtype: bigint;\n vfuncs: DiscoveredVfunc[];\n};\n\ntype PropertyVfuncSource = {\n klass: AnyClass;\n methods: MethodTable;\n dispatch: PropertyDispatch;\n adoptedTypes: bigint[];\n};\n\ntype PropertyVfuncSpec = {\n methodName: string;\n isValueOut: boolean;\n makeDispatch: (dispatch: PropertyDispatch) => VfuncFn;\n};\n\ntype ArgPatch = { isCallerAllocated: true } | { isCallScoped: true };\ntype DeclaredSignals = { native: NativeRegisterClassSignal[]; table: Map<string, DeclaredSignalTypes> };\n\nconst INSTANCE_ARG_INDEX = 0;\nconst VALUE_ARG_INDEX = 2;\nconst TEARDOWN_VFUNC_NAMES: Set<string> = new Set([\"dispose\", \"finalize\"]);\nconst ASYNC_INITABLE_TYPE_NAME = \"GAsyncInitable\";\nconst INIT_ASYNC_METHOD_NAME = \"vfuncInitAsync\";\n\nconst PROPERTY_VFUNC_SPECS: PropertyVfuncSpec[] = [\n { methodName: GET_PROPERTY_VFUNC, isValueOut: true, makeDispatch: makeGetProperty },\n { methodName: SET_PROPERTY_VFUNC, isValueOut: false, makeDispatch: makeSetProperty },\n];\n\nconst PROPERTY_VFUNC_NAMES: Set<string> = new Set(PROPERTY_VFUNC_SPECS.map((spec) => spec.methodName));\nconst VFUNC_METHOD_PATTERN = /^vfunc[A-Z0-9]/;\nconst TYPE_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9\\-_+]{2,}$/;\nconst UPPER_CASE_PATTERN = /[A-Z]/;\nconst SIGNAL_OVERRIDE_PATTERN = /^on[A-Z]/;\n\n/**\n * Registers a wrapper subclass as a GType with discovered vfuncs, properties, signals, and interfaces.\n * Vfuncs must be prototype methods; function-valued fields never reach the vtable. A matching\n * `on<SignalName>` method becomes the signal's default handler.\n *\n * `vfuncConstructed` runs before field initializers and the constructor body. Native-created\n * instances never run the JavaScript constructor, so native-required state belongs in properties\n * or `vfuncConstructed`. A new `Gio.AsyncInitable` must implement `vfuncInitAsync`.\n *\n * @param klass The wrapper subclass to register.\n * @param options Additional GType configuration.\n * @returns The registered class with declared properties and signals in its type.\n * @throws For invalid parents, names, interfaces, vfuncs, properties, signals, or widget options.\n * A `classInit` exception propagates after the static type has been registered and cannot be undone.\n */\nfunction registerClass<\n T extends AnyClass,\n TProperties extends Record<string, PropertySpec> = Record<never, PropertySpec>,\n TSignals extends Record<string, SignalSpec> = Record<never, SignalSpec>,\n const TInterfaces extends readonly Interface<T[\"prototype\"]>[] = readonly Interface<T[\"prototype\"]>[],\n>(\n klass: T,\n options?: RegisterClassOptions<T[\"prototype\"], TProperties, TSignals, TInterfaces>,\n): RegisteredClass<T, TProperties, TSignals, TInterfaces>;\n\nfunction registerClass(klass: AnyClass, options: AnyRegisterClassOptions = {}): AnyClass {\n const parentType = resolveParentType(klass);\n\n if (parentType === TYPE_INVALID) {\n throw new TypeError(`registerClass: ${klass.name} must extend a registered wrapper class`);\n }\n\n const name = resolveTypeName(klass, options);\n const declaredTypes = resolveInterfaceTypes(klass, options.implements ?? []);\n assertInterfacePrerequisites(klass, parentType, declaredTypes);\n const adoptedTypes = declaredTypes.filter((gtype) => !typeIsA(parentType, gtype));\n const properties = options.properties ?? {};\n const signals = resolveDeclaredSignals(klass, options.signals ?? {});\n const members = collectInstanceMembers(klass);\n const { methods, inheritedNames } = members;\n checkAsyncInitable(klass, adoptedTypes, methods);\n const dispatch = buildPropertyDispatch({ klass, properties, adoptedTypes });\n\n const classVfuncs = [\n ...discoverClassVfuncs(klass, methods),\n ...propertyVfuncs({ klass, methods, dispatch, adoptedTypes }),\n ];\n\n const claimedMethodNames = new Set(classVfuncs.map((vfunc) => vfunc.methodName));\n const interfaceBindings = discoverInterfaceBindings(methods, parentType, declaredTypes, claimedMethodNames);\n assertClaimedVfuncs(klass, methods, claimedMethodNames, interfaceBindings);\n\n const nativeOptions = withNativeSignals(\n toNativeOptions(classVfuncs, interfaceBindings, properties, options),\n signals.native,\n );\n\n const newType: bigint = nativeRegisterClass(name, parentType, nativeOptions);\n registerClassType(klass, newType);\n markDerivedClass(klass);\n installSignalOverrides(newType, methods);\n applyInterfaceMixins(klass, adoptedTypes, inheritedNames);\n installDeclaredSignalMethods(klass, signals.table);\n invokeClassInit(options, newType);\n\n return klass;\n}\n\nfunction invokeClassInit(options: AnyRegisterClassOptions, newType: bigint): void {\n if (options.classInit === undefined) {\n return;\n }\n\n const structClass = getClassStructClass(newType);\n\n if (structClass === undefined) {\n throw new Error(\"registerClass: no ancestor of the new type registers a class struct wrapper\");\n }\n\n options.classInit(wrapHandle(getTypeClassHandle(newType), structClass));\n}\n\nfunction resolveTypeName(klass: AnyClass, options: AnyRegisterClassOptions): string {\n const name = options.typeName ?? klass.name;\n\n if (!name) {\n throw new TypeError(\"registerClass: cannot derive a GType name (anonymous class with no typeName option)\");\n }\n\n if (!TYPE_NAME_PATTERN.test(name)) {\n throw new TypeError(\n `registerClass: '${name}' is not a valid GType name (a letter or underscore, then at ` +\n \"least two more characters, all from A-Z, a-z, 0-9, '-', '_' and '+')\",\n );\n }\n\n return name;\n}\n\nfunction resolveInterfaceType(klass: AnyClass, entry: AnyClass): bigint {\n const gtype = getClassType(entry);\n\n if (typeFundamental(gtype) !== TYPE_INTERFACE) {\n const label = typeof entry === \"function\" ? entry.name : String(entry);\n\n throw new TypeError(\n `registerClass: ${klass.name} lists '${label}' in implements, which is not a registered interface`,\n );\n }\n\n return gtype;\n}\n\nfunction resolveInterfaceTypes(klass: AnyClass, entries: AnyClass[]): bigint[] {\n return [...new Set(entries.map((entry) => resolveInterfaceType(klass, entry)))];\n}\n\nfunction checkAsyncInitable(klass: AnyClass, adoptedTypes: bigint[], methods: MethodTable): void {\n const isAsyncInitable = adoptedTypes.some((gtype) => typeName(gtype) === ASYNC_INITABLE_TYPE_NAME);\n\n if (isAsyncInitable && !methods.has(INIT_ASYNC_METHOD_NAME)) {\n throw new TypeError(\n `registerClass: ${klass.name} implements Gio.AsyncInitable without overriding 'vfuncInitAsync'; ` +\n \"the default 'init_async' would run 'vfuncInit' on a worker thread\",\n );\n }\n}\n\nfunction applyInterfaceMixins(klass: AnyClass, adoptedTypes: bigint[], inheritedNames: Set<string>): void {\n for (const gtype of adoptedTypes) {\n const mixin = getInterfaceMixin(gtype);\n\n if (mixin !== undefined) {\n insertMixinLayer(klass, mixin, inheritedNames);\n }\n }\n}\n\nfunction resolveParentType(klass: AnyClass): bigint {\n return (\n walkClassChain(getParentClass(klass), (cls) => {\n const gtype = getClassType(cls);\n\n return gtype === TYPE_INVALID ? undefined : gtype;\n }) ?? TYPE_INVALID\n );\n}\n\nfunction addOwnMember(members: InstanceMembers, proto: object, name: string, isInherited: boolean): void {\n if (name === \"constructor\") {\n return;\n }\n\n if (isInherited) {\n members.inheritedNames.add(name);\n }\n\n if (members.names.has(name)) {\n return;\n }\n\n members.names.add(name);\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n\n if (typeof descriptor?.value === \"function\") {\n members.methods.set(name, descriptor.value as VfuncFn);\n }\n}\n\nfunction addOwnMembers(members: InstanceMembers, klass: AnyClass, isInherited: boolean): void {\n const proto = (klass as { prototype?: object }).prototype;\n\n if (proto === undefined) {\n return;\n }\n\n for (const name of Object.getOwnPropertyNames(proto)) {\n addOwnMember(members, proto, name, isInherited);\n }\n}\n\nfunction collectInstanceMembers(klass: AnyClass): InstanceMembers {\n const members: InstanceMembers = { methods: new Map(), names: new Set(), inheritedNames: new Set() };\n let cls: AnyClass | null = klass;\n\n while (cls !== null && getClassType(cls) === TYPE_INVALID) {\n addOwnMembers(members, cls, cls !== klass);\n cls = getParentClass(cls);\n }\n\n return members;\n}\n\nfunction buildDiscoveredVfunc(\n fn: VfuncFn,\n methodName: string,\n resolveDescriptor: (methodName: string) => VfuncDescriptor | undefined,\n skip: Set<string> | undefined,\n): DiscoveredVfunc | undefined {\n if (skip?.has(methodName)) {\n return undefined;\n }\n\n const descriptor = resolveDescriptor(methodName);\n\n if (!descriptor) {\n return undefined;\n }\n\n const argDescriptors = slotArgDescriptors(descriptor);\n\n return {\n ...descriptor,\n methodName,\n argDescriptors,\n fn: wrapVfunc(fn, argDescriptors, descriptor),\n };\n}\n\nfunction collectDiscoveredVfuncs(\n methods: MethodTable,\n resolveDescriptor: (methodName: string) => VfuncDescriptor | undefined,\n skip?: Set<string>,\n): DiscoveredVfunc[] {\n const result: DiscoveredVfunc[] = [];\n\n for (const [methodName, fn] of methods) {\n const discovered = buildDiscoveredVfunc(fn, methodName, resolveDescriptor, skip);\n\n if (discovered) {\n result.push(discovered);\n }\n }\n\n return result;\n}\n\nfunction discoverClassVfuncs(klass: AnyClass, methods: MethodTable): DiscoveredVfunc[] {\n return collectDiscoveredVfuncs(\n methods,\n (methodName) => findClassVfuncDescriptor(klass, methodName) ?? undefined,\n PROPERTY_VFUNC_NAMES,\n );\n}\n\nfunction wrapVfunc(\n fn: VfuncFn,\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"],\n descriptor: VfuncDescriptor,\n): VfuncFn {\n return wrapCallback(\n fn as (...args: unknown[]) => unknown,\n { argDescriptors, returnDescriptor: descriptor.returnDescriptor },\n \"vfunc\",\n );\n}\n\nconst claimedVfuncNames = (\n claimedMethodNames: Set<string>,\n interfaceBindings: InterfaceVfuncBinding[],\n): Set<string> => {\n const claimed = new Set(claimedMethodNames);\n\n for (const binding of interfaceBindings) {\n for (const vfunc of binding.vfuncs) {\n claimed.add(vfunc.methodName);\n }\n }\n\n return claimed;\n};\n\nconst isPrerequisiteMet = (parentType: bigint, declaredTypes: bigint[], prerequisite: bigint): boolean =>\n typeIsA(parentType, prerequisite) || declaredTypes.includes(prerequisite);\n\nfunction assertPrerequisitesFor(klass: AnyClass, parentType: bigint, declaredTypes: bigint[], iface: bigint): void {\n for (const prerequisite of typeInterfacePrerequisites(iface)) {\n if (!isPrerequisiteMet(parentType, declaredTypes, prerequisite)) {\n throw new TypeError(\n `registerClass: ${klass.name} does not meet prerequisite ` +\n `'${typeName(prerequisite) ?? String(prerequisite)}' of interface ` +\n `'${typeName(iface) ?? String(iface)}'`,\n );\n }\n }\n}\n\nfunction assertInterfacePrerequisites(klass: AnyClass, parentType: bigint, declaredTypes: bigint[]): void {\n for (const iface of declaredTypes) {\n assertPrerequisitesFor(klass, parentType, declaredTypes, iface);\n }\n}\n\nfunction assertClaimedVfuncs(\n klass: AnyClass,\n methods: MethodTable,\n claimedMethodNames: Set<string>,\n interfaceBindings: InterfaceVfuncBinding[],\n): void {\n const claimed = claimedVfuncNames(claimedMethodNames, interfaceBindings);\n\n for (const methodName of methods.keys()) {\n if (VFUNC_METHOD_PATTERN.test(methodName) && !claimed.has(methodName)) {\n throw new Error(\n `registerClass: ${klass.name}.${methodName} matches no vtable slot on any ancestor ` +\n \"or implemented interface, so the override would never be called; check the name against \" +\n \"the parent class's virtual methods\",\n );\n }\n }\n}\n\nfunction discoverInterfaceBindings(\n methods: MethodTable,\n parentGtype: bigint,\n declaredTypes: bigint[],\n claimedMethodNames: Set<string>,\n): InterfaceVfuncBinding[] {\n const declared: Set<bigint> = new Set(declaredTypes);\n const gtypes: Set<bigint> = new Set([...typeInterfaces(parentGtype), ...declaredTypes]);\n const bindings: InterfaceVfuncBinding[] = [];\n\n for (const gtype of gtypes) {\n const vfuncs = discoverInterfaceVfuncs(methods, gtype, claimedMethodNames);\n\n if (vfuncs.length > 0 || declared.has(gtype)) {\n bindings.push({ gtype, vfuncs });\n }\n }\n\n return bindings;\n}\n\nfunction discoverInterfaceVfuncs(\n methods: MethodTable,\n interfaceGtype: bigint,\n claimedMethodNames: Set<string>,\n): DiscoveredVfunc[] {\n return collectDiscoveredVfuncs(\n methods,\n (methodName) => findInterfaceVfuncDescriptor(interfaceGtype, methodName),\n claimedMethodNames,\n );\n}\n\nconst hasDispatchedProperties = (dispatch: PropertyDispatch, adoptedTypes: bigint[]): boolean =>\n dispatch.accessors.length > 0 || adoptedTypes.length > 0;\n\nfunction propertyVfuncFor(\n source: PropertyVfuncSource,\n spec: PropertyVfuncSpec,\n): DiscoveredVfunc | undefined {\n const { klass, methods, dispatch, adoptedTypes } = source;\n\n const dispatched = hasDispatchedProperties(dispatch, adoptedTypes)\n ? spec.makeDispatch(dispatch)\n : undefined;\n\n const fn = methods.get(spec.methodName) ?? dispatched;\n\n return fn === undefined ? undefined : buildPropertyVfunc(klass, spec.methodName, fn, spec.isValueOut);\n}\n\nfunction propertyVfuncs(source: PropertyVfuncSource): DiscoveredVfunc[] {\n return PROPERTY_VFUNC_SPECS.map((spec) => propertyVfuncFor(source, spec)).filter(\n (vfunc) => vfunc !== undefined,\n );\n}\n\nfunction markArg(argDescriptors: Descriptor[], index: number, patch: ArgPatch): Descriptor[] {\n return argDescriptors.map((arg, at) => (at === index ? { ...arg, ...patch } : arg));\n}\n\nfunction isTeardownSlot(descriptor: VfuncDescriptor): boolean {\n return (\n TEARDOWN_VFUNC_NAMES.has(descriptor.vfuncName) &&\n descriptor.argDescriptors[INSTANCE_ARG_INDEX]?.kind === \"object\"\n );\n}\n\nfunction slotArgDescriptors(descriptor: VfuncDescriptor): Descriptor[] {\n if (!isTeardownSlot(descriptor)) {\n return descriptor.argDescriptors;\n }\n\n return markArg(descriptor.argDescriptors, INSTANCE_ARG_INDEX, { isCallScoped: true });\n}\n\nfunction buildPropertyVfunc(\n klass: AnyClass,\n methodName: string,\n fn: VfuncFn,\n isValueOut: boolean,\n): DiscoveredVfunc {\n const descriptor = findClassVfuncDescriptor(klass, methodName);\n\n if (!descriptor) {\n throw new Error(`registerClass: the parent class exposes no '${methodName}' vtable slot`);\n }\n\n const argDescriptors = isValueOut\n ? markArg(descriptor.argDescriptors, VALUE_ARG_INDEX, { isCallerAllocated: true })\n : descriptor.argDescriptors;\n\n return {\n ...descriptor,\n methodName,\n argDescriptors,\n fn: wrapVfunc(fn, argDescriptors, descriptor),\n };\n}\n\nfunction assertLowerCaseSignalName(klass: AnyClass, name: string): void {\n if (!UPPER_CASE_PATTERN.test(name)) {\n return;\n }\n\n throw new TypeError(\n `registerClass: ${klass.name} declares the signal '${name}'; GObject would carry it under that ` +\n \"exact spelling, out of reach of both its dashed spelling and its default handler; \" +\n `declare it as '${kebabCase(name)}'`,\n );\n}\n\nfunction overriddenSignalId(type: bigint, methodName: string): number {\n if (!SIGNAL_OVERRIDE_PATTERN.test(methodName)) {\n return 0;\n }\n\n const signal = signalForHandlerName(type, methodName);\n\n return signal === undefined ? 0 : signalIdFor(type, signal);\n}\n\nfunction installSignalOverrides(newType: bigint, methods: MethodTable): void {\n for (const [methodName, fn] of methods) {\n const signalId = overriddenSignalId(newType, methodName);\n\n if (signalId === 0) {\n continue;\n }\n\n const handler = fn as (...args: unknown[]) => unknown;\n\n overrideSignalClassClosure(newType, signalId, (...args: unknown[]) =>\n handler.apply(args[0], args.slice(1)),\n );\n }\n}\n\nfunction resolveSignalGType(klass: AnyClass, signalName: string, role: string, entry: SignalGType): bigint {\n if (typeof entry === \"bigint\") {\n return entry;\n }\n\n const gtype = getClassType(entry);\n\n if (gtype === TYPE_INVALID) {\n throw new TypeError(\n `registerClass: signal '${signalName}' of ${klass.name} names a class with no registered ` +\n `GType as its ${role}`,\n );\n }\n\n return gtype;\n}\n\nfunction resolveSignalReturnType(klass: AnyClass, name: string, spec: SignalSpec): bigint | undefined {\n if (spec.returnType === undefined) {\n return undefined;\n }\n\n const returnType = resolveSignalGType(klass, name, \"return type\", spec.returnType);\n\n return returnType === TYPE_NONE ? undefined : returnType;\n}\n\nfunction resolveDeclaredSignal(\n klass: AnyClass,\n name: string,\n spec: SignalSpec,\n): { native: NativeRegisterClassSignal; declared: DeclaredSignalTypes } {\n const paramTypes = (spec.paramTypes ?? []).map((entry, index) =>\n resolveSignalGType(klass, name, `parameter ${String(index)}`, entry),\n );\n\n const returnType = resolveSignalReturnType(klass, name, spec);\n const native: NativeRegisterClassSignal = { name, paramTypes };\n const declared: DeclaredSignalTypes = { paramTypes };\n\n if (spec.flags !== undefined) {\n native.flags = spec.flags;\n }\n\n if (spec.accumulator !== undefined) {\n native.accumulator = spec.accumulator;\n }\n\n if (returnType !== undefined) {\n native.returnType = returnType;\n declared.returnType = returnType;\n }\n\n return { native, declared };\n}\n\nfunction resolveDeclaredSignals(klass: AnyClass, signals: Record<string, SignalSpec>): DeclaredSignals {\n const native: NativeRegisterClassSignal[] = [];\n const table: Map<string, DeclaredSignalTypes> = new Map();\n\n for (const [name, spec] of Object.entries(signals)) {\n assertLowerCaseSignalName(klass, name);\n const resolved = resolveDeclaredSignal(klass, name, spec);\n native.push(resolved.native);\n table.set(canonicalSignalName(name), resolved.declared);\n }\n\n return { native, table };\n}\n\nfunction installDeclaredSignalMethods(\n klass: AnyClass,\n table: Map<string, DeclaredSignalTypes>,\n): void {\n if (table.size === 0) {\n return;\n }\n\n const findDeclared = (signal: string): DeclaredSignalTypes | undefined =>\n table.get(canonicalSignalName(signal));\n\n installSignalDispatch(klass, table.keys().toArray(), {\n connect(instance, signal, handler, isAfter): number {\n findDeclared(signal);\n\n return connectClosureSignal(instance, signal, handler, isAfter ?? false);\n },\n emit(instance, signal, args): unknown {\n const declared = findDeclared(signal);\n\n if (declared === undefined) {\n throw new Error(`Unknown signal '${signal}'`);\n }\n\n return emitDeclaredSignal(instance, signal, declared, args);\n },\n });\n}\n\nfunction toNativeInterface(binding: InterfaceVfuncBinding): NativeRegisterClassInterface {\n const nativeInterface: NativeRegisterClassInterface = {\n type: binding.gtype,\n vfuncs: [...binding.vfuncs],\n };\n\n const vtableSize = binding.vfuncs[0]?.vtableSize;\n\n if (vtableSize !== undefined) {\n nativeInterface.vtableSize = vtableSize;\n }\n\n return nativeInterface;\n}\n\nfunction withNativeSignals(\n options: NativeRegisterClassOptions | undefined,\n signals: NativeRegisterClassSignal[],\n): NativeRegisterClassOptions | undefined {\n if (signals.length === 0) {\n return options;\n }\n\n return { ...options, signals };\n}\n\nfunction applyNativeTypeOptions(options: NativeRegisterClassOptions, source: AnyRegisterClassOptions): void {\n if (source.abstract ?? false) {\n options.abstract = true;\n }\n\n if (source.cssName !== undefined) {\n options.cssName = source.cssName;\n }\n}\n\nfunction toNativeOptions(\n classVfuncs: DiscoveredVfunc[],\n interfaceBindings: InterfaceVfuncBinding[],\n properties: Record<string, PropertySpec>,\n source: AnyRegisterClassOptions,\n): NativeRegisterClassOptions | undefined {\n const options: NativeRegisterClassOptions = {};\n applyNativeTypeOptions(options, source);\n\n if (Object.keys(properties).length > 0) {\n options.properties = toNativeProperties(properties);\n }\n\n if (classVfuncs.length > 0) {\n options.vfuncs = [...classVfuncs];\n }\n\n if (interfaceBindings.length > 0) {\n options.interfaces = interfaceBindings.map((binding) => toNativeInterface(binding));\n }\n\n return Object.keys(options).length > 0 ? options : undefined;\n}\n\nexport { type Interface, registerClass, type SignalGType, type SignalSpec };\n"]}
@@ -169,7 +169,7 @@ declare function registerInterface(cls: AnyClass, type: bigint, mixin: Mixin, la
169
169
  * @param interfaces Registered interface classes to adopt, in order.
170
170
  * @throws If an entry is not a registered interface.
171
171
  */
172
- declare function installInterfaces(cls: AnyClass, interfaces: AnyClass[]): void;
172
+ declare function installInterfaces(cls: AnyClass, interfaces: AnyClass[], inheritedOverrides?: string[]): void;
173
173
  /**
174
174
  * Wraps a native handle in a JS wrapper instance. With no class, resolves and
175
175
  * reuses the wrapper for the handle's runtime GType (composing interface mixins),
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/registry.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { getFundamentalWrapper, getType, getTypeClass, getWrapper, setFundamentalWrapper, setWrapper, } from "@gtkx/native";
2
2
  import { walkClassChain } from "@gtkx/utils";
3
- import { copyLayerMembers, installMixins } from "./mixin.js";
3
+ import { copyLayerMembers, createMixinLayer, installMixins } from "./mixin.js";
4
4
  import { TYPE_INVALID, TYPE_OBJECT, typeFundamental, typeInterfaces, typeIsA, typeName, typeParent, } from "./type.js";
5
5
  const classRegistry = new Map();
6
6
  const classStructRegistry = new Map();
@@ -225,7 +225,7 @@ function registerInterface(cls, type, mixin, layout) {
225
225
  * @param interfaces Registered interface classes to adopt, in order.
226
226
  * @throws If an entry is not a registered interface.
227
227
  */
228
- function installInterfaces(cls, interfaces) {
228
+ function installInterfaces(cls, interfaces, inheritedOverrides = []) {
229
229
  const mixins = interfaces.map((iface) => {
230
230
  const mixin = getInterfaceMixin(getClassType(iface));
231
231
  if (mixin === undefined) {
@@ -233,7 +233,7 @@ function installInterfaces(cls, interfaces) {
233
233
  }
234
234
  return mixin;
235
235
  });
236
- installMixins(cls, mixins);
236
+ installMixins(cls, mixins, inheritedOverrides);
237
237
  }
238
238
  function wrapHandle(handle, cls) {
239
239
  if (handle === null || handle === undefined) {
@@ -305,7 +305,7 @@ function applyInterfaceMixin(cls, type, baseType, applied) {
305
305
  return cls;
306
306
  }
307
307
  applied.add(type);
308
- return mixin(cls);
308
+ return createMixinLayer(cls, mixin, new Set());
309
309
  }
310
310
  function createComposedClass(base, runtimeType) {
311
311
  const baseType = getClassType(base);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ExternalObject,\n getFundamentalWrapper,\n getType,\n getTypeClass,\n getWrapper,\n type Handle,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n setFundamentalWrapper,\n setWrapper,\n} from \"@gtkx/native\";\nimport { type AnyClass, walkClassChain } from \"@gtkx/utils\";\nimport { copyLayerMembers, installMixins, type Mixin, type MixinReceiver } from \"./mixin.js\";\nimport {\n TYPE_INVALID,\n TYPE_OBJECT,\n type TypedClass,\n typeFundamental,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n} from \"./type.js\";\n\n/**\n * Static side of class `C` with its construct signature preserved but the members named `K`\n * removed. A generated class lists every static it declares itself, so a static it narrows never\n * has to stay assignable to the one it shadows. The signature is kept abstract so an abstract `C`\n * survives it: a subclass extends the result, and only the subclass's own declarations decide\n * which statics reach it.\n */\ntype StaticBase<C, K extends PropertyKey> = Omit<C, K> &\n (C extends abstract new (...args: infer A) => infer R ? abstract new (...args: A) => R : never);\n\n/**\n * Static side of class `C` with its construct signature retargeted to produce `I`. A generated\n * wrapper class is declared locally and exported as a registered constant; its instance type is\n * exported as an interface extending the local class so declaration merging and module\n * augmentation keep working, and this type makes constructing the constant produce that interface.\n */\ntype WrapperClass<C, I> = Omit<C, \"prototype\"> & {\n /** Prototype retyped to the exported instance interface, so `instanceof` narrows to it. */\n prototype: I;\n} &\n(C extends new (...args: infer A) => unknown\n ? new (...args: A) => I\n : C extends abstract new (...args: infer A) => unknown\n ? abstract new (...args: A) => I\n : never);\n\n/** One overridable vtable slot: where it sits in the vtable struct and how it is marshalled. */\ntype VfuncDescriptor = {\n /** GIR name of the type struct holding the slot, without its namespace, such as `WidgetClass`. */\n className: string;\n /** Name of the slot's field in that struct. */\n vfuncName: string;\n /** Byte offset of the slot within the struct. */\n byteOffset: number;\n /**\n * Byte size of an interface's vtable struct, used to bounds-check `VfuncDescriptor.byteOffset`.\n * A class struct is bounds-checked against the size `g_type_query` reports for it, so a slot in\n * one carries no size of its own.\n */\n vtableSize?: number;\n /** Descriptor for each argument the slot receives, starting with the instance. */\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"];\n /** Descriptor for the value the slot returns. */\n returnDescriptor: NativeRegisterClassVfunc[\"returnDescriptor\"];\n /**\n * GIR marks the slot's return value as one the bindings do not surface, so a call through the\n * slot drops it and an implementation of the slot reports success in its place, while\n * `VfuncDescriptor.returnDescriptor` keeps the C type the slot is called against either way.\n */\n isReturnSkipped?: boolean;\n /**\n * The slot takes a trailing `GError**` that `VfuncDescriptor.argDescriptors` leaves out, the\n * way GIR leaves it out of a callable's parameters. A call through the slot has to append it\n * or it passes one argument fewer than the implementation reads.\n */\n canThrow?: boolean;\n};\n\n/**\n * The vtable slots a wrapper class or interface exposes, keyed by the JavaScript method name that\n * overrides each one.\n */\ntype VfuncRegistry = Record<string, VfuncDescriptor>;\ntype WrapperBinding = (handle: ExternalObject<Handle>, instance: object) => void;\n/**\n * Picks the wrapper class for one handle of a registered type, such as a subclass keyed on a tag the\n * handle carries.\n */\ntype WrapperClassResolver = (handle: ExternalObject<Handle>) => AnyClass;\n\n/**\n * How one property an interface declares reaches the vtable, given as the interface's own accessor\n * members. A direction introspection does not route through a vtable slot is left out, and the\n * property owns that direction's state itself.\n */\ntype InterfaceProperty = {\n /** Member reading the slot the property's value comes from, such as `getEnabled`. */\n getter?: string;\n /** Member writing the slot the property's value goes to, such as `setActionName`. */\n setter?: string;\n};\n\n/**\n * What an interface's vtable struct looks like, for the classes that adopt the interface.\n * `g_type_query` reports no size for an interface, so each slot's generated metadata carries the\n * struct's byte size to bounds-check the slot's offset; an interface introspection describes no\n * vtable for simply contributes no slots.\n */\ntype InterfaceLayout = {\n /** The slots the struct declares, keyed by the JavaScript method name that fills each one. */\n vfuncs?: VfuncRegistry;\n /**\n * The properties a vtable slot backs, keyed by canonical property name, so a class adopting the\n * interface answers `g_object_get` and `g_object_set` with what the slot holds.\n */\n properties?: Record<string, InterfaceProperty>;\n};\n\nconst classRegistry: Map<bigint, AnyClass> = new Map();\nconst classStructRegistry: Map<bigint, AnyClass> = new Map();\nconst composedClassStructRegistry: Map<bigint, AnyClass> = new Map();\nconst interfaceMixinRegistry: Map<bigint, Mixin> = new Map();\nconst composedClassRegistry: Map<bigint, AnyClass> = new Map();\nconst handleMap: WeakMap<object, ExternalObject<Handle>> = new WeakMap();\nconst vfuncRegistry: WeakMap<object, VfuncRegistry> = new WeakMap();\nconst interfaceLayoutRegistry: Map<bigint, InterfaceLayout> = new Map();\nconst wrapperClasses: WeakSet<AnyClass> = new WeakSet();\nconst derivedClasses: WeakSet<AnyClass> = new WeakSet();\nconst typeClassHandles: Map<bigint, ExternalObject<Handle>> = new Map();\nconst wrapperClassResolvers: WeakMap<AnyClass, WrapperClassResolver> = new WeakMap();\n\nfunction setClassType(cls: AnyClass, type: bigint): void {\n (cls.prototype as { [K in keyof TypedClass]: TypedClass[K] }).__type__ = type;\n}\n\n/**\n * Returns the GType a class was registered under, or the invalid type when it carries none. The tag is\n * read off the class's own prototype, so a subclass that never went through `registerClass` reports the\n * invalid type rather than inheriting the one its parent was registered with.\n */\nfunction getClassType(cls: AnyClass | undefined): bigint {\n const proto: object | undefined = cls?.prototype;\n\n if (proto === undefined || !Object.hasOwn(proto, \"__type__\")) {\n return TYPE_INVALID;\n }\n\n return (proto as TypedClass).__type__;\n}\n\n/**\n * Returns the GType the given instance's handle carries, or the invalid type when it has no handle.\n * This is the object's own type rather than the type of the class it was wrapped as, and the two differ\n * for an object GTK created itself, such as the row widget inside a `Gtk.ListView`, which GTKX wraps as\n * the nearest registered ancestor.\n */\nfunction getInstanceType(instance: object): bigint {\n const handle = handleMap.get(instance);\n\n return handle === undefined ? TYPE_INVALID : getType(handle);\n}\n\nfunction coerceGType(value: unknown): unknown {\n if (typeof value !== \"function\") {\n return value;\n }\n\n const type = getClassType(value as AnyClass);\n\n return type === TYPE_INVALID ? value : type;\n}\n\nfunction registerClassType(cls: AnyClass, type: bigint): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n classRegistry.set(type, cls);\n setClassType(cls, type);\n}\n\n/**\n * Registers a wrapper class as the JS representation of a GType, optionally\n * installing a registry of virtual functions.\n * @param cls Wrapper class to associate with the type.\n * @param type GType the class wraps.\n * @param vfuncs Vtable slots the class exposes, so `registerClass` can bind the ones a subclass\n * overrides.\n */\nfunction registerWrapperClass(cls: AnyClass, type: bigint, vfuncs?: VfuncRegistry): void {\n registerClassType(cls, type);\n\n if (type !== TYPE_INVALID) {\n wrapperClasses.add(cls);\n }\n\n if (vfuncs) {\n registerVfuncRegistry(cls, vfuncs);\n }\n}\n\n/**\n * Lets a class registered with `registerWrapperClass` pick a subclass for each handle it wraps, for\n * types whose one GType covers several C-level subtypes, the way a cairo surface reports image or\n * recording through `cairo_surface_get_type`. The resolver runs when a handle is wrapped as that class\n * explicitly, the way a boxed value a binding hands back is; a wrapper resolved from a handle's runtime\n * GType never consults it, and a subclass passed to `wrapHandle` directly is used as given.\n * @param cls Registered wrapper class whose handles the resolver classifies.\n * @param resolver Returns the class to instantiate for one handle, `cls` itself included.\n * @throws If `cls` is not a registered wrapper class.\n */\nfunction registerWrapperClassResolver(cls: AnyClass, resolver: WrapperClassResolver): void {\n if (!wrapperClasses.has(cls)) {\n throw new Error(\n `Cannot register a wrapper class resolver for ${cls.name}: ` +\n \"register the class with registerWrapperClass first\",\n );\n }\n\n wrapperClassResolvers.set(cls, resolver);\n}\n\nfunction markDerivedClass(cls: AnyClass): void {\n derivedClasses.add(cls);\n}\n\n/**\n * Registers the wrapper class of a type's class struct, such as `Gtk.WidgetClass` for `Gtk.Widget`,\n * so `registerClass` can hand a `classInit` hook the new type's class struct wrapped in it.\n * @param cls Wrapper class of the type's instances, already registered through\n * `registerWrapperClass`.\n * @param structClass Wrapper class of the type's class struct.\n */\nfunction registerClassStruct(cls: AnyClass, structClass: AnyClass): void {\n const type = getClassType(cls);\n\n if (type !== TYPE_INVALID) {\n classStructRegistry.set(type, structClass);\n }\n}\n\nfunction collectClassStructClasses(type: bigint): AnyClass[] {\n const structs: AnyClass[] = [];\n let current = type;\n\n while (current !== TYPE_INVALID) {\n const structClass = classStructRegistry.get(current);\n\n if (structClass !== undefined) {\n structs.push(structClass);\n }\n\n current = typeParent(current);\n }\n\n return structs;\n}\n\nfunction composeClassStructClass(structs: AnyClass[]): AnyClass | undefined {\n const [nearest, ...ancestors] = structs;\n\n if (nearest === undefined || ancestors.length === 0) {\n return nearest;\n }\n\n const composed: AnyClass = class extends nearest {};\n Object.defineProperty(composed, \"name\", { value: nearest.name });\n\n for (const structClass of ancestors) {\n copyLayerMembers(composed, structClass.prototype);\n }\n\n return composed;\n}\n\nfunction getClassStructClass(type: bigint): AnyClass | undefined {\n const cached = composedClassStructRegistry.get(type);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const composed = composeClassStructClass(collectClassStructClasses(type));\n\n if (composed !== undefined) {\n composedClassStructRegistry.set(type, composed);\n }\n\n return composed;\n}\n\nfunction peekedTypeLabel(type: bigint | AnyClass, gtype: bigint): string {\n const name = typeName(gtype);\n\n if (name !== null) {\n return name;\n }\n\n return typeof type === \"bigint\" ? String(type) : type.name;\n}\n\nfunction getTypeClassHandle(gtype: bigint): ExternalObject<Handle> {\n const cached = typeClassHandles.get(gtype);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const handle = getTypeClass(gtype);\n typeClassHandles.set(gtype, handle);\n\n return handle;\n}\n\n/**\n * Returns a GObject type's class struct, wrapped in the class-struct wrapper classes registered\n * for the type's ancestry, such as `Gtk.WidgetClass` composed with `GObject.ObjectClass` for a\n * widget type. The class is referenced so it exists even before the type's first instance, and\n * the reference is deliberately never released: once created, a class struct lives for the rest\n * of the process. Backs the `peek` statics of generated GTypeStruct wrappers, such as\n * `GObject.ObjectClass.peek` and `Gtk.WidgetClass.peek`.\n *\n * @param type GType to peek the class struct of, or a registered wrapper class of the type.\n * @param base When given, wrapper class of the type the peeked type must derive from; the peek\n * throws for a type outside that lineage. Without it any GObject type is accepted.\n * @returns The wrapped class struct.\n */\nfunction peekTypeClass(type: bigint | AnyClass, base?: AnyClass): object {\n const gtype = typeof type === \"bigint\" ? type : getClassType(type);\n\n if (!typeIsA(gtype, TYPE_OBJECT)) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' is not a GObject type`);\n }\n\n if (base !== undefined && !typeIsA(gtype, getClassType(base))) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' does not derive from '${base.name}'`);\n }\n\n const structClass = getClassStructClass(gtype);\n\n if (structClass === undefined) {\n throw new TypeError(\n `peekTypeClass: no ancestor of '${peekedTypeLabel(type, gtype)}' registers a class struct wrapper`,\n );\n }\n\n return wrapHandle(getTypeClassHandle(gtype), structClass);\n}\n\nfunction resolveAncestorType(ancestor: AnyClass): bigint | undefined {\n if (derivedClasses.has(ancestor) || !wrapperClasses.has(ancestor)) {\n return undefined;\n }\n\n return getClassType(ancestor);\n}\n\nfunction resolveWrapperType(instance: object): bigint {\n const cls = instance.constructor as AnyClass | undefined;\n\n if (cls === undefined) {\n return TYPE_INVALID;\n }\n\n return walkClassChain(cls, (ancestor) => resolveAncestorType(ancestor)) ?? TYPE_INVALID;\n}\n\n/**\n * Registers a GInterface, associating its GType with a mixin used to compose the\n * interface onto wrapper classes and, when introspection describes its vtable, that layout.\n * @param cls Class carrying the interface's GType tag.\n * @param type GType of the interface.\n * @param mixin Mixin that applies the interface to a wrapper class.\n * @param layout The interface's vtable struct, so `registerClass` can bind the slots an\n * implementing class overrides and take over the ones it leaves alone.\n */\nfunction registerInterface(cls: AnyClass, type: bigint, mixin: Mixin, layout?: InterfaceLayout): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n setClassType(cls, type);\n interfaceMixinRegistry.set(type, mixin);\n\n if (layout) {\n interfaceLayoutRegistry.set(type, layout);\n }\n}\n\n/**\n * Copies the members of registered interfaces onto a wrapper class, resolving each interface's\n * mixin through the registry rather than taking the mixin itself, so a class states which\n * interfaces it implements by referencing their classes. The interfaces must already be\n * registered through `registerInterface`; generated code guarantees that by declaring interfaces\n * ahead of the classes that implement them.\n *\n * @param cls Wrapper class adopting the interfaces.\n * @param interfaces Registered interface classes to adopt, in order.\n * @throws If an entry is not a registered interface.\n */\nfunction installInterfaces(cls: AnyClass, interfaces: AnyClass[]): void {\n const mixins = interfaces.map((iface) => {\n const mixin = getInterfaceMixin(getClassType(iface));\n\n if (mixin === undefined) {\n throw new Error(`installInterfaces: ${iface.name} is not a registered interface`);\n }\n\n return mixin;\n });\n\n installMixins(cls, mixins);\n}\n\n/**\n * Wraps a native handle in a JS wrapper instance. With no class, resolves and\n * reuses the wrapper for the handle's runtime GType (composing interface mixins),\n * and hands back an instance that already carries a handle unchanged; with an\n * explicit class, creates a bare instance backed by the handle, of the subclass the\n * class's `registerWrapperClassResolver` resolver picks when it has one. Returns null\n * for a null or undefined handle.\n * @param handle Native handle to wrap.\n * @param cls Wrapper class to instantiate, or omitted to resolve it from the runtime type.\n */\nfunction wrapHandle(handle: null | undefined, cls?: AnyClass): null;\nfunction wrapHandle<T extends object>(handle: ExternalObject<Handle>, cls: AnyClass<T>): T;\n\nfunction wrapHandle<T extends object>(\n handle: ExternalObject<Handle> | null | undefined,\n cls: AnyClass<T>,\n): T | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle>, cls?: AnyClass): TypedClass;\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): TypedClass | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n if (cls === undefined) {\n return getOrCreateWrapper(handle);\n }\n\n const resolver = wrapperClassResolvers.get(cls);\n const instance: object = Object.create((resolver === undefined ? cls : resolver(handle)).prototype) as object;\n setHandle(instance, handle);\n\n return instance;\n}\n\nfunction wrapFundamentalHandle(handle: ExternalObject<Handle> | null | undefined, cls: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n const existing = getFundamentalWrapper(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance: object = Object.create(cls.prototype) as object;\n setHandle(instance, handle);\n setFundamentalWrapper(handle, instance);\n\n return instance;\n}\n\n/**\n * Returns the wrapper class registered for a GType, walking up to ancestor types,\n * and throws if none is registered.\n */\nfunction getWrapperClass(type: bigint): AnyClass {\n const cls = resolveWrapperClass(type);\n\n if (!cls) {\n throw new Error(`No registered wrapper class for type '${typeName(type) ?? String(type)}'`);\n }\n\n return cls;\n}\n\nfunction getExactWrapperClass(type: bigint, label?: string): AnyClass {\n if (type === TYPE_INVALID) {\n throw new Error(`No GType is registered under '${label ?? String(type)}'`);\n }\n\n const cls = classRegistry.get(type);\n\n if (cls === undefined) {\n throw new Error(\n `No wrapper class is registered for '${label ?? typeName(type) ?? String(type)}': ` +\n \"its module was dropped from the bundle or never imported\",\n );\n }\n\n return cls;\n}\n\nfunction resolveWrapperClass(type: bigint): AnyClass | null {\n let currentType = type;\n\n while (currentType !== TYPE_INVALID) {\n const cls = classRegistry.get(currentType);\n\n if (cls) {\n return cls;\n }\n\n currentType = typeParent(currentType);\n }\n\n return null;\n}\n\nfunction getInterfaceMixin(type: bigint): Mixin | undefined {\n return interfaceMixinRegistry.get(type);\n}\n\nfunction applyInterfaceMixin(cls: AnyClass, type: bigint, baseType: bigint, applied: Set<bigint>): AnyClass {\n if (applied.has(type) || typeIsA(baseType, type)) {\n return cls;\n }\n\n const mixin = getInterfaceMixin(type);\n\n if (mixin === undefined) {\n return cls;\n }\n\n applied.add(type);\n\n return mixin(cls as AnyClass<MixinReceiver>);\n}\n\nfunction createComposedClass(base: AnyClass, runtimeType: bigint): AnyClass {\n const baseType = getClassType(base);\n const applied: Set<bigint> = new Set();\n let cls: AnyClass = base;\n\n for (const type of typeInterfaces(runtimeType)) {\n cls = applyInterfaceMixin(cls, type, baseType, applied);\n }\n\n return applied.size === 0 ? base : cls;\n}\n\nfunction isWrappableBase(fallbackType: bigint): boolean {\n return fallbackType === TYPE_INVALID || typeFundamental(fallbackType) === TYPE_OBJECT;\n}\n\nfunction isBetweenWalkAndRuntime(fallbackType: bigint, walkedType: bigint, runtimeType: bigint): boolean {\n return fallbackType !== walkedType && typeIsA(fallbackType, walkedType) && typeIsA(runtimeType, fallbackType);\n}\n\nfunction chooseWrapBase(walked: AnyClass | null, fallback: AnyClass | undefined, runtimeType: bigint): AnyClass | null {\n if (fallback === undefined || !isWrappableBase(getClassType(fallback))) {\n return walked;\n }\n\n if (walked === null || isBetweenWalkAndRuntime(getClassType(fallback), getClassType(walked), runtimeType)) {\n return fallback;\n }\n\n return walked;\n}\n\nfunction stampComposedClass(composed: AnyClass, runtimeType: bigint): AnyClass {\n setClassType(composed, runtimeType);\n wrapperClasses.add(composed);\n composedClassRegistry.set(runtimeType, composed);\n\n return composed;\n}\n\nfunction resolveComposedClass(runtimeType: bigint, fallbackClass?: () => AnyClass): AnyClass | null {\n const exact = classRegistry.get(runtimeType);\n\n if (exact) {\n return exact;\n }\n\n const cached = composedClassRegistry.get(runtimeType);\n\n if (cached) {\n return cached;\n }\n\n const walked = resolveWrapperClass(runtimeType);\n const base = chooseWrapBase(walked, fallbackClass?.(), runtimeType);\n\n if (base === null) {\n return null;\n }\n\n const composed = createComposedClass(base, runtimeType);\n\n if (composed !== base) {\n return stampComposedClass(composed, runtimeType);\n }\n\n if (base === walked) {\n return base;\n }\n\n return stampComposedClass(class extends base {}, runtimeType);\n}\n\nfunction wrapObject(value: unknown, fallbackClass?: () => AnyClass): object | null {\n return value == null ? null : getOrCreateWrapper(value as ExternalObject<Handle>, fallbackClass);\n}\n\nfunction wrapCallScopedObject(value: unknown, fallbackClass?: () => AnyClass): object | null {\n return value == null ? null : wrapperFor(value as ExternalObject<Handle>, bindCallScopedWrapper, fallbackClass);\n}\n\nfunction existingWrapperFor(handle: ExternalObject<Handle>): object | null {\n return handleMap.has(handle) ? handle : getWrapper(handle);\n}\n\nfunction createWrapper(handle: ExternalObject<Handle>, fallbackClass?: () => AnyClass): object {\n const runtimeType: bigint = getType(handle);\n\n if (runtimeType === TYPE_INVALID) {\n throw new Error(\"Cannot resolve runtime GLib type from handle\");\n }\n\n const cls = resolveComposedClass(runtimeType, fallbackClass);\n\n if (!cls) {\n throw new Error(`Expected registered GLib type, got type ${String(runtimeType)}`);\n }\n\n return Object.create(cls.prototype) as object;\n}\n\nfunction wrapperFor(handle: ExternalObject<Handle>, bind: WrapperBinding, fallbackClass?: () => AnyClass): object {\n const existing = existingWrapperFor(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance = createWrapper(handle, fallbackClass);\n bind(handle, instance);\n\n return instance;\n}\n\nfunction getOrCreateWrapper(handle: ExternalObject<Handle>, fallbackClass?: () => AnyClass): object {\n return wrapperFor(handle, registerWrapper, fallbackClass);\n}\n\nfunction instanceClassName(instance: object): string {\n return (instance as { constructor?: { name?: string } }).constructor?.name ?? \"object\";\n}\n\nfunction describeValueKind(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n\n if (typeof value !== \"object\") {\n return typeof value;\n }\n\n return instanceClassName(value);\n}\n\n/** Returns the native handle bound to a wrapper instance, throwing if none is set. */\nfunction getHandle(instance: object): ExternalObject<Handle> {\n const handle = handleMap.get(instance);\n\n if (handle === undefined) {\n throw new Error(`No native handle associated with ${instanceClassName(instance)}`);\n }\n\n return handle;\n}\n\n/** Associates a native handle with a wrapper instance. */\nfunction setHandle(instance: object, handle: ExternalObject<Handle>): void {\n handleMap.set(instance, handle);\n}\n\nfunction bindCallScopedWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n}\n\nfunction registerWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n setWrapper(handle, instance);\n}\n\nfunction registerVfuncRegistry(cls: object, registry: VfuncRegistry): void {\n vfuncRegistry.set(cls, registry);\n}\n\nfunction getVfuncRegistry(cls: object): VfuncRegistry | undefined {\n return vfuncRegistry.get(cls);\n}\n\nfunction getInterfaceVfuncRegistry(type: bigint): VfuncRegistry | undefined {\n return interfaceLayoutRegistry.get(type)?.vfuncs;\n}\n\nfunction getInterfaceProperties(type: bigint): Record<string, InterfaceProperty> | undefined {\n return interfaceLayoutRegistry.get(type)?.properties;\n}\n\nexport {\n coerceGType,\n describeValueKind,\n getClassStructClass,\n getClassType,\n getInstanceType,\n getTypeClassHandle,\n markDerivedClass,\n peekTypeClass,\n registerClassStruct,\n registerClassType,\n registerWrapperClass,\n registerWrapperClassResolver,\n registerInterface,\n installInterfaces,\n wrapFundamentalHandle,\n wrapHandle,\n getExactWrapperClass,\n getWrapperClass,\n resolveWrapperClass,\n getHandle,\n setHandle,\n getVfuncRegistry,\n getInterfaceMixin,\n getInterfaceProperties,\n getInterfaceVfuncRegistry,\n instanceClassName,\n registerWrapper,\n resolveWrapperType,\n wrapCallScopedObject,\n wrapObject,\n type InterfaceProperty,\n type StaticBase,\n type VfuncDescriptor,\n type WrapperClass,\n type WrapperClassResolver,\n};\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ExternalObject,\n getFundamentalWrapper,\n getType,\n getTypeClass,\n getWrapper,\n type Handle,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n setFundamentalWrapper,\n setWrapper,\n} from \"@gtkx/native\";\nimport { type AnyClass, walkClassChain } from \"@gtkx/utils\";\nimport { copyLayerMembers, createMixinLayer, installMixins, type Mixin, type MixinReceiver } from \"./mixin.js\";\nimport {\n TYPE_INVALID,\n TYPE_OBJECT,\n type TypedClass,\n typeFundamental,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n} from \"./type.js\";\n\n/**\n * Static side of class `C` with its construct signature preserved but the members named `K`\n * removed. A generated class lists every static it declares itself, so a static it narrows never\n * has to stay assignable to the one it shadows. The signature is kept abstract so an abstract `C`\n * survives it: a subclass extends the result, and only the subclass's own declarations decide\n * which statics reach it.\n */\ntype StaticBase<C, K extends PropertyKey> = Omit<C, K> &\n (C extends abstract new (...args: infer A) => infer R ? abstract new (...args: A) => R : never);\n\n/**\n * Static side of class `C` with its construct signature retargeted to produce `I`. A generated\n * wrapper class is declared locally and exported as a registered constant; its instance type is\n * exported as an interface extending the local class so declaration merging and module\n * augmentation keep working, and this type makes constructing the constant produce that interface.\n */\ntype WrapperClass<C, I> = Omit<C, \"prototype\"> & {\n /** Prototype retyped to the exported instance interface, so `instanceof` narrows to it. */\n prototype: I;\n} &\n(C extends new (...args: infer A) => unknown\n ? new (...args: A) => I\n : C extends abstract new (...args: infer A) => unknown\n ? abstract new (...args: A) => I\n : never);\n\n/** One overridable vtable slot: where it sits in the vtable struct and how it is marshalled. */\ntype VfuncDescriptor = {\n /** GIR name of the type struct holding the slot, without its namespace, such as `WidgetClass`. */\n className: string;\n /** Name of the slot's field in that struct. */\n vfuncName: string;\n /** Byte offset of the slot within the struct. */\n byteOffset: number;\n /**\n * Byte size of an interface's vtable struct, used to bounds-check `VfuncDescriptor.byteOffset`.\n * A class struct is bounds-checked against the size `g_type_query` reports for it, so a slot in\n * one carries no size of its own.\n */\n vtableSize?: number;\n /** Descriptor for each argument the slot receives, starting with the instance. */\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"];\n /** Descriptor for the value the slot returns. */\n returnDescriptor: NativeRegisterClassVfunc[\"returnDescriptor\"];\n /**\n * GIR marks the slot's return value as one the bindings do not surface, so a call through the\n * slot drops it and an implementation of the slot reports success in its place, while\n * `VfuncDescriptor.returnDescriptor` keeps the C type the slot is called against either way.\n */\n isReturnSkipped?: boolean;\n /**\n * The slot takes a trailing `GError**` that `VfuncDescriptor.argDescriptors` leaves out, the\n * way GIR leaves it out of a callable's parameters. A call through the slot has to append it\n * or it passes one argument fewer than the implementation reads.\n */\n canThrow?: boolean;\n};\n\n/**\n * The vtable slots a wrapper class or interface exposes, keyed by the JavaScript method name that\n * overrides each one.\n */\ntype VfuncRegistry = Record<string, VfuncDescriptor>;\ntype WrapperBinding = (handle: ExternalObject<Handle>, instance: object) => void;\n/**\n * Picks the wrapper class for one handle of a registered type, such as a subclass keyed on a tag the\n * handle carries.\n */\ntype WrapperClassResolver = (handle: ExternalObject<Handle>) => AnyClass;\n\n/**\n * How one property an interface declares reaches the vtable, given as the interface's own accessor\n * members. A direction introspection does not route through a vtable slot is left out, and the\n * property owns that direction's state itself.\n */\ntype InterfaceProperty = {\n /** Member reading the slot the property's value comes from, such as `getEnabled`. */\n getter?: string;\n /** Member writing the slot the property's value goes to, such as `setActionName`. */\n setter?: string;\n};\n\n/**\n * What an interface's vtable struct looks like, for the classes that adopt the interface.\n * `g_type_query` reports no size for an interface, so each slot's generated metadata carries the\n * struct's byte size to bounds-check the slot's offset; an interface introspection describes no\n * vtable for simply contributes no slots.\n */\ntype InterfaceLayout = {\n /** The slots the struct declares, keyed by the JavaScript method name that fills each one. */\n vfuncs?: VfuncRegistry;\n /**\n * The properties a vtable slot backs, keyed by canonical property name, so a class adopting the\n * interface answers `g_object_get` and `g_object_set` with what the slot holds.\n */\n properties?: Record<string, InterfaceProperty>;\n};\n\nconst classRegistry: Map<bigint, AnyClass> = new Map();\nconst classStructRegistry: Map<bigint, AnyClass> = new Map();\nconst composedClassStructRegistry: Map<bigint, AnyClass> = new Map();\nconst interfaceMixinRegistry: Map<bigint, Mixin> = new Map();\nconst composedClassRegistry: Map<bigint, AnyClass> = new Map();\nconst handleMap: WeakMap<object, ExternalObject<Handle>> = new WeakMap();\nconst vfuncRegistry: WeakMap<object, VfuncRegistry> = new WeakMap();\nconst interfaceLayoutRegistry: Map<bigint, InterfaceLayout> = new Map();\nconst wrapperClasses: WeakSet<AnyClass> = new WeakSet();\nconst derivedClasses: WeakSet<AnyClass> = new WeakSet();\nconst typeClassHandles: Map<bigint, ExternalObject<Handle>> = new Map();\nconst wrapperClassResolvers: WeakMap<AnyClass, WrapperClassResolver> = new WeakMap();\n\nfunction setClassType(cls: AnyClass, type: bigint): void {\n (cls.prototype as { [K in keyof TypedClass]: TypedClass[K] }).__type__ = type;\n}\n\n/**\n * Returns the GType a class was registered under, or the invalid type when it carries none. The tag is\n * read off the class's own prototype, so a subclass that never went through `registerClass` reports the\n * invalid type rather than inheriting the one its parent was registered with.\n */\nfunction getClassType(cls: AnyClass | undefined): bigint {\n const proto: object | undefined = cls?.prototype;\n\n if (proto === undefined || !Object.hasOwn(proto, \"__type__\")) {\n return TYPE_INVALID;\n }\n\n return (proto as TypedClass).__type__;\n}\n\n/**\n * Returns the GType the given instance's handle carries, or the invalid type when it has no handle.\n * This is the object's own type rather than the type of the class it was wrapped as, and the two differ\n * for an object GTK created itself, such as the row widget inside a `Gtk.ListView`, which GTKX wraps as\n * the nearest registered ancestor.\n */\nfunction getInstanceType(instance: object): bigint {\n const handle = handleMap.get(instance);\n\n return handle === undefined ? TYPE_INVALID : getType(handle);\n}\n\nfunction coerceGType(value: unknown): unknown {\n if (typeof value !== \"function\") {\n return value;\n }\n\n const type = getClassType(value as AnyClass);\n\n return type === TYPE_INVALID ? value : type;\n}\n\nfunction registerClassType(cls: AnyClass, type: bigint): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n classRegistry.set(type, cls);\n setClassType(cls, type);\n}\n\n/**\n * Registers a wrapper class as the JS representation of a GType, optionally\n * installing a registry of virtual functions.\n * @param cls Wrapper class to associate with the type.\n * @param type GType the class wraps.\n * @param vfuncs Vtable slots the class exposes, so `registerClass` can bind the ones a subclass\n * overrides.\n */\nfunction registerWrapperClass(cls: AnyClass, type: bigint, vfuncs?: VfuncRegistry): void {\n registerClassType(cls, type);\n\n if (type !== TYPE_INVALID) {\n wrapperClasses.add(cls);\n }\n\n if (vfuncs) {\n registerVfuncRegistry(cls, vfuncs);\n }\n}\n\n/**\n * Lets a class registered with `registerWrapperClass` pick a subclass for each handle it wraps, for\n * types whose one GType covers several C-level subtypes, the way a cairo surface reports image or\n * recording through `cairo_surface_get_type`. The resolver runs when a handle is wrapped as that class\n * explicitly, the way a boxed value a binding hands back is; a wrapper resolved from a handle's runtime\n * GType never consults it, and a subclass passed to `wrapHandle` directly is used as given.\n * @param cls Registered wrapper class whose handles the resolver classifies.\n * @param resolver Returns the class to instantiate for one handle, `cls` itself included.\n * @throws If `cls` is not a registered wrapper class.\n */\nfunction registerWrapperClassResolver(cls: AnyClass, resolver: WrapperClassResolver): void {\n if (!wrapperClasses.has(cls)) {\n throw new Error(\n `Cannot register a wrapper class resolver for ${cls.name}: ` +\n \"register the class with registerWrapperClass first\",\n );\n }\n\n wrapperClassResolvers.set(cls, resolver);\n}\n\nfunction markDerivedClass(cls: AnyClass): void {\n derivedClasses.add(cls);\n}\n\n/**\n * Registers the wrapper class of a type's class struct, such as `Gtk.WidgetClass` for `Gtk.Widget`,\n * so `registerClass` can hand a `classInit` hook the new type's class struct wrapped in it.\n * @param cls Wrapper class of the type's instances, already registered through\n * `registerWrapperClass`.\n * @param structClass Wrapper class of the type's class struct.\n */\nfunction registerClassStruct(cls: AnyClass, structClass: AnyClass): void {\n const type = getClassType(cls);\n\n if (type !== TYPE_INVALID) {\n classStructRegistry.set(type, structClass);\n }\n}\n\nfunction collectClassStructClasses(type: bigint): AnyClass[] {\n const structs: AnyClass[] = [];\n let current = type;\n\n while (current !== TYPE_INVALID) {\n const structClass = classStructRegistry.get(current);\n\n if (structClass !== undefined) {\n structs.push(structClass);\n }\n\n current = typeParent(current);\n }\n\n return structs;\n}\n\nfunction composeClassStructClass(structs: AnyClass[]): AnyClass | undefined {\n const [nearest, ...ancestors] = structs;\n\n if (nearest === undefined || ancestors.length === 0) {\n return nearest;\n }\n\n const composed: AnyClass = class extends nearest {};\n Object.defineProperty(composed, \"name\", { value: nearest.name });\n\n for (const structClass of ancestors) {\n copyLayerMembers(composed, structClass.prototype);\n }\n\n return composed;\n}\n\nfunction getClassStructClass(type: bigint): AnyClass | undefined {\n const cached = composedClassStructRegistry.get(type);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const composed = composeClassStructClass(collectClassStructClasses(type));\n\n if (composed !== undefined) {\n composedClassStructRegistry.set(type, composed);\n }\n\n return composed;\n}\n\nfunction peekedTypeLabel(type: bigint | AnyClass, gtype: bigint): string {\n const name = typeName(gtype);\n\n if (name !== null) {\n return name;\n }\n\n return typeof type === \"bigint\" ? String(type) : type.name;\n}\n\nfunction getTypeClassHandle(gtype: bigint): ExternalObject<Handle> {\n const cached = typeClassHandles.get(gtype);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const handle = getTypeClass(gtype);\n typeClassHandles.set(gtype, handle);\n\n return handle;\n}\n\n/**\n * Returns a GObject type's class struct, wrapped in the class-struct wrapper classes registered\n * for the type's ancestry, such as `Gtk.WidgetClass` composed with `GObject.ObjectClass` for a\n * widget type. The class is referenced so it exists even before the type's first instance, and\n * the reference is deliberately never released: once created, a class struct lives for the rest\n * of the process. Backs the `peek` statics of generated GTypeStruct wrappers, such as\n * `GObject.ObjectClass.peek` and `Gtk.WidgetClass.peek`.\n *\n * @param type GType to peek the class struct of, or a registered wrapper class of the type.\n * @param base When given, wrapper class of the type the peeked type must derive from; the peek\n * throws for a type outside that lineage. Without it any GObject type is accepted.\n * @returns The wrapped class struct.\n */\nfunction peekTypeClass(type: bigint | AnyClass, base?: AnyClass): object {\n const gtype = typeof type === \"bigint\" ? type : getClassType(type);\n\n if (!typeIsA(gtype, TYPE_OBJECT)) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' is not a GObject type`);\n }\n\n if (base !== undefined && !typeIsA(gtype, getClassType(base))) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' does not derive from '${base.name}'`);\n }\n\n const structClass = getClassStructClass(gtype);\n\n if (structClass === undefined) {\n throw new TypeError(\n `peekTypeClass: no ancestor of '${peekedTypeLabel(type, gtype)}' registers a class struct wrapper`,\n );\n }\n\n return wrapHandle(getTypeClassHandle(gtype), structClass);\n}\n\nfunction resolveAncestorType(ancestor: AnyClass): bigint | undefined {\n if (derivedClasses.has(ancestor) || !wrapperClasses.has(ancestor)) {\n return undefined;\n }\n\n return getClassType(ancestor);\n}\n\nfunction resolveWrapperType(instance: object): bigint {\n const cls = instance.constructor as AnyClass | undefined;\n\n if (cls === undefined) {\n return TYPE_INVALID;\n }\n\n return walkClassChain(cls, (ancestor) => resolveAncestorType(ancestor)) ?? TYPE_INVALID;\n}\n\n/**\n * Registers a GInterface, associating its GType with a mixin used to compose the\n * interface onto wrapper classes and, when introspection describes its vtable, that layout.\n * @param cls Class carrying the interface's GType tag.\n * @param type GType of the interface.\n * @param mixin Mixin that applies the interface to a wrapper class.\n * @param layout The interface's vtable struct, so `registerClass` can bind the slots an\n * implementing class overrides and take over the ones it leaves alone.\n */\nfunction registerInterface(cls: AnyClass, type: bigint, mixin: Mixin, layout?: InterfaceLayout): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n setClassType(cls, type);\n interfaceMixinRegistry.set(type, mixin);\n\n if (layout) {\n interfaceLayoutRegistry.set(type, layout);\n }\n}\n\n/**\n * Copies the members of registered interfaces onto a wrapper class, resolving each interface's\n * mixin through the registry rather than taking the mixin itself, so a class states which\n * interfaces it implements by referencing their classes. The interfaces must already be\n * registered through `registerInterface`; generated code guarantees that by declaring interfaces\n * ahead of the classes that implement them.\n *\n * @param cls Wrapper class adopting the interfaces.\n * @param interfaces Registered interface classes to adopt, in order.\n * @throws If an entry is not a registered interface.\n */\nfunction installInterfaces(cls: AnyClass, interfaces: AnyClass[], inheritedOverrides: string[] = []): void {\n const mixins = interfaces.map((iface) => {\n const mixin = getInterfaceMixin(getClassType(iface));\n\n if (mixin === undefined) {\n throw new Error(`installInterfaces: ${iface.name} is not a registered interface`);\n }\n\n return mixin;\n });\n\n installMixins(cls, mixins, inheritedOverrides);\n}\n\n/**\n * Wraps a native handle in a JS wrapper instance. With no class, resolves and\n * reuses the wrapper for the handle's runtime GType (composing interface mixins),\n * and hands back an instance that already carries a handle unchanged; with an\n * explicit class, creates a bare instance backed by the handle, of the subclass the\n * class's `registerWrapperClassResolver` resolver picks when it has one. Returns null\n * for a null or undefined handle.\n * @param handle Native handle to wrap.\n * @param cls Wrapper class to instantiate, or omitted to resolve it from the runtime type.\n */\nfunction wrapHandle(handle: null | undefined, cls?: AnyClass): null;\nfunction wrapHandle<T extends object>(handle: ExternalObject<Handle>, cls: AnyClass<T>): T;\n\nfunction wrapHandle<T extends object>(\n handle: ExternalObject<Handle> | null | undefined,\n cls: AnyClass<T>,\n): T | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle>, cls?: AnyClass): TypedClass;\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): TypedClass | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n if (cls === undefined) {\n return getOrCreateWrapper(handle);\n }\n\n const resolver = wrapperClassResolvers.get(cls);\n const instance: object = Object.create((resolver === undefined ? cls : resolver(handle)).prototype) as object;\n setHandle(instance, handle);\n\n return instance;\n}\n\nfunction wrapFundamentalHandle(handle: ExternalObject<Handle> | null | undefined, cls: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n const existing = getFundamentalWrapper(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance: object = Object.create(cls.prototype) as object;\n setHandle(instance, handle);\n setFundamentalWrapper(handle, instance);\n\n return instance;\n}\n\n/**\n * Returns the wrapper class registered for a GType, walking up to ancestor types,\n * and throws if none is registered.\n */\nfunction getWrapperClass(type: bigint): AnyClass {\n const cls = resolveWrapperClass(type);\n\n if (!cls) {\n throw new Error(`No registered wrapper class for type '${typeName(type) ?? String(type)}'`);\n }\n\n return cls;\n}\n\nfunction getExactWrapperClass(type: bigint, label?: string): AnyClass {\n if (type === TYPE_INVALID) {\n throw new Error(`No GType is registered under '${label ?? String(type)}'`);\n }\n\n const cls = classRegistry.get(type);\n\n if (cls === undefined) {\n throw new Error(\n `No wrapper class is registered for '${label ?? typeName(type) ?? String(type)}': ` +\n \"its module was dropped from the bundle or never imported\",\n );\n }\n\n return cls;\n}\n\nfunction resolveWrapperClass(type: bigint): AnyClass | null {\n let currentType = type;\n\n while (currentType !== TYPE_INVALID) {\n const cls = classRegistry.get(currentType);\n\n if (cls) {\n return cls;\n }\n\n currentType = typeParent(currentType);\n }\n\n return null;\n}\n\nfunction getInterfaceMixin(type: bigint): Mixin | undefined {\n return interfaceMixinRegistry.get(type);\n}\n\nfunction applyInterfaceMixin(cls: AnyClass, type: bigint, baseType: bigint, applied: Set<bigint>): AnyClass {\n if (applied.has(type) || typeIsA(baseType, type)) {\n return cls;\n }\n\n const mixin = getInterfaceMixin(type);\n\n if (mixin === undefined) {\n return cls;\n }\n\n applied.add(type);\n\n return createMixinLayer(cls as AnyClass<MixinReceiver>, mixin, new Set());\n}\n\nfunction createComposedClass(base: AnyClass, runtimeType: bigint): AnyClass {\n const baseType = getClassType(base);\n const applied: Set<bigint> = new Set();\n let cls: AnyClass = base;\n\n for (const type of typeInterfaces(runtimeType)) {\n cls = applyInterfaceMixin(cls, type, baseType, applied);\n }\n\n return applied.size === 0 ? base : cls;\n}\n\nfunction isWrappableBase(fallbackType: bigint): boolean {\n return fallbackType === TYPE_INVALID || typeFundamental(fallbackType) === TYPE_OBJECT;\n}\n\nfunction isBetweenWalkAndRuntime(fallbackType: bigint, walkedType: bigint, runtimeType: bigint): boolean {\n return fallbackType !== walkedType && typeIsA(fallbackType, walkedType) && typeIsA(runtimeType, fallbackType);\n}\n\nfunction chooseWrapBase(walked: AnyClass | null, fallback: AnyClass | undefined, runtimeType: bigint): AnyClass | null {\n if (fallback === undefined || !isWrappableBase(getClassType(fallback))) {\n return walked;\n }\n\n if (walked === null || isBetweenWalkAndRuntime(getClassType(fallback), getClassType(walked), runtimeType)) {\n return fallback;\n }\n\n return walked;\n}\n\nfunction stampComposedClass(composed: AnyClass, runtimeType: bigint): AnyClass {\n setClassType(composed, runtimeType);\n wrapperClasses.add(composed);\n composedClassRegistry.set(runtimeType, composed);\n\n return composed;\n}\n\nfunction resolveComposedClass(runtimeType: bigint, fallbackClass?: () => AnyClass): AnyClass | null {\n const exact = classRegistry.get(runtimeType);\n\n if (exact) {\n return exact;\n }\n\n const cached = composedClassRegistry.get(runtimeType);\n\n if (cached) {\n return cached;\n }\n\n const walked = resolveWrapperClass(runtimeType);\n const base = chooseWrapBase(walked, fallbackClass?.(), runtimeType);\n\n if (base === null) {\n return null;\n }\n\n const composed = createComposedClass(base, runtimeType);\n\n if (composed !== base) {\n return stampComposedClass(composed, runtimeType);\n }\n\n if (base === walked) {\n return base;\n }\n\n return stampComposedClass(class extends base {}, runtimeType);\n}\n\nfunction wrapObject(value: unknown, fallbackClass?: () => AnyClass): object | null {\n return value == null ? null : getOrCreateWrapper(value as ExternalObject<Handle>, fallbackClass);\n}\n\nfunction wrapCallScopedObject(value: unknown, fallbackClass?: () => AnyClass): object | null {\n return value == null ? null : wrapperFor(value as ExternalObject<Handle>, bindCallScopedWrapper, fallbackClass);\n}\n\nfunction existingWrapperFor(handle: ExternalObject<Handle>): object | null {\n return handleMap.has(handle) ? handle : getWrapper(handle);\n}\n\nfunction createWrapper(handle: ExternalObject<Handle>, fallbackClass?: () => AnyClass): object {\n const runtimeType: bigint = getType(handle);\n\n if (runtimeType === TYPE_INVALID) {\n throw new Error(\"Cannot resolve runtime GLib type from handle\");\n }\n\n const cls = resolveComposedClass(runtimeType, fallbackClass);\n\n if (!cls) {\n throw new Error(`Expected registered GLib type, got type ${String(runtimeType)}`);\n }\n\n return Object.create(cls.prototype) as object;\n}\n\nfunction wrapperFor(handle: ExternalObject<Handle>, bind: WrapperBinding, fallbackClass?: () => AnyClass): object {\n const existing = existingWrapperFor(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance = createWrapper(handle, fallbackClass);\n bind(handle, instance);\n\n return instance;\n}\n\nfunction getOrCreateWrapper(handle: ExternalObject<Handle>, fallbackClass?: () => AnyClass): object {\n return wrapperFor(handle, registerWrapper, fallbackClass);\n}\n\nfunction instanceClassName(instance: object): string {\n return (instance as { constructor?: { name?: string } }).constructor?.name ?? \"object\";\n}\n\nfunction describeValueKind(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n\n if (typeof value !== \"object\") {\n return typeof value;\n }\n\n return instanceClassName(value);\n}\n\n/** Returns the native handle bound to a wrapper instance, throwing if none is set. */\nfunction getHandle(instance: object): ExternalObject<Handle> {\n const handle = handleMap.get(instance);\n\n if (handle === undefined) {\n throw new Error(`No native handle associated with ${instanceClassName(instance)}`);\n }\n\n return handle;\n}\n\n/** Associates a native handle with a wrapper instance. */\nfunction setHandle(instance: object, handle: ExternalObject<Handle>): void {\n handleMap.set(instance, handle);\n}\n\nfunction bindCallScopedWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n}\n\nfunction registerWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n setWrapper(handle, instance);\n}\n\nfunction registerVfuncRegistry(cls: object, registry: VfuncRegistry): void {\n vfuncRegistry.set(cls, registry);\n}\n\nfunction getVfuncRegistry(cls: object): VfuncRegistry | undefined {\n return vfuncRegistry.get(cls);\n}\n\nfunction getInterfaceVfuncRegistry(type: bigint): VfuncRegistry | undefined {\n return interfaceLayoutRegistry.get(type)?.vfuncs;\n}\n\nfunction getInterfaceProperties(type: bigint): Record<string, InterfaceProperty> | undefined {\n return interfaceLayoutRegistry.get(type)?.properties;\n}\n\nexport {\n coerceGType,\n describeValueKind,\n getClassStructClass,\n getClassType,\n getInstanceType,\n getTypeClassHandle,\n markDerivedClass,\n peekTypeClass,\n registerClassStruct,\n registerClassType,\n registerWrapperClass,\n registerWrapperClassResolver,\n registerInterface,\n installInterfaces,\n wrapFundamentalHandle,\n wrapHandle,\n getExactWrapperClass,\n getWrapperClass,\n resolveWrapperClass,\n getHandle,\n setHandle,\n getVfuncRegistry,\n getInterfaceMixin,\n getInterfaceProperties,\n getInterfaceVfuncRegistry,\n instanceClassName,\n registerWrapper,\n resolveWrapperType,\n wrapCallScopedObject,\n wrapObject,\n type InterfaceProperty,\n type StaticBase,\n type VfuncDescriptor,\n type WrapperClass,\n type WrapperClassResolver,\n};\n"]}
@@ -0,0 +1,12 @@
1
+ declare const naturalSignalMember: unique symbol;
2
+ declare const classSignalMember: unique symbol;
3
+ declare const signalMapOverride: unique symbol;
4
+ declare const signalEmitMapOverride: unique symbol;
5
+ type ResolvedSignalMap<T, TFallback> = T extends {
6
+ [signalMapOverride]?: infer TResolver;
7
+ } ? TResolver extends () => infer TMap ? NonNullable<TMap> : TFallback : TFallback;
8
+ type ResolvedSignalEmitMap<T, TFallback> = T extends {
9
+ [signalEmitMapOverride]?: infer TResolver;
10
+ } ? TResolver extends () => infer TMap ? NonNullable<TMap> : TFallback : TFallback;
11
+ export { classSignalMember, naturalSignalMember, signalEmitMapOverride, type ResolvedSignalEmitMap, type ResolvedSignalMap, signalMapOverride, };
12
+ //# sourceMappingURL=signal-brand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-brand.d.ts","sourceRoot":"","sources":["../src/signal-brand.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,mBAAmB,EAAE,OAAO,MAA2C,CAAC;AAC9E,QAAA,MAAM,iBAAiB,EAAE,OAAO,MAAyC,CAAC;AAC1E,QAAA,MAAM,iBAAiB,EAAE,OAAO,MAAyC,CAAC;AAC1E,QAAA,MAAM,qBAAqB,EAAE,OAAO,MAA6C,CAAC;AAElF,KAAK,iBAAiB,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,SAAS;IAC7C,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,SAAS,CAAC;CACzC,GACK,SAAS,SAAS,MAAM,MAAM,IAAI,GAC9B,WAAW,CAAC,IAAI,CAAC,GACjB,SAAS,GACb,SAAS,CAAC;AAEhB,KAAK,qBAAqB,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,SAAS;IACjD,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM,SAAS,CAAC;CAC7C,GACK,SAAS,SAAS,MAAM,MAAM,IAAI,GAC9B,WAAW,CAAC,IAAI,CAAC,GACjB,SAAS,GACb,SAAS,CAAC;AAEhB,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,iBAAiB,GACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ const naturalSignalMember = Symbol("gtkx.naturalSignalMember");
2
+ const classSignalMember = Symbol("gtkx.classSignalMember");
3
+ const signalMapOverride = Symbol("gtkx.signalMapOverride");
4
+ const signalEmitMapOverride = Symbol("gtkx.signalEmitMapOverride");
5
+ export { classSignalMember, naturalSignalMember, signalEmitMapOverride, signalMapOverride, };
6
+ //# sourceMappingURL=signal-brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-brand.js","sourceRoot":"","sources":["../src/signal-brand.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAkB,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAC9E,MAAM,iBAAiB,GAAkB,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAC1E,MAAM,iBAAiB,GAAkB,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAC1E,MAAM,qBAAqB,GAAkB,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAkBlF,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EAGrB,iBAAiB,GACpB,CAAC","sourcesContent":["const naturalSignalMember: unique symbol = Symbol(\"gtkx.naturalSignalMember\");\nconst classSignalMember: unique symbol = Symbol(\"gtkx.classSignalMember\");\nconst signalMapOverride: unique symbol = Symbol(\"gtkx.signalMapOverride\");\nconst signalEmitMapOverride: unique symbol = Symbol(\"gtkx.signalEmitMapOverride\");\n\ntype ResolvedSignalMap<T, TFallback> = T extends {\n [signalMapOverride]?: infer TResolver;\n}\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TFallback\n : TFallback;\n\ntype ResolvedSignalEmitMap<T, TFallback> = T extends {\n [signalEmitMapOverride]?: infer TResolver;\n}\n ? TResolver extends () => infer TMap\n ? NonNullable<TMap>\n : TFallback\n : TFallback;\n\nexport {\n classSignalMember,\n naturalSignalMember,\n signalEmitMapOverride,\n type ResolvedSignalEmitMap,\n type ResolvedSignalMap,\n signalMapOverride,\n};\n"]}