@gtkx/runtime 1.5.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) 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 +36 -36
  21. package/dist/descriptors.d.ts.map +1 -1
  22. package/dist/descriptors.js +65 -26
  23. package/dist/descriptors.js.map +1 -1
  24. package/dist/element-metadata.d.ts +9 -0
  25. package/dist/element-metadata.d.ts.map +1 -0
  26. package/dist/element-metadata.js +14 -0
  27. package/dist/element-metadata.js.map +1 -0
  28. package/dist/fn.d.ts +8 -2
  29. package/dist/fn.d.ts.map +1 -1
  30. package/dist/fn.js +43 -13
  31. package/dist/fn.js.map +1 -1
  32. package/dist/folded-lengths.d.ts +2 -1
  33. package/dist/folded-lengths.d.ts.map +1 -1
  34. package/dist/folded-lengths.js +17 -7
  35. package/dist/folded-lengths.js.map +1 -1
  36. package/dist/index.d.ts +4 -26
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -26
  39. package/dist/index.js.map +1 -1
  40. package/dist/internal.d.ts +5 -2
  41. package/dist/internal.d.ts.map +1 -1
  42. package/dist/internal.js +5 -2
  43. package/dist/internal.js.map +1 -1
  44. package/dist/native-value.d.ts +9 -1
  45. package/dist/native-value.d.ts.map +1 -1
  46. package/dist/native-value.js +41 -5
  47. package/dist/native-value.js.map +1 -1
  48. package/dist/properties.d.ts +1 -1
  49. package/dist/properties.d.ts.map +1 -1
  50. package/dist/properties.js +2 -11
  51. package/dist/properties.js.map +1 -1
  52. package/dist/register-class.d.ts +45 -249
  53. package/dist/register-class.d.ts.map +1 -1
  54. package/dist/register-class.js +38 -1
  55. package/dist/register-class.js.map +1 -1
  56. package/dist/registry.d.ts +26 -3
  57. package/dist/registry.d.ts.map +1 -1
  58. package/dist/registry.js +75 -20
  59. package/dist/registry.js.map +1 -1
  60. package/dist/signal.d.ts.map +1 -1
  61. package/dist/signal.js +9 -22
  62. package/dist/signal.js.map +1 -1
  63. package/dist/t.d.ts +5 -21
  64. package/dist/t.d.ts.map +1 -1
  65. package/dist/t.js +1 -5
  66. package/dist/t.js.map +1 -1
  67. package/dist/type.d.ts +10 -1
  68. package/dist/type.d.ts.map +1 -1
  69. package/dist/type.js +21 -2
  70. package/dist/type.js.map +1 -1
  71. package/dist/value.d.ts.map +1 -1
  72. package/dist/value.js +26 -4
  73. package/dist/value.js.map +1 -1
  74. package/dist/variant.d.ts +2 -6
  75. package/dist/variant.d.ts.map +1 -1
  76. package/dist/variant.js.map +1 -1
  77. package/dist/vfunc-call.d.ts.map +1 -1
  78. package/dist/vfunc-call.js +2 -11
  79. package/dist/vfunc-call.js.map +1 -1
  80. package/package.json +15 -6
  81. package/src/application-class.ts +2 -2
  82. package/src/arg.ts +4 -1
  83. package/src/bind.ts +1 -12
  84. package/src/callback.ts +53 -29
  85. package/src/closure.ts +31 -6
  86. package/src/descriptors.ts +126 -44
  87. package/src/element-metadata.ts +24 -0
  88. package/src/fn.ts +64 -15
  89. package/src/folded-lengths.ts +23 -10
  90. package/src/index.ts +5 -24
  91. package/src/internal.ts +9 -2
  92. package/src/native-value.ts +54 -5
  93. package/src/properties.ts +3 -16
  94. package/src/register-class.ts +104 -249
  95. package/src/registry.ts +110 -19
  96. package/src/signal.ts +9 -34
  97. package/src/t.ts +5 -21
  98. package/src/type.ts +34 -1
  99. package/src/value.ts +37 -5
  100. package/src/variant.ts +2 -6
  101. package/src/vfunc-call.ts +3 -16
package/dist/fn.js CHANGED
@@ -85,10 +85,24 @@ const isPassThroughPlan = (plan, index) => plan.inputIndex === index &&
85
85
  !plan.isCallerAllocated &&
86
86
  !plan.carriesGtype &&
87
87
  plan.arg.type.kind !== "callback";
