@gtkx/codegen 1.0.0-rc.2 → 1.0.0-rc.3

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 (113) hide show
  1. package/dist/analysis/descriptor-render.d.ts +2 -0
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +25 -4
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/ts-type.d.ts.map +1 -1
  6. package/dist/analysis/ts-type.js +4 -8
  7. package/dist/analysis/ts-type.js.map +1 -1
  8. package/dist/docs/api-reference.d.ts.map +1 -1
  9. package/dist/docs/api-reference.js +4 -8
  10. package/dist/docs/api-reference.js.map +1 -1
  11. package/dist/docs/element-page.d.ts.map +1 -1
  12. package/dist/docs/element-page.js +5 -4
  13. package/dist/docs/element-page.js.map +1 -1
  14. package/dist/docs/pipeline.d.ts +2 -0
  15. package/dist/docs/pipeline.d.ts.map +1 -1
  16. package/dist/docs/pipeline.js +2 -0
  17. package/dist/docs/pipeline.js.map +1 -1
  18. package/dist/fingerprint.d.ts +1 -0
  19. package/dist/fingerprint.d.ts.map +1 -1
  20. package/dist/fingerprint.js +3 -0
  21. package/dist/fingerprint.js.map +1 -1
  22. package/dist/gi.d.ts +7 -2
  23. package/dist/gi.d.ts.map +1 -1
  24. package/dist/gi.js +4 -2
  25. package/dist/gi.js.map +1 -1
  26. package/dist/gir/libraries.d.ts +4 -3
  27. package/dist/gir/libraries.d.ts.map +1 -1
  28. package/dist/gir/libraries.js +2 -1
  29. package/dist/gir/libraries.js.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/jsx.d.ts +2 -0
  35. package/dist/jsx.d.ts.map +1 -1
  36. package/dist/jsx.js +4 -0
  37. package/dist/jsx.js.map +1 -1
  38. package/dist/react/element-config.d.ts +3 -0
  39. package/dist/react/element-config.d.ts.map +1 -1
  40. package/dist/react/element-config.js +4 -1
  41. package/dist/react/element-config.js.map +1 -1
  42. package/dist/runner.d.ts +2 -0
  43. package/dist/runner.d.ts.map +1 -1
  44. package/dist/runner.js +4 -1
  45. package/dist/runner.js.map +1 -1
  46. package/dist/store/gi/callables.d.ts.map +1 -1
  47. package/dist/store/gi/callables.js +0 -5
  48. package/dist/store/gi/callables.js.map +1 -1
  49. package/dist/store/gi/function.d.ts.map +1 -1
  50. package/dist/store/gi/function.js +0 -2
  51. package/dist/store/gi/function.js.map +1 -1
  52. package/dist/store/gi/method.d.ts.map +1 -1
  53. package/dist/store/gi/method.js +1 -0
  54. package/dist/store/gi/method.js.map +1 -1
  55. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  56. package/dist/store/gi/record-constructor.js +5 -4
  57. package/dist/store/gi/record-constructor.js.map +1 -1
  58. package/dist/store/gi/record-field-accessor.d.ts +2 -1
  59. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  60. package/dist/store/gi/record-field-accessor.js +22 -6
  61. package/dist/store/gi/record-field-accessor.js.map +1 -1
  62. package/dist/store/gi/record.d.ts.map +1 -1
  63. package/dist/store/gi/record.js +0 -7
  64. package/dist/store/gi/record.js.map +1 -1
  65. package/dist/store/gi/value-marshalable.d.ts +15 -0
  66. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  67. package/dist/store/gi/value-marshalable.js +66 -0
  68. package/dist/store/gi/value-marshalable.js.map +1 -0
  69. package/dist/store/jsx/intrinsic-elements.d.ts +1 -2
  70. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  71. package/dist/store/jsx/intrinsic-elements.js +1 -2
  72. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  73. package/dist/store/jsx/omitted-props.d.ts +10 -0
  74. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  75. package/dist/store/jsx/omitted-props.js +22 -0
  76. package/dist/store/jsx/omitted-props.js.map +1 -0
  77. package/dist/store/jsx/pipeline.d.ts +2 -0
  78. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  79. package/dist/store/jsx/pipeline.js +2 -0
  80. package/dist/store/jsx/pipeline.js.map +1 -1
  81. package/dist/store/jsx/props.d.ts +1 -1
  82. package/dist/store/jsx/props.d.ts.map +1 -1
  83. package/dist/store/jsx/props.js +6 -11
  84. package/dist/store/jsx/props.js.map +1 -1
  85. package/package.json +3 -4
  86. package/src/analysis/descriptor-render.ts +35 -3
  87. package/src/analysis/ts-type.ts +4 -11
  88. package/src/docs/api-reference.ts +4 -9
  89. package/src/docs/element-page.ts +5 -9
  90. package/src/docs/pipeline.ts +3 -0
  91. package/src/fingerprint.ts +16 -2
  92. package/src/gi.ts +12 -3
  93. package/src/gir/libraries.ts +5 -4
  94. package/src/index.ts +1 -0
  95. package/src/jsx.ts +5 -0
  96. package/src/react/element-config.ts +8 -2
  97. package/src/runner.ts +8 -1
  98. package/src/store/gi/callables.ts +0 -6
  99. package/src/store/gi/function.ts +0 -2
  100. package/src/store/gi/method.ts +1 -0
  101. package/src/store/gi/record-constructor.ts +9 -4
  102. package/src/store/gi/record-field-accessor.ts +41 -6
  103. package/src/store/gi/record.ts +0 -9
  104. package/src/store/gi/value-marshalable.ts +96 -0
  105. package/src/store/jsx/intrinsic-elements.ts +0 -9
  106. package/src/store/jsx/omitted-props.ts +32 -0
  107. package/src/store/jsx/pipeline.ts +3 -0
  108. package/src/store/jsx/props.ts +6 -18
  109. package/dist/store/gi/class-struct-record.d.ts +0 -10
  110. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  111. package/dist/store/gi/class-struct-record.js +0 -52
  112. package/dist/store/gi/class-struct-record.js.map +0 -1
  113. package/src/store/gi/class-struct-record.ts +0 -72