88
- const requiredInputIndices = (plans) => plans.filter((plan) => plan.requiresInput && plan.arg.isRequired === true).map((plan) => plan.inputIndex);
89
- const assertRequiredInputs = (requiredIndices, inputs) => {
90
- for (const index of requiredIndices) {
91
- if (inputs[index] === undefined) {
88
+ const KINDS_PASSED_AS_POINTER = new Set([
89
+ "array",
90
+ "boxed",
91
+ "buffer",
92
+ "callback",
93
+ "fundamental",
94
+ "hashtable",
95
+ "object",
96
+ "string",
97
+ "struct",
98
+ ]);
99
+ const requiredInputs = (plans) => plans
100
+ .filter((plan) => plan.requiresInput && plan.arg.isRequired === true)
101
+ .map((plan) => ({ index: plan.inputIndex, rejectsNull: KINDS_PASSED_AS_POINTER.has(plan.arg.type.kind) }));
102
+ const assertRequiredInputs = (required, inputs) => {
103
+ for (const { index, rejectsNull } of required) {
104
+ const input = inputs[index];
105
+ if (input === undefined || (rejectsNull && input === null)) {
92
106
  throw new TypeError(`Missing required argument at position ${String(index + 1)}`);
93
107
  }
94
108
  }
@@ -107,9 +121,9 @@ const returnReader = (spec) => spec.isReturnUnpacked === true
107
121
  : (nativeResult) => fromNative(spec.returns, nativeResult);
108
122
  const directCallable = (descriptor, readReturn, hasPrimary, plans) => {
109
123
  const argCount = plans.length;
110
- const requiredIndices = requiredInputIndices(plans);
124
+ const required = requiredInputs(plans);
111
125
  const marshal = (inputs) => {
112
- assertRequiredInputs(requiredIndices, inputs);
126
+ assertRequiredInputs(required, inputs);
113
127
  return readReturn(call(descriptor, resizeInputs(inputs, argCount)));
114
128
  };
115
129
  if (hasPrimary) {
@@ -129,11 +143,11 @@ function fromNativeCallable(descriptor, spec, getRefSeeds) {
129
143
  if (!canThrow && arePassThrough) {
130
144
  return directCallable(descriptor, readReturn, hasPrimary, plans);
131
145
  }
132
- const requiredIndices = requiredInputIndices(plans);
146
+ const required = requiredInputs(plans);
133
147
  const shape = (inputs, nativeValues, nativeResult) => packTupleResult(readOutParams(outPlans, inputs, nativeValues), readReturn(nativeResult), hasPrimary);
134
148
  if (canThrow) {
135
149
  return (...inputs) => {
136
- assertRequiredInputs(requiredIndices, inputs);
150
+ assertRequiredInputs(required, inputs);
137
151
  const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());
138
152
  const errorRef = { value: null };
139
153
  nativeValues.push(errorRef);
@@ -143,23 +157,39 @@ function fromNativeCallable(descriptor, spec, getRefSeeds) {
143
157
  };
144
158
  }
145
159
  return (...inputs) => {
146
- assertRequiredInputs(requiredIndices, inputs);
160
+ assertRequiredInputs(required, inputs);
147
161
  const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());
148
162
  return shape(inputs, nativeValues, call(descriptor, nativeValues));
149
163
  };
150
164
  }
165
+ const bindNativeCallable = (sharedLibrary, symbol, spec) => {
166
+ const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);
167
+ const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);
168
+ return fromNativeCallable(descriptor, spec);
169
+ };
151
170
  /**
152
171
  * Binds a symbol in a shared library to a callable that marshals its inputs and packs output
153
172
  * arguments into the result. When the spec sets `canThrow`, the reported `GError` is thrown.
154
173
  *
174
+ * A plain spec is bound when `fn` is called, so a malformed descriptor throws at binding time.
175
+ * Passing a function returning the spec instead defers building the descriptors and the binding
176
+ * to the first call, so describing such a binding costs nothing until something calls it and a
177
+ * module full of them loads without touching the shared library.
178
+ *
155
179
  * @param sharedLibrary Shared library the symbol is looked up in.
156
180
  * @param symbol Name of the C symbol to bind.
157
- * @param spec Argument and return descriptors the call is marshalled through.
181
+ * @param spec Argument and return descriptors the call is marshalled through, or a function
182
+ * returning them, which defers building the descriptors and the binding to the first call.
158
183
  */
159
184
  function fn(sharedLibrary, symbol, spec) {
160
- const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);
161
- const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);
162
- return fromNativeCallable(descriptor, spec);
185
+ if (typeof spec !== "function") {
186
+ return bindNativeCallable(sharedLibrary, symbol, spec);
187
+ }
188
+ let bound;
189
+ return (...inputs) => {
190
+ bound ??= bindNativeCallable(sharedLibrary, symbol, spec());
191
+ return bound(...inputs);
192
+ };
163
193
  }
164
194
  export { buildNativeArgTypes, fn, fromNativeCallable };
165
195
  //# sourceMappingURL=fn.js.map
package/dist/fn.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fn.js","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAY,oBAAoB,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAClH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqCrD,MAAM,aAAa,GAAc,EAAE,CAAC;AAEpC,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAW,EAAE,CACtD,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AAEnH,MAAM,mBAAmB,GAAG,CAAC,IAAW,EAAE,QAAiB,EAAgB,EAAE;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAC5G,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACX,cAAc,CAAC,IAAI,CACf,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC,CAAC,CACvG,CAAC;IACN,CAAC;IAED,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAW,EAAa,EAAE;IAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC;QAE/D,OAAO;YACH,GAAG;YACH,KAAK;YACL,KAAK;YACL,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,CAAC;YAC5C,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;YAC9B,aAAa;YACb,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,UAAU;YACV,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;SACxC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAE,UAAkB,EAAW,EAAE;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,OAAO,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAW,EAAE,CAChE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEnG,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAE,KAA2B,EAAO,EAAE,CAAC,CAAC;IAC3F,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;CAC7F,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAE,KAA2B,EAAW,EAAE;IAChG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE3D,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAgB,EAAE,MAAiB,EAAE,KAA2B,EAAa,EAAE,CACtG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE/D,MAAM,iBAAiB,GAAG,CAAC,MAAqC,EAAW,EAAE;IACzE,IAAI,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAW,EAAE;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,MAAiB,EAAE,YAAuB,EAAa,EAAE;IACjG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjC,IAAI,CAAC,iBAAiB;QAClB,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC;QACnC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAE,KAAa,EAAW,EAAE,CAChE,IAAI,CAAC,UAAU,KAAK,KAAK;IACzB,CAAC,IAAI,CAAC,KAAK;IACX,CAAC,IAAI,CAAC,iBAAiB;IACvB,CAAC,IAAI,CAAC,YAAY;IAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAEtC,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAY,EAAE,CACxD,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9G,MAAM,oBAAoB,GAAG,CAAC,eAAyB,EAAE,MAAiB,EAAQ,EAAE;IAChF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,yCAAyC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAiB,EAAE,QAAgB,EAAa,EAAE;IACpE,OAAO,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAwC,EAAE,CACxE,IAAI,CAAC,gBAAgB,KAAK,IAAI;IAC1B,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAkC,CAAC;IAC9F,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,cAAc,GAAG,CACnB,UAA0C,EAC1C,UAA8C,EAC9C,UAAmB,EACnB,KAAgB,EACmB,EAAE;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,CAAC,MAAiB,EAAW,EAAE;QAC3C,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAE9C,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,kBAAkB,CACvB,UAA0C,EAC1C,IAAY,EACZ,WAAwC;IAExC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IACnE,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,CAAC,MAAiB,EAAE,YAAuB,EAAE,YAAqB,EAAW,EAAE,CACzF,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAEzG,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;YACjB,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACpD,UAAU,CAAC,QAAQ,CAAC,CAAC;YAErB,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;QACjB,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAEvE,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAE,IAAY;IAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvG,OAAO,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { CallDescriptor, Descriptor, ExternalObject, Handle, Ref } from \"@gtkx/native\";\nimport { call, bind as nativeBind } from \"@gtkx/native\";\nimport type { RefSeeds } from \"./vfunc-seeds.js\";\nimport { type Arg, isCallerAllocatedArg, isOutputArg, isRefArg, isUnpackedArg, requiresInputArg } from \"./arg.js\";\nimport { wrapCallbackValue } from \"./callback.js\";\nimport { boxedT, isGtypeDescriptor, refT } from \"./descriptors.js\";\nimport { checkError } from \"./error.js\";\nimport { LIB } from \"./library.js\";\nimport { fromNative, toNative } from \"./native-value.js\";\nimport { getHandle } from \"./registry.js\";\nimport { hasSurfacedPrimary, packTupleResult } from \"./tuple.js\";\nimport { TYPE_INVALID } from \"./type.js\";\nimport { fromValue, getValueType } from \"./value.js\";\n\n/** The signature a native function is bound against. */\ntype FnSpec = {\n /** The C arguments in declaration order, including the ones the callee writes into. */\n args: Arg[];\n /** Descriptor for the C return value, packed first when output arguments are also returned. */\n returns: Descriptor;\n /**\n * The callee returns a value the bindings do not surface, so the call is made against the\n * declared return type and the value is dropped instead of being packed into the result.\n */\n isReturnSkipped?: boolean;\n /** The function takes a trailing `GError**`, whose contents are thrown as an error on return. */\n canThrow?: boolean;\n /**\n * How many of `args` precede the callee's ellipsis, marking it variadic. Omitting it binds a\n * fixed-arity call, which passes the wrong argument classes to a variadic callee on some\n * architectures.\n */\n fixedArgCount?: number;\n /** The callee returns a `GValue`, surfaced as what it holds rather than as the value itself. */\n isReturnUnpacked?: boolean;\n};\n\ntype ArgSpec = {\n arg: Arg;\n index: number;\n isRef: boolean;\n isCallerAllocated: boolean;\n isUnpacked: boolean;\n requiresInput: boolean;\n inputIndex: number;\n isOutParam: boolean;\n carriesGtype: boolean;\n};\n\nconst NO_OUT_PARAMS: unknown[] = [];\n\nconst hasGtypeInput = (descriptor: Descriptor): boolean =>\n isGtypeDescriptor(descriptor) || (descriptor.kind === \"array\" && isGtypeDescriptor(descriptor.itemDescriptor));\n\nconst buildNativeArgTypes = (args: Arg[], canThrow: boolean): Descriptor[] => {\n const nativeArgTypes = args.map((argSpec) =>\n argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type,\n );\n\n if (canThrow) {\n nativeArgTypes.push(\n refT(boxedT(\"GError\", { ownership: \"full\", sharedLibrary: LIB, getTypeFnName: \"g_error_get_type\" })),\n );\n }\n\n return nativeArgTypes;\n};\n\nconst buildArgSpecs = (args: Arg[]): ArgSpec[] => {\n let inputCursor = 0;\n\n return args.map((arg, index) => {\n const isRef = isRefArg(arg);\n const requiresInput = requiresInputArg(arg);\n const isOutParam = isOutputArg(arg) && arg.isConsumed !== true;\n\n return {\n arg,\n index,\n isRef,\n isCallerAllocated: isCallerAllocatedArg(arg),\n isUnpacked: isUnpackedArg(arg),\n requiresInput,\n inputIndex: requiresInput ? inputCursor++ : -1,\n isOutParam,\n carriesGtype: hasGtypeInput(arg.type),\n };\n });\n};\n\nconst resolveCallerAllocated = (inputs: unknown[], inputIndex: number): unknown => {\n const wrapper = inputs[inputIndex];\n\n return wrapper == null ? wrapper : getHandle(wrapper);\n};\n\nconst inputValueFor = (spec: ArgSpec, inputs: unknown[]): unknown =>\n spec.carriesGtype ? toNative(spec.arg.type, inputs[spec.inputIndex]) : inputs[spec.inputIndex];\n\nconst buildRefValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): Ref => ({\n value: spec.requiresInput ? inputValueFor(spec, inputs) : (seeds?.get(spec.index) ?? null),\n});\n\nconst buildNativeValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): unknown => {\n const { arg, isRef, isCallerAllocated, inputIndex } = spec;\n\n if (isCallerAllocated) {\n return resolveCallerAllocated(inputs, inputIndex);\n }\n\n if (isRef) {\n return buildRefValue(spec, inputs, seeds);\n }\n\n if (arg.type.kind === \"callback\") {\n return wrapCallbackValue(arg.type, inputs[inputIndex]);\n }\n\n return inputValueFor(spec, inputs);\n};\n\nconst buildNativeValues = (plans: ArgSpec[], inputs: unknown[], seeds: RefSeeds | undefined): unknown[] =>\n plans.map((plan) => buildNativeValue(plan, inputs, seeds));\n\nconst unpackValueHandle = (handle: ExternalObject<Handle> | null): unknown => {\n if (handle === null || getValueType(handle) === TYPE_INVALID) {\n return null;\n }\n\n return fromValue(handle);\n};\n\nconst readCallerAllocated = (plan: ArgSpec, inputs: unknown[]): unknown => {\n const wrapper = inputs[plan.inputIndex];\n\n if (!plan.isUnpacked) {\n return wrapper;\n }\n\n return unpackValueHandle(wrapper == null ? null : getHandle(wrapper));\n};\n\nconst readOutParams = (outPlans: ArgSpec[], inputs: unknown[], nativeValues: unknown[]): unknown[] => {\n if (outPlans.length === 0) {\n return NO_OUT_PARAMS;\n }\n\n return Array.from(outPlans, (plan) =>\n plan.isCallerAllocated\n ? readCallerAllocated(plan, inputs)\n : fromNative(plan.arg.type, (nativeValues[plan.index] as Ref).value));\n};\n\nconst isPassThroughPlan = (plan: ArgSpec, index: number): boolean =>\n plan.inputIndex === index &&\n !plan.isRef &&\n !plan.isCallerAllocated &&\n !plan.carriesGtype &&\n plan.arg.type.kind !== \"callback\";\n\nconst requiredInputIndices = (plans: ArgSpec[]): number[] =>\n plans.filter((plan) => plan.requiresInput && plan.arg.isRequired === true).map((plan) => plan.inputIndex);\n\nconst assertRequiredInputs = (requiredIndices: number[], inputs: unknown[]): void => {\n for (const index of requiredIndices) {\n if (inputs[index] === undefined) {\n throw new TypeError(`Missing required argument at position ${String(index + 1)}`);\n }\n }\n};\n\nconst resizeInputs = (inputs: unknown[], argCount: number): unknown[] => {\n while (inputs.length < argCount) {\n inputs.push(undefined);\n }\n\n if (inputs.length > argCount) {\n inputs.length = argCount;\n }\n\n return inputs;\n};\n\nconst returnReader = (spec: FnSpec): ((nativeResult: unknown) => unknown) =>\n spec.isReturnUnpacked === true\n ? (nativeResult) => unpackValueHandle((nativeResult ?? null) as ExternalObject<Handle> | null)\n : (nativeResult) => fromNative(spec.returns, nativeResult);\n\nconst directCallable = (\n descriptor: ExternalObject<CallDescriptor>,\n readReturn: (nativeResult: unknown) => unknown,\n hasPrimary: boolean,\n plans: ArgSpec[],\n): ((...inputs: unknown[]) => unknown) => {\n const argCount = plans.length;\n const requiredIndices = requiredInputIndices(plans);\n\n const marshal = (inputs: unknown[]): unknown => {\n assertRequiredInputs(requiredIndices, inputs);\n\n return readReturn(call(descriptor, resizeInputs(inputs, argCount)));\n };\n\n if (hasPrimary) {\n return (...inputs) => marshal(inputs);\n }\n\n return (...inputs) => {\n marshal(inputs);\n };\n};\n\nfunction fromNativeCallable(\n descriptor: ExternalObject<CallDescriptor>,\n spec: FnSpec,\n getRefSeeds?: () => RefSeeds | undefined,\n): (...inputs: unknown[]) => unknown {\n const { args, returns: returnDescriptor, canThrow = false } = spec;\n const hasPrimary = hasSurfacedPrimary(returnDescriptor, spec.isReturnSkipped);\n const plans = buildArgSpecs(args);\n const outPlans = plans.filter((plan) => plan.isOutParam);\n const arePassThrough = plans.every((plan, index) => isPassThroughPlan(plan, index));\n const readReturn = returnReader(spec);\n\n if (!canThrow && arePassThrough) {\n return directCallable(descriptor, readReturn, hasPrimary, plans);\n }\n\n const requiredIndices = requiredInputIndices(plans);\n\n const shape = (inputs: unknown[], nativeValues: unknown[], nativeResult: unknown): unknown =>\n packTupleResult(readOutParams(outPlans, inputs, nativeValues), readReturn(nativeResult), hasPrimary);\n\n if (canThrow) {\n return (...inputs) => {\n assertRequiredInputs(requiredIndices, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n const errorRef: Ref = { value: null };\n nativeValues.push(errorRef);\n const nativeResult = call(descriptor, nativeValues);\n checkError(errorRef);\n\n return shape(inputs, nativeValues, nativeResult);\n };\n }\n\n return (...inputs) => {\n assertRequiredInputs(requiredIndices, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n\n return shape(inputs, nativeValues, call(descriptor, nativeValues));\n };\n}\n\n/**\n * Binds a symbol in a shared library to a callable that marshals its inputs and packs output\n * arguments into the result. When the spec sets `canThrow`, the reported `GError` is thrown.\n *\n * @param sharedLibrary Shared library the symbol is looked up in.\n * @param symbol Name of the C symbol to bind.\n * @param spec Argument and return descriptors the call is marshalled through.\n */\nfunction fn(sharedLibrary: string, symbol: string, spec: FnSpec): (...inputs: unknown[]) => unknown {\n const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);\n const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);\n\n return fromNativeCallable(descriptor, spec);\n}\n\nexport { buildNativeArgTypes, fn, fromNativeCallable };\n"]}
1
+ {"version":3,"file":"fn.js","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CallDescriptor, Descriptor, ExternalObject, Handle, Ref } from \"@gtkx/native\";\nimport { call, bind as nativeBind } from \"@gtkx/native\";\nimport type { RefSeeds } from \"./vfunc-seeds.js\";\nimport { type Arg, isCallerAllocatedArg, isOutputArg, isRefArg, isUnpackedArg, requiresInputArg } from \"./arg.js\";\nimport { wrapCallbackValue } from \"./callback.js\";\nimport { boxedT, isGtypeDescriptor, refT } from \"./descriptors.js\";\nimport { checkError } from \"./error.js\";\nimport { LIB } from \"./library.js\";\nimport { fromNative, toNative } from \"./native-value.js\";\nimport { getHandle } from \"./registry.js\";\nimport { hasSurfacedPrimary, packTupleResult } from \"./tuple.js\";\nimport { TYPE_INVALID } from \"./type.js\";\nimport { fromValue, getValueType } from \"./value.js\";\n\n/** The signature a native function is bound against. */\ntype FnSpec = {\n /** The C arguments in declaration order, including the ones the callee writes into. */\n args: Arg[];\n /** Descriptor for the C return value, packed first when output arguments are also returned. */\n returns: Descriptor;\n /**\n * The callee returns a value the bindings do not surface, so the call is made against the\n * declared return type and the value is dropped instead of being packed into the result.\n */\n isReturnSkipped?: boolean;\n /** The function takes a trailing `GError**`, whose contents are thrown as an error on return. */\n canThrow?: boolean;\n /**\n * How many of `args` precede the callee's ellipsis, marking it variadic. Omitting it binds a\n * fixed-arity call, which passes the wrong argument classes to a variadic callee on some\n * architectures.\n */\n fixedArgCount?: number;\n /** The callee returns a `GValue`, surfaced as what it holds rather than as the value itself. */\n isReturnUnpacked?: boolean;\n};\n\ntype ArgSpec = {\n arg: Arg;\n index: number;\n isRef: boolean;\n isCallerAllocated: boolean;\n isUnpacked: boolean;\n requiresInput: boolean;\n inputIndex: number;\n isOutParam: boolean;\n carriesGtype: boolean;\n};\n\nconst NO_OUT_PARAMS: unknown[] = [];\n\nconst hasGtypeInput = (descriptor: Descriptor): boolean =>\n isGtypeDescriptor(descriptor) || (descriptor.kind === \"array\" && isGtypeDescriptor(descriptor.itemDescriptor));\n\nconst buildNativeArgTypes = (args: Arg[], canThrow: boolean): Descriptor[] => {\n const nativeArgTypes = args.map((argSpec) =>\n argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type,\n );\n\n if (canThrow) {\n nativeArgTypes.push(\n refT(boxedT(\"GError\", { ownership: \"full\", sharedLibrary: LIB, getTypeFnName: \"g_error_get_type\" })),\n );\n }\n\n return nativeArgTypes;\n};\n\nconst buildArgSpecs = (args: Arg[]): ArgSpec[] => {\n let inputCursor = 0;\n\n return args.map((arg, index) => {\n const isRef = isRefArg(arg);\n const requiresInput = requiresInputArg(arg);\n const isOutParam = isOutputArg(arg) && arg.isConsumed !== true;\n\n return {\n arg,\n index,\n isRef,\n isCallerAllocated: isCallerAllocatedArg(arg),\n isUnpacked: isUnpackedArg(arg),\n requiresInput,\n inputIndex: requiresInput ? inputCursor++ : -1,\n isOutParam,\n carriesGtype: hasGtypeInput(arg.type),\n };\n });\n};\n\nconst resolveCallerAllocated = (inputs: unknown[], inputIndex: number): unknown => {\n const wrapper = inputs[inputIndex];\n\n return wrapper == null ? wrapper : getHandle(wrapper);\n};\n\nconst inputValueFor = (spec: ArgSpec, inputs: unknown[]): unknown =>\n spec.carriesGtype ? toNative(spec.arg.type, inputs[spec.inputIndex]) : inputs[spec.inputIndex];\n\nconst buildRefValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): Ref => ({\n value: spec.requiresInput ? inputValueFor(spec, inputs) : (seeds?.get(spec.index) ?? null),\n});\n\nconst buildNativeValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): unknown => {\n const { arg, isRef, isCallerAllocated, inputIndex } = spec;\n\n if (isCallerAllocated) {\n return resolveCallerAllocated(inputs, inputIndex);\n }\n\n if (isRef) {\n return buildRefValue(spec, inputs, seeds);\n }\n\n if (arg.type.kind === \"callback\") {\n return wrapCallbackValue(arg.type, inputs[inputIndex]);\n }\n\n return inputValueFor(spec, inputs);\n};\n\nconst buildNativeValues = (plans: ArgSpec[], inputs: unknown[], seeds: RefSeeds | undefined): unknown[] =>\n plans.map((plan) => buildNativeValue(plan, inputs, seeds));\n\nconst unpackValueHandle = (handle: ExternalObject<Handle> | null): unknown => {\n if (handle === null || getValueType(handle) === TYPE_INVALID) {\n return null;\n }\n\n return fromValue(handle);\n};\n\nconst readCallerAllocated = (plan: ArgSpec, inputs: unknown[]): unknown => {\n const wrapper = inputs[plan.inputIndex];\n\n if (!plan.isUnpacked) {\n return wrapper;\n }\n\n return unpackValueHandle(wrapper == null ? null : getHandle(wrapper));\n};\n\nconst readOutParams = (outPlans: ArgSpec[], inputs: unknown[], nativeValues: unknown[]): unknown[] => {\n if (outPlans.length === 0) {\n return NO_OUT_PARAMS;\n }\n\n return Array.from(outPlans, (plan) =>\n plan.isCallerAllocated\n ? readCallerAllocated(plan, inputs)\n : fromNative(plan.arg.type, (nativeValues[plan.index] as Ref).value));\n};\n\nconst isPassThroughPlan = (plan: ArgSpec, index: number): boolean =>\n plan.inputIndex === index &&\n !plan.isRef &&\n !plan.isCallerAllocated &&\n !plan.carriesGtype &&\n plan.arg.type.kind !== \"callback\";\n\nconst KINDS_PASSED_AS_POINTER: ReadonlySet<Descriptor[\"kind\"]> = new Set<Descriptor[\"kind\"]>([\n \"array\",\n \"boxed\",\n \"buffer\",\n \"callback\",\n \"fundamental\",\n \"hashtable\",\n \"object\",\n \"string\",\n \"struct\",\n]);\n\ntype RequiredInput = {\n index: number;\n rejectsNull: boolean;\n};\n\nconst requiredInputs = (plans: ArgSpec[]): RequiredInput[] =>\n plans\n .filter((plan) => plan.requiresInput && plan.arg.isRequired === true)\n .map((plan) => ({ index: plan.inputIndex, rejectsNull: KINDS_PASSED_AS_POINTER.has(plan.arg.type.kind) }));\n\nconst assertRequiredInputs = (required: RequiredInput[], inputs: unknown[]): void => {\n for (const { index, rejectsNull } of required) {\n const input = inputs[index];\n\n if (input === undefined || (rejectsNull && input === null)) {\n throw new TypeError(`Missing required argument at position ${String(index + 1)}`);\n }\n }\n};\n\nconst resizeInputs = (inputs: unknown[], argCount: number): unknown[] => {\n while (inputs.length < argCount) {\n inputs.push(undefined);\n }\n\n if (inputs.length > argCount) {\n inputs.length = argCount;\n }\n\n return inputs;\n};\n\nconst returnReader = (spec: FnSpec): ((nativeResult: unknown) => unknown) =>\n spec.isReturnUnpacked === true\n ? (nativeResult) => unpackValueHandle((nativeResult ?? null) as ExternalObject<Handle> | null)\n : (nativeResult) => fromNative(spec.returns, nativeResult);\n\nconst directCallable = (\n descriptor: ExternalObject<CallDescriptor>,\n readReturn: (nativeResult: unknown) => unknown,\n hasPrimary: boolean,\n plans: ArgSpec[],\n): ((...inputs: unknown[]) => unknown) => {\n const argCount = plans.length;\n const required = requiredInputs(plans);\n\n const marshal = (inputs: unknown[]): unknown => {\n assertRequiredInputs(required, inputs);\n\n return readReturn(call(descriptor, resizeInputs(inputs, argCount)));\n };\n\n if (hasPrimary) {\n return (...inputs) => marshal(inputs);\n }\n\n return (...inputs) => {\n marshal(inputs);\n };\n};\n\nfunction fromNativeCallable(\n descriptor: ExternalObject<CallDescriptor>,\n spec: FnSpec,\n getRefSeeds?: () => RefSeeds | undefined,\n): (...inputs: unknown[]) => unknown {\n const { args, returns: returnDescriptor, canThrow = false } = spec;\n const hasPrimary = hasSurfacedPrimary(returnDescriptor, spec.isReturnSkipped);\n const plans = buildArgSpecs(args);\n const outPlans = plans.filter((plan) => plan.isOutParam);\n const arePassThrough = plans.every((plan, index) => isPassThroughPlan(plan, index));\n const readReturn = returnReader(spec);\n\n if (!canThrow && arePassThrough) {\n return directCallable(descriptor, readReturn, hasPrimary, plans);\n }\n\n const required = requiredInputs(plans);\n\n const shape = (inputs: unknown[], nativeValues: unknown[], nativeResult: unknown): unknown =>\n packTupleResult(readOutParams(outPlans, inputs, nativeValues), readReturn(nativeResult), hasPrimary);\n\n if (canThrow) {\n return (...inputs) => {\n assertRequiredInputs(required, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n const errorRef: Ref = { value: null };\n nativeValues.push(errorRef);\n const nativeResult = call(descriptor, nativeValues);\n checkError(errorRef);\n\n return shape(inputs, nativeValues, nativeResult);\n };\n }\n\n return (...inputs) => {\n assertRequiredInputs(required, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n\n return shape(inputs, nativeValues, call(descriptor, nativeValues));\n };\n}\n\nconst bindNativeCallable = (\n sharedLibrary: string,\n symbol: string,\n spec: FnSpec,\n): ((...inputs: unknown[]) => unknown) => {\n const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);\n const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);\n\n return fromNativeCallable(descriptor, spec);\n};\n\n/**\n * Binds a symbol in a shared library to a callable that marshals its inputs and packs output\n * arguments into the result. When the spec sets `canThrow`, the reported `GError` is thrown.\n *\n * A plain spec is bound when `fn` is called, so a malformed descriptor throws at binding time.\n * Passing a function returning the spec instead defers building the descriptors and the binding\n * to the first call, so describing such a binding costs nothing until something calls it and a\n * module full of them loads without touching the shared library.\n *\n * @param sharedLibrary Shared library the symbol is looked up in.\n * @param symbol Name of the C symbol to bind.\n * @param spec Argument and return descriptors the call is marshalled through, or a function\n * returning them, which defers building the descriptors and the binding to the first call.\n */\nfunction fn(\n sharedLibrary: string,\n symbol: string,\n spec: FnSpec | (() => FnSpec),\n): (...inputs: unknown[]) => unknown {\n if (typeof spec !== \"function\") {\n return bindNativeCallable(sharedLibrary, symbol, spec);\n }\n\n let bound: ((...inputs: unknown[]) => unknown) | undefined;\n\n return (...inputs) => {\n bound ??= bindNativeCallable(sharedLibrary, symbol, spec());\n\n return bound(...inputs);\n };\n}\n\nexport { buildNativeArgTypes, fn, fromNativeCallable };\n"]}
@@ -11,6 +11,7 @@ type FoldedLengthSpec = {
11
11
  returnDescriptor: Descriptor;
12
12
  userDataIndex?: number | undefined;
13
13
  };
14
+ declare const foldedLengthArgIndices: (spec: FoldedLengthSpec) => ReadonlySet<number>;
14
15
  declare const foldedLengthSources: (spec: FoldedLengthSpec) => LengthSources;
15
- export { foldedLengthSources, type LengthSource, type LengthSources };
16
+ export { foldedLengthArgIndices, foldedLengthSources, type LengthSource, type LengthSources };
16
17
  //# sourceMappingURL=folded-lengths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"folded-lengths.d.ts","sourceRoot":"","sources":["../src/folded-lengths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9E,KAAK,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAEjD,KAAK,gBAAgB,GAAG;IACpB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AA6CF,QAAA,MAAM,mBAAmB,GAAI,MAAM,gBAAgB,KAAG,aAOrD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"folded-lengths.d.ts","sourceRoot":"","sources":["../src/folded-lengths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9E,KAAK,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAEjD,KAAK,gBAAgB,GAAG;IACpB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAqCF,QAAA,MAAM,sBAAsB,GAAI,MAAM,gBAAgB,KAAG,WAAW,CAAC,MAAM,CAmB1E,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,MAAM,gBAAgB,KAAG,aAOrD,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,CAAC"}
@@ -10,12 +10,7 @@ const addLengthSource = (sources, index, source) => {
10
10
  if (index === undefined) {
11
11
  return;
12
12
  }
13
- const existing = sources.get(index);
14
- if (existing === undefined) {
15
- sources.set(index, [source]);
16
- return;
17
- }
18
- existing.push(source);
13
+ sources.getOrInsertComputed(index, () => []).push(source);
19
14
  };