@@ -0,0 +1,15 @@
1
+ import type { GirRecord } from "../../gir/record.js";
2
+ import type { ModuleContext } from "../../writer/context.js";
3
+ declare const hasOwnCopySemantics: (record: GirRecord) => boolean;
4
+ /**
5
+ * Whether a record can be copied by value. A plain struct is duplicated with a byte-wise `g_memdup2`,
6
+ * which shallow-copies whatever the bytes hold, so only a record whose every field is transitively a
7
+ * scalar can be owned, allocated or written into an inline slot. A pointer, a string, a function
8
+ * pointer or an opaque record makes it borrow-only. Records that carry their own copy/free pair are
9
+ * duplicated through that instead and never reach the byte-wise path.
10
+ */
11
+ declare const isValueMarshalable: (context: ModuleContext, namespaceName: string, record: GirRecord) => boolean;
12
+ /** Whether a record can be allocated and populated from JavaScript. */
13
+ declare const isConstructibleRecord: (context: ModuleContext, namespaceName: string, record: GirRecord) => boolean;
14
+ export { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };
15
+ //# sourceMappingURL=value-marshalable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-marshalable.d.ts","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAS7D,QAAA,MAAM,mBAAmB,GAAI,QAAQ,SAAS,KAAG,OAEqE,CAAC;AAiEvH;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,GAAI,SAAS,aAAa,EAAE,eAAe,MAAM,EAAE,QAAQ,SAAS,KAAG,OACb,CAAC;AAEnF,uEAAuE;AACvE,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,EAAE,eAAe,MAAM,EAAE,QAAQ,SAAS,KAAG,OACb,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,66 @@
1
+ /** Primitive categories that are a pointer at the C level, so copying the bytes aliases the pointee. */
2
+ const POINTER_CATEGORIES = new Set(["string", "pointer"]);
3
+ const recordKey = (namespaceName, record) => `${namespaceName}.${record.name}`;
4
+ const hasOwnCopySemantics = (record) => record.glibGetType !== undefined ||
5
+ ((record.glibRefFunc ?? record.copyFunc) !== undefined && (record.glibUnrefFunc ?? record.freeFunc) !== undefined);
6
+ const isValueSafeArray = (scope, type) => type.fixedSize !== undefined && isValueSafeRef(scope, type.element, type.elementCType);
7
+ const isValueSafeAlias = (scope, type) => isValueSafeRef(scope, type.value.target, type.value.targetCType);
8
+ function isValueSafeType(scope, type) {
9
+ switch (type.kind) {
10
+ case "primitive": {
11
+ return !POINTER_CATEGORIES.has(type.category);
12
+ }
13
+ case "enum": {
14
+ return true;
15
+ }
16
+ case "record": {
17
+ return isValueSafeRecord(scope, type.namespace.name, type.value);
18
+ }
19
+ case "carray": {
20
+ return isValueSafeArray(scope, type);
21
+ }
22
+ case "alias": {
23
+ return isValueSafeAlias(scope, type);
24
+ }
25
+ case "callback":
26
+ case "class":
27
+ case "hashtable":
28
+ case "interface":
29
+ case "list":
30
+ case "varargs": {
31
+ return false;
32
+ }
33
+ }
34
+ }
35
+ function isValueSafeRef(scope, ref, cType) {
36
+ if (ref === undefined || cType?.endsWith("*") === true) {
37
+ return false;
38
+ }
39
+ const type = scope.context.library.typeFor(ref);
40
+ return type === undefined ? false : isValueSafeType(scope, type);
41
+ }
42
+ const isValueSafeField = (scope, field) => field.inlineMembers === undefined
43
+ ? isValueSafeRef(scope, field.type, field.cType)
44
+ : field.inlineMembers.every((member) => isValueSafeField(scope, member));
45
+ function isValueSafeRecord(scope, namespaceName, record) {
46
+ const key = recordKey(namespaceName, record);
47
+ if (scope.seen.has(key) || record.fields.length === 0) {
48
+ return false;
49
+ }
50
+ scope.seen.add(key);
51
+ const isSafe = record.fields.every((field) => isValueSafeField(scope, field));
52
+ scope.seen.delete(key);
53
+ return isSafe;
54
+ }
55
+ /**
56
+ * Whether a record can be copied by value. A plain struct is duplicated with a byte-wise `g_memdup2`,
57
+ * which shallow-copies whatever the bytes hold, so only a record whose every field is transitively a
58
+ * scalar can be owned, allocated or written into an inline slot. A pointer, a string, a function
59
+ * pointer or an opaque record makes it borrow-only. Records that carry their own copy/free pair are
60
+ * duplicated through that instead and never reach the byte-wise path.
61
+ */
62
+ const isValueMarshalable = (context, namespaceName, record) => isValueSafeRecord({ context, seen: new Set() }, namespaceName, record);
63
+ /** Whether a record can be allocated and populated from JavaScript. */
64
+ const isConstructibleRecord = (context, namespaceName, record) => hasOwnCopySemantics(record) || isValueMarshalable(context, namespaceName, record);
65
+ export { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };
66
+ //# sourceMappingURL=value-marshalable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-marshalable.js","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"AASA,wGAAwG;AACxG,MAAM,kBAAkB,GAA2B,IAAI,GAAG,CAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAErG,MAAM,SAAS,GAAG,CAAC,aAAqB,EAAE,MAAiB,EAAU,EAAE,CAAC,GAAG,aAAa,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAE1G,MAAM,mBAAmB,GAAG,CAAC,MAAiB,EAAW,EAAE,CACvD,MAAM,CAAC,WAAW,KAAK,SAAS;IAChC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC;AAEvH,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,IAA0C,EAAW,EAAE,CAC3F,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAE3F,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,IAAyC,EAAW,EAAE,CAC1F,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAErE,SAAS,eAAe,CAAC,KAAY,EAAE,IAAa;IAChD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAY,EAAE,GAAuB,EAAE,KAAyB;IACpF,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,KAAe,EAAW,EAAE,CAChE,KAAK,CAAC,aAAa,KAAK,SAAS;IAC7B,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAChD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjF,SAAS,iBAAiB,CAAC,KAAY,EAAE,aAAqB,EAAE,MAAiB;IAC7E,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,aAAqB,EAAE,MAAiB,EAAW,EAAE,CACrG,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAU,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAEnF,uEAAuE;AACvE,MAAM,qBAAqB,GAAG,CAAC,OAAsB,EAAE,aAAqB,EAAE,MAAiB,EAAW,EAAE,CACxG,mBAAmB,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\n\ntype Scope = { context: ModuleContext; seen: Set<string> };\n\n/** Primitive categories that are a pointer at the C level, so copying the bytes aliases the pointee. */\nconst POINTER_CATEGORIES: Set<PrimitiveCategory> = new Set<PrimitiveCategory>([\"string\", \"pointer\"]);\n\nconst recordKey = (namespaceName: string, record: GirRecord): string => `${namespaceName}.${record.name}`;\n\nconst hasOwnCopySemantics = (record: GirRecord): boolean =>\n record.glibGetType !== undefined ||\n ((record.glibRefFunc ?? record.copyFunc) !== undefined && (record.glibUnrefFunc ?? record.freeFunc) !== undefined);\n\nconst isValueSafeArray = (scope: Scope, type: Extract<GirType, { kind: \"carray\" }>): boolean =>\n type.fixedSize !== undefined && isValueSafeRef(scope, type.element, type.elementCType);\n\nconst isValueSafeAlias = (scope: Scope, type: Extract<GirType, { kind: \"alias\" }>): boolean =>\n isValueSafeRef(scope, type.value.target, type.value.targetCType);\n\nfunction isValueSafeType(scope: Scope, type: GirType): boolean {\n switch (type.kind) {\n case \"primitive\": {\n return !POINTER_CATEGORIES.has(type.category);\n }\n case \"enum\": {\n return true;\n }\n case \"record\": {\n return isValueSafeRecord(scope, type.namespace.name, type.value);\n }\n case \"carray\": {\n return isValueSafeArray(scope, type);\n }\n case \"alias\": {\n return isValueSafeAlias(scope, type);\n }\n case \"callback\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"varargs\": {\n return false;\n }\n }\n}\n\nfunction isValueSafeRef(scope: Scope, ref: TypeId | undefined, cType: string | undefined): boolean {\n if (ref === undefined || cType?.endsWith(\"*\") === true) {\n return false;\n }\n\n const type = scope.context.library.typeFor(ref);\n\n return type === undefined ? false : isValueSafeType(scope, type);\n}\n\nconst isValueSafeField = (scope: Scope, field: GirField): boolean =>\n field.inlineMembers === undefined\n ? isValueSafeRef(scope, field.type, field.cType)\n : field.inlineMembers.every((member) => isValueSafeField(scope, member));\n\nfunction isValueSafeRecord(scope: Scope, namespaceName: string, record: GirRecord): boolean {\n const key = recordKey(namespaceName, record);\n\n if (scope.seen.has(key) || record.fields.length === 0) {\n return false;\n }\n\n scope.seen.add(key);\n const isSafe = record.fields.every((field) => isValueSafeField(scope, field));\n scope.seen.delete(key);\n\n return isSafe;\n}\n\n/**\n * Whether a record can be copied by value. A plain struct is duplicated with a byte-wise `g_memdup2`,\n * which shallow-copies whatever the bytes hold, so only a record whose every field is transitively a\n * scalar can be owned, allocated or written into an inline slot. A pointer, a string, a function\n * pointer or an opaque record makes it borrow-only. Records that carry their own copy/free pair are\n * duplicated through that instead and never reach the byte-wise path.\n */\nconst isValueMarshalable = (context: ModuleContext, namespaceName: string, record: GirRecord): boolean =>\n isValueSafeRecord({ context, seen: new Set<string>() }, namespaceName, record);\n\n/** Whether a record can be allocated and populated from JavaScript. */\nconst isConstructibleRecord = (context: ModuleContext, namespaceName: string, record: GirRecord): boolean =>\n hasOwnCopySemantics(record) || isValueMarshalable(context, namespaceName, record);\n\nexport { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };\n"]}
@@ -20,8 +20,7 @@ declare const hasInterfacePropsBody: (klass: GirClass, hasContainerProps?: HasCo
20
20
  declare const newlyImplementedInterfaces: (klass: GirClass, namespace: GirNamespace, library: Library, hasContainerProps?: HasContainerProps) => ResolvedQualifiedInterface[];
21
21
  declare const collectInterfacePropsClasses: (library: Library, intrinsicElements: GlibNamedClass[], targetNamespaceName: string, hasContainerProps?: HasContainerProps) => ResolvedQualifiedInterface[];
22
22
  declare const ancestorGlibNames: (klass: GirClass, namespace: GirNamespace, library: Library) => string[];
23
- declare const hasExposedMethod: (klass: GirClass, namespace: GirNamespace, library: Library, methodName: string) => boolean;
24
23
  declare const isIntrinsicElementClass: (klass: GirClass, namespace: GirNamespace, library: Library) => boolean;
25
24
  declare const collectIntrinsicElementClasses: (library: Library) => GlibNamedClass[];
26
- export { signalHandlerName, iterateClassesWithGlibName, implementedInterfaces, getGlibName, giNamespaceAlias, hasInterfacePropsBody, newlyImplementedInterfaces, collectInterfacePropsClasses, ancestorGlibNames, hasExposedMethod, isIntrinsicElementClass, collectIntrinsicElementClasses, type GlibNamedClass, type ResolvedQualifiedInterface, type HasContainerProps, };
25
+ export { signalHandlerName, iterateClassesWithGlibName, implementedInterfaces, getGlibName, giNamespaceAlias, hasInterfacePropsBody, newlyImplementedInterfaces, collectInterfacePropsClasses, ancestorGlibNames, isIntrinsicElementClass, collectIntrinsicElementClasses, type GlibNamedClass, type ResolvedQualifiedInterface, type HasContainerProps, };
27
26
  //# sourceMappingURL=intrinsic-elements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsic-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAQ/E,KAAK,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAUnE,QAAA,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAA0D,CAAC;AAc3G,iBAAU,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAIvF;AA0BD,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,KACjB,0BAA0B,EAK5B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,MAAM,GAAG,SAA8C,CAAC;AAC/F,QAAA,MAAM,gBAAgB,GAAI,eAAe,MAAM,KAAG,MAA6B,CAAC;AAGhF,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,oBAAmB,iBAAuC,KAC3D,OAA2G,CAAC;AA+B/G,QAAA,MAAM,0BAA0B,GAC5B,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,EAChB,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAS5B,CAAC;AAoBF,QAAA,MAAM,4BAA4B,GAC9B,SAAS,OAAO,EAChB,mBAAmB,cAAc,EAAE,EACnC,qBAAqB,MAAM,EAC3B,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAc5B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAAM,EAY7F,CAAC;AA0BF,QAAA,MAAM,gBAAgB,GAClB,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,EAChB,YAAY,MAAM,KACnB,OACgH,CAAC;AAEpH,QAAA,MAAM,uBAAuB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,OACF,CAAC;AAE7F,QAAA,MAAM,8BAA8B,GAAI,SAAS,OAAO,KAAG,cAAc,EAgBxE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,GACzB,CAAC"}
1
+ {"version":3,"file":"intrinsic-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAQ/E,KAAK,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAUnE,QAAA,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAA0D,CAAC;AAc3G,iBAAU,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAIvF;AA0BD,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,KACjB,0BAA0B,EAK5B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,MAAM,GAAG,SAA8C,CAAC;AAC/F,QAAA,MAAM,gBAAgB,GAAI,eAAe,MAAM,KAAG,MAA6B,CAAC;AAGhF,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,oBAAmB,iBAAuC,KAC3D,OAA2G,CAAC;AA+B/G,QAAA,MAAM,0BAA0B,GAC5B,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,EAChB,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAS5B,CAAC;AAoBF,QAAA,MAAM,4BAA4B,GAC9B,SAAS,OAAO,EAChB,mBAAmB,cAAc,EAAE,EACnC,qBAAqB,MAAM,EAC3B,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAc5B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAAM,EAY7F,CAAC;AA0BF,QAAA,MAAM,uBAAuB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,OACF,CAAC;AAE7F,QAAA,MAAM,8BAA8B,GAAI,SAAS,OAAO,KAAG,cAAc,EAgBxE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,GACzB,CAAC"}
@@ -109,7 +109,6 @@ const hasMatchingAncestor = (klass, namespace, library, isMatch) => {
109
109
  return false;
110
110
  };
111
111
  const hasMatchingAncestorName = (klass, namespace, library, isMatch) => hasMatchingAncestor(klass, namespace, library, (_klass, glibName) => isMatch(glibName));
112
- const hasExposedMethod = (klass, namespace, library, methodName) => hasMatchingAncestor(klass, namespace, library, (current) => current.methods.some((m) => m.name === methodName));
113
112
  const isIntrinsicElementClass = (klass, namespace, library) => hasMatchingAncestorName(klass, namespace, library, (glibName) => glibName === "GObject");
114
113
  const collectIntrinsicElementClasses = (library) => {
115
114
  const seen = new Set();
@@ -124,5 +123,5 @@ const collectIntrinsicElementClasses = (library) => {
124
123
  }
125
124
  return sortStringsBy(entries, (entry) => entry.glibName);
126
125
  };
127
- export { signalHandlerName, iterateClassesWithGlibName, implementedInterfaces, getGlibName, giNamespaceAlias, hasInterfacePropsBody, newlyImplementedInterfaces, collectInterfacePropsClasses, ancestorGlibNames, hasExposedMethod, isIntrinsicElementClass, collectIntrinsicElementClasses, };
126
+ export { signalHandlerName, iterateClassesWithGlibName, implementedInterfaces, getGlibName, giNamespaceAlias, hasInterfacePropsBody, newlyImplementedInterfaces, collectInterfacePropsClasses, ancestorGlibNames, isIntrinsicElementClass, collectIntrinsicElementClasses, };
128
127
  //# sourceMappingURL=intrinsic-elements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsic-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0BtD,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;AAE3G,QAAQ,CAAC,CAAC,qBAAqB,CAAC,SAAuB;IACnD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,CAAC,0BAA0B,CAAC,OAAgB;IACjD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,KAA0B,EAAE,IAAY,EAAE,aAA2B;IACtG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErE,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5E,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA0B,EAAE,KAAe,EAAE,aAA2B;IACxG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,SAAuB,EACvB,OAAgB,EACY,EAAE;IAC9B,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvF,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/D,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAe,EAAsB,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC;AAC/F,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAU,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC;AAChF,MAAM,mBAAmB,GAAsB,GAAG,EAAE,CAAC,KAAK,CAAC;AAE3D,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,oBAAuC,mBAAmB,EACnD,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/G,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAU,EAAE,CACxE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAElD,MAAM,sBAAsB,GAAG,CAC3B,KAAiC,EACjC,mBAA2B,EAC3B,iBAAoC,EAC7B,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAEpH,MAAM,8BAA8B,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAe,EAAE;IAC/G,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzE,IAAI,cAAc,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACjG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAAG,8BAA8B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5E,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAC/D,CAAC,KAAK,EAAE,EAAE,CACN,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAC5G,CAAC;IAEF,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CAAC,OAAuB,EAAE,SAAkC,EAAQ,EAAE;IAC3G,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpF,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CACjC,OAAgB,EAChB,iBAAmC,EACnC,mBAA2B,EAC3B,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAA4B;QACvC,OAAO;QACP,mBAAmB;QACnB,iBAAiB;QACjB,IAAI,EAAE,IAAI,GAAG,EAAU;QACvB,MAAM,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACtC,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAY,EAAE;IAC/F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAuD,EAChD,EAAE;IACT,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7C,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAsC,EAC/B,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEtG,MAAM,gBAAgB,GAAG,CACrB,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,UAAkB,EACX,EAAE,CACT,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;AAEpH,MAAM,uBAAuB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAW,EAAE,CACpG,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAE7F,MAAM,8BAA8B,GAAG,CAAC,OAAgB,EAAoB,EAAE;IAC1E,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;QAEjD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,GAIjC,CAAC","sourcesContent":["import { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport { ancestorChain } from \"../../gir/ancestry.js\";\n\ntype GlibNamedClass = {\n glibName: string;\n klass: GirClass;\n namespace: GirNamespace;\n};\n\ntype ResolvedQualifiedInterface = { klass: GirClass; namespace: GirNamespace };\n\ntype InterfaceVisitState = {\n library: Library;\n visited: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\ntype HasContainerProps = (glibName: string | undefined) => boolean;\n\ntype InterfacePropsCollector = {\n library: Library;\n targetNamespaceName: string;\n hasContainerProps: HasContainerProps;\n seen: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\nconst signalHandlerName = (signalName: string): string => `on${upperFirst(toCamelIdentifier(signalName))}`;\n\nfunction* classesWithGlibNameIn(namespace: GirNamespace): IterableIterator<GlibNamedClass> {\n for (const klass of namespace.classes) {\n const glibName = getGlibName(klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n yield { glibName, klass, namespace };\n }\n}\n\nfunction* iterateClassesWithGlibName(library: Library): IterableIterator<GlibNamedClass> {\n for (const namespace of library.namespaces.values()) {\n yield* classesWithGlibNameIn(namespace);\n }\n}\n\nfunction collectImplementedInterface(state: InterfaceVisitState, name: string, fromNamespace: GirNamespace): void {\n const resolved = state.library.resolveType(fromNamespace.name, name);\n\n if (resolved?.kind !== \"interface\") {\n return;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (state.visited.has(key)) {\n return;\n }\n\n state.visited.add(key);\n state.result.push({ klass: resolved.value, namespace: resolved.namespace });\n visitImplementedInterfaces(state, resolved.value.prerequisites, resolved.namespace);\n}\n\nfunction visitImplementedInterfaces(state: InterfaceVisitState, names: string[], fromNamespace: GirNamespace): void {\n for (const name of names) {\n collectImplementedInterface(state, name, fromNamespace);\n }\n}\n\nconst implementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n): ResolvedQualifiedInterface[] => {\n const state: InterfaceVisitState = { library, visited: new Set<string>(), result: [] };\n visitImplementedInterfaces(state, klass.implements, namespace);\n\n return state.result;\n};\n\nconst getGlibName = (klass: GirClass): string | undefined => klass.glibTypeName ?? klass.cType;\nconst giNamespaceAlias = (namespaceName: string): string => `${namespaceName}$`;\nconst hasNoContainerProps: HasContainerProps = () => false;\n\nconst hasInterfacePropsBody = (\n klass: GirClass,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): boolean => klass.properties.length > 0 || klass.signals.length > 0 || hasContainerProps(getGlibName(klass));\n\nconst qualifiedInterfaceKey = (iface: ResolvedQualifiedInterface): string =>\n `${iface.namespace.name}.${iface.klass.name}`;\n\nconst isCollectibleInterface = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps,\n): boolean => hasInterfacePropsBody(iface.klass, hasContainerProps) && iface.namespace.name === targetNamespaceName;\n\nconst parentImplementedInterfaceKeys = (klass: GirClass, namespace: GirNamespace, library: Library): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const resolvedParent = library.resolveType(namespace.name, klass.parent);\n\n if (resolvedParent?.kind !== \"class\") {\n return keys;\n }\n\n for (const iface of implementedInterfaces(resolvedParent.value, resolvedParent.namespace, library)) {\n keys.add(qualifiedInterfaceKey(iface));\n }\n\n return keys;\n};\n\nconst newlyImplementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const inherited = parentImplementedInterfaceKeys(klass, namespace, library);\n\n const own = implementedInterfaces(klass, namespace, library).filter(\n (iface) =>\n hasInterfacePropsBody(iface.klass, hasContainerProps) && !inherited.has(qualifiedInterfaceKey(iface)),\n );\n\n return sortStringsBy(own, qualifiedInterfaceKey);\n};\n\nconst collectInterfacePropsFromElement = (element: GlibNamedClass, collector: InterfacePropsCollector): void => {\n const { library, targetNamespaceName, hasContainerProps, seen, result } = collector;\n\n for (const iface of implementedInterfaces(element.klass, element.namespace, library)) {\n const key = qualifiedInterfaceKey(iface);\n\n if (seen.has(key)) {\n continue;\n }\n\n seen.add(key);\n\n if (isCollectibleInterface(iface, targetNamespaceName, hasContainerProps)) {\n result.push(iface);\n }\n }\n};\n\nconst collectInterfacePropsClasses = (\n library: Library,\n intrinsicElements: GlibNamedClass[],\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const collector: InterfacePropsCollector = {\n library,\n targetNamespaceName,\n hasContainerProps,\n seen: new Set<string>(),\n result: [],\n };\n\n for (const element of intrinsicElements) {\n collectInterfacePropsFromElement(element, collector);\n }\n\n return sortStringsBy(collector.result, qualifiedInterfaceKey);\n};\n\nconst ancestorGlibNames = (klass: GirClass, namespace: GirNamespace, library: Library): string[] => {\n const names: string[] = [];\n\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor);\n\n if (glibName !== undefined) {\n names.push(glibName);\n }\n }\n\n return names;\n};\n\nconst hasMatchingAncestor = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (klass: GirClass, glibName: string) => boolean,\n): boolean => {\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor) ?? \"\";\n\n if (isMatch(ancestor, glibName)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasMatchingAncestorName = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (glibName: string) => boolean,\n): boolean => hasMatchingAncestor(klass, namespace, library, (_klass, glibName) => isMatch(glibName));\n\nconst hasExposedMethod = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n methodName: string,\n): boolean =>\n hasMatchingAncestor(klass, namespace, library, (current) => current.methods.some((m) => m.name === methodName));\n\nconst isIntrinsicElementClass = (klass: GirClass, namespace: GirNamespace, library: Library): boolean =>\n hasMatchingAncestorName(klass, namespace, library, (glibName) => glibName === \"GObject\");\n\nconst collectIntrinsicElementClasses = (library: Library): GlibNamedClass[] => {\n const seen: Set<string> = new Set();\n const entries: GlibNamedClass[] = [];\n\n for (const candidate of iterateClassesWithGlibName(library)) {\n const { glibName, klass, namespace } = candidate;\n\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\n entries.push(candidate);\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nexport {\n signalHandlerName,\n iterateClassesWithGlibName,\n implementedInterfaces,\n getGlibName,\n giNamespaceAlias,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n collectInterfacePropsClasses,\n ancestorGlibNames,\n hasExposedMethod,\n isIntrinsicElementClass,\n collectIntrinsicElementClasses,\n type GlibNamedClass,\n type ResolvedQualifiedInterface,\n type HasContainerProps,\n};\n"]}
1
+ {"version":3,"file":"intrinsic-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0BtD,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;AAE3G,QAAQ,CAAC,CAAC,qBAAqB,CAAC,SAAuB;IACnD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,CAAC,0BAA0B,CAAC,OAAgB;IACjD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,KAA0B,EAAE,IAAY,EAAE,aAA2B;IACtG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErE,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5E,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA0B,EAAE,KAAe,EAAE,aAA2B;IACxG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,SAAuB,EACvB,OAAgB,EACY,EAAE;IAC9B,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvF,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/D,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAe,EAAsB,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC;AAC/F,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAU,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC;AAChF,MAAM,mBAAmB,GAAsB,GAAG,EAAE,CAAC,KAAK,CAAC;AAE3D,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,oBAAuC,mBAAmB,EACnD,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/G,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAU,EAAE,CACxE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAElD,MAAM,sBAAsB,GAAG,CAC3B,KAAiC,EACjC,mBAA2B,EAC3B,iBAAoC,EAC7B,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAEpH,MAAM,8BAA8B,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAe,EAAE;IAC/G,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzE,IAAI,cAAc,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACjG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAAG,8BAA8B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5E,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAC/D,CAAC,KAAK,EAAE,EAAE,CACN,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAC5G,CAAC;IAEF,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CAAC,OAAuB,EAAE,SAAkC,EAAQ,EAAE;IAC3G,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpF,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CACjC,OAAgB,EAChB,iBAAmC,EACnC,mBAA2B,EAC3B,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAA4B;QACvC,OAAO;QACP,mBAAmB;QACnB,iBAAiB;QACjB,IAAI,EAAE,IAAI,GAAG,EAAU;QACvB,MAAM,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACtC,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAY,EAAE;IAC/F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAuD,EAChD,EAAE;IACT,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7C,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAsC,EAC/B,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEtG,MAAM,uBAAuB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAW,EAAE,CACpG,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAE7F,MAAM,8BAA8B,GAAG,CAAC,OAAgB,EAAoB,EAAE;IAC1E,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;QAEjD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,8BAA8B,GAIjC,CAAC","sourcesContent":["import { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport { ancestorChain } from \"../../gir/ancestry.js\";\n\ntype GlibNamedClass = {\n glibName: string;\n klass: GirClass;\n namespace: GirNamespace;\n};\n\ntype ResolvedQualifiedInterface = { klass: GirClass; namespace: GirNamespace };\n\ntype InterfaceVisitState = {\n library: Library;\n visited: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\ntype HasContainerProps = (glibName: string | undefined) => boolean;\n\ntype InterfacePropsCollector = {\n library: Library;\n targetNamespaceName: string;\n hasContainerProps: HasContainerProps;\n seen: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\nconst signalHandlerName = (signalName: string): string => `on${upperFirst(toCamelIdentifier(signalName))}`;\n\nfunction* classesWithGlibNameIn(namespace: GirNamespace): IterableIterator<GlibNamedClass> {\n for (const klass of namespace.classes) {\n const glibName = getGlibName(klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n yield { glibName, klass, namespace };\n }\n}\n\nfunction* iterateClassesWithGlibName(library: Library): IterableIterator<GlibNamedClass> {\n for (const namespace of library.namespaces.values()) {\n yield* classesWithGlibNameIn(namespace);\n }\n}\n\nfunction collectImplementedInterface(state: InterfaceVisitState, name: string, fromNamespace: GirNamespace): void {\n const resolved = state.library.resolveType(fromNamespace.name, name);\n\n if (resolved?.kind !== \"interface\") {\n return;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (state.visited.has(key)) {\n return;\n }\n\n state.visited.add(key);\n state.result.push({ klass: resolved.value, namespace: resolved.namespace });\n visitImplementedInterfaces(state, resolved.value.prerequisites, resolved.namespace);\n}\n\nfunction visitImplementedInterfaces(state: InterfaceVisitState, names: string[], fromNamespace: GirNamespace): void {\n for (const name of names) {\n collectImplementedInterface(state, name, fromNamespace);\n }\n}\n\nconst implementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n): ResolvedQualifiedInterface[] => {\n const state: InterfaceVisitState = { library, visited: new Set<string>(), result: [] };\n visitImplementedInterfaces(state, klass.implements, namespace);\n\n return state.result;\n};\n\nconst getGlibName = (klass: GirClass): string | undefined => klass.glibTypeName ?? klass.cType;\nconst giNamespaceAlias = (namespaceName: string): string => `${namespaceName}$`;\nconst hasNoContainerProps: HasContainerProps = () => false;\n\nconst hasInterfacePropsBody = (\n klass: GirClass,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): boolean => klass.properties.length > 0 || klass.signals.length > 0 || hasContainerProps(getGlibName(klass));\n\nconst qualifiedInterfaceKey = (iface: ResolvedQualifiedInterface): string =>\n `${iface.namespace.name}.${iface.klass.name}`;\n\nconst isCollectibleInterface = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps,\n): boolean => hasInterfacePropsBody(iface.klass, hasContainerProps) && iface.namespace.name === targetNamespaceName;\n\nconst parentImplementedInterfaceKeys = (klass: GirClass, namespace: GirNamespace, library: Library): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const resolvedParent = library.resolveType(namespace.name, klass.parent);\n\n if (resolvedParent?.kind !== \"class\") {\n return keys;\n }\n\n for (const iface of implementedInterfaces(resolvedParent.value, resolvedParent.namespace, library)) {\n keys.add(qualifiedInterfaceKey(iface));\n }\n\n return keys;\n};\n\nconst newlyImplementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const inherited = parentImplementedInterfaceKeys(klass, namespace, library);\n\n const own = implementedInterfaces(klass, namespace, library).filter(\n (iface) =>\n hasInterfacePropsBody(iface.klass, hasContainerProps) && !inherited.has(qualifiedInterfaceKey(iface)),\n );\n\n return sortStringsBy(own, qualifiedInterfaceKey);\n};\n\nconst collectInterfacePropsFromElement = (element: GlibNamedClass, collector: InterfacePropsCollector): void => {\n const { library, targetNamespaceName, hasContainerProps, seen, result } = collector;\n\n for (const iface of implementedInterfaces(element.klass, element.namespace, library)) {\n const key = qualifiedInterfaceKey(iface);\n\n if (seen.has(key)) {\n continue;\n }\n\n seen.add(key);\n\n if (isCollectibleInterface(iface, targetNamespaceName, hasContainerProps)) {\n result.push(iface);\n }\n }\n};\n\nconst collectInterfacePropsClasses = (\n library: Library,\n intrinsicElements: GlibNamedClass[],\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const collector: InterfacePropsCollector = {\n library,\n targetNamespaceName,\n hasContainerProps,\n seen: new Set<string>(),\n result: [],\n };\n\n for (const element of intrinsicElements) {\n collectInterfacePropsFromElement(element, collector);\n }\n\n return sortStringsBy(collector.result, qualifiedInterfaceKey);\n};\n\nconst ancestorGlibNames = (klass: GirClass, namespace: GirNamespace, library: Library): string[] => {\n const names: string[] = [];\n\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor);\n\n if (glibName !== undefined) {\n names.push(glibName);\n }\n }\n\n return names;\n};\n\nconst hasMatchingAncestor = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (klass: GirClass, glibName: string) => boolean,\n): boolean => {\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor) ?? \"\";\n\n if (isMatch(ancestor, glibName)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasMatchingAncestorName = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (glibName: string) => boolean,\n): boolean => hasMatchingAncestor(klass, namespace, library, (_klass, glibName) => isMatch(glibName));\n\nconst isIntrinsicElementClass = (klass: GirClass, namespace: GirNamespace, library: Library): boolean =>\n hasMatchingAncestorName(klass, namespace, library, (glibName) => glibName === \"GObject\");\n\nconst collectIntrinsicElementClasses = (library: Library): GlibNamedClass[] => {\n const seen: Set<string> = new Set();\n const entries: GlibNamedClass[] = [];\n\n for (const candidate of iterateClassesWithGlibName(library)) {\n const { glibName, klass, namespace } = candidate;\n\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\n entries.push(candidate);\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nexport {\n signalHandlerName,\n iterateClassesWithGlibName,\n implementedInterfaces,\n getGlibName,\n giNamespaceAlias,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n collectInterfacePropsClasses,\n ancestorGlibNames,\n isIntrinsicElementClass,\n collectIntrinsicElementClasses,\n type GlibNamedClass,\n type ResolvedQualifiedInterface,\n type HasContainerProps,\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /** Props left out of the generated element props, keyed by GLib type name. */
2
+ type OmittedProps = Record<string, string[]>;
3
+ /** Installs the props each element omits (GLib type name → prop names); set once per run. */
4
+ declare const setOmittedProps: (props: OmittedProps) => void;
5
+ /** Whether the element config declares this prop omitted for the type that declares the property. */
6
+ declare const isOmittedProp: (glibName: string | undefined, jsName: string) => boolean;
7
+ /** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */
8
+ declare const mergeOmitProps: (...maps: OmittedProps[]) => OmittedProps;
9
+ export { setOmittedProps, isOmittedProp, mergeOmitProps, type OmittedProps };
10
+ //# sourceMappingURL=omitted-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omitted-props.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAI7C,6FAA6F;AAC7F,QAAA,MAAM,eAAe,GAAI,OAAO,YAAY,KAAG,IAM9C,CAAC;AAEF,qGAAqG;AACrG,QAAA,MAAM,aAAa,GAAI,UAAU,MAAM,GAAG,SAAS,EAAE,QAAQ,MAAM,KAAG,OACQ,CAAC;AAE/E,sGAAsG;AACtG,QAAA,MAAM,cAAc,GAAI,GAAG,MAAM,YAAY,EAAE,KAAG,YAUjD,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ const omittedProps = new Map();
2
+ /** Installs the props each element omits (GLib type name → prop names); set once per run. */
3
+ const setOmittedProps = (props) => {
4
+ omittedProps.clear();
5
+ for (const [glibName, names] of Object.entries(props)) {
6
+ omittedProps.set(glibName, new Set(names));
7
+ }
8
+ };
9
+ /** Whether the element config declares this prop omitted for the type that declares the property. */
10
+ const isOmittedProp = (glibName, jsName) => glibName !== undefined && omittedProps.get(glibName)?.has(jsName) === true;
11
+ /** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */
12
+ const mergeOmitProps = (...maps) => {
13
+ const merged = {};
14
+ for (const map of maps) {
15
+ for (const [glibName, names] of Object.entries(map)) {
16
+ merged[glibName] = [...(merged[glibName] ?? []), ...names];
17
+ }
18
+ }
19
+ return merged;
20
+ };
21
+ export { setOmittedProps, isOmittedProp, mergeOmitProps };
22
+ //# sourceMappingURL=omitted-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omitted-props.js","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEzD,6FAA6F;AAC7F,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;IAClD,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC;AAEF,qGAAqG;AACrG,MAAM,aAAa,GAAG,CAAC,QAA4B,EAAE,MAAc,EAAW,EAAE,CAC5E,QAAQ,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAE/E,sGAAsG;AACtG,MAAM,cAAc,GAAG,CAAC,GAAG,IAAoB,EAAgB,EAAE;IAC7D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAqB,CAAC","sourcesContent":["/** Props left out of the generated element props, keyed by GLib type name. */\ntype OmittedProps = Record<string, string[]>;\n\nconst omittedProps: Map<string, Set<string>> = new Map();\n\n/** Installs the props each element omits (GLib type name → prop names); set once per run. */\nconst setOmittedProps = (props: OmittedProps): void => {\n omittedProps.clear();\n\n for (const [glibName, names] of Object.entries(props)) {\n omittedProps.set(glibName, new Set(names));\n }\n};\n\n/** Whether the element config declares this prop omitted for the type that declares the property. */\nconst isOmittedProp = (glibName: string | undefined, jsName: string): boolean =>\n glibName !== undefined && omittedProps.get(glibName)?.has(jsName) === true;\n\n/** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */\nconst mergeOmitProps = (...maps: OmittedProps[]): OmittedProps => {\n const merged: OmittedProps = {};\n\n for (const map of maps) {\n for (const [glibName, names] of Object.entries(map)) {\n merged[glibName] = [...(merged[glibName] ?? []), ...names];\n }\n }\n\n return merged;\n};\n\nexport { setOmittedProps, isOmittedProp, mergeOmitProps, type OmittedProps };\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { Library } from "../../gir/library.js";
2
2
  import { type ElementComponentOverrides } from "./element-components.js";
3
3
  import { type ElementProps } from "./element-prop-imports.js";
4
+ import { type OmittedProps } from "./omitted-props.js";
4
5
  type JsxNamespaceFile = {
5
6
  directory: string;
6
7
  source: string;
@@ -14,6 +15,7 @@ type JsxGenerationOptions = {
14
15
  reactSubexports?: string[];
15
16
  components?: ElementComponentOverrides;
16
17
  props?: ElementProps;
18
+ omitProps?: OmittedProps;
17
19
  lazyElements?: string[];
18
20
  };
19
21
  declare const generateJsxFiles: (library: Library, options?: JsxGenerationOptions) => JsxFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,yBAAyB,EAAoC,MAAM,yBAAyB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,2BAA2B,CAAC;AAO/E,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACZ,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAmBF,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,EAAE,UAAS,oBAAyB,KAAG,QAmBhF,CAAC;AA8EF,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,yBAAyB,EAAoC,MAAM,yBAAyB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,2BAA2B,CAAC;AAM/E,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAExE,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACZ,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAmBF,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,EAAE,UAAS,oBAAyB,KAAG,QAoBhF,CAAC;AA8EF,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
@@ -8,8 +8,10 @@ import { buildGirIndex } from "./gir-index.js";
8
8
  import { collectIntrinsicElementClasses } from "./intrinsic-elements.js";
9
9
  import { generateJsxSection } from "./jsx.js";
10
10
  import { generateMetadata } from "./metadata.js";
11
+ import { setOmittedProps } from "./omitted-props.js";
11
12
  const generateJsxFiles = (library, options = {}) => {
12
13
  setElementProps(options.props ?? {});
14
+ setOmittedProps(options.omitProps ?? {});
13
15
  const intrinsicElements = collectIntrinsicElementClasses(library);
14
16
  const intrinsicElementByGlibName = new Map(intrinsicElements.map((entry) => [entry.glibName, entry]));
15
17
  const girIndex = buildGirIndex(library);
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/store/jsx/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport type { Library } from \"../../gir/library.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../../gir/namespace.js\";\nimport { ImportsBuilder } from \"../../writer/imports.js\";\nimport { type ElementComponentOverrides, generateElementComponentsSection } from \"./element-components.js\";\nimport { type ElementProps, setElementProps } from \"./element-prop-imports.js\";\nimport { type LazyElementSpec, lazyElementSpecs } from \"./element-prop-types.js\";\nimport { buildGirIndex } from \"./gir-index.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { generateJsxSection } from \"./jsx.js\";\nimport { generateMetadata } from \"./metadata.js\";\n\ntype JsxNamespaceFile = {\n directory: string;\n source: string;\n};\n\ntype JsxFiles = {\n namespaces: JsxNamespaceFile[];\n metadata: string;\n intrinsicElementCount: number;\n};\n\ntype JsxGenerationOptions = {\n reactSubexports?: string[];\n components?: ElementComponentOverrides;\n props?: ElementProps;\n lazyElements?: string[];\n};\n\ntype NamespaceFilesOptions = {\n library: Library;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n lazyByNamespace: Map<string, LazyElementSpec[]>;\n reactSubexports: string[];\n components: ElementComponentOverrides;\n};\n\ntype JsxNamespaceContext = {\n lazyElements: LazyElementSpec[];\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n reactSubexports: string[];\n components: ElementComponentOverrides;\n};\n\nconst generateJsxFiles = (library: Library, options: JsxGenerationOptions = {}): JsxFiles => {\n setElementProps(options.props ?? {});\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const intrinsicElementByGlibName = new Map(intrinsicElements.map((entry) => [entry.glibName, entry]));\n const girIndex = buildGirIndex(library);\n const lazyByNamespace = lazyElementSpecs(girIndex, options.lazyElements ?? []);\n\n const { namespaces, intrinsicElementCount } = generateNamespaceFiles({\n library,\n intrinsicElements,\n intrinsicElementByGlibName,\n lazyByNamespace,\n reactSubexports: options.reactSubexports ?? [],\n components: options.components ?? {},\n });\n\n const metadata = generateMetadata(library);\n\n return { namespaces, metadata, intrinsicElementCount };\n};\n\nconst orderedIntrinsicNamespaces = (intrinsicElements: GlibNamedClass[]): GirNamespace[] => {\n const namespacesWithIntrinsicElements: Map<string, GirNamespace> = new Map();\n\n for (const entry of intrinsicElements) {\n namespacesWithIntrinsicElements.set(entry.namespace.name, entry.namespace);\n }\n\n return sortStringsBy(namespacesWithIntrinsicElements.values(), (entry) => entry.name);\n};\n\nconst generateNamespaceFiles = (\n options: NamespaceFilesOptions,\n): { namespaces: JsxNamespaceFile[]; intrinsicElementCount: number } => {\n const { library, intrinsicElements, intrinsicElementByGlibName, lazyByNamespace, reactSubexports, components } =\n options;\n\n const namespaces: JsxNamespaceFile[] = [];\n let intrinsicElementCount = 0;\n\n for (const namespace of orderedIntrinsicNamespaces(intrinsicElements)) {\n const { source, count } = generateJsxNamespace(namespace, library, {\n lazyElements: lazyByNamespace.get(namespace.name) ?? [],\n intrinsicElements,\n intrinsicElementByGlibName,\n reactSubexports,\n components,\n });\n\n namespaces.push({ directory: namespaceDirectory(namespace), source });\n intrinsicElementCount += count;\n }\n\n return { namespaces, intrinsicElementCount };\n};\n\nconst generateJsxNamespace = (\n targetNamespace: GirNamespace,\n library: Library,\n context: JsxNamespaceContext,\n): { source: string; count: number } => {\n const { lazyElements, intrinsicElements, intrinsicElementByGlibName, reactSubexports, components } = context;\n const targetDirectory = namespaceDirectory(targetNamespace);\n const imports = new ImportsBuilder();\n imports.addSideEffect(`@gtkx/gi/${targetDirectory}`);\n\n if (reactSubexports.includes(targetDirectory)) {\n imports.addSideEffect(`@gtkx/react/${targetDirectory}`);\n }\n\n const elementComponents = generateElementComponentsSection(targetNamespace, library, {\n imports,\n lazyElements,\n intrinsicElements,\n components,\n });\n\n const excludeNames: Set<string> = new Set(elementComponents.exportedNames);\n\n const { source: jsxSection, intrinsicCount } = generateJsxSection(targetNamespace, library, {\n excludeNames,\n imports,\n intrinsicElements,\n intrinsicElementByGlibName,\n });\n\n const body = [imports.toSource().trimEnd(), \"\", jsxSection];\n\n if (elementComponents.source.length > 0) {\n body.push(\"\", elementComponents.source);\n }\n\n const count = elementComponents.exportedNames.size + intrinsicCount;\n\n return { source: `${body.join(\"\\n\")}\\n`, count };\n};\n\nexport { generateJsxFiles, type JsxNamespaceFile, type JsxGenerationOptions };\n"]}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/store/jsx/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport type { Library } from \"../../gir/library.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../../gir/namespace.js\";\nimport { ImportsBuilder } from \"../../writer/imports.js\";\nimport { type ElementComponentOverrides, generateElementComponentsSection } from \"./element-components.js\";\nimport { type ElementProps, setElementProps } from \"./element-prop-imports.js\";\nimport { type LazyElementSpec, lazyElementSpecs } from \"./element-prop-types.js\";\nimport { buildGirIndex } from \"./gir-index.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { generateJsxSection } from \"./jsx.js\";\nimport { generateMetadata } from \"./metadata.js\";\nimport { type OmittedProps, setOmittedProps } from \"./omitted-props.js\";\n\ntype JsxNamespaceFile = {\n directory: string;\n source: string;\n};\n\ntype JsxFiles = {\n namespaces: JsxNamespaceFile[];\n metadata: string;\n intrinsicElementCount: number;\n};\n\ntype JsxGenerationOptions = {\n reactSubexports?: string[];\n components?: ElementComponentOverrides;\n props?: ElementProps;\n omitProps?: OmittedProps;\n lazyElements?: string[];\n};\n\ntype NamespaceFilesOptions = {\n library: Library;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n lazyByNamespace: Map<string, LazyElementSpec[]>;\n reactSubexports: string[];\n components: ElementComponentOverrides;\n};\n\ntype JsxNamespaceContext = {\n lazyElements: LazyElementSpec[];\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n reactSubexports: string[];\n components: ElementComponentOverrides;\n};\n\nconst generateJsxFiles = (library: Library, options: JsxGenerationOptions = {}): JsxFiles => {\n setElementProps(options.props ?? {});\n setOmittedProps(options.omitProps ?? {});\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const intrinsicElementByGlibName = new Map(intrinsicElements.map((entry) => [entry.glibName, entry]));\n const girIndex = buildGirIndex(library);\n const lazyByNamespace = lazyElementSpecs(girIndex, options.lazyElements ?? []);\n\n const { namespaces, intrinsicElementCount } = generateNamespaceFiles({\n library,\n intrinsicElements,\n intrinsicElementByGlibName,\n lazyByNamespace,\n reactSubexports: options.reactSubexports ?? [],\n components: options.components ?? {},\n });\n\n const metadata = generateMetadata(library);\n\n return { namespaces, metadata, intrinsicElementCount };\n};\n\nconst orderedIntrinsicNamespaces = (intrinsicElements: GlibNamedClass[]): GirNamespace[] => {\n const namespacesWithIntrinsicElements: Map<string, GirNamespace> = new Map();\n\n for (const entry of intrinsicElements) {\n namespacesWithIntrinsicElements.set(entry.namespace.name, entry.namespace);\n }\n\n return sortStringsBy(namespacesWithIntrinsicElements.values(), (entry) => entry.name);\n};\n\nconst generateNamespaceFiles = (\n options: NamespaceFilesOptions,\n): { namespaces: JsxNamespaceFile[]; intrinsicElementCount: number } => {\n const { library, intrinsicElements, intrinsicElementByGlibName, lazyByNamespace, reactSubexports, components } =\n options;\n\n const namespaces: JsxNamespaceFile[] = [];\n let intrinsicElementCount = 0;\n\n for (const namespace of orderedIntrinsicNamespaces(intrinsicElements)) {\n const { source, count } = generateJsxNamespace(namespace, library, {\n lazyElements: lazyByNamespace.get(namespace.name) ?? [],\n intrinsicElements,\n intrinsicElementByGlibName,\n reactSubexports,\n components,\n });\n\n namespaces.push({ directory: namespaceDirectory(namespace), source });\n intrinsicElementCount += count;\n }\n\n return { namespaces, intrinsicElementCount };\n};\n\nconst generateJsxNamespace = (\n targetNamespace: GirNamespace,\n library: Library,\n context: JsxNamespaceContext,\n): { source: string; count: number } => {\n const { lazyElements, intrinsicElements, intrinsicElementByGlibName, reactSubexports, components } = context;\n const targetDirectory = namespaceDirectory(targetNamespace);\n const imports = new ImportsBuilder();\n imports.addSideEffect(`@gtkx/gi/${targetDirectory}`);\n\n if (reactSubexports.includes(targetDirectory)) {\n imports.addSideEffect(`@gtkx/react/${targetDirectory}`);\n }\n\n const elementComponents = generateElementComponentsSection(targetNamespace, library, {\n imports,\n lazyElements,\n intrinsicElements,\n components,\n });\n\n const excludeNames: Set<string> = new Set(elementComponents.exportedNames);\n\n const { source: jsxSection, intrinsicCount } = generateJsxSection(targetNamespace, library, {\n excludeNames,\n imports,\n intrinsicElements,\n intrinsicElementByGlibName,\n });\n\n const body = [imports.toSource().trimEnd(), \"\", jsxSection];\n\n if (elementComponents.source.length > 0) {\n body.push(\"\", elementComponents.source);\n }\n\n const count = elementComponents.exportedNames.size + intrinsicCount;\n\n return { source: `${body.join(\"\\n\")}\\n`, count };\n};\n\nexport { generateJsxFiles, type JsxNamespaceFile, type JsxGenerationOptions };\n"]}
@@ -27,7 +27,7 @@ type InterfacePropsOptions = {
27
27
  };
28
28
  declare const buildElementPropsEntries: (options: IntrinsicElementPropsOptions) => IntrinsicElementPropsEntries;
29
29
  declare const buildInterfacePropsEntries: (options: InterfacePropsOptions) => IntrinsicElementPropsEntries;
30
- declare const isObjectProp: (owner: IntrinsicElementScope, property: GirProperty, jsName: string) => boolean;
30
+ declare const isObjectProp: (library: Library, property: GirProperty) => boolean;
31
31
  declare const reactTarget: (context: PropTypeRenderContext) => TsTypeTarget;
32
32
  export { buildElementPropsEntries, buildInterfacePropsEntries, isObjectProp, reactTarget };
33
33
  //# sourceMappingURL=props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AASlF,KAAK,4BAA4B,GAAG;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,4BAA4B,GAAG,qBAAqB,GAAG;IACxD,0BAA0B,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;CACjE,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAwBF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAkFF,QAAA,MAAM,wBAAwB,GAAI,SAAS,4BAA4B,KAAG,4BAczE,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,SAAS,qBAAqB,KAAG,4BAapE,CAAC;AAyCF,QAAA,MAAM,YAAY,GAAI,OAAO,qBAAqB,EAAE,UAAU,WAAW,EAAE,QAAQ,MAAM,KAAG,OAc3F,CAAC;AAqBF,QAAA,MAAM,WAAW,GAAI,SAAS,qBAAqB,KAAG,YAajD,CAAC;AAQN,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAKlF,KAAK,4BAA4B,GAAG;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,4BAA4B,GAAG,qBAAqB,GAAG;IACxD,0BAA0B,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;CACjE,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAwBF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAkFF,QAAA,MAAM,wBAAwB,GAAI,SAAS,4BAA4B,KAAG,4BAczE,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,SAAS,qBAAqB,KAAG,4BAapE,CAAC;AAyCF,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,UAAU,WAAW,KAAG,OAM/D,CAAC;AAqBF,QAAA,MAAM,WAAW,GAAI,SAAS,qBAAqB,KAAG,YAajD,CAAC;AAQN,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -4,11 +4,12 @@ import { renderHandlerParameters, renderHandlerResultType } from "../../analysis
4
4
  import { recordTypeTarget, renderBaseType } from "../../analysis/ts-type.js";
5
5
  import { isConstructableProperty } from "../../gir/property.js";
6
6
  import { renderJsDoc } from "../../writer/doc.js";
7
- import { giNamespaceAlias, hasExposedMethod, isIntrinsicElementClass, signalHandlerName, } from "./intrinsic-elements.js";
7
+ import { getGlibName, giNamespaceAlias, isIntrinsicElementClass, signalHandlerName } from "./intrinsic-elements.js";
8
+ import { isOmittedProp } from "./omitted-props.js";
8
9
  const appendPropertyLines = (state, property, jsName) => {
9
10
  const tsType = renderReactPropType(state.types, property.type, false);
10
11
  const doc = renderJsDoc(property.doc);
11
- if (isObjectProp(state.owner, property, jsName)) {
12
+ if (isObjectProp(state.owner.library, property)) {
12
13
  state.propLines.push(`${doc}${jsName}?: ${tsType} | ReactElement | null | undefined;`);
13
14
  state.objectPropNames.push(jsName);
14
15
  return;
@@ -25,7 +26,7 @@ const acceptCollectorProperty = (state, property) => {
25
26
  return;
26
27
  }
27
28
  const jsName = toCamelIdentifier(property.name);
28
- if (state.seen.has(jsName)) {
29
+ if (state.seen.has(jsName) || isOmittedProp(getGlibName(state.owner.klass), jsName)) {
29
30
  return;
30
31
  }
31
32
  state.seen.add(jsName);
@@ -116,17 +117,11 @@ const isGObjectType = (library, ref) => {
116
117
  }
117
118
  return isIntrinsicElementClass(resolved.value, resolved.namespace, library);
118
119
  };
119
- const isObjectProp = (owner, property, jsName) => {
120
+ const isObjectProp = (library, property) => {
120
121
  if (!property.writable || property.constructOnly) {
121
122
  return false;
122
123
  }
123
- if (!isGObjectType(owner.library, property.type)) {
124
- return false;
125
- }
126
- if (jsName === "child" && hasExposedMethod(owner.klass, owner.namespace, owner.library, "set_child")) {
127
- return false;
128
- }
129
- return true;
124
+ return isGObjectType(library, property.type);
130
125
  };
131
126
  const renderSignalHandler = (options) => {
132
127
  const { types, signal, selfType } = options;
@@ -1 +1 @@
1
- {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../src/store/jsx/props.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { GirCallable } from \"../../gir/parameter.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport { forEachAncestor } from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { recordTypeTarget, renderBaseType, type TsTypeTarget } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport {\n giNamespaceAlias,\n hasExposedMethod,\n isIntrinsicElementClass,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementPropsEntries = {\n propLines: string[];\n imports: Map<string, string>;\n objectPropNames: string[];\n};\n\ntype IntrinsicElementScope = {\n library: Library;\n klass: GirClass;\n namespace: GirNamespace;\n};\n\ntype IntrinsicElementPropsOptions = IntrinsicElementScope & {\n isIntrinsicElementAncestor?: (candidate: GirClass) => boolean;\n};\n\ntype PropTypeRenderContext = {\n library: Library;\n imports: Map<string, string>;\n};\n\ntype SignalRenderOptions = {\n types: PropTypeRenderContext;\n signal: GirCallable;\n selfType: string;\n};\n\ntype PropEntryCollector = {\n propLines: string[];\n imports: Map<string, string>;\n objectPropNames: string[];\n acceptProperty: (property: GirProperty) => void;\n acceptSignal: (signal: GirCallable) => void;\n};\n\ntype PropCollectorState = {\n owner: IntrinsicElementScope;\n types: PropTypeRenderContext;\n propLines: string[];\n objectPropNames: string[];\n seen: Set<string>;\n};\n\ntype InterfacePropsOptions = {\n library: Library;\n iface: GirClass;\n namespace: GirNamespace;\n};\n\ntype IntrinsicElementMemberWalk = IntrinsicElementScope & {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n acceptProperty: (property: GirProperty) => void;\n acceptSignal: (signal: GirCallable) => void;\n};\n\nconst appendPropertyLines = (state: PropCollectorState, property: GirProperty, jsName: string): void => {\n const tsType = renderReactPropType(state.types, property.type, false);\n const doc = renderJsDoc(property.doc);\n\n if (isObjectProp(state.owner, property, jsName)) {\n state.propLines.push(`${doc}${jsName}?: ${tsType} | ReactElement | null | undefined;`);\n state.objectPropNames.push(jsName);\n\n return;\n }\n\n const isSettable = isConstructableProperty(property);\n\n if (isSettable) {\n state.propLines.push(`${doc}${jsName}?: ${tsType} | null | undefined;`);\n }\n\n const handlerType = `((value: ${tsType} | null, self: Self) => void) | null | undefined`;\n state.propLines.push(`${isSettable ? \"\" : doc}onNotify${upperFirst(jsName)}?: ${handlerType};`);\n};\n\nconst acceptCollectorProperty = (state: PropCollectorState, property: GirProperty): void => {\n if (!property.introspectable) {\n return;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (state.seen.has(jsName)) {\n return;\n }\n\n state.seen.add(jsName);\n appendPropertyLines(state, property, jsName);\n};\n\nconst acceptCollectorSignal = (state: PropCollectorState, signal: GirCallable): void => {\n const handlerName = signalHandlerName(signal.name);\n\n if (state.seen.has(handlerName)) {\n return;\n }\n\n state.seen.add(handlerName);\n const signature = renderSignalHandler({ types: state.types, signal, selfType: \"Self\" });\n state.propLines.push(`${renderJsDoc(signal.doc)}${handlerName}?: (${signature}) | undefined;`);\n};\n\nconst createPropEntryCollector = (owner: IntrinsicElementScope): PropEntryCollector => {\n const { library } = owner;\n const imports: Map<string, string> = new Map();\n const types: PropTypeRenderContext = { library, imports };\n\n const state: PropCollectorState = {\n owner,\n types,\n propLines: [],\n objectPropNames: [],\n seen: new Set<string>(),\n };\n\n return {\n propLines: state.propLines,\n imports,\n objectPropNames: state.objectPropNames,\n acceptProperty: (property) => {\n acceptCollectorProperty(state, property);\n },\n acceptSignal: (signal) => {\n acceptCollectorSignal(state, signal);\n },\n };\n};\n\nconst buildElementPropsEntries = (options: IntrinsicElementPropsOptions): IntrinsicElementPropsEntries => {\n const { library, klass, namespace, isIntrinsicElementAncestor = () => false } = options;\n const collector = createPropEntryCollector({ library, klass, namespace });\n\n walkIntrinsicElementMembers({\n library,\n klass,\n namespace,\n isIntrinsicElementAncestor,\n acceptProperty: collector.acceptProperty,\n acceptSignal: collector.acceptSignal,\n });\n\n return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };\n};\n\nconst buildInterfacePropsEntries = (options: InterfacePropsOptions): IntrinsicElementPropsEntries => {\n const { library, iface, namespace } = options;\n const collector = createPropEntryCollector({ library, klass: iface, namespace });\n\n for (const property of iface.properties) {\n collector.acceptProperty(property);\n }\n\n for (const signal of iface.signals) {\n collector.acceptSignal(signal);\n }\n\n return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };\n};\n\nconst walkIntrinsicElementMembers = (walk: IntrinsicElementMemberWalk): void => {\n const { library, klass, namespace, isIntrinsicElementAncestor, acceptProperty, acceptSignal } = walk;\n\n const visitMembers = (memberClass: GirClass): void => {\n for (const property of memberClass.properties) {\n acceptProperty(property);\n }\n\n for (const signal of memberClass.signals) {\n acceptSignal(signal);\n }\n };\n\n const ancestry = { library, namespace };\n visitMembers(klass);\n\n forEachAncestor(ancestry, klass, (ancestor) => {\n visitMembers(ancestor.klass);\n }, isIntrinsicElementAncestor);\n};\n\nconst isGObjectType = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved?.kind === \"interface\") {\n return true;\n }\n\n if (resolved?.kind !== \"class\") {\n return false;\n }\n\n return isIntrinsicElementClass(resolved.value, resolved.namespace, library);\n};\n\nconst isObjectProp = (owner: IntrinsicElementScope, property: GirProperty, jsName: string): boolean => {\n if (!property.writable || property.constructOnly) {\n return false;\n }\n\n if (!isGObjectType(owner.library, property.type)) {\n return false;\n }\n\n if (jsName === \"child\" && hasExposedMethod(owner.klass, owner.namespace, owner.library, \"set_child\")) {\n return false;\n }\n\n return true;\n};\n\nconst renderSignalHandler = (options: SignalRenderOptions): string => {\n const { types, signal, selfType } = options;\n\n const params = [\n ...renderHandlerParameters(signal.parameters, (ref, nullable) => renderReactPropType(types, ref, nullable)),\n `self: ${selfType}`,\n ];\n\n const result = renderHandlerResultType({\n library: types.library,\n signal,\n renderType: (ref, nullable) => renderReactPropType(types, ref, nullable),\n includeCallerAllocated: false,\n optOut: true,\n });\n\n return `(${params.join(\", \")}) => ${result}`;\n};\n\nconst reactTarget = (context: PropTypeRenderContext): TsTypeTarget =>\n recordTypeTarget(\n context.library,\n (name) => {\n context.imports.set(name.namespaceName, giNamespaceAlias(name.namespaceName));\n\n return `${giNamespaceAlias(name.namespaceName)}.${name.typeName}`;\n },\n () => {\n context.imports.set(\"GObject\", giNamespaceAlias(\"GObject\"));\n\n return `${giNamespaceAlias(\"GObject\")}.Type`;\n },\n );\n\nconst renderReactPropType = (context: PropTypeRenderContext, ref: TypeId | undefined, isNullable: boolean): string => {\n const base = renderBaseType(context.library, reactTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nexport { buildElementPropsEntries, buildInterfacePropsEntries, isObjectProp, reactTarget };\n"]}
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../src/store/jsx/props.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { GirCallable } from \"../../gir/parameter.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport { forEachAncestor } from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { recordTypeTarget, renderBaseType, type TsTypeTarget } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { getGlibName, giNamespaceAlias, isIntrinsicElementClass, signalHandlerName } from \"./intrinsic-elements.js\";\nimport { isOmittedProp } from \"./omitted-props.js\";\n\ntype IntrinsicElementPropsEntries = {\n propLines: string[];\n imports: Map<string, string>;\n objectPropNames: string[];\n};\n\ntype IntrinsicElementScope = {\n library: Library;\n klass: GirClass;\n namespace: GirNamespace;\n};\n\ntype IntrinsicElementPropsOptions = IntrinsicElementScope & {\n isIntrinsicElementAncestor?: (candidate: GirClass) => boolean;\n};\n\ntype PropTypeRenderContext = {\n library: Library;\n imports: Map<string, string>;\n};\n\ntype SignalRenderOptions = {\n types: PropTypeRenderContext;\n signal: GirCallable;\n selfType: string;\n};\n\ntype PropEntryCollector = {\n propLines: string[];\n imports: Map<string, string>;\n objectPropNames: string[];\n acceptProperty: (property: GirProperty) => void;\n acceptSignal: (signal: GirCallable) => void;\n};\n\ntype PropCollectorState = {\n owner: IntrinsicElementScope;\n types: PropTypeRenderContext;\n propLines: string[];\n objectPropNames: string[];\n seen: Set<string>;\n};\n\ntype InterfacePropsOptions = {\n library: Library;\n iface: GirClass;\n namespace: GirNamespace;\n};\n\ntype IntrinsicElementMemberWalk = IntrinsicElementScope & {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n acceptProperty: (property: GirProperty) => void;\n acceptSignal: (signal: GirCallable) => void;\n};\n\nconst appendPropertyLines = (state: PropCollectorState, property: GirProperty, jsName: string): void => {\n const tsType = renderReactPropType(state.types, property.type, false);\n const doc = renderJsDoc(property.doc);\n\n if (isObjectProp(state.owner.library, property)) {\n state.propLines.push(`${doc}${jsName}?: ${tsType} | ReactElement | null | undefined;`);\n state.objectPropNames.push(jsName);\n\n return;\n }\n\n const isSettable = isConstructableProperty(property);\n\n if (isSettable) {\n state.propLines.push(`${doc}${jsName}?: ${tsType} | null | undefined;`);\n }\n\n const handlerType = `((value: ${tsType} | null, self: Self) => void) | null | undefined`;\n state.propLines.push(`${isSettable ? \"\" : doc}onNotify${upperFirst(jsName)}?: ${handlerType};`);\n};\n\nconst acceptCollectorProperty = (state: PropCollectorState, property: GirProperty): void => {\n if (!property.introspectable) {\n return;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (state.seen.has(jsName) || isOmittedProp(getGlibName(state.owner.klass), jsName)) {\n return;\n }\n\n state.seen.add(jsName);\n appendPropertyLines(state, property, jsName);\n};\n\nconst acceptCollectorSignal = (state: PropCollectorState, signal: GirCallable): void => {\n const handlerName = signalHandlerName(signal.name);\n\n if (state.seen.has(handlerName)) {\n return;\n }\n\n state.seen.add(handlerName);\n const signature = renderSignalHandler({ types: state.types, signal, selfType: \"Self\" });\n state.propLines.push(`${renderJsDoc(signal.doc)}${handlerName}?: (${signature}) | undefined;`);\n};\n\nconst createPropEntryCollector = (owner: IntrinsicElementScope): PropEntryCollector => {\n const { library } = owner;\n const imports: Map<string, string> = new Map();\n const types: PropTypeRenderContext = { library, imports };\n\n const state: PropCollectorState = {\n owner,\n types,\n propLines: [],\n objectPropNames: [],\n seen: new Set<string>(),\n };\n\n return {\n propLines: state.propLines,\n imports,\n objectPropNames: state.objectPropNames,\n acceptProperty: (property) => {\n acceptCollectorProperty(state, property);\n },\n acceptSignal: (signal) => {\n acceptCollectorSignal(state, signal);\n },\n };\n};\n\nconst buildElementPropsEntries = (options: IntrinsicElementPropsOptions): IntrinsicElementPropsEntries => {\n const { library, klass, namespace, isIntrinsicElementAncestor = () => false } = options;\n const collector = createPropEntryCollector({ library, klass, namespace });\n\n walkIntrinsicElementMembers({\n library,\n klass,\n namespace,\n isIntrinsicElementAncestor,\n acceptProperty: collector.acceptProperty,\n acceptSignal: collector.acceptSignal,\n });\n\n return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };\n};\n\nconst buildInterfacePropsEntries = (options: InterfacePropsOptions): IntrinsicElementPropsEntries => {\n const { library, iface, namespace } = options;\n const collector = createPropEntryCollector({ library, klass: iface, namespace });\n\n for (const property of iface.properties) {\n collector.acceptProperty(property);\n }\n\n for (const signal of iface.signals) {\n collector.acceptSignal(signal);\n }\n\n return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };\n};\n\nconst walkIntrinsicElementMembers = (walk: IntrinsicElementMemberWalk): void => {\n const { library, klass, namespace, isIntrinsicElementAncestor, acceptProperty, acceptSignal } = walk;\n\n const visitMembers = (memberClass: GirClass): void => {\n for (const property of memberClass.properties) {\n acceptProperty(property);\n }\n\n for (const signal of memberClass.signals) {\n acceptSignal(signal);\n }\n };\n\n const ancestry = { library, namespace };\n visitMembers(klass);\n\n forEachAncestor(ancestry, klass, (ancestor) => {\n visitMembers(ancestor.klass);\n }, isIntrinsicElementAncestor);\n};\n\nconst isGObjectType = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved?.kind === \"interface\") {\n return true;\n }\n\n if (resolved?.kind !== \"class\") {\n return false;\n }\n\n return isIntrinsicElementClass(resolved.value, resolved.namespace, library);\n};\n\nconst isObjectProp = (library: Library, property: GirProperty): boolean => {\n if (!property.writable || property.constructOnly) {\n return false;\n }\n\n return isGObjectType(library, property.type);\n};\n\nconst renderSignalHandler = (options: SignalRenderOptions): string => {\n const { types, signal, selfType } = options;\n\n const params = [\n ...renderHandlerParameters(signal.parameters, (ref, nullable) => renderReactPropType(types, ref, nullable)),\n `self: ${selfType}`,\n ];\n\n const result = renderHandlerResultType({\n library: types.library,\n signal,\n renderType: (ref, nullable) => renderReactPropType(types, ref, nullable),\n includeCallerAllocated: false,\n optOut: true,\n });\n\n return `(${params.join(\", \")}) => ${result}`;\n};\n\nconst reactTarget = (context: PropTypeRenderContext): TsTypeTarget =>\n recordTypeTarget(\n context.library,\n (name) => {\n context.imports.set(name.namespaceName, giNamespaceAlias(name.namespaceName));\n\n return `${giNamespaceAlias(name.namespaceName)}.${name.typeName}`;\n },\n () => {\n context.imports.set(\"GObject\", giNamespaceAlias(\"GObject\"));\n\n return `${giNamespaceAlias(\"GObject\")}.Type`;\n },\n );\n\nconst renderReactPropType = (context: PropTypeRenderContext, ref: TypeId | undefined, isNullable: boolean): string => {\n const base = renderBaseType(context.library, reactTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nexport { buildElementPropsEntries, buildInterfacePropsEntries, isObjectProp, reactTarget };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtkx/codegen",
3
- "version": "1.0.0-rc.2",
3
+ "version": "1.0.0-rc.3",
4
4
  "description": "Generates the typed GTKX bindings and API reference from GIR and OpenGL registry data",
5
5
  "keywords": [
6
6
  "gtkx",
@@ -51,9 +51,8 @@
51
51
  "@types/node": "^26.1.2",
52
52
  "fast-xml-parser": "^5.10.1",
53
53
  "typescript": "^6.0.3",
54
- "@gtkx/config": "1.0.0-rc.2",
55
- "@gtkx/react": "1.0.0-rc.2",
56
- "@gtkx/utils": "1.0.0-rc.2"
54
+ "@gtkx/react": "1.0.0-rc.3",
55
+ "@gtkx/utils": "1.0.0-rc.3"
57
56
  },
58
57
  "scripts": {
59
58
  "release": "tsx ../../scripts/release-package.ts"
@@ -21,6 +21,7 @@ import {
21
21
  } from "../gir/type-id.js";
22
22
  import { isRecordInout } from "../store/gi/param-marshal.js";
23
23
  import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
24
+ import { isValueMarshalable } from "../store/gi/value-marshalable.js";
24
25
  import {
25
26
  type ListDescriptorName,
26
27
  type Ownership,
@@ -54,6 +55,8 @@ type RenderDescriptorOptions = {
54
55
  argIndexMap?: Map<number, number> | undefined;
55
56
  callerAllocated?: boolean;
56
57
  isInline?: boolean;
58
+ /** Set on the return value of a callable with no instance parameter, which creates what it returns. */
59
+ isNewlyCreated?: boolean;
57
60
  };
58
61
 
59
62
  type ArgIndexOptions = {
@@ -101,6 +104,14 @@ const LIST_HELPERS: Record<Exclude<ListFlavor, "gbytearray">, ListDescriptorName
101
104
  garray: "gArray",
102
105
  };
103
106
 
107
+ /**
108
+ * `glib:type-name` of every fundamental whose instances are born with a floating reference, so a
109
+ * callable that creates one hands back a claim nobody has taken rather than an owned reference.
110
+ * GIR annotates those returns `transfer-ownership="full"` all the same, so the annotation alone
111
+ * cannot tell them apart from a genuinely owned return such as `g_param_spec_ref`.
112
+ */
113
+ const FLOATING_FUNDAMENTALS: Set<string> = new Set(["GParam"]);
114
+
104
115
  // A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)
105
116
  // shifts every later parameter left, so a GIR length index has to be looked up in the emitted list
106
117
  // rather than shifted by the instance offset alone.
@@ -378,16 +389,36 @@ const renderFundamental = (descriptor: FundamentalDescriptor): string => {
378
389
  });
379
390
  };
380
391
 
392
+ // A freshly created floating instance is claimed by sinking it, which is what the fundamental's
393
+ // declared ref function does, so it is marshalled as transfer-none: adopting the floating reference
394
+ // instead would leave the handle releasing a claim it never took.
395
+ const sunkOwnership = (
396
+ ancestor: AncestorFundamental,
397
+ ownership: Ownership,
398
+ isNewlyCreated: boolean,
399
+ ): Ownership => {
400
+ if (!isNewlyCreated || ownership !== "full" || ancestor.typeName === undefined) {
401
+ return ownership;
402
+ }
403
+
404
+ return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? "borrowed" : ownership;
405
+ };
406
+
381
407
  // GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,
382
408
  // so a derived type such as GtkPropertyExpression carries neither and has to inherit both.
383
409
  const classOrInterfaceExpression = (
384
410
  context: ModuleContext,
385
411
  resolved: Extract<EntityType, { kind: "class" | "interface" }>,
386
412
  ownership: Ownership,
413
+ isNewlyCreated: boolean,
387
414
  ): string => {
388
415
  const ancestor = fundamentalAncestor(context, resolved);
389
416
 
390
- return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
417
+ if (ancestor === undefined) {
418
+ return tObject(ownership);
419
+ }
420
+
421
+ return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });
391
422
  };
392
423
 
393
424
  const isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: "class" | "interface" }> =>
@@ -505,9 +536,10 @@ const structExpression = (
505
536
  ): string => {
506
537
  const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
507
538
  const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
539
+ const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
508
540
 
509
541
  return tStruct(ownership, {
510
- size: size > 0 ? size : undefined,
542
+ size: isCopyable && size > 0 ? size : undefined,
511
543
  wrapperClass,
512
544
  callerAllocated: options.callerAllocated,
513
545
  inline: options.inline,
@@ -624,7 +656,7 @@ const expressionForResolved = (
624
656
  switch (resolved.kind) {
625
657
  case "class":
626
658
  case "interface": {
627
- return classOrInterfaceExpression(context, resolved, ownership);
659
+ return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);
628
660
  }
629
661
  case "record": {
630
662
  return recordExpression(context, resolved, ownership, {