20
15
  const addOutArgLengthSources = (sources, spec) => {
21
16
  const { userDataIndex } = spec;
@@ -27,6 +22,21 @@ const addOutArgLengthSources = (sources, spec) => {
27
22
  }
28
23
  }
29
24
  };
25
+ const foldedLengthArgIndices = (spec) => {
26
+ const indices = new Set();
27
+ const add = (declaredIndex) => {
28
+ const argIndex = effectiveArgIndex(declaredIndex, spec.userDataIndex);
29
+ if (argIndex !== undefined) {
30
+ indices.add(argIndex);
31
+ }
32
+ };
33
+ add(sizedArrayLengthIndex(spec.returnDescriptor));
34
+ for (const descriptor of spec.argDescriptors) {
35
+ add(sizedArrayLengthIndex(descriptor));
36
+ add(outArgLengthIndex(descriptor));
37
+ }
38
+ return indices;
39
+ };
30
40
  const foldedLengthSources = (spec) => {
31
41
  const sources = new Map();
32
42
  const returnLengthIndex = effectiveArgIndex(sizedArrayLengthIndex(spec.returnDescriptor), spec.userDataIndex);
@@ -34,5 +44,5 @@ const foldedLengthSources = (spec) => {
34
44
  addOutArgLengthSources(sources, spec);
35
45
  return sources;
36
46
  };
37
- export { foldedLengthSources };
47
+ export { foldedLengthArgIndices, foldedLengthSources };
38
48
  //# sourceMappingURL=folded-lengths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"folded-lengths.js","sourceRoot":"","sources":["../src/folded-lengths.ts"],"names":[],"mappings":"AAWA,MAAM,qBAAqB,GAAG,CAAC,UAAsB,EAAsB,EAAE,CACzE,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAE5G,MAAM,iBAAiB,GAAG,CAAC,UAAkC,EAAsB,EAAE,CACjF,UAAU,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAE/F,MAAM,iBAAiB,GAAG,CAAC,QAA4B,EAAE,aAAiC,EAAsB,EAAE;IAC9G,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;QACpF,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,KAAyB,EAAE,MAAoB,EAAQ,EAAE;IACtG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAE7B,OAAO;IACX,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAsB,EAAE,IAAsB,EAAQ,EAAE;IACpF,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAE/B,KAAK,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAEjE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YACpF,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAsB,EAAiB,EAAE;IAClE,MAAM,OAAO,GAAkB,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9G,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEtC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAyC,CAAC","sourcesContent":["import type { Descriptor } from \"@gtkx/native\";\n\ntype LengthSource = { kind: \"return\" } | { kind: \"outArg\"; argIndex: number };\ntype LengthSources = Map<number, LengthSource[]>;\n\ntype FoldedLengthSpec = {\n argDescriptors: Descriptor[];\n returnDescriptor: Descriptor;\n userDataIndex?: number | undefined;\n};\n\nconst sizedArrayLengthIndex = (descriptor: Descriptor): number | undefined =>\n descriptor.kind === \"array\" && descriptor.arrayKind === \"sized\" ? descriptor.sizeParamIndex : undefined;\n\nconst outArgLengthIndex = (descriptor: Descriptor | undefined): number | undefined =>\n descriptor?.kind === \"ref\" ? sizedArrayLengthIndex(descriptor.innerDescriptor) : undefined;\n\nconst effectiveArgIndex = (argIndex: number | undefined, userDataIndex: number | undefined): number | undefined => {\n if (argIndex === undefined || userDataIndex === undefined || argIndex < userDataIndex) {\n return argIndex;\n }\n\n return argIndex === userDataIndex ? undefined : argIndex - 1;\n};\n\nconst addLengthSource = (sources: LengthSources, index: number | undefined, source: LengthSource): void => {\n if (index === undefined) {\n return;\n }\n\n const existing = sources.get(index);\n\n if (existing === undefined) {\n sources.set(index, [source]);\n\n return;\n }\n\n existing.push(source);\n};\n\nconst addOutArgLengthSources = (sources: LengthSources, spec: FoldedLengthSpec): void => {\n const { userDataIndex } = spec;\n\n for (const [declaredIndex, descriptor] of spec.argDescriptors.entries()) {\n const argIndex = effectiveArgIndex(declaredIndex, userDataIndex);\n\n if (argIndex !== undefined) {\n const lengthIndex = effectiveArgIndex(outArgLengthIndex(descriptor), userDataIndex);\n addLengthSource(sources, lengthIndex, { kind: \"outArg\", argIndex });\n }\n }\n};\n\nconst foldedLengthSources = (spec: FoldedLengthSpec): LengthSources => {\n const sources: LengthSources = new Map();\n const returnLengthIndex = effectiveArgIndex(sizedArrayLengthIndex(spec.returnDescriptor), spec.userDataIndex);\n addLengthSource(sources, returnLengthIndex, { kind: \"return\" });\n addOutArgLengthSources(sources, spec);\n\n return sources;\n};\n\nexport { foldedLengthSources, type LengthSource, type LengthSources };\n"]}
1
+ {"version":3,"file":"folded-lengths.js","sourceRoot":"","sources":["../src/folded-lengths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Descriptor } from \"@gtkx/native\";\n\ntype LengthSource = { kind: \"return\" } | { kind: \"outArg\"; argIndex: number };\ntype LengthSources = Map<number, LengthSource[]>;\n\ntype FoldedLengthSpec = {\n argDescriptors: Descriptor[];\n returnDescriptor: Descriptor;\n userDataIndex?: number | undefined;\n};\n\nconst sizedArrayLengthIndex = (descriptor: Descriptor): number | undefined =>\n descriptor.kind === \"array\" && descriptor.arrayKind === \"sized\" ? descriptor.sizeParamIndex : undefined;\n\nconst outArgLengthIndex = (descriptor: Descriptor | undefined): number | undefined =>\n descriptor?.kind === \"ref\" ? sizedArrayLengthIndex(descriptor.innerDescriptor) : undefined;\n\nconst effectiveArgIndex = (argIndex: number | undefined, userDataIndex: number | undefined): number | undefined => {\n if (argIndex === undefined || userDataIndex === undefined || argIndex < userDataIndex) {\n return argIndex;\n }\n\n return argIndex === userDataIndex ? undefined : argIndex - 1;\n};\n\nconst addLengthSource = (sources: LengthSources, index: number | undefined, source: LengthSource): void => {\n if (index === undefined) {\n return;\n }\n\n sources.getOrInsertComputed(index, () => []).push(source);\n};\n\nconst addOutArgLengthSources = (sources: LengthSources, spec: FoldedLengthSpec): void => {\n const { userDataIndex } = spec;\n\n for (const [declaredIndex, descriptor] of spec.argDescriptors.entries()) {\n const argIndex = effectiveArgIndex(declaredIndex, userDataIndex);\n\n if (argIndex !== undefined) {\n const lengthIndex = effectiveArgIndex(outArgLengthIndex(descriptor), userDataIndex);\n addLengthSource(sources, lengthIndex, { kind: \"outArg\", argIndex });\n }\n }\n};\n\nconst foldedLengthArgIndices = (spec: FoldedLengthSpec): ReadonlySet<number> => {\n const indices: Set<number> = new Set();\n\n const add = (declaredIndex: number | undefined): void => {\n const argIndex = effectiveArgIndex(declaredIndex, spec.userDataIndex);\n\n if (argIndex !== undefined) {\n indices.add(argIndex);\n }\n };\n\n add(sizedArrayLengthIndex(spec.returnDescriptor));\n\n for (const descriptor of spec.argDescriptors) {\n add(sizedArrayLengthIndex(descriptor));\n add(outArgLengthIndex(descriptor));\n }\n\n return indices;\n};\n\nconst foldedLengthSources = (spec: FoldedLengthSpec): LengthSources => {\n const sources: LengthSources = new Map();\n const returnLengthIndex = effectiveArgIndex(sizedArrayLengthIndex(spec.returnDescriptor), spec.userDataIndex);\n addLengthSource(sources, returnLengthIndex, { kind: \"return\" });\n addOutArgLengthSources(sources, spec);\n\n return sources;\n};\n\nexport { foldedLengthArgIndices, foldedLengthSources, type LengthSource, type LengthSources };\n"]}
package/dist/index.d.ts CHANGED
@@ -1,48 +1,26 @@
1
1
  import "./exit-hook.js";
2
- /** @public */
3
2
  export { type ApplicationClass, type CommandLineApplication, createApplication } from "./application-class.js";
4
- /** @public */
3
+ export { CallbackMarshalError } from "./callback.js";
5
4
  export { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } from "./closure.js";
6
- /** @public */
7
5
  export { createErrorDomain, type ErrorDomain } from "./error.js";
8
- /** @public */
9
6
  export { type Field, type StridedField } from "./field.js";
10
- /** @public */
11
7
  export { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from "./lifecycle.js";
12
- /** @public */
13
8
  export { offSignal, onceSignal, onSignal } from "./listeners.js";
14
- /** @public */
15
9
  export { installMixins, type Mixin } from "./mixin.js";
16
- /** @public */
17
- export { fromNative, toNative } from "./native-value.js";
18
- /** @public */
10
+ export { fromNative, toHashTableEntries, toNative } from "./native-value.js";
19
11
  export { type ConstructBinding, type ConstructBindings, getObjectProperty, newObjectWithProperties, registerConstructProperties, setObjectProperty, } from "./object.js";
20
- /** @public */
21
12
  export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from "./param-spec.js";
22
- /** @public */
23
13
  export { promisify, trimFinish } from "./promisify.js";
24
- /** @public */
25
14
  export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
26
- /** @public */
27
15
  export { matchAllRegex, matchRegex } from "./regex.js";
28
- /** @public */
29
16
  export { type Interface, registerClass, type SignalGType, type SignalSpec } from "./register-class.js";
30
- /** @public */
31
- export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, type StaticBase, setHandle, wrapHandle, type WrapperClassResolver, } from "./registry.js";
32
- /** @public */
17
+ export { getClassType, getHandle, getInstanceType, getWrapperClass, installInterfaces, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, type StaticBase, setHandle, wrapHandle, type WrapperClass, type WrapperClassResolver, } from "./registry.js";
33
18
  export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, type SignalHandler, signalForHandlerName, } from "./signal.js";
34
- /** @public */
35
19
  export { t } from "./t.js";
36
- /** @public */
37
- export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, type TypedClass, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
38
- /** @public */
20
+ export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, type TypedClass, retainWrapperClasses, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
39
21
  export { fromValue, getBoxedValue, type JsValue, setBoxedValue, toValueHandle, tryToValueHandle, ValueMarshalError, } from "./value.js";
40
- /** @public */
41
22
  export { type ByteArray, type FromVariantOptions, fromVariant, type RecursiveFromVariantOptions, type RecursiveVariantValue, toVariant, type VariantInput, type VariantValue, } from "./variant.js";
42
- /** @public */
43
23
  export { callParent, callVfunc } from "./vfunc-call.js";
44
- /** @public */
45
24
  export { alloc, type ExternalObject, type Handle, read, write } from "@gtkx/native";
46
- /** @public */
47
25
  export { type AnyClass } from "@gtkx/utils";
48
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,UAAU,EACf,SAAS,EACT,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,KAAK,aAAa,EAClB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EACH,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,KAAK,UAAU,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,SAAS,EACT,aAAa,EACb,KAAK,OAAO,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACH,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,WAAW,EACX,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,48 +1,26 @@
1
1
  import "./exit-hook.js";
2
- /** @public */
3
2
  export { createApplication } from "./application-class.js";
4
- /** @public */
3
+ export { CallbackMarshalError } from "./callback.js";
5
4
  export { ClosureMarshalError, toClosure, tryToClosure } from "./closure.js";
6
- /** @public */
7
5
  export { createErrorDomain } from "./error.js";
8
- /** @public */
9
6
  export {} from "./field.js";
10
- /** @public */
11
7
  export { onExit, quit, quitApplication, runApplication } from "./lifecycle.js";
12
- /** @public */
13
8
  export { offSignal, onceSignal, onSignal } from "./listeners.js";
14
- /** @public */
15
9
  export { installMixins } from "./mixin.js";
16
- /** @public */
17
- export { fromNative, toNative } from "./native-value.js";
18
- /** @public */
10
+ export { fromNative, toHashTableEntries, toNative } from "./native-value.js";
19
11
  export { getObjectProperty, newObjectWithProperties, registerConstructProperties, setObjectProperty, } from "./object.js";
20
- /** @public */
21
12
  export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from "./param-spec.js";
22
- /** @public */
23
13
  export { promisify, trimFinish } from "./promisify.js";
24
- /** @public */
25
14
  export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
26
- /** @public */
27
15
  export { matchAllRegex, matchRegex } from "./regex.js";
28
- /** @public */
29
16
  export { registerClass } from "./register-class.js";
30
- /** @public */
31
- export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, setHandle, wrapHandle, } from "./registry.js";
32
- /** @public */
17
+ export { getClassType, getHandle, getInstanceType, getWrapperClass, installInterfaces, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, setHandle, wrapHandle, } from "./registry.js";
33
18
  export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, signalForHandlerName, } from "./signal.js";
34
- /** @public */
35
19
  export { t } from "./t.js";
36
- /** @public */
37
- export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
38
- /** @public */
20
+ export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, retainWrapperClasses, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
39
21
  export { fromValue, getBoxedValue, setBoxedValue, toValueHandle, tryToValueHandle, ValueMarshalError, } from "./value.js";
40
- /** @public */
41
22
  export { fromVariant, toVariant, } from "./variant.js";
42
- /** @public */
43
23
  export { callParent, callVfunc } from "./vfunc-call.js";
44
- /** @public */
45
24
  export { alloc, read, write } from "@gtkx/native";
46
- /** @public */
47
25
  export {} from "@gtkx/utils";
48
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAiC,MAAM,YAAY,CAAC;AAC3D,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc;AACd,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAkB,aAAa,EAAqC,MAAM,qBAAqB,CAAC;AACvG,cAAc;AACd,OAAO,EACH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACT,UAAU,GAEb,MAAM,eAAe,CAAC;AACvB,cAAc;AACd,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,cAAc;AACd,OAAO,EACH,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,cAAc;AACd,OAAO,EACH,SAAS,EACT,aAAa,EAEb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC;AACpB,cAAc;AACd,OAAO,EAGH,WAAW,EAGX,SAAS,GAGZ,MAAM,cAAc,CAAC;AACtB,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc;AACd,OAAO,EAAE,KAAK,EAAoC,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpF,cAAc;AACd,OAAO,EAAiB,MAAM,aAAa,CAAC","sourcesContent":["import \"./exit-hook.js\";\n\n/** @public */\nexport { type ApplicationClass, type CommandLineApplication, createApplication } from \"./application-class.js\";\n/** @public */\nexport { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } from \"./closure.js\";\n/** @public */\nexport { createErrorDomain, type ErrorDomain } from \"./error.js\";\n/** @public */\nexport { type Field, type StridedField } from \"./field.js\";\n/** @public */\nexport { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from \"./lifecycle.js\";\n/** @public */\nexport { offSignal, onceSignal, onSignal } from \"./listeners.js\";\n/** @public */\nexport { installMixins, type Mixin } from \"./mixin.js\";\n/** @public */\nexport { fromNative, toNative } from \"./native-value.js\";\n/** @public */\nexport {\n type ConstructBinding,\n type ConstructBindings,\n getObjectProperty,\n newObjectWithProperties,\n registerConstructProperties,\n setObjectProperty,\n} from \"./object.js\";\n/** @public */\nexport { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from \"./param-spec.js\";\n/** @public */\nexport { promisify, trimFinish } from \"./promisify.js\";\n/** @public */\nexport {\n coerceObjectProperty,\n getDeclaredPropertyName,\n isReadableProperty,\n newParamSpecOverride,\n} from \"./properties.js\";\n/** @public */\nexport { matchAllRegex, matchRegex } from \"./regex.js\";\n/** @public */\nexport { type Interface, registerClass, type SignalGType, type SignalSpec } from \"./register-class.js\";\n/** @public */\nexport {\n getClassType,\n getHandle,\n getInstanceType,\n getWrapperClass,\n peekTypeClass,\n registerClassStruct,\n registerInterface,\n registerWrapperClass,\n registerWrapperClassResolver,\n type StaticBase,\n setHandle,\n wrapHandle,\n type WrapperClassResolver,\n} from \"./registry.js\";\n/** @public */\nexport {\n connectSignal,\n disconnectSignal,\n emitSignal,\n getSignalBaseName,\n type SignalHandler,\n signalForHandlerName,\n} from \"./signal.js\";\n/** @public */\nexport { t } from \"./t.js\";\n/** @public */\nexport {\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_NONE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_UNICHAR,\n TYPE_VARIANT,\n type TypedClass,\n typeFromName,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n valueIsA,\n} from \"./type.js\";\n/** @public */\nexport {\n fromValue,\n getBoxedValue,\n type JsValue,\n setBoxedValue,\n toValueHandle,\n tryToValueHandle,\n ValueMarshalError,\n} from \"./value.js\";\n/** @public */\nexport {\n type ByteArray,\n type FromVariantOptions,\n fromVariant,\n type RecursiveFromVariantOptions,\n type RecursiveVariantValue,\n toVariant,\n type VariantInput,\n type VariantValue,\n} from \"./variant.js\";\n/** @public */\nexport { callParent, callVfunc } from \"./vfunc-call.js\";\n/** @public */\nexport { alloc, type ExternalObject, type Handle, read, write } from \"@gtkx/native\";\n/** @public */\nexport { type AnyClass } from \"@gtkx/utils\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAkB,aAAa,EAAqC,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACT,UAAU,GAGb,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EACH,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,SAAS,EACT,aAAa,EAEb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGH,WAAW,EAGX,SAAS,GAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAoC,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAiB,MAAM,aAAa,CAAC","sourcesContent":["import \"./exit-hook.js\";\n\nexport { type ApplicationClass, type CommandLineApplication, createApplication } from \"./application-class.js\";\nexport { CallbackMarshalError } from \"./callback.js\";\nexport { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } from \"./closure.js\";\nexport { createErrorDomain, type ErrorDomain } from \"./error.js\";\nexport { type Field, type StridedField } from \"./field.js\";\nexport { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from \"./lifecycle.js\";\nexport { offSignal, onceSignal, onSignal } from \"./listeners.js\";\nexport { installMixins, type Mixin } from \"./mixin.js\";\nexport { fromNative, toHashTableEntries, toNative } from \"./native-value.js\";\nexport {\n type ConstructBinding,\n type ConstructBindings,\n getObjectProperty,\n newObjectWithProperties,\n registerConstructProperties,\n setObjectProperty,\n} from \"./object.js\";\nexport { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from \"./param-spec.js\";\nexport { promisify, trimFinish } from \"./promisify.js\";\nexport {\n coerceObjectProperty,\n getDeclaredPropertyName,\n isReadableProperty,\n newParamSpecOverride,\n} from \"./properties.js\";\nexport { matchAllRegex, matchRegex } from \"./regex.js\";\nexport { type Interface, registerClass, type SignalGType, type SignalSpec } from \"./register-class.js\";\nexport {\n getClassType,\n getHandle,\n getInstanceType,\n getWrapperClass,\n installInterfaces,\n peekTypeClass,\n registerClassStruct,\n registerInterface,\n registerWrapperClass,\n registerWrapperClassResolver,\n type StaticBase,\n setHandle,\n wrapHandle,\n type WrapperClass,\n type WrapperClassResolver,\n} from \"./registry.js\";\nexport {\n connectSignal,\n disconnectSignal,\n emitSignal,\n getSignalBaseName,\n type SignalHandler,\n signalForHandlerName,\n} from \"./signal.js\";\nexport { t } from \"./t.js\";\nexport {\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_NONE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_UNICHAR,\n TYPE_VARIANT,\n type TypedClass,\n retainWrapperClasses,\n typeFromName,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n valueIsA,\n} from \"./type.js\";\nexport {\n fromValue,\n getBoxedValue,\n type JsValue,\n setBoxedValue,\n toValueHandle,\n tryToValueHandle,\n ValueMarshalError,\n} from \"./value.js\";\nexport {\n type ByteArray,\n type FromVariantOptions,\n fromVariant,\n type RecursiveFromVariantOptions,\n type RecursiveVariantValue,\n toVariant,\n type VariantInput,\n type VariantValue,\n} from \"./variant.js\";\nexport { callParent, callVfunc } from \"./vfunc-call.js\";\nexport { alloc, type ExternalObject, type Handle, read, write } from \"@gtkx/native\";\nexport { type AnyClass } from \"@gtkx/utils\";\n"]}
@@ -1,6 +1,9 @@
1
- export { checkError, createErrorDomain } from "./error.js";
1
+ /** @internal */
2
+ export { registerElementMetadata } from "./element-metadata.js";
3
+ export { elementMetadataVersion, registeredElementProperties, registeredElementSignals, } from "./element-metadata.js";
4
+ export { createErrorDomain } from "./error.js";
2
5
  export { type ApplicationInstance, getApplicationInstance } from "./lifecycle.js";
3
- export { registerClassType, resolveWrapperClass, wrapHandle } from "./registry.js";
6
+ export { getExactWrapperClass, resolveWrapperClass } from "./registry.js";
4
7
  export { hasSignalListener } from "./signal.js";
5
8
  export { resolveType } from "./type.js";
6
9
  export { fromValue, getBoxedValue, getValueType, inoutValueForBoxedDescriptor, newValueForDescriptor, outValueForBoxedDescriptor, toValue, } from "./value.js";
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,KAAK,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACH,SAAS,EACT,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,0BAA0B,EAC1B,OAAO,GACV,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACH,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACH,SAAS,EACT,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,0BAA0B,EAC1B,OAAO,GACV,MAAM,YAAY,CAAC"}
package/dist/internal.js CHANGED
@@ -1,6 +1,9 @@
1
- export { checkError, createErrorDomain } from "./error.js";
1
+ /** @internal */
2
+ export { registerElementMetadata } from "./element-metadata.js";
3
+ export { elementMetadataVersion, registeredElementProperties, registeredElementSignals, } from "./element-metadata.js";
4
+ export { createErrorDomain } from "./error.js";
2
5
  export { getApplicationInstance } from "./lifecycle.js";
3
- export { registerClassType, resolveWrapperClass, wrapHandle } from "./registry.js";
6
+ export { getExactWrapperClass, resolveWrapperClass } from "./registry.js";
4
7
  export { hasSignalListener } from "./signal.js";
5
8
  export { resolveType } from "./type.js";
6
9
  export { fromValue, getBoxedValue, getValueType, inoutValueForBoxedDescriptor, newValueForDescriptor, outValueForBoxedDescriptor, toValue, } from "./value.js";
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAA4B,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACH,SAAS,EACT,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,0BAA0B,EAC1B,OAAO,GACV,MAAM,YAAY,CAAC","sourcesContent":["export { checkError, createErrorDomain } from \"./error.js\";\nexport { type ApplicationInstance, getApplicationInstance } from \"./lifecycle.js\";\nexport { registerClassType, resolveWrapperClass, wrapHandle } from \"./registry.js\";\nexport { hasSignalListener } from \"./signal.js\";\nexport { resolveType } from \"./type.js\";\nexport {\n fromValue,\n getBoxedValue,\n getValueType,\n inoutValueForBoxedDescriptor,\n newValueForDescriptor,\n outValueForBoxedDescriptor,\n toValue,\n} from \"./value.js\";\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACH,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAA4B,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACH,SAAS,EACT,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,0BAA0B,EAC1B,OAAO,GACV,MAAM,YAAY,CAAC","sourcesContent":["/** @internal */\nexport { registerElementMetadata } from \"./element-metadata.js\";\nexport {\n elementMetadataVersion,\n registeredElementProperties,\n registeredElementSignals,\n} from \"./element-metadata.js\";\nexport { createErrorDomain } from \"./error.js\";\nexport { type ApplicationInstance, getApplicationInstance } from \"./lifecycle.js\";\nexport { getExactWrapperClass, resolveWrapperClass } from \"./registry.js\";\nexport { hasSignalListener } from \"./signal.js\";\nexport { resolveType } from \"./type.js\";\nexport {\n fromValue,\n getBoxedValue,\n getValueType,\n inoutValueForBoxedDescriptor,\n newValueForDescriptor,\n outValueForBoxedDescriptor,\n toValue,\n} from \"./value.js\";\n"]}
@@ -13,6 +13,14 @@ import { type Descriptor } from "@gtkx/native";
13
13
  * @param value The raw native value to convert.
14
14
  */
15
15
  declare function fromNative(descriptor: Descriptor, value: unknown): unknown;
16
+ /**
17
+ * Normalises the JavaScript form of a hash table argument into its entry list. A `Map` is the
18
+ * expected form and any other iterable of pairs is accepted; anything else is rejected, a plain
19
+ * object above all, which `Array.from` would quietly flatten into an empty table.
20
+ *
21
+ * @param value The JavaScript value passed for a hash table argument.
22
+ */
23
+ declare function toHashTableEntries(value: unknown): [unknown, unknown][] | null;
16
24
  /**
17
25
  * Converts a JavaScript value into the raw form native code expects, unwrapping
18
26
  * object, struct, boxed, and fundamental wrappers back to their handles,
@@ -23,5 +31,5 @@ declare function fromNative(descriptor: Descriptor, value: unknown): unknown;
23
31
  * @param value The JavaScript value to convert.
24
32
  */
25
33
  declare function toNative(descriptor: Descriptor, value: unknown): unknown;
26
- export { fromNative, toNative };
34
+ export { fromNative, toHashTableEntries, toNative };
27
35
  //# sourceMappingURL=native-value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"native-value.d.ts","sourceRoot":"","sources":["../src/native-value.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,KAAK,UAAU,EAKlB,MAAM,cAAc,CAAC;AA2KtB;;;;;;;;;;;;GAYG;AACH,iBAAS,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA6BnE;AAiBD;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBjE;AAED,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"native-value.d.ts","sourceRoot":"","sources":["../src/native-value.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,KAAK,UAAU,EAKlB,MAAM,cAAc,CAAC;AAmMtB;;;;;;;;;;;;GAYG;AACH,iBAAS,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAiCnE;AAMD;;;;;;GAMG;AACH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAUvE;AAeD;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBjE;AAED,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC"}
@@ -28,6 +28,14 @@ function boxedFromNative(descriptor, value) {
28
28
  }
29
29
  const handle = value;
30
30
  const type = resolveDescriptorType(descriptor);
31
+ const registered = resolveWrapperClass(type);
32
+ if (registered !== null) {
33
+ return wrapHandle(handle, registered);
34
+ }
35
+ const fallback = descriptor.fallbackClass?.();
36
+ if (fallback !== undefined) {
37
+ return wrapHandle(handle, fallback);
38
+ }
31
39
  return wrapHandle(handle, getWrapperClass(type));
32
40
  }
33
41
  function fundamentalWrapperClass(descriptor, handle) {
@@ -35,7 +43,15 @@ function fundamentalWrapperClass(descriptor, handle) {
35
43
  return descriptor.wrapperClass;
36
44
  }
37
45
  const declaredType = resolveDescriptorType(descriptor);
38
- return resolveWrapperClass(getType(handle, declaredType)) ?? getWrapperClass(declaredType);
46
+ const registered = resolveWrapperClass(getType(handle, declaredType));
47
+ if (registered !== null) {
48
+ return registered;
49
+ }
50
+ const fallback = descriptor.fallbackClass?.();
51
+ if (fallback !== undefined) {
52
+ return fallback;
53
+ }
54
+ return getWrapperClass(declaredType);
39
55
  }
40
56
  function fundamentalFromNative(descriptor, value) {
41
57
  if (value == null) {
@@ -124,7 +140,10 @@ function fromNative(descriptor, value) {
124
140
  }
125
141
  switch (descriptor.kind) {
126
142
  case "object": {
127
- return descriptor.isCallScoped === true ? wrapCallScopedObject(value) : wrapObject(value);
143
+ const fallbackClass = descriptor.fallbackClass;
144
+ return descriptor.isCallScoped === true
145
+ ? wrapCallScopedObject(value, fallbackClass)
146
+ : wrapObject(value, fallbackClass);
128
147
  }
129
148
  case "struct": {
130
149
  return wrapHandle(value, descriptor.wrapperClass);
@@ -146,11 +165,28 @@ function fromNative(descriptor, value) {
146
165
  function collectionToNative(descriptor, value) {
147
166
  return value == null ? null : mapCollection(descriptor, value, toNative);
148
167
  }
149
- function hashTableToNative(descriptor, value) {
168
+ /**
169
+ * Normalises the JavaScript form of a hash table argument into its entry list. A `Map` is the
170
+ * expected form and any other iterable of pairs is accepted; anything else is rejected, a plain
171
+ * object above all, which `Array.from` would quietly flatten into an empty table.
172
+ *
173
+ * @param value The JavaScript value passed for a hash table argument.
174
+ */
175
+ function toHashTableEntries(value) {
150
176
  if (value == null) {
151
177
  return null;
152
178
  }
153
- return [...value].map(([key, val]) => [
179
+ if (typeof value[Symbol.iterator] !== "function") {
180
+ throw new TypeError("A hash table argument must be a Map or an iterable of [key, value] pairs");
181
+ }
182
+ return [...value];
183
+ }
184
+ function hashTableToNative(descriptor, value) {
185
+ const entries = toHashTableEntries(value);
186
+ if (entries === null) {
187
+ return null;
188
+ }
189
+ return entries.map(([key, val]) => [
154
190
  toNative(descriptor.keyDescriptor, key),
155
191
  toNative(descriptor.valueDescriptor, val),
156
192
  ]);
@@ -187,5 +223,5 @@ function toNative(descriptor, value) {
187
223
  }
188
224
  }
189
225
  }
190
- export { fromNative, toNative };
226
+ export { fromNative, toHashTableEntries, toNative };
191
227
  //# sourceMappingURL=native-value.js.map