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

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 (229) hide show
  1. package/README.md +4 -5
  2. package/dist/analysis/descriptor-render.d.ts +1 -3
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +14 -37
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +6 -6
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +7 -7
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/param-structure.d.ts +2 -2
  11. package/dist/analysis/param-structure.d.ts.map +1 -1
  12. package/dist/analysis/param-structure.js +5 -7
  13. package/dist/analysis/param-structure.js.map +1 -1
  14. package/dist/analysis/ts-type.d.ts +1 -1
  15. package/dist/analysis/ts-type.d.ts.map +1 -1
  16. package/dist/analysis/ts-type.js +3 -5
  17. package/dist/analysis/ts-type.js.map +1 -1
  18. package/dist/compile.d.ts.map +1 -1
  19. package/dist/compile.js +2 -1
  20. package/dist/compile.js.map +1 -1
  21. package/dist/docs/api-reference.d.ts +77 -1
  22. package/dist/docs/api-reference.d.ts.map +1 -1
  23. package/dist/docs/api-reference.js +62 -0
  24. package/dist/docs/api-reference.js.map +1 -1
  25. package/dist/docs/pipeline.d.ts +4 -4
  26. package/dist/docs/pipeline.d.ts.map +1 -1
  27. package/dist/docs/pipeline.js +4 -4
  28. package/dist/docs/pipeline.js.map +1 -1
  29. package/dist/docs/render.js +6 -6
  30. package/dist/docs/render.js.map +1 -1
  31. package/dist/docs/symbol-page.d.ts +5 -0
  32. package/dist/docs/symbol-page.d.ts.map +1 -1
  33. package/dist/docs/symbol-page.js +2 -2
  34. package/dist/docs/symbol-page.js.map +1 -1
  35. package/dist/fingerprint.d.ts +2 -5
  36. package/dist/fingerprint.d.ts.map +1 -1
  37. package/dist/fingerprint.js +6 -8
  38. package/dist/fingerprint.js.map +1 -1
  39. package/dist/gi.d.ts +3 -11
  40. package/dist/gi.d.ts.map +1 -1
  41. package/dist/gi.js +0 -7
  42. package/dist/gi.js.map +1 -1
  43. package/dist/gir/field.d.ts +0 -1
  44. package/dist/gir/field.d.ts.map +1 -1
  45. package/dist/gir/field.js +0 -3
  46. package/dist/gir/field.js.map +1 -1
  47. package/dist/gir/gir-path.d.ts +7 -0
  48. package/dist/gir/gir-path.d.ts.map +1 -1
  49. package/dist/gir/gir-path.js +7 -0
  50. package/dist/gir/gir-path.js.map +1 -1
  51. package/dist/gir/libraries.d.ts +13 -0
  52. package/dist/gir/libraries.d.ts.map +1 -1
  53. package/dist/gir/libraries.js +12 -0
  54. package/dist/gir/libraries.js.map +1 -1
  55. package/dist/gir/parameter.d.ts.map +1 -1
  56. package/dist/gir/parameter.js +0 -4
  57. package/dist/gir/parameter.js.map +1 -1
  58. package/dist/gir/size.d.ts.map +1 -1
  59. package/dist/gir/size.js +0 -3
  60. package/dist/gir/size.js.map +1 -1
  61. package/dist/gir/type-id.d.ts +1 -1
  62. package/dist/gir/type-id.d.ts.map +1 -1
  63. package/dist/gir/type-id.js +1 -3
  64. package/dist/gir/type-id.js.map +1 -1
  65. package/dist/gir/type-ref.js +1 -1
  66. package/dist/gir/type-ref.js.map +1 -1
  67. package/dist/index.d.ts +18 -6
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +12 -3
  70. package/dist/index.js.map +1 -1
  71. package/dist/internal.d.ts +3 -0
  72. package/dist/internal.d.ts.map +1 -0
  73. package/dist/internal.js +3 -0
  74. package/dist/internal.js.map +1 -0
  75. package/dist/jsx.d.ts +7 -12
  76. package/dist/jsx.d.ts.map +1 -1
  77. package/dist/jsx.js +18 -19
  78. package/dist/jsx.js.map +1 -1
  79. package/dist/khronos/args.d.ts.map +1 -1
  80. package/dist/khronos/args.js +1 -1
  81. package/dist/khronos/args.js.map +1 -1
  82. package/dist/khronos/pipeline.js +1 -1
  83. package/dist/khronos/pipeline.js.map +1 -1
  84. package/dist/khronos/plan.d.ts +2 -2
  85. package/dist/khronos/plan.d.ts.map +1 -1
  86. package/dist/khronos/plan.js +6 -6
  87. package/dist/khronos/plan.js.map +1 -1
  88. package/dist/react/element-config.d.ts +17 -11
  89. package/dist/react/element-config.d.ts.map +1 -1
  90. package/dist/react/element-config.js +22 -15
  91. package/dist/react/element-config.js.map +1 -1
  92. package/dist/runner.d.ts +35 -17
  93. package/dist/runner.d.ts.map +1 -1
  94. package/dist/runner.js +19 -20
  95. package/dist/runner.js.map +1 -1
  96. package/dist/store/compile-store.d.ts +1 -2
  97. package/dist/store/compile-store.d.ts.map +1 -1
  98. package/dist/store/compile-store.js +2 -2
  99. package/dist/store/compile-store.js.map +1 -1
  100. package/dist/store/gi/callables.js +4 -4
  101. package/dist/store/gi/callables.js.map +1 -1
  102. package/dist/store/gi/constant.d.ts.map +1 -1
  103. package/dist/store/gi/constant.js +0 -2
  104. package/dist/store/gi/constant.js.map +1 -1
  105. package/dist/store/gi/function.d.ts.map +1 -1
  106. package/dist/store/gi/function.js +1 -5
  107. package/dist/store/gi/function.js.map +1 -1
  108. package/dist/store/gi/method.d.ts.map +1 -1
  109. package/dist/store/gi/method.js +25 -23
  110. package/dist/store/gi/method.js.map +1 -1
  111. package/dist/store/gi/property-accessor.d.ts +1 -1
  112. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  113. package/dist/store/gi/property-accessor.js +5 -7
  114. package/dist/store/gi/property-accessor.js.map +1 -1
  115. package/dist/store/gi/record-field-accessor.d.ts +1 -1
  116. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  117. package/dist/store/gi/record-field-accessor.js +3 -9
  118. package/dist/store/gi/record-field-accessor.js.map +1 -1
  119. package/dist/store/gi/record-layout.d.ts.map +1 -1
  120. package/dist/store/gi/record-layout.js +0 -4
  121. package/dist/store/gi/record-layout.js.map +1 -1
  122. package/dist/store/gi/return-wrap.d.ts +1 -1
  123. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  124. package/dist/store/gi/return-wrap.js +4 -4
  125. package/dist/store/gi/return-wrap.js.map +1 -1
  126. package/dist/store/gi/signal.d.ts.map +1 -1
  127. package/dist/store/gi/signal.js +13 -16
  128. package/dist/store/gi/signal.js.map +1 -1
  129. package/dist/store/gi/value-marshalable.d.ts +0 -8
  130. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  131. package/dist/store/gi/value-marshalable.js +0 -9
  132. package/dist/store/gi/value-marshalable.js.map +1 -1
  133. package/dist/store/gi-store.d.ts +2 -3
  134. package/dist/store/gi-store.d.ts.map +1 -1
  135. package/dist/store/gi-store.js.map +1 -1
  136. package/dist/store/jsx/element-components.d.ts +0 -2
  137. package/dist/store/jsx/element-components.d.ts.map +1 -1
  138. package/dist/store/jsx/element-components.js +0 -4
  139. package/dist/store/jsx/element-components.js.map +1 -1
  140. package/dist/store/jsx/element-prop-imports.d.ts +2 -3
  141. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  142. package/dist/store/jsx/element-prop-imports.js +0 -2
  143. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  144. package/dist/store/jsx/element-prop-types.d.ts +0 -1
  145. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  146. package/dist/store/jsx/element-prop-types.js +0 -1
  147. package/dist/store/jsx/element-prop-types.js.map +1 -1
  148. package/dist/store/jsx/generated-elements.d.ts +29 -0
  149. package/dist/store/jsx/generated-elements.d.ts.map +1 -0
  150. package/dist/store/jsx/generated-elements.js +30 -0
  151. package/dist/store/jsx/generated-elements.js.map +1 -0
  152. package/dist/store/jsx/jsx.js +6 -6
  153. package/dist/store/jsx/jsx.js.map +1 -1
  154. package/dist/store/jsx/metadata.js +7 -7
  155. package/dist/store/jsx/metadata.js.map +1 -1
  156. package/dist/store/jsx/omitted-props.d.ts +2 -4
  157. package/dist/store/jsx/omitted-props.d.ts.map +1 -1
  158. package/dist/store/jsx/omitted-props.js +2 -4
  159. package/dist/store/jsx/omitted-props.js.map +1 -1
  160. package/dist/store/jsx/pipeline.d.ts +3 -1
  161. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  162. package/dist/store/jsx/pipeline.js +3 -2
  163. package/dist/store/jsx/pipeline.js.map +1 -1
  164. package/dist/store/jsx/props.js +2 -2
  165. package/dist/store/jsx/props.js.map +1 -1
  166. package/dist/store/jsx-store.d.ts +2 -3
  167. package/dist/store/jsx-store.d.ts.map +1 -1
  168. package/dist/store/jsx-store.js +3 -3
  169. package/dist/store/jsx-store.js.map +1 -1
  170. package/dist/store/resolve-store.d.ts +28 -0
  171. package/dist/store/resolve-store.d.ts.map +1 -0
  172. package/dist/store/resolve-store.js +65 -0
  173. package/dist/store/resolve-store.js.map +1 -0
  174. package/dist/store/store-fs.d.ts +5 -1
  175. package/dist/store/store-fs.d.ts.map +1 -1
  176. package/dist/store/store-fs.js +6 -4
  177. package/dist/store/store-fs.js.map +1 -1
  178. package/overrides/gobject/object.ts.ejs +8 -8
  179. package/package.json +6 -10
  180. package/src/analysis/descriptor-render.ts +20 -45
  181. package/src/analysis/descriptor.ts +13 -13
  182. package/src/analysis/param-structure.ts +8 -10
  183. package/src/analysis/ts-type.ts +4 -6
  184. package/src/compile.ts +2 -1
  185. package/src/docs/api-reference.ts +127 -4
  186. package/src/docs/pipeline.ts +8 -8
  187. package/src/docs/render.ts +7 -7
  188. package/src/docs/symbol-page.ts +7 -2
  189. package/src/fingerprint.ts +8 -13
  190. package/src/gi.ts +4 -11
  191. package/src/gir/field.ts +0 -4
  192. package/src/gir/gir-path.ts +7 -0
  193. package/src/gir/libraries.ts +13 -0
  194. package/src/gir/parameter.ts +0 -4
  195. package/src/gir/size.ts +0 -3
  196. package/src/gir/type-id.ts +2 -4
  197. package/src/gir/type-ref.ts +1 -1
  198. package/src/index.ts +18 -16
  199. package/src/internal.ts +2 -0
  200. package/src/jsx.ts +26 -26
  201. package/src/khronos/args.ts +1 -1
  202. package/src/khronos/pipeline.ts +1 -1
  203. package/src/khronos/plan.ts +8 -8
  204. package/src/react/element-config.ts +22 -19
  205. package/src/runner.ts +57 -39
  206. package/src/store/compile-store.ts +3 -4
  207. package/src/store/gi/callables.ts +5 -5
  208. package/src/store/gi/constant.ts +0 -2
  209. package/src/store/gi/function.ts +1 -5
  210. package/src/store/gi/method.ts +30 -28
  211. package/src/store/gi/property-accessor.ts +6 -8
  212. package/src/store/gi/record-field-accessor.ts +4 -10
  213. package/src/store/gi/record-layout.ts +0 -4
  214. package/src/store/gi/return-wrap.ts +5 -5
  215. package/src/store/gi/signal.ts +17 -17
  216. package/src/store/gi/value-marshalable.ts +0 -9
  217. package/src/store/gi-store.ts +2 -4
  218. package/src/store/jsx/element-components.ts +0 -6
  219. package/src/store/jsx/element-prop-imports.ts +7 -4
  220. package/src/store/jsx/element-prop-types.ts +0 -1
  221. package/src/store/jsx/generated-elements.ts +60 -0
  222. package/src/store/jsx/jsx.ts +7 -7
  223. package/src/store/jsx/metadata.ts +8 -8
  224. package/src/store/jsx/omitted-props.ts +2 -4
  225. package/src/store/jsx/pipeline.ts +5 -3
  226. package/src/store/jsx/props.ts +2 -2
  227. package/src/store/jsx-store.ts +5 -7
  228. package/src/store/resolve-store.ts +100 -0
  229. package/src/store/store-fs.ts +12 -5
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-page.js","sourceRoot":"","sources":["../../src/docs/symbol-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { pascalCase, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirEnum } from \"../gir/enum.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { GirRecord } from \"../gir/record.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { reservedSignalMemberRename } from \"../analysis/inheritance.js\";\nimport { renderTsType } from \"../analysis/ts-type.js\";\nimport { ancestorChain } from \"../gir/ancestry.js\";\nimport { callbackAsFunction, type GirCallback } from \"../gir/callback.js\";\nimport { type GirAlias, type GirConstant, type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { PRIMITIVE_TS_TYPE, primitiveCategory } from \"../gir/primitives.js\";\nimport {\n dedupeCallables,\n indexMethodsByName,\n instanceScope,\n matchStaticFinishFunction,\n renderInstanceMethodSignature,\n renderStaticSignature,\n} from \"../store/gi/callables.js\";\nimport { constantLiteral } from \"../store/gi/constant.js\";\nimport { enumMemberKey } from \"../store/gi/enum.js\";\nimport {\n methodExportName,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedSignature,\n} from \"../store/gi/method.js\";\nimport { resolveAccessor, type ResolvedAccessor } from \"../store/gi/property-accessor.js\";\nimport { resolveRecordFieldEntry } from \"../store/gi/record-field-accessor.js\";\nimport { computeRecordFieldSlots } from \"../store/gi/record-layout.js\";\nimport { implementedInterfaces, newlyImplementedInterfaces } from \"../store/jsx/intrinsic-elements.js\";\nimport {\n classMethodEntries,\n docMarkdown,\n docsDefaultValue,\n docsSignatureContext,\n firstSentence,\n implementsLine,\n joinSections,\n metaBlock,\n methodsSectionBlocks,\n originSignatureBlocks,\n renderDocsSignalHandlerType,\n renderDocsType,\n signatureBlock,\n type SignatureEntry,\n} from \"./render.js\";\n\ntype GiSymbolBase = {\n namespace: GirNamespace;\n name: string;\n doc: string | undefined;\n};\n\ntype GiSymbolEntry =\n | (GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass }) |\n (GiSymbolBase & { kind: \"record\"; record: GirRecord }) |\n (GiSymbolBase & { kind: \"enum\"; enumeration: GirEnum }) |\n (GiSymbolBase & { kind: \"callback\"; callback: GirCallback }) |\n (GiSymbolBase & { kind: \"alias\"; alias: GirAlias }) |\n (GiSymbolBase & { kind: \"function\"; fn: GirFunction }) |\n (GiSymbolBase & { kind: \"constant\"; constant: GirConstant });\n\ntype SymbolPageOptions = {\n library: Library;\n elementNameFor: (namespaceName: string, className: string) => string | undefined;\n};\n\ntype StaticSectionOptions = {\n title: string;\n intro: string;\n context: ModuleContext;\n callables: GirFunction[];\n siblings: GirFunction[];\n returnTypeOverride?: string;\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n};\n\ntype PropertyAccessorSetup = {\n context: ModuleContext;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n};\n\ntype MetaDocEntry = { name: string; meta: string; doc: string };\ntype SignalDocEntry = { name: string; signature: string; doc: string; origin: string | undefined };\ntype ResolvedRecordField = NonNullable<ReturnType<typeof resolveRecordFieldEntry>>;\n\nconst qualifiedName = (entry: GiSymbolBase): string => `${entry.namespace.name}.${entry.name}`;\n\nconst frontmatter = (entry: GiSymbolBase, kindLabel: string): string => {\n const sentence = firstSentence(entry.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${qualifiedName(entry)} ${kindLabel}.`;\n\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst kindLine = (kindLabel: string, namespace: GirNamespace): string =>\n `\\`${kindLabel}\\` in \\`@gtkx/gi/${namespaceDirectory(namespace)}\\``;\n\nconst importBlock = (entry: GiSymbolBase): string =>\n `\\`\\`\\`ts\\nimport * as ${entry.namespace.name} from \"@gtkx/gi/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst pageHeader = (entry: GiSymbolEntry, kindLabel: string): string[] => [\n frontmatter(entry, kindLabel),\n `# ${qualifiedName(entry)}`,\n kindLine(kindLabel, entry.namespace),\n docMarkdown(entry.doc),\n importBlock(entry),\n];\n\nconst qualifiedClassName = (namespaceName: string, className: string): string =>\n `${namespaceName}.${pascalCase(className)}`;\n\nconst elementNote = (entry: GiSymbolBase & { klass: GirClass }, options: SymbolPageOptions): string[] => {\n const glibName = options.elementNameFor(entry.namespace.name, entry.klass.name);\n\n if (glibName === undefined) {\n return [];\n }\n\n return [\n `Also available as the \\`${glibName}\\` JSX element from ` +\n `\\`@gtkx/jsx/${namespaceDirectory(entry.namespace)}\\`; the \\`${glibName}\\` element page ` +\n \"documents the JSX props.\",\n ];\n};\n\nconst hierarchySection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const ancestors = [...ancestorChain(library, entry.klass, entry.namespace.name)].slice(1).toReversed();\n\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, library).map((iface) =>\n qualifiedClassName(iface.namespace.name, iface.klass.name),\n );\n\n if (ancestors.length === 0 && interfaces.length === 0) {\n return [];\n }\n\n const lines = [\"## Hierarchy\"];\n\n if (ancestors.length > 0) {\n const parts = ancestors.map(\n (ancestor) => `\\`${qualifiedClassName(ancestor.namespaceName, ancestor.klass.name)}\\``,\n );\n\n parts.push(`**${qualifiedName(entry)}**`);\n lines.push(parts.join(\" → \"));\n }\n\n lines.push(...implementsLine(interfaces));\n\n return lines;\n};\n\nconst prerequisitesLine = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const names = entry.klass.prerequisites.map((name) => {\n const resolved = library.resolveType(entry.namespace.name, name);\n\n if (resolved === undefined || (resolved.kind !== \"class\" && resolved.kind !== \"interface\")) {\n return `\\`${name}\\``;\n }\n\n return `\\`${qualifiedClassName(resolved.namespace.name, resolved.value.name)}\\``;\n });\n\n if (names.length === 0) {\n return [];\n }\n\n return [`Requires ${names.join(\", \")}.`];\n};\n\nconst staticSection = (options: StaticSectionOptions): string[] => {\n const rendered: { name: string; block: string }[] = [];\n\n for (const callable of dedupeCallables(options.callables)) {\n const signature = renderStaticSignature(options.context, callable, {\n returnTypeOverride: options.returnTypeOverride,\n siblings: options.siblings,\n });\n\n if (signature === undefined) {\n continue;\n }\n\n rendered.push({\n name: signature.name,\n block: signatureBlock(signature.name, signature.signature, [docMarkdown(callable.doc)]),\n });\n }\n\n if (rendered.length === 0) {\n return [];\n }\n\n return [options.title, options.intro, ...sortStringsBy(rendered, (item) => item.name).map((item) => item.block)];\n};\n\nconst memberOwners = (entry: GiSymbolBase & { klass: GirClass }, library: Library): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined },\n ...newlyImplementedInterfaces(entry.klass, entry.namespace, library).map((iface) => ({\n klass: iface.klass,\n namespace: iface.namespace,\n origin: qualifiedClassName(iface.namespace.name, iface.klass.name),\n })),\n];\n\nconst interfaceMethodNames = (library: Library, owner: MemberOwner): string[] => {\n const context = docsSignatureContext(owner.namespace, library);\n const className = pascalCase(owner.klass.name);\n const methods = dedupeCallables(owner.klass.methods);\n\n const scope = instanceScope(className, {\n constructors: dedupeCallables(owner.klass.constructors),\n functions: dedupeCallables(owner.klass.functions),\n methods,\n });\n\n const names: string[] = [];\n\n for (const callable of methods) {\n const rename = reservedSignalMemberRename(className, callable);\n const rendered = renderInstanceMethodSignature(context, { ...callable, doc: undefined }, scope, rename);\n\n if (rendered === undefined) {\n continue;\n }\n\n names.push(rename ?? methodExportName(callable));\n }\n\n return names;\n};\n\nconst propertyAccessorSetup = (\n owner: MemberOwner,\n library: Library,\n isUseClassRenames: boolean,\n): PropertyAccessorSetup => {\n const claimedNames = new Set(\n isUseClassRenames\n ? classMethodEntries(library, owner.namespace, owner.klass).map((item) => item.name)\n : interfaceMethodNames(library, owner),\n );\n\n return {\n context: docsSignatureContext(owner.namespace, library),\n claimedNames,\n methodByName: indexMethodsByName(dedupeCallables(owner.klass.methods)),\n };\n};\n\nconst propertyMeta = (property: GirProperty, accessor: ResolvedAccessor, origin: string | undefined): string => {\n const meta: string[] = [`\\`${accessor.tsType}\\``];\n\n if (property.defaultValue !== undefined) {\n meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n }\n\n if (property.constructOnly) {\n meta.push(\"construct-only\");\n }\n\n if (!accessor.writable) {\n meta.push(\"read-only\");\n } else if (!accessor.hasGetter) {\n meta.push(\"write-only\");\n }\n\n if (origin !== undefined) {\n meta.push(`from \\`${origin}\\``);\n }\n\n return meta.join(\" · \");\n};\n\nconst sortedMetaBlocks = (entries: MetaDocEntry[]): string[] =>\n sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item.name, item.meta, item.doc));\n\nconst ownerPropertyEntries = (owner: MemberOwner, setup: PropertyAccessorSetup, seen: Set<string>): MetaDocEntry[] => {\n const entries: MetaDocEntry[] = [];\n\n for (const property of owner.klass.properties) {\n const accessor = resolveAccessor({\n context: setup.context,\n property,\n claimedNames: setup.claimedNames,\n methodByName: setup.methodByName,\n });\n\n if (accessor === undefined || seen.has(accessor.jsName)) {\n continue;\n }\n\n seen.add(accessor.jsName);\n\n entries.push({\n name: accessor.jsName,\n meta: propertyMeta(property, accessor, owner.origin),\n doc: docMarkdown(property.doc),\n });\n }\n\n return entries;\n};\n\nconst propertiesSection = (\n entry: GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass },\n library: Library,\n): string[] => {\n const seen: Set<string> = new Set();\n const entries: MetaDocEntry[] = [];\n\n for (const [index, owner] of memberOwners(entry, library).entries()) {\n const isUseClassRenames = index === 0 && entry.kind === \"class\";\n const setup = propertyAccessorSetup(owner, library, isUseClassRenames);\n entries.push(...ownerPropertyEntries(owner, setup, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n const intro =\n \"Properties are read and written as instance fields; changes can be observed with \" +\n \"`connect(\\\"notify::<property-name>\\\", handler)`. Properties inherited from ancestors are \" +\n \"documented on their own pages.\";\n\n return [\"## Properties\", intro, ...sortedMetaBlocks(entries)];\n};\n\nconst ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<string>): SignalDocEntry[] => {\n const entries: SignalDocEntry[] = [];\n\n for (const signal of owner.klass.signals) {\n if (seen.has(signal.name)) {\n continue;\n }\n\n seen.add(signal.name);\n\n entries.push({\n name: signal.name,\n signature: renderDocsSignalHandlerType(library, signal),\n doc: docMarkdown(signal.doc),\n origin: owner.origin,\n });\n }\n\n return entries;\n};\n\nconst signalsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const seen: Set<string> = new Set();\n const entries: SignalDocEntry[] = [];\n\n for (const owner of memberOwners(entry, library)) {\n entries.push(...ownerSignalEntries(owner, library, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n const intro =\n \"Connect with `instance.connect(\\\"<signal>\\\", handler)` or `instance.on(\\\"<signal>\\\", handler)`. \" +\n \"Signals inherited from ancestors are documented on their own pages.\";\n\n return [\"## Signals\", intro, ...originSignatureBlocks(entries)];\n};\n\nconst classMethodsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] =>\n methodsSectionBlocks(\n classMethodEntries(library, entry.namespace, entry.klass),\n \"Methods are called on instances. Methods inherited from ancestors are documented on their own pages.\",\n );\n\nconst classPage = (\n entry: GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass },\n options: SymbolPageOptions,\n): string => {\n const { library } = options;\n const qualified = qualifiedName(entry);\n const docsContext = docsSignatureContext(entry.namespace, library);\n const constructorsIntro = `Constructors are called on the class: \\`${qualified}.new(...)\\`.`;\n const staticIntro = `Static methods are called on the class: \\`${qualified}.<method>(...)\\`.`;\n const staticSiblings = [...entry.klass.constructors, ...entry.klass.functions];\n\n return joinSections([\n ...pageHeader(entry, entry.kind),\n ...elementNote(entry, options),\n ...(entry.kind === \"interface\" ? prerequisitesLine(entry, library) : hierarchySection(entry, library)),\n ...staticSection({\n title: \"## Constructors\",\n intro: constructorsIntro,\n context: docsContext,\n callables: entry.klass.constructors,\n siblings: staticSiblings,\n returnTypeOverride: qualified,\n }),\n ...staticSection({\n title: \"## Static methods\",\n intro: staticIntro,\n context: docsContext,\n callables: entry.klass.functions,\n siblings: staticSiblings,\n }),\n ...propertiesSection(entry, library),\n ...signalsSection(entry, library),\n ...classMethodsSection(entry, library),\n ]);\n};\n\nconst renderSymbolPage = (entry: GiSymbolEntry, options: SymbolPageOptions): string => {\n switch (entry.kind) {\n case \"class\":\n case \"interface\": {\n return classPage(entry, options);\n }\n case \"record\": {\n return recordPage(entry, options.library);\n }\n case \"enum\": {\n return enumPage(entry);\n }\n case \"callback\": {\n return callbackPage(entry, options.library);\n }\n case \"alias\": {\n return aliasPage(entry, options.library);\n }\n case \"function\": {\n return functionPage(entry, options.library);\n }\n case \"constant\": {\n return constantPage(entry, options.library);\n }\n }\n};\n\nconst recordInstanceEntries = (context: ModuleContext, record: GirRecord): SignatureEntry[] => {\n const entries: SignatureEntry[] = [];\n\n for (const callable of dedupeCallables(record.methods)) {\n const rendered = renderStaticSignature(context, callable);\n\n if (rendered === undefined) {\n continue;\n }\n\n entries.push({ name: rendered.name, signature: rendered.signature, doc: docMarkdown(callable.doc) });\n }\n\n return sortStringsBy(entries, (item) => item.name);\n};\n\nconst recordPage = (entry: GiSymbolBase & { kind: \"record\"; record: GirRecord }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const qualified = qualifiedName(entry);\n const constructorsIntro = `Constructors are called on the class: \\`${qualified}.new(...)\\`.`;\n const staticIntro = `Static methods are called on the class: \\`${qualified}.<method>(...)\\`.`;\n const methodEntries = recordInstanceEntries(docsContext, entry.record);\n const claimedNames = new Set(methodEntries.map((item) => item.name));\n const staticSiblings = [...entry.record.constructors, ...entry.record.functions];\n\n return joinSections([\n ...pageHeader(entry, entry.record.isUnion ? \"union\" : \"record\"),\n ...staticSection({\n title: \"## Constructors\",\n intro: constructorsIntro,\n context: docsContext,\n callables: entry.record.constructors,\n siblings: staticSiblings,\n returnTypeOverride: qualified,\n }),\n ...staticSection({\n title: \"## Static methods\",\n intro: staticIntro,\n context: docsContext,\n callables: entry.record.functions,\n siblings: staticSiblings,\n }),\n ...fieldsSection(entry.record, docsContext, claimedNames),\n ...methodsSectionBlocks(methodEntries, \"Methods are called on instances.\"),\n ]);\n};\n\nconst fieldMeta = (field: ResolvedRecordField): string =>\n [`\\`${field.tsType}\\``, ...(field.writable ? [] : [\"read-only\"])].join(\" · \");\n\nconst fieldsSection = (record: GirRecord, context: ModuleContext, claimedNames: Set<string>): string[] => {\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n const entries: MetaDocEntry[] = [];\n\n for (const slot of slots) {\n const field = resolveRecordFieldEntry(context, slot, claimedNames);\n\n if (field === undefined) {\n continue;\n }\n\n entries.push({ name: field.jsName, meta: fieldMeta(field), doc: docMarkdown(field.doc) });\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n return [\"## Fields\", ...sortedMetaBlocks(entries)];\n};\n\nconst enumPage = (entry: GiSymbolBase & { kind: \"enum\"; enumeration: GirEnum }): string => {\n const { enumeration } = entry;\n const kindLabel = enumeration.errorDomain === undefined ? enumeration.kind : \"error domain\";\n const qualified = qualifiedName(entry);\n\n const rows = enumeration.members.map((member) => {\n const description = firstSentence(member.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| \\`${enumMemberKey(member.name)}\\` | \\`${member.value}\\` | ${description} |`;\n });\n\n const usage =\n enumeration.errorDomain === undefined\n ? `Members are accessed as \\`${qualified}.<member>\\`.`\n : `Members are error codes for the \\`${enumeration.errorDomain}\\` GError domain, ` +\n `accessed as \\`${qualified}.<member>\\`.`;\n\n const table = [\"| Member | Value | Description |\", \"| --- | --- | --- |\", ...rows].join(\"\\n\");\n\n return joinSections([...pageHeader(entry, kindLabel), \"## Members\", usage, table]);\n};\n\nconst callbackPage = (entry: GiSymbolBase & { kind: \"callback\"; callback: GirCallback }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const fn = callbackAsFunction(entry.callback);\n const parameters = renderMethodSignature(docsContext, fn);\n const signature = `type ${entry.name} = (${parameters}) => ${renderMethodReturnType(docsContext, fn)}`;\n\n return joinSections([...pageHeader(entry, \"callback\"), \"## Signature\", `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``]);\n};\n\nconst aliasPage = (entry: GiSymbolBase & { kind: \"alias\"; alias: GirAlias }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const category = entry.alias.cType === undefined ? undefined : primitiveCategory(entry.alias.cType);\n const target = category === \"gtype\" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(docsContext, entry.alias.target);\n\n return joinSections([...pageHeader(entry, \"alias\"), `\\`\\`\\`ts\\ntype ${entry.name} = ${target}\\n\\`\\`\\``]);\n};\n\nconst functionSignature = (context: ModuleContext, name: string, fn: GirFunction, siblings: GirFunction[]): string => {\n const finishFn = matchStaticFinishFunction(context, fn, siblings);\n\n if (finishFn !== undefined) {\n const { signature, returnType } = renderPromisifiedSignature(context, fn, finishFn);\n\n return `function ${name}(${signature}): ${returnType}`;\n }\n\n return `function ${name}(${renderMethodSignature(context, fn)}): ${renderMethodReturnType(context, fn)}`;\n};\n\nconst functionPage = (entry: GiSymbolBase & { kind: \"function\"; fn: GirFunction }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const signature = functionSignature(docsContext, entry.name, entry.fn, entry.namespace.functions);\n\n return joinSections([...pageHeader(entry, \"function\"), `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``]);\n};\n\nconst constantPage = (entry: GiSymbolBase & { kind: \"constant\"; constant: GirConstant }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const type = renderDocsType(library, entry.constant.type, false);\n\n return joinSections([\n ...pageHeader(entry, \"constant\"),\n `\\`\\`\\`ts\\nconst ${entry.name}: ${type} = ${constantLiteral(docsContext, entry.constant)}\\n\\`\\`\\``,\n ]);\n};\n\nexport { renderSymbolPage, type GiSymbolEntry, type SymbolPageOptions };\n"]}
1
+ {"version":3,"file":"symbol-page.js","sourceRoot":"","sources":["../../src/docs/symbol-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { pascalCase, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirEnum } from \"../gir/enum.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { GirRecord } from \"../gir/record.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { reservedSignalMemberRename } from \"../analysis/inheritance.js\";\nimport { renderTsType } from \"../analysis/ts-type.js\";\nimport { ancestorChain } from \"../gir/ancestry.js\";\nimport { callbackAsFunction, type GirCallback } from \"../gir/callback.js\";\nimport { type GirAlias, type GirConstant, type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { PRIMITIVE_TS_TYPE, primitiveCategory } from \"../gir/primitives.js\";\nimport {\n dedupeCallables,\n indexMethodsByName,\n instanceScope,\n matchStaticFinishFunction,\n renderInstanceMethodSignature,\n renderStaticSignature,\n} from \"../store/gi/callables.js\";\nimport { constantLiteral } from \"../store/gi/constant.js\";\nimport { enumMemberKey } from \"../store/gi/enum.js\";\nimport {\n methodExportName,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedSignature,\n} from \"../store/gi/method.js\";\nimport { resolveAccessor, type ResolvedAccessor } from \"../store/gi/property-accessor.js\";\nimport { resolveRecordFieldEntry } from \"../store/gi/record-field-accessor.js\";\nimport { computeRecordFieldSlots } from \"../store/gi/record-layout.js\";\nimport { implementedInterfaces, newlyImplementedInterfaces } from \"../store/jsx/intrinsic-elements.js\";\nimport {\n classMethodEntries,\n docMarkdown,\n docsDefaultValue,\n docsSignatureContext,\n firstSentence,\n implementsLine,\n joinSections,\n metaBlock,\n methodsSectionBlocks,\n originSignatureBlocks,\n renderDocsSignalHandlerType,\n renderDocsType,\n signatureBlock,\n type SignatureEntry,\n} from \"./render.js\";\n\n/** What every indexed GIR symbol carries, whatever its kind. */\ntype GiSymbolBase = {\n /** GIR namespace declaring the symbol. */\n namespace: GirNamespace;\n /** Name the bindings export it under: camelCase for functions, PascalCase for classes, the GIR name otherwise. */\n name: string;\n /** Raw gtk-doc text from the GIR, undefined when the symbol is undocumented. */\n doc: string | undefined;\n};\n\n/** A GIR symbol the reference indexes, discriminated by `kind` and carrying the GIR node its page renders from. */\ntype GiSymbolEntry =\n | (GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass }) |\n (GiSymbolBase & { kind: \"record\"; record: GirRecord }) |\n (GiSymbolBase & { kind: \"enum\"; enumeration: GirEnum }) |\n (GiSymbolBase & { kind: \"callback\"; callback: GirCallback }) |\n (GiSymbolBase & { kind: \"alias\"; alias: GirAlias }) |\n (GiSymbolBase & { kind: \"function\"; fn: GirFunction }) |\n (GiSymbolBase & { kind: \"constant\"; constant: GirConstant });\n\ntype SymbolPageOptions = {\n library: Library;\n elementNameFor: (namespaceName: string, className: string) => string | undefined;\n};\n\ntype StaticSectionOptions = {\n title: string;\n intro: string;\n context: ModuleContext;\n callables: GirFunction[];\n siblings: GirFunction[];\n returnTypeOverride?: string;\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n};\n\ntype PropertyAccessorSetup = {\n context: ModuleContext;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n};\n\ntype MetaDocEntry = { name: string; meta: string; doc: string };\ntype SignalDocEntry = { name: string; signature: string; doc: string; origin: string | undefined };\ntype ResolvedRecordField = NonNullable<ReturnType<typeof resolveRecordFieldEntry>>;\n\nconst qualifiedName = (entry: GiSymbolBase): string => `${entry.namespace.name}.${entry.name}`;\n\nconst frontmatter = (entry: GiSymbolBase, kindLabel: string): string => {\n const sentence = firstSentence(entry.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${qualifiedName(entry)} ${kindLabel}.`;\n\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst kindLine = (kindLabel: string, namespace: GirNamespace): string =>\n `\\`${kindLabel}\\` in \\`@gtkx/gi/${namespaceDirectory(namespace)}\\``;\n\nconst importBlock = (entry: GiSymbolBase): string =>\n `\\`\\`\\`ts\\nimport * as ${entry.namespace.name} from \"@gtkx/gi/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst pageHeader = (entry: GiSymbolEntry, kindLabel: string): string[] => [\n frontmatter(entry, kindLabel),\n `# ${qualifiedName(entry)}`,\n kindLine(kindLabel, entry.namespace),\n docMarkdown(entry.doc),\n importBlock(entry),\n];\n\nconst qualifiedClassName = (namespaceName: string, className: string): string =>\n `${namespaceName}.${pascalCase(className)}`;\n\nconst elementNote = (entry: GiSymbolBase & { klass: GirClass }, options: SymbolPageOptions): string[] => {\n const glibName = options.elementNameFor(entry.namespace.name, entry.klass.name);\n\n if (glibName === undefined) {\n return [];\n }\n\n return [\n `Also available as the \\`${glibName}\\` JSX element from ` +\n `\\`@gtkx/jsx/${namespaceDirectory(entry.namespace)}\\`; the \\`${glibName}\\` element page ` +\n \"documents the JSX props.\",\n ];\n};\n\nconst hierarchySection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const ancestors = [...ancestorChain(library, entry.klass, entry.namespace.name)].slice(1).toReversed();\n\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, library).map((iface) =>\n qualifiedClassName(iface.namespace.name, iface.klass.name),\n );\n\n if (ancestors.length === 0 && interfaces.length === 0) {\n return [];\n }\n\n const lines = [\"## Hierarchy\"];\n\n if (ancestors.length > 0) {\n const parts = ancestors.map(\n (ancestor) => `\\`${qualifiedClassName(ancestor.namespaceName, ancestor.klass.name)}\\``,\n );\n\n parts.push(`**${qualifiedName(entry)}**`);\n lines.push(parts.join(\" → \"));\n }\n\n lines.push(...implementsLine(interfaces));\n\n return lines;\n};\n\nconst prerequisitesLine = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const names = entry.klass.prerequisites.map((name) => {\n const resolved = library.resolveType(entry.namespace.name, name);\n\n if (resolved === undefined || (resolved.kind !== \"class\" && resolved.kind !== \"interface\")) {\n return `\\`${name}\\``;\n }\n\n return `\\`${qualifiedClassName(resolved.namespace.name, resolved.value.name)}\\``;\n });\n\n if (names.length === 0) {\n return [];\n }\n\n return [`Requires ${names.join(\", \")}.`];\n};\n\nconst staticSection = (options: StaticSectionOptions): string[] => {\n const rendered: { name: string; block: string }[] = [];\n\n for (const callable of dedupeCallables(options.callables)) {\n const signature = renderStaticSignature(options.context, callable, {\n returnTypeOverride: options.returnTypeOverride,\n siblings: options.siblings,\n });\n\n if (signature === undefined) {\n continue;\n }\n\n rendered.push({\n name: signature.name,\n block: signatureBlock(signature.name, signature.signature, [docMarkdown(callable.doc)]),\n });\n }\n\n if (rendered.length === 0) {\n return [];\n }\n\n return [options.title, options.intro, ...sortStringsBy(rendered, (item) => item.name).map((item) => item.block)];\n};\n\nconst memberOwners = (entry: GiSymbolBase & { klass: GirClass }, library: Library): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined },\n ...newlyImplementedInterfaces(entry.klass, entry.namespace, library).map((iface) => ({\n klass: iface.klass,\n namespace: iface.namespace,\n origin: qualifiedClassName(iface.namespace.name, iface.klass.name),\n })),\n];\n\nconst interfaceMethodNames = (library: Library, owner: MemberOwner): string[] => {\n const context = docsSignatureContext(owner.namespace, library);\n const className = pascalCase(owner.klass.name);\n const methods = dedupeCallables(owner.klass.methods);\n\n const scope = instanceScope(className, {\n constructors: dedupeCallables(owner.klass.constructors),\n functions: dedupeCallables(owner.klass.functions),\n methods,\n });\n\n const names: string[] = [];\n\n for (const callable of methods) {\n const rename = reservedSignalMemberRename(className, callable);\n const rendered = renderInstanceMethodSignature(context, { ...callable, doc: undefined }, scope, rename);\n\n if (rendered === undefined) {\n continue;\n }\n\n names.push(rename ?? methodExportName(callable));\n }\n\n return names;\n};\n\nconst propertyAccessorSetup = (\n owner: MemberOwner,\n library: Library,\n isUseClassRenames: boolean,\n): PropertyAccessorSetup => {\n const claimedNames = new Set(\n isUseClassRenames\n ? classMethodEntries(library, owner.namespace, owner.klass).map((item) => item.name)\n : interfaceMethodNames(library, owner),\n );\n\n return {\n context: docsSignatureContext(owner.namespace, library),\n claimedNames,\n methodByName: indexMethodsByName(dedupeCallables(owner.klass.methods)),\n };\n};\n\nconst propertyMeta = (property: GirProperty, accessor: ResolvedAccessor, origin: string | undefined): string => {\n const meta: string[] = [`\\`${accessor.tsType}\\``];\n\n if (property.defaultValue !== undefined) {\n meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n }\n\n if (property.constructOnly) {\n meta.push(\"construct-only\");\n }\n\n if (!accessor.isWritable) {\n meta.push(\"read-only\");\n } else if (!accessor.hasGetter) {\n meta.push(\"write-only\");\n }\n\n if (origin !== undefined) {\n meta.push(`from \\`${origin}\\``);\n }\n\n return meta.join(\" · \");\n};\n\nconst sortedMetaBlocks = (entries: MetaDocEntry[]): string[] =>\n sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item.name, item.meta, item.doc));\n\nconst ownerPropertyEntries = (owner: MemberOwner, setup: PropertyAccessorSetup, seen: Set<string>): MetaDocEntry[] => {\n const entries: MetaDocEntry[] = [];\n\n for (const property of owner.klass.properties) {\n const accessor = resolveAccessor({\n context: setup.context,\n property,\n claimedNames: setup.claimedNames,\n methodByName: setup.methodByName,\n });\n\n if (accessor === undefined || seen.has(accessor.jsName)) {\n continue;\n }\n\n seen.add(accessor.jsName);\n\n entries.push({\n name: accessor.jsName,\n meta: propertyMeta(property, accessor, owner.origin),\n doc: docMarkdown(property.doc),\n });\n }\n\n return entries;\n};\n\nconst propertiesSection = (\n entry: GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass },\n library: Library,\n): string[] => {\n const seen: Set<string> = new Set();\n const entries: MetaDocEntry[] = [];\n\n for (const [index, owner] of memberOwners(entry, library).entries()) {\n const isUseClassRenames = index === 0 && entry.kind === \"class\";\n const setup = propertyAccessorSetup(owner, library, isUseClassRenames);\n entries.push(...ownerPropertyEntries(owner, setup, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n const intro =\n \"Properties are read and written as instance fields; changes can be observed with \" +\n \"`connect(\\\"notify::<property-name>\\\", handler)`. Properties inherited from ancestors are \" +\n \"documented on their own pages.\";\n\n return [\"## Properties\", intro, ...sortedMetaBlocks(entries)];\n};\n\nconst ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<string>): SignalDocEntry[] => {\n const entries: SignalDocEntry[] = [];\n\n for (const signal of owner.klass.signals) {\n if (seen.has(signal.name)) {\n continue;\n }\n\n seen.add(signal.name);\n\n entries.push({\n name: signal.name,\n signature: renderDocsSignalHandlerType(library, signal),\n doc: docMarkdown(signal.doc),\n origin: owner.origin,\n });\n }\n\n return entries;\n};\n\nconst signalsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {\n const seen: Set<string> = new Set();\n const entries: SignalDocEntry[] = [];\n\n for (const owner of memberOwners(entry, library)) {\n entries.push(...ownerSignalEntries(owner, library, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n const intro =\n \"Connect with `instance.connect(\\\"<signal>\\\", handler)` or `instance.on(\\\"<signal>\\\", handler)`. \" +\n \"Signals inherited from ancestors are documented on their own pages.\";\n\n return [\"## Signals\", intro, ...originSignatureBlocks(entries)];\n};\n\nconst classMethodsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] =>\n methodsSectionBlocks(\n classMethodEntries(library, entry.namespace, entry.klass),\n \"Methods are called on instances. Methods inherited from ancestors are documented on their own pages.\",\n );\n\nconst classPage = (\n entry: GiSymbolBase & { kind: \"class\" | \"interface\"; klass: GirClass },\n options: SymbolPageOptions,\n): string => {\n const { library } = options;\n const qualified = qualifiedName(entry);\n const docsContext = docsSignatureContext(entry.namespace, library);\n const constructorsIntro = `Constructors are called on the class: \\`${qualified}.new(...)\\`.`;\n const staticIntro = `Static methods are called on the class: \\`${qualified}.<method>(...)\\`.`;\n const staticSiblings = [...entry.klass.constructors, ...entry.klass.functions];\n\n return joinSections([\n ...pageHeader(entry, entry.kind),\n ...elementNote(entry, options),\n ...(entry.kind === \"interface\" ? prerequisitesLine(entry, library) : hierarchySection(entry, library)),\n ...staticSection({\n title: \"## Constructors\",\n intro: constructorsIntro,\n context: docsContext,\n callables: entry.klass.constructors,\n siblings: staticSiblings,\n returnTypeOverride: qualified,\n }),\n ...staticSection({\n title: \"## Static methods\",\n intro: staticIntro,\n context: docsContext,\n callables: entry.klass.functions,\n siblings: staticSiblings,\n }),\n ...propertiesSection(entry, library),\n ...signalsSection(entry, library),\n ...classMethodsSection(entry, library),\n ]);\n};\n\nconst renderSymbolPage = (entry: GiSymbolEntry, options: SymbolPageOptions): string => {\n switch (entry.kind) {\n case \"class\":\n case \"interface\": {\n return classPage(entry, options);\n }\n case \"record\": {\n return recordPage(entry, options.library);\n }\n case \"enum\": {\n return enumPage(entry);\n }\n case \"callback\": {\n return callbackPage(entry, options.library);\n }\n case \"alias\": {\n return aliasPage(entry, options.library);\n }\n case \"function\": {\n return functionPage(entry, options.library);\n }\n case \"constant\": {\n return constantPage(entry, options.library);\n }\n }\n};\n\nconst recordInstanceEntries = (context: ModuleContext, record: GirRecord): SignatureEntry[] => {\n const entries: SignatureEntry[] = [];\n\n for (const callable of dedupeCallables(record.methods)) {\n const rendered = renderStaticSignature(context, callable);\n\n if (rendered === undefined) {\n continue;\n }\n\n entries.push({ name: rendered.name, signature: rendered.signature, doc: docMarkdown(callable.doc) });\n }\n\n return sortStringsBy(entries, (item) => item.name);\n};\n\nconst recordPage = (entry: GiSymbolBase & { kind: \"record\"; record: GirRecord }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const qualified = qualifiedName(entry);\n const constructorsIntro = `Constructors are called on the class: \\`${qualified}.new(...)\\`.`;\n const staticIntro = `Static methods are called on the class: \\`${qualified}.<method>(...)\\`.`;\n const methodEntries = recordInstanceEntries(docsContext, entry.record);\n const claimedNames = new Set(methodEntries.map((item) => item.name));\n const staticSiblings = [...entry.record.constructors, ...entry.record.functions];\n\n return joinSections([\n ...pageHeader(entry, entry.record.isUnion ? \"union\" : \"record\"),\n ...staticSection({\n title: \"## Constructors\",\n intro: constructorsIntro,\n context: docsContext,\n callables: entry.record.constructors,\n siblings: staticSiblings,\n returnTypeOverride: qualified,\n }),\n ...staticSection({\n title: \"## Static methods\",\n intro: staticIntro,\n context: docsContext,\n callables: entry.record.functions,\n siblings: staticSiblings,\n }),\n ...fieldsSection(entry.record, docsContext, claimedNames),\n ...methodsSectionBlocks(methodEntries, \"Methods are called on instances.\"),\n ]);\n};\n\nconst fieldMeta = (field: ResolvedRecordField): string =>\n [`\\`${field.tsType}\\``, ...(field.isWritable ? [] : [\"read-only\"])].join(\" · \");\n\nconst fieldsSection = (record: GirRecord, context: ModuleContext, claimedNames: Set<string>): string[] => {\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n const entries: MetaDocEntry[] = [];\n\n for (const slot of slots) {\n const field = resolveRecordFieldEntry(context, slot, claimedNames);\n\n if (field === undefined) {\n continue;\n }\n\n entries.push({ name: field.jsName, meta: fieldMeta(field), doc: docMarkdown(field.doc) });\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n return [\"## Fields\", ...sortedMetaBlocks(entries)];\n};\n\nconst enumPage = (entry: GiSymbolBase & { kind: \"enum\"; enumeration: GirEnum }): string => {\n const { enumeration } = entry;\n const kindLabel = enumeration.errorDomain === undefined ? enumeration.kind : \"error domain\";\n const qualified = qualifiedName(entry);\n\n const rows = enumeration.members.map((member) => {\n const description = firstSentence(member.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| \\`${enumMemberKey(member.name)}\\` | \\`${member.value}\\` | ${description} |`;\n });\n\n const usage =\n enumeration.errorDomain === undefined\n ? `Members are accessed as \\`${qualified}.<member>\\`.`\n : `Members are error codes for the \\`${enumeration.errorDomain}\\` GError domain, ` +\n `accessed as \\`${qualified}.<member>\\`.`;\n\n const table = [\"| Member | Value | Description |\", \"| --- | --- | --- |\", ...rows].join(\"\\n\");\n\n return joinSections([...pageHeader(entry, kindLabel), \"## Members\", usage, table]);\n};\n\nconst callbackPage = (entry: GiSymbolBase & { kind: \"callback\"; callback: GirCallback }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const fn = callbackAsFunction(entry.callback);\n const parameters = renderMethodSignature(docsContext, fn);\n const signature = `type ${entry.name} = (${parameters}) => ${renderMethodReturnType(docsContext, fn)}`;\n\n return joinSections([...pageHeader(entry, \"callback\"), \"## Signature\", `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``]);\n};\n\nconst aliasPage = (entry: GiSymbolBase & { kind: \"alias\"; alias: GirAlias }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const category = entry.alias.cType === undefined ? undefined : primitiveCategory(entry.alias.cType);\n const target = category === \"gtype\" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(docsContext, entry.alias.target);\n\n return joinSections([...pageHeader(entry, \"alias\"), `\\`\\`\\`ts\\ntype ${entry.name} = ${target}\\n\\`\\`\\``]);\n};\n\nconst functionSignature = (context: ModuleContext, name: string, fn: GirFunction, siblings: GirFunction[]): string => {\n const finishFn = matchStaticFinishFunction(context, fn, siblings);\n\n if (finishFn !== undefined) {\n const { signature, returnType } = renderPromisifiedSignature(context, fn, finishFn);\n\n return `function ${name}(${signature}): ${returnType}`;\n }\n\n return `function ${name}(${renderMethodSignature(context, fn)}): ${renderMethodReturnType(context, fn)}`;\n};\n\nconst functionPage = (entry: GiSymbolBase & { kind: \"function\"; fn: GirFunction }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const signature = functionSignature(docsContext, entry.name, entry.fn, entry.namespace.functions);\n\n return joinSections([...pageHeader(entry, \"function\"), `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``]);\n};\n\nconst constantPage = (entry: GiSymbolBase & { kind: \"constant\"; constant: GirConstant }, library: Library): string => {\n const docsContext = docsSignatureContext(entry.namespace, library);\n const type = renderDocsType(library, entry.constant.type, false);\n\n return joinSections([\n ...pageHeader(entry, \"constant\"),\n `\\`\\`\\`ts\\nconst ${entry.name}: ${type} = ${constantLiteral(docsContext, entry.constant)}\\n\\`\\`\\``,\n ]);\n};\n\nexport { renderSymbolPage, type GiSymbolEntry, type SymbolPageOptions };\n"]}
@@ -1,4 +1,3 @@
1
- /** The freshness sentinel of the `@gtkx/gi` store, derived purely from the GIR inputs. */
2
1
  type GiFingerprint = {
3
2
  value: string;
4
3
  girFiles: string[];
@@ -9,15 +8,13 @@ type ModuleExport = {
9
8
  module: string;
10
9
  export: string;
11
10
  };
12
- /** The `@gtkx/react` element config that shapes the generated `@gtkx/jsx` store. */
13
11
  type JsxFingerprintInput = {
14
12
  reactVersion: string;
15
13
  components: Record<string, ModuleExport>;
16
14
  lazyElements: string[];
17
15
  props: Record<string, ModuleExport>;
18
- omitProps: Record<string, string[]>;
16
+ omittedProps: Record<string, string[]>;
19
17
  };
20
- /** The freshness sentinel of the `@gtkx/jsx` store, derived from the React element config. */
21
18
  type JsxFingerprint = {
22
19
  value: string;
23
20
  intrinsicElementCount: number;
@@ -27,7 +24,7 @@ declare const computeGiFingerprint: (girFiles: string[], libraries: string[], gi
27
24
  declare const isGiStoreFresh: (giStoreDir: string, libraries: string[], girPath: string[]) => boolean;
28
25
  declare const computeJsxFingerprint: (input: JsxFingerprintInput, intrinsicElementCount: number) => JsxFingerprint;
29
26
  declare const jsxStoreFreshness: (jsxStoreDir: string, input: JsxFingerprintInput) => {
30
- fresh: boolean;
27
+ isFresh: boolean;
31
28
  intrinsicElementCount: number;
32
29
  };
33
30
  export { FINGERPRINT_FILENAME, computeGiFingerprint, isGiStoreFresh, computeJsxFingerprint, jsxStoreFreshness, type GiFingerprint, type JsxFingerprintInput, type JsxFingerprint, };
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAOA,0FAA0F;AAC1F,KAAK,aAAa,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,oFAAoF;AACpF,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC,CAAC;AAEF,8FAA8F;AAC9F,KAAK,cAAc,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;CACjC,CAAC;AAGF,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAsCzD,QAAA,MAAM,oBAAoB,GACtB,UAAU,MAAM,EAAE,EAClB,WAAW,MAAM,EAAE,EACnB,SAAS,MAAM,EAAE,KAClB,aAKD,CAAC;AAEH,QAAA,MAAM,cAAc,GAChB,YAAY,MAAM,EAClB,WAAW,MAAM,EAAE,EACnB,SAAS,MAAM,EAAE,KAClB,OAwBF,CAAC;AAyBF,QAAA,MAAM,qBAAqB,GAAI,OAAO,mBAAmB,EAAE,uBAAuB,MAAM,KAAG,cAGzF,CAAC;AAEH,QAAA,MAAM,iBAAiB,GACnB,aAAa,MAAM,EACnB,OAAO,mBAAmB,KAC3B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAkBjD,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACtB,CAAC"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;CACjC,CAAC;AAGF,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAoCzD,QAAA,MAAM,oBAAoB,GACtB,UAAU,MAAM,EAAE,EAClB,WAAW,MAAM,EAAE,EACnB,SAAS,MAAM,EAAE,KAClB,aAKD,CAAC;AAEH,QAAA,MAAM,cAAc,GAChB,YAAY,MAAM,EAClB,WAAW,MAAM,EAAE,EACnB,SAAS,MAAM,EAAE,KAClB,OAwBF,CAAC;AAyBF,QAAA,MAAM,qBAAqB,GAAI,OAAO,mBAAmB,EAAE,uBAAuB,MAAM,KAAG,cAGzF,CAAC;AAEH,QAAA,MAAM,iBAAiB,GACnB,aAAa,MAAM,EACnB,OAAO,mBAAmB,KAC3B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAkBnD,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACtB,CAAC"}
@@ -9,8 +9,6 @@ const FINGERPRINT_FILENAME = ".codegen-fingerprint.json";
9
9
  const CODEGEN_VERSION = require("../package.json").version;
10
10
  const OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..", "overrides");
11
11
  const sortAlpha = (values) => sortStrings(values).join(",");
12
- // The overrides are copied verbatim into the store, so editing one changes the output even though no
13
- // GIR file moved. Without them in the hash a stale override survives every non-forced run.
14
12
  const overrideFiles = () => {
15
13
  if (!existsSync(OVERRIDES_ROOT)) {
16
14
  return [];
@@ -66,7 +64,7 @@ const isGiStoreFresh = (giStoreDir, libraries, girPath) => {
66
64
  };
67
65
  const hasMatchingRecordedInputs = (sentinel, libraries, girPath) => sortAlpha(sentinel.libraries) === sortAlpha(libraries) && sortAlpha(sentinel.girPath ?? []) === sortAlpha(girPath);
68
66
  const serializeModuleExports = (map) => sortStrings(Object.keys(map)).map((type) => [type, map[type]?.module ?? "", map[type]?.export ?? ""]);
69
- const serializeOmitProps = (map) => sortStrings(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);
67
+ const serializeOmittedProps = (map) => sortStrings(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);
70
68
  const hashJsx = (input) => createHash("sha256")
71
69
  .update(JSON.stringify([
72
70
  CODEGEN_VERSION,
@@ -74,7 +72,7 @@ const hashJsx = (input) => createHash("sha256")
74
72
  serializeModuleExports(input.components),
75
73
  sortStrings(input.lazyElements),
76
74
  serializeModuleExports(input.props),
77
- serializeOmitProps(input.omitProps),
75
+ serializeOmittedProps(input.omittedProps),
78
76
  ]))
79
77
  .digest("hex");
80
78
  const computeJsxFingerprint = (input, intrinsicElementCount) => ({
@@ -84,18 +82,18 @@ const computeJsxFingerprint = (input, intrinsicElementCount) => ({
84
82
  const jsxStoreFreshness = (jsxStoreDir, input) => {
85
83
  const sentinelPath = join(jsxStoreDir, FINGERPRINT_FILENAME);
86
84
  if (!existsSync(sentinelPath)) {
87
- return { fresh: false, intrinsicElementCount: 0 };
85
+ return { isFresh: false, intrinsicElementCount: 0 };
88
86
  }
89
87
  let sentinel;
90
88
  try {
91
89
  sentinel = JSON.parse(readFileSync(sentinelPath, "utf8"));
92
90
  }
93
91
  catch {
94
- return { fresh: false, intrinsicElementCount: 0 };
92
+ return { isFresh: false, intrinsicElementCount: 0 };
95
93
  }
96
94
  return sentinel.value === hashJsx(input)
97
- ? { fresh: true, intrinsicElementCount: sentinel.intrinsicElementCount }
98
- : { fresh: false, intrinsicElementCount: 0 };
95
+ ? { isFresh: true, intrinsicElementCount: sentinel.intrinsicElementCount }
96
+ : { isFresh: false, intrinsicElementCount: 0 };
99
97
  };
100
98
  export { FINGERPRINT_FILENAME, computeGiFingerprint, isGiStoreFresh, computeJsxFingerprint, jsxStoreFreshness, };
101
99
  //# sourceMappingURL=fingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { createHash } from \"node:crypto\";\nimport { type Dirent, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/** The freshness sentinel of the `@gtkx/gi` store, derived purely from the GIR inputs. */\ntype GiFingerprint = {\n value: string;\n girFiles: string[];\n libraries: string[];\n girPath?: string[];\n};\n\ntype ModuleExport = { module: string; export: string };\n\n/** The `@gtkx/react` element config that shapes the generated `@gtkx/jsx` store. */\ntype JsxFingerprintInput = {\n reactVersion: string;\n components: Record<string, ModuleExport>;\n lazyElements: string[];\n props: Record<string, ModuleExport>;\n omitProps: Record<string, string[]>;\n};\n\n/** The freshness sentinel of the `@gtkx/jsx` store, derived from the React element config. */\ntype JsxFingerprint = {\n value: string;\n intrinsicElementCount: number;\n};\n\nconst require = createRequire(import.meta.url);\nconst FINGERPRINT_FILENAME = \".codegen-fingerprint.json\";\nconst CODEGEN_VERSION: string = (require(\"../package.json\") as { version: string }).version;\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"overrides\");\n\nconst sortAlpha = (values: string[]): string => sortStrings(values).join(\",\");\n\n// The overrides are copied verbatim into the store, so editing one changes the output even though no\n// GIR file moved. Without them in the hash a stale override survives every non-forced run.\nconst overrideFiles = (): string[] => {\n if (!existsSync(OVERRIDES_ROOT)) {\n return [];\n }\n\n return readdirSync(OVERRIDES_ROOT, { recursive: true, withFileTypes: true })\n .filter((entry: Dirent) => entry.isFile())\n .map((entry: Dirent) => join(entry.parentPath, entry.name));\n};\n\nconst hashGi = (girFiles: string[], libraries: string[], girPath: string[]): string => {\n const hash = createHash(\"sha256\");\n hash.update(CODEGEN_VERSION);\n hash.update(\"\\n\");\n hash.update(sortAlpha(libraries));\n hash.update(\"\\n\");\n hash.update(sortAlpha(girPath));\n hash.update(\"\\n\");\n const hashedFiles = sortStrings([...girFiles, ...overrideFiles()]);\n\n for (const file of hashedFiles) {\n hash.update(\"\\n\");\n hash.update(file);\n hash.update(\"\\0\");\n hash.update(readFileSync(file));\n }\n\n return hash.digest(\"hex\");\n};\n\nconst computeGiFingerprint = (\n girFiles: string[],\n libraries: string[],\n girPath: string[],\n): GiFingerprint => ({\n value: hashGi(girFiles, libraries, girPath),\n girFiles,\n libraries,\n girPath,\n});\n\nconst isGiStoreFresh = (\n giStoreDir: string,\n libraries: string[],\n girPath: string[],\n): boolean => {\n const sentinelPath = join(giStoreDir, FINGERPRINT_FILENAME);\n\n if (!existsSync(sentinelPath)) {\n return false;\n }\n\n let sentinel: GiFingerprint;\n\n try {\n sentinel = JSON.parse(readFileSync(sentinelPath, \"utf8\")) as GiFingerprint;\n } catch {\n return false;\n }\n\n if (!hasMatchingRecordedInputs(sentinel, libraries, girPath)) {\n return false;\n }\n\n try {\n return hashGi(sentinel.girFiles, sentinel.libraries, girPath) === sentinel.value;\n } catch {\n return false;\n }\n};\n\nconst hasMatchingRecordedInputs = (sentinel: GiFingerprint, libraries: string[], girPath: string[]): boolean =>\n sortAlpha(sentinel.libraries) === sortAlpha(libraries) && sortAlpha(sentinel.girPath ?? []) === sortAlpha(girPath);\n\nconst serializeModuleExports = (map: Record<string, ModuleExport>): [string, string, string][] =>\n sortStrings(Object.keys(map)).map((type) => [type, map[type]?.module ?? \"\", map[type]?.export ?? \"\"]);\n\nconst serializeOmitProps = (map: Record<string, string[]>): [string, string][] =>\n sortStrings(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);\n\nconst hashJsx = (input: JsxFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n CODEGEN_VERSION,\n input.reactVersion,\n serializeModuleExports(input.components),\n sortStrings(input.lazyElements),\n serializeModuleExports(input.props),\n serializeOmitProps(input.omitProps),\n ]),\n )\n .digest(\"hex\");\n\nconst computeJsxFingerprint = (input: JsxFingerprintInput, intrinsicElementCount: number): JsxFingerprint => ({\n value: hashJsx(input),\n intrinsicElementCount,\n});\n\nconst jsxStoreFreshness = (\n jsxStoreDir: string,\n input: JsxFingerprintInput,\n): { fresh: boolean; intrinsicElementCount: number } => {\n const sentinelPath = join(jsxStoreDir, FINGERPRINT_FILENAME);\n\n if (!existsSync(sentinelPath)) {\n return { fresh: false, intrinsicElementCount: 0 };\n }\n\n let sentinel: JsxFingerprint;\n\n try {\n sentinel = JSON.parse(readFileSync(sentinelPath, \"utf8\")) as JsxFingerprint;\n } catch {\n return { fresh: false, intrinsicElementCount: 0 };\n }\n\n return sentinel.value === hashJsx(input)\n ? { fresh: true, intrinsicElementCount: sentinel.intrinsicElementCount }\n : { fresh: false, intrinsicElementCount: 0 };\n};\n\nexport {\n FINGERPRINT_FILENAME,\n computeGiFingerprint,\n isGiStoreFresh,\n computeJsxFingerprint,\n jsxStoreFreshness,\n type GiFingerprint,\n type JsxFingerprintInput,\n type JsxFingerprint,\n};\n"]}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { createHash } from \"node:crypto\";\nimport { type Dirent, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype GiFingerprint = {\n value: string;\n girFiles: string[];\n libraries: string[];\n girPath?: string[];\n};\n\ntype ModuleExport = { module: string; export: string };\n\ntype JsxFingerprintInput = {\n reactVersion: string;\n components: Record<string, ModuleExport>;\n lazyElements: string[];\n props: Record<string, ModuleExport>;\n omittedProps: Record<string, string[]>;\n};\n\ntype JsxFingerprint = {\n value: string;\n intrinsicElementCount: number;\n};\n\nconst require = createRequire(import.meta.url);\nconst FINGERPRINT_FILENAME = \".codegen-fingerprint.json\";\nconst CODEGEN_VERSION: string = (require(\"../package.json\") as { version: string }).version;\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"overrides\");\n\nconst sortAlpha = (values: string[]): string => sortStrings(values).join(\",\");\n\nconst overrideFiles = (): string[] => {\n if (!existsSync(OVERRIDES_ROOT)) {\n return [];\n }\n\n return readdirSync(OVERRIDES_ROOT, { recursive: true, withFileTypes: true })\n .filter((entry: Dirent) => entry.isFile())\n .map((entry: Dirent) => join(entry.parentPath, entry.name));\n};\n\nconst hashGi = (girFiles: string[], libraries: string[], girPath: string[]): string => {\n const hash = createHash(\"sha256\");\n hash.update(CODEGEN_VERSION);\n hash.update(\"\\n\");\n hash.update(sortAlpha(libraries));\n hash.update(\"\\n\");\n hash.update(sortAlpha(girPath));\n hash.update(\"\\n\");\n const hashedFiles = sortStrings([...girFiles, ...overrideFiles()]);\n\n for (const file of hashedFiles) {\n hash.update(\"\\n\");\n hash.update(file);\n hash.update(\"\\0\");\n hash.update(readFileSync(file));\n }\n\n return hash.digest(\"hex\");\n};\n\nconst computeGiFingerprint = (\n girFiles: string[],\n libraries: string[],\n girPath: string[],\n): GiFingerprint => ({\n value: hashGi(girFiles, libraries, girPath),\n girFiles,\n libraries,\n girPath,\n});\n\nconst isGiStoreFresh = (\n giStoreDir: string,\n libraries: string[],\n girPath: string[],\n): boolean => {\n const sentinelPath = join(giStoreDir, FINGERPRINT_FILENAME);\n\n if (!existsSync(sentinelPath)) {\n return false;\n }\n\n let sentinel: GiFingerprint;\n\n try {\n sentinel = JSON.parse(readFileSync(sentinelPath, \"utf8\")) as GiFingerprint;\n } catch {\n return false;\n }\n\n if (!hasMatchingRecordedInputs(sentinel, libraries, girPath)) {\n return false;\n }\n\n try {\n return hashGi(sentinel.girFiles, sentinel.libraries, girPath) === sentinel.value;\n } catch {\n return false;\n }\n};\n\nconst hasMatchingRecordedInputs = (sentinel: GiFingerprint, libraries: string[], girPath: string[]): boolean =>\n sortAlpha(sentinel.libraries) === sortAlpha(libraries) && sortAlpha(sentinel.girPath ?? []) === sortAlpha(girPath);\n\nconst serializeModuleExports = (map: Record<string, ModuleExport>): [string, string, string][] =>\n sortStrings(Object.keys(map)).map((type) => [type, map[type]?.module ?? \"\", map[type]?.export ?? \"\"]);\n\nconst serializeOmittedProps = (map: Record<string, string[]>): [string, string][] =>\n sortStrings(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);\n\nconst hashJsx = (input: JsxFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n CODEGEN_VERSION,\n input.reactVersion,\n serializeModuleExports(input.components),\n sortStrings(input.lazyElements),\n serializeModuleExports(input.props),\n serializeOmittedProps(input.omittedProps),\n ]),\n )\n .digest(\"hex\");\n\nconst computeJsxFingerprint = (input: JsxFingerprintInput, intrinsicElementCount: number): JsxFingerprint => ({\n value: hashJsx(input),\n intrinsicElementCount,\n});\n\nconst jsxStoreFreshness = (\n jsxStoreDir: string,\n input: JsxFingerprintInput,\n): { isFresh: boolean; intrinsicElementCount: number } => {\n const sentinelPath = join(jsxStoreDir, FINGERPRINT_FILENAME);\n\n if (!existsSync(sentinelPath)) {\n return { isFresh: false, intrinsicElementCount: 0 };\n }\n\n let sentinel: JsxFingerprint;\n\n try {\n sentinel = JSON.parse(readFileSync(sentinelPath, \"utf8\")) as JsxFingerprint;\n } catch {\n return { isFresh: false, intrinsicElementCount: 0 };\n }\n\n return sentinel.value === hashJsx(input)\n ? { isFresh: true, intrinsicElementCount: sentinel.intrinsicElementCount }\n : { isFresh: false, intrinsicElementCount: 0 };\n};\n\nexport {\n FINGERPRINT_FILENAME,\n computeGiFingerprint,\n isGiStoreFresh,\n computeJsxFingerprint,\n jsxStoreFreshness,\n type GiFingerprint,\n type JsxFingerprintInput,\n type JsxFingerprint,\n};\n"]}
package/dist/gi.d.ts CHANGED
@@ -1,18 +1,10 @@
1
1
  import type { Library } from "./gir/library.js";
2
- import { type GiStoreOptions } from "./store/gi-store.js";
2
+ import type { StoreOptions } from "./store/store-fs.js";
3
3
  type GiCodegenOptions = {
4
- gi: GiStoreOptions;
4
+ gi: StoreOptions;
5
5
  libraries: string[];
6
6
  girPath: string[];
7
7
  };
8
- /**
9
- * Generates the `@gtkx/gi` store from the loaded GIR library and links it into the project. This is the
10
- * react-free half of codegen: it can run before `@gtkx/gi` (or `@gtkx/react`) exists, since it produces them.
11
- *
12
- * @returns The number of namespaces written.
13
- */
14
8
  declare const runGiCodegen: (library: Library, options: GiCodegenOptions) => number;
15
- export { isGiStoreFresh } from "./fingerprint.js";
16
- export type { GiStoreOptions } from "./store/gi-store.js";
17
- export { runGiCodegen, type GiCodegenOptions };
9
+ export { runGiCodegen };
18
10
  //# sourceMappingURL=gi.d.ts.map
package/dist/gi.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gi.d.ts","sourceRoot":"","sources":["../src/gi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAyB,KAAK,cAAc,EAAgB,MAAM,qBAAqB,CAAC;AAG/F,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,cAAc,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,SAAS,gBAAgB,KAAG,MAYnE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"gi.d.ts","sourceRoot":"","sources":["../src/gi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,YAAY,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,SAAS,gBAAgB,KAAG,MAYnE,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/gi.js CHANGED
@@ -2,12 +2,6 @@ import { computeGiFingerprint } from "./fingerprint.js";
2
2
  import { namespaceDirectory } from "./gir/namespace.js";
3
3
  import { writeGiStore } from "./store/gi-store.js";
4
4
  import { generateNamespaceModule } from "./store/gi/pipeline.js";
5
- /**
6
- * Generates the `@gtkx/gi` store from the loaded GIR library and links it into the project. This is the
7
- * react-free half of codegen: it can run before `@gtkx/gi` (or `@gtkx/react`) exists, since it produces them.
8
- *
9
- * @returns The number of namespaces written.
10
- */
11
5
  const runGiCodegen = (library, options) => {
12
6
  const { gi, libraries, girPath } = options;
13
7
  const namespaces = Array.from(library.namespaces.values(), (namespace) => ({
@@ -18,6 +12,5 @@ const runGiCodegen = (library, options) => {
18
12
  writeGiStore(gi, namespaces, fingerprint);
19
13
  return library.namespaces.size;
20
14
  };
21
- export { isGiStoreFresh } from "./fingerprint.js";
22
15
  export { runGiCodegen };
23
16
  //# sourceMappingURL=gi.js.map
package/dist/gi.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gi.js","sourceRoot":"","sources":["../src/gi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAA8C,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAQjE;;;;;GAKG;AACH,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAyB,EAAU,EAAE;IACzE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3C,MAAM,UAAU,GAAuB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3F,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACxC,SAAS,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC;KACzD,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACzF,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAyB,CAAC","sourcesContent":["import type { Library } from \"./gir/library.js\";\nimport { computeGiFingerprint } from \"./fingerprint.js\";\nimport { namespaceDirectory } from \"./gir/namespace.js\";\nimport { type GiNamespaceInput, type GiStoreOptions, writeGiStore } from \"./store/gi-store.js\";\nimport { generateNamespaceModule } from \"./store/gi/pipeline.js\";\n\ntype GiCodegenOptions = {\n gi: GiStoreOptions;\n libraries: string[];\n girPath: string[];\n};\n\n/**\n * Generates the `@gtkx/gi` store from the loaded GIR library and links it into the project. This is the\n * react-free half of codegen: it can run before `@gtkx/gi` (or `@gtkx/react`) exists, since it produces them.\n *\n * @returns The number of namespaces written.\n */\nconst runGiCodegen = (library: Library, options: GiCodegenOptions): number => {\n const { gi, libraries, girPath } = options;\n\n const namespaces: GiNamespaceInput[] = Array.from(library.namespaces.values(), (namespace) => ({\n directory: namespaceDirectory(namespace),\n rawSource: generateNamespaceModule(namespace, library),\n }));\n\n const fingerprint = computeGiFingerprint(library.girFiles, [...libraries], [...girPath]);\n writeGiStore(gi, namespaces, fingerprint);\n\n return library.namespaces.size;\n};\n\nexport { isGiStoreFresh } from \"./fingerprint.js\";\nexport type { GiStoreOptions } from \"./store/gi-store.js\";\nexport { runGiCodegen, type GiCodegenOptions };\n"]}
1
+ {"version":3,"file":"gi.js","sourceRoot":"","sources":["../src/gi.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAyB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAQjE,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAyB,EAAU,EAAE;IACzE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3C,MAAM,UAAU,GAAuB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3F,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACxC,SAAS,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC;KACzD,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACzF,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import type { Library } from \"./gir/library.js\";\nimport type { StoreOptions } from \"./store/store-fs.js\";\nimport { computeGiFingerprint } from \"./fingerprint.js\";\nimport { namespaceDirectory } from \"./gir/namespace.js\";\nimport { type GiNamespaceInput, writeGiStore } from \"./store/gi-store.js\";\nimport { generateNamespaceModule } from \"./store/gi/pipeline.js\";\n\ntype GiCodegenOptions = {\n gi: StoreOptions;\n libraries: string[];\n girPath: string[];\n};\n\nconst runGiCodegen = (library: Library, options: GiCodegenOptions): number => {\n const { gi, libraries, girPath } = options;\n\n const namespaces: GiNamespaceInput[] = Array.from(library.namespaces.values(), (namespace) => ({\n directory: namespaceDirectory(namespace),\n rawSource: generateNamespaceModule(namespace, library),\n }));\n\n const fingerprint = computeGiFingerprint(library.girFiles, [...libraries], [...girPath]);\n writeGiStore(gi, namespaces, fingerprint);\n\n return library.namespaces.size;\n};\n\nexport { runGiCodegen };\n"]}
@@ -9,7 +9,6 @@ type GirField = {
9
9
  writable: boolean;
10
10
  private: boolean;
11
11
  bits: number | undefined;
12
- /** Members of an anonymous nested `<union>`/`<record>`, which occupies a slot but has no type. */
13
12
  inlineMembers: GirField[] | undefined;
14
13
  inlineIsUnion: boolean;
15
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/gir/field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAG9G,KAAK,QAAQ,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kGAAkG;IAClG,aAAa,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,QAW5D,CAAC;AAkBH,QAAA,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,QAAQ,EAIrE,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/gir/field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAG9G,KAAK,QAAQ,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,aAAa,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,QAW5D,CAAC;AAeH,QAAA,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,SAAS,YAAY,KAAG,QAAQ,EAIrE,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,CAAC"}
package/dist/gir/field.js CHANGED
@@ -12,9 +12,6 @@ const fieldFromNode = (node, context) => ({
12
12
  inlineMembers: undefined,
13
13
  inlineIsUnion: false,
14
14
  });
15
- // A record may embed an anonymous `<union>` or `<record>` instead of naming a type for it. The
16
- // member occupies a real slot and contributes its own size and alignment, but carries no `<type>`,
17
- // so it has to be admitted as a field whose layout comes from its own children.
18
15
  const anonymousMemberFromNode = (node, isUnion, context) => ({
19
16
  name: nameAttr(node),
20
17
  doc: getDoc(node),
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/gir/field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAgBhD,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,OAAqB,EAAY,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;IACpC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC7C,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;IAC7C,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,KAAK;CACvB,CAAC,CAAC;AAEH,+FAA+F;AAC/F,mGAAmG;AACnG,gFAAgF;AAChF,MAAM,uBAAuB,GAAG,CAAC,IAAa,EAAE,OAAgB,EAAE,OAAqB,EAAY,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;IAC3C,aAAa,EAAE,OAAO;CACzB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,OAAqB,EAAc,EAAE,CAAC;IACxE,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7F,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;CAClG,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAiB,CAAC","sourcesContent":["import type { ParseContext, TypeId } from \"./type-id.js\";\nimport { attr, getChild, getChildren, getDoc, intAttr, isAttrTrue, nameAttr, type RawNode } from \"./parse.js\";\nimport { typeRefFromNode } from \"./type-ref.js\";\n\ntype GirField = {\n name: string;\n doc: string | undefined;\n type: TypeId | undefined;\n cType: string | undefined;\n readable: boolean;\n writable: boolean;\n private: boolean;\n bits: number | undefined;\n /** Members of an anonymous nested `<union>`/`<record>`, which occupies a slot but has no type. */\n inlineMembers: GirField[] | undefined;\n inlineIsUnion: boolean;\n};\n\nconst fieldFromNode = (node: RawNode, context: ParseContext): GirField => ({\n name: nameAttr(node),\n doc: getDoc(node),\n type: typeRefFromNode(node, context),\n cType: attr(getChild(node, \"type\"), \"c:type\"),\n readable: isAttrTrue(node, \"readable\", true),\n writable: isAttrTrue(node, \"writable\", false),\n private: isAttrTrue(node, \"private\", false),\n bits: intAttr(node, \"bits\"),\n inlineMembers: undefined,\n inlineIsUnion: false,\n});\n\n// A record may embed an anonymous `<union>` or `<record>` instead of naming a type for it. The\n// member occupies a real slot and contributes its own size and alignment, but carries no `<type>`,\n// so it has to be admitted as a field whose layout comes from its own children.\nconst anonymousMemberFromNode = (node: RawNode, isUnion: boolean, context: ParseContext): GirField => ({\n name: nameAttr(node),\n doc: getDoc(node),\n type: undefined,\n cType: undefined,\n readable: false,\n writable: false,\n private: true,\n bits: undefined,\n inlineMembers: collectFields(node, context),\n inlineIsUnion: isUnion,\n});\n\nconst collectFields = (node: RawNode, context: ParseContext): GirField[] => [\n ...getChildren(node, \"field\").map((field) => fieldFromNode(field, context)),\n ...getChildren(node, \"union\").map((member) => anonymousMemberFromNode(member, true, context)),\n ...getChildren(node, \"record\").map((member) => anonymousMemberFromNode(member, false, context)),\n];\n\nexport { collectFields, fieldFromNode, type GirField };\n"]}
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/gir/field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAehD,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,OAAqB,EAAY,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;IACpC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC7C,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;IAC7C,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,KAAK;CACvB,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,IAAa,EAAE,OAAgB,EAAE,OAAqB,EAAY,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,SAAS;IACf,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;IAC3C,aAAa,EAAE,OAAO;CACzB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,OAAqB,EAAc,EAAE,CAAC;IACxE,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7F,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;CAClG,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAiB,CAAC","sourcesContent":["import type { ParseContext, TypeId } from \"./type-id.js\";\nimport { attr, getChild, getChildren, getDoc, intAttr, isAttrTrue, nameAttr, type RawNode } from \"./parse.js\";\nimport { typeRefFromNode } from \"./type-ref.js\";\n\ntype GirField = {\n name: string;\n doc: string | undefined;\n type: TypeId | undefined;\n cType: string | undefined;\n readable: boolean;\n writable: boolean;\n private: boolean;\n bits: number | undefined;\n inlineMembers: GirField[] | undefined;\n inlineIsUnion: boolean;\n};\n\nconst fieldFromNode = (node: RawNode, context: ParseContext): GirField => ({\n name: nameAttr(node),\n doc: getDoc(node),\n type: typeRefFromNode(node, context),\n cType: attr(getChild(node, \"type\"), \"c:type\"),\n readable: isAttrTrue(node, \"readable\", true),\n writable: isAttrTrue(node, \"writable\", false),\n private: isAttrTrue(node, \"private\", false),\n bits: intAttr(node, \"bits\"),\n inlineMembers: undefined,\n inlineIsUnion: false,\n});\n\nconst anonymousMemberFromNode = (node: RawNode, isUnion: boolean, context: ParseContext): GirField => ({\n name: nameAttr(node),\n doc: getDoc(node),\n type: undefined,\n cType: undefined,\n readable: false,\n writable: false,\n private: true,\n bits: undefined,\n inlineMembers: collectFields(node, context),\n inlineIsUnion: isUnion,\n});\n\nconst collectFields = (node: RawNode, context: ParseContext): GirField[] => [\n ...getChildren(node, \"field\").map((field) => fieldFromNode(field, context)),\n ...getChildren(node, \"union\").map((member) => anonymousMemberFromNode(member, true, context)),\n ...getChildren(node, \"record\").map((member) => anonymousMemberFromNode(member, false, context)),\n];\n\nexport { collectFields, fieldFromNode, type GirField };\n"]}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * The directories to search for `.gir` files, in precedence order: the config's own `girPath`, then
3
+ * `GTKX_GIR_PATH`, then `/usr/share/gir-1.0`, then the girdir pkg-config reports for
4
+ * gobject-introspection-1.0. Duplicates are dropped, and the last two are included only when they exist.
5
+ *
6
+ * @throws If pkg-config is installed but fails while being queried.
7
+ */
1
8
  declare const resolveGirPath: (configGirPath: string[] | undefined) => string[];
2
9
  export { resolveGirPath };
3
10
  //# sourceMappingURL=gir-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gir-path.d.ts","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,cAAc,GAAI,eAAe,MAAM,EAAE,GAAG,SAAS,KAAG,MAAM,EAwBnE,CAAC;AA0CF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"gir-path.d.ts","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,QAAA,MAAM,cAAc,GAAI,eAAe,MAAM,EAAE,GAAG,SAAS,KAAG,MAAM,EAwBnE,CAAC;AA0CF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -2,6 +2,13 @@ import { formatChildProcessError, resolveExecutable } from "@gtkx/utils";
2
2
  import { execFileSync } from "node:child_process";
3
3
  import { existsSync } from "node:fs";
4
4
  const SYSTEM_GIR_PATH = "/usr/share/gir-1.0";
5
+ /**
6
+ * The directories to search for `.gir` files, in precedence order: the config's own `girPath`, then
7
+ * `GTKX_GIR_PATH`, then `/usr/share/gir-1.0`, then the girdir pkg-config reports for
8
+ * gobject-introspection-1.0. Duplicates are dropped, and the last two are included only when they exist.
9
+ *
10
+ * @throws If pkg-config is installed but fails while being queried.
11
+ */
5
12
  const resolveGirPath = (configGirPath) => {
6
13
  const paths = [];
7
14
  if (configGirPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"gir-path.js","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C,MAAM,cAAc,GAAG,CAAC,aAAmC,EAAY,EAAE;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,aAAa,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAE7C,IAAI,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAS,EAAE;IACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,OAAO,IAAI,KAAK,CAAC,8DAA8D,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IAC9C,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAClD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,EAAE;YACvF,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { formatChildProcessError, resolveExecutable } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\nconst SYSTEM_GIR_PATH = \"/usr/share/gir-1.0\";\n\nconst resolveGirPath = (configGirPath: string[] | undefined): string[] => {\n const paths: string[] = [];\n\n if (configGirPath) {\n paths.push(...configGirPath);\n }\n\n const envPath = process.env.GTKX_GIR_PATH;\n\n if (envPath) {\n paths.push(...envPath.split(\":\").filter((path) => path.length > 0));\n }\n\n if (existsSync(SYSTEM_GIR_PATH)) {\n paths.push(SYSTEM_GIR_PATH);\n }\n\n const pkgConfigPath = queryPkgConfigGirDir();\n\n if (pkgConfigPath !== undefined && existsSync(pkgConfigPath)) {\n paths.push(pkgConfigPath);\n }\n\n return [...new Set(paths)];\n};\n\nconst pkgConfigGirDirError = (error: unknown): Error => {\n const details = formatChildProcessError(error);\n const suffix = details ? `:\\n${details}` : \"\";\n\n return new Error(`pkg-config failed querying gobject-introspection-1.0 girdir${suffix}`, { cause: error });\n};\n\nconst resolvePkgConfig = (): string | undefined => {\n try {\n return resolveExecutable(\"pkg-config\");\n } catch {\n return undefined;\n }\n};\n\nconst queryPkgConfigGirDir = (): string | undefined => {\n const pkgConfig = resolvePkgConfig();\n\n if (pkgConfig === undefined) {\n return undefined;\n }\n\n try {\n const output = execFileSync(pkgConfig, [\"--variable=girdir\", \"gobject-introspection-1.0\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const trimmed = output.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n\n throw pkgConfigGirDirError(error);\n }\n};\n\nexport { resolveGirPath };\n"]}
1
+ {"version":3,"file":"gir-path.js","sourceRoot":"","sources":["../../src/gir/gir-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,CAAC,aAAmC,EAAY,EAAE;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,aAAa,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAE7C,IAAI,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAS,EAAE;IACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,OAAO,IAAI,KAAK,CAAC,8DAA8D,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IAC9C,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAClD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,EAAE;YACvF,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { formatChildProcessError, resolveExecutable } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\nconst SYSTEM_GIR_PATH = \"/usr/share/gir-1.0\";\n\n/**\n * The directories to search for `.gir` files, in precedence order: the config's own `girPath`, then\n * `GTKX_GIR_PATH`, then `/usr/share/gir-1.0`, then the girdir pkg-config reports for\n * gobject-introspection-1.0. Duplicates are dropped, and the last two are included only when they exist.\n *\n * @throws If pkg-config is installed but fails while being queried.\n */\nconst resolveGirPath = (configGirPath: string[] | undefined): string[] => {\n const paths: string[] = [];\n\n if (configGirPath) {\n paths.push(...configGirPath);\n }\n\n const envPath = process.env.GTKX_GIR_PATH;\n\n if (envPath) {\n paths.push(...envPath.split(\":\").filter((path) => path.length > 0));\n }\n\n if (existsSync(SYSTEM_GIR_PATH)) {\n paths.push(SYSTEM_GIR_PATH);\n }\n\n const pkgConfigPath = queryPkgConfigGirDir();\n\n if (pkgConfigPath !== undefined && existsSync(pkgConfigPath)) {\n paths.push(pkgConfigPath);\n }\n\n return [...new Set(paths)];\n};\n\nconst pkgConfigGirDirError = (error: unknown): Error => {\n const details = formatChildProcessError(error);\n const suffix = details ? `:\\n${details}` : \"\";\n\n return new Error(`pkg-config failed querying gobject-introspection-1.0 girdir${suffix}`, { cause: error });\n};\n\nconst resolvePkgConfig = (): string | undefined => {\n try {\n return resolveExecutable(\"pkg-config\");\n } catch {\n return undefined;\n }\n};\n\nconst queryPkgConfigGirDir = (): string | undefined => {\n const pkgConfig = resolvePkgConfig();\n\n if (pkgConfig === undefined) {\n return undefined;\n }\n\n try {\n const output = execFileSync(pkgConfig, [\"--variable=girdir\", \"gobject-introspection-1.0\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const trimmed = output.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n\n throw pkgConfigGirDirError(error);\n }\n};\n\nexport { resolveGirPath };\n"]}
@@ -1,6 +1,19 @@
1
+ /** A `libraries` config value: an explicit list, `"*"` for everything installed, or absent for the default. */
1
2
  type LibrarySelection = typeof LIBRARIES_WILDCARD | string[] | undefined;
3
+ /** The `libraries` value that stands for every GIR library installed on the search path. */
2
4
  declare const LIBRARIES_WILDCARD = "*";
5
+ /**
6
+ * Expands a `libraries` config value into the GIR identifiers to generate from: `"Gtk-4.0"` alone when
7
+ * nothing is configured, everything installed for `"*"`, and otherwise the given list with `"Gtk-4.0"`
8
+ * prepended unless it already names a Gtk version.
9
+ *
10
+ * @throws If `"*"` matched no `.gir` file anywhere on the GIR path.
11
+ */
3
12
  declare const resolveLibraries: (libraries: LibrarySelection, girPath: string[]) => string[];
13
+ /**
14
+ * Every GIR library installed on the search path, as sorted `Name-Version` identifiers. A namespace found
15
+ * in more than one version contributes only its highest, and unreadable directories are skipped.
16
+ */
4
17
  declare const discoverGirNamespaces: (girPath: string[]) => string[];
5
18
  export { resolveLibraries, discoverGirNamespaces, type LibrarySelection };
6
19
  //# sourceMappingURL=libraries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG,OAAO,kBAAkB,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAEzE,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAK/B,QAAA,MAAM,gBAAgB,GAAI,WAAW,gBAAgB,EAAE,SAAS,MAAM,EAAE,KAAG,MAAM,EAqBhF,CAAC;AA4CF,QAAA,MAAM,qBAAqB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EAQxD,CAAC;AAkBF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"AAIA,+GAA+G;AAC/G,KAAK,gBAAgB,GAAG,OAAO,kBAAkB,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAEzE,4FAA4F;AAC5F,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAK/B;;;;;;GAMG;AACH,QAAA,MAAM,gBAAgB,GAAI,WAAW,gBAAgB,EAAE,SAAS,MAAM,EAAE,KAAG,MAAM,EAqBhF,CAAC;AA4CF;;;GAGG;AACH,QAAA,MAAM,qBAAqB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EAQxD,CAAC;AAkBF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
@@ -1,9 +1,17 @@
1
1
  import { sortStrings } from "@gtkx/utils";
2
2
  import { readdirSync } from "node:fs";
3
+ /** The `libraries` value that stands for every GIR library installed on the search path. */
3
4
  const LIBRARIES_WILDCARD = "*";
4
5
  const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
5
6
  const DEFAULT_LIBRARIES = ["Gtk-4.0"];
6
7
  const GIR_FILE_SUFFIX = ".gir";
8
+ /**
9
+ * Expands a `libraries` config value into the GIR identifiers to generate from: `"Gtk-4.0"` alone when
10
+ * nothing is configured, everything installed for `"*"`, and otherwise the given list with `"Gtk-4.0"`
11
+ * prepended unless it already names a Gtk version.
12
+ *
13
+ * @throws If `"*"` matched no `.gir` file anywhere on the GIR path.
14
+ */
7
15
  const resolveLibraries = (libraries, girPath) => {
8
16
  if (libraries === undefined) {
9
17
  return [...DEFAULT_LIBRARIES];
@@ -52,6 +60,10 @@ const collectDirNamespaces = (highestByName, dir) => {
52
60
  }
53
61
  }
54
62
  };
63
+ /**
64
+ * Every GIR library installed on the search path, as sorted `Name-Version` identifiers. A namespace found
65
+ * in more than one version contributes only its highest, and unreadable directories are skipped.
66
+ */
55
67
  const discoverGirNamespaces = (girPath) => {
56
68
  const highestByName = new Map();
57
69
  for (const dir of girPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { readdirSync } from \"node:fs\";\n\ntype GirNamespace = { name: string; version: string; identifier: string };\ntype LibrarySelection = typeof LIBRARIES_WILDCARD | string[] | undefined;\n\nconst LIBRARIES_WILDCARD = \"*\";\nconst GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\\d+(?:\\.\\d+)*$/;\nconst DEFAULT_LIBRARIES: string[] = [\"Gtk-4.0\"];\nconst GIR_FILE_SUFFIX = \".gir\";\n\nconst resolveLibraries = (libraries: LibrarySelection, girPath: string[]): string[] => {\n if (libraries === undefined) {\n return [...DEFAULT_LIBRARIES];\n }\n\n if (libraries === LIBRARIES_WILDCARD) {\n const discovered = discoverGirNamespaces(girPath);\n\n if (discovered.length === 0) {\n throw new Error(\n `gtkx.config.ts: \\`libraries: \"*\"\\` matched no .gir files in [${girPath.join(\", \")}]. ` +\n \"Install gobject-introspection data packages, or list the libraries explicitly.\",\n );\n }\n\n return discovered;\n }\n\n const hasGtk = libraries.some((library) => library.startsWith(\"Gtk-\"));\n\n return [...new Set([...(hasGtk ? [] : DEFAULT_LIBRARIES), ...libraries])];\n};\n\nconst readDirEntries = (dir: string): string[] => {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n};\n\nconst parseGirNamespace = (entry: string): GirNamespace | undefined => {\n if (!entry.endsWith(GIR_FILE_SUFFIX)) {\n return undefined;\n }\n\n const identifier = entry.slice(0, -GIR_FILE_SUFFIX.length);\n\n if (!GIR_LIBRARY_PATTERN.test(identifier)) {\n return undefined;\n }\n\n const separator = identifier.indexOf(\"-\");\n\n return { name: identifier.slice(0, separator), version: identifier.slice(separator + 1), identifier };\n};\n\nconst recordHighest = (highestByName: Map<string, GirNamespace>, parsed: GirNamespace): void => {\n const existing = highestByName.get(parsed.name);\n\n if (existing === undefined || compareVersions(parsed.version, existing.version) > 0) {\n highestByName.set(parsed.name, parsed);\n }\n};\n\nconst collectDirNamespaces = (highestByName: Map<string, GirNamespace>, dir: string): void => {\n for (const entry of readDirEntries(dir)) {\n const parsed = parseGirNamespace(entry);\n\n if (parsed !== undefined) {\n recordHighest(highestByName, parsed);\n }\n }\n};\n\nconst discoverGirNamespaces = (girPath: string[]): string[] => {\n const highestByName: Map<string, GirNamespace> = new Map();\n\n for (const dir of girPath) {\n collectDirNamespaces(highestByName, dir);\n }\n\n return sortStrings(highestByName.values().map(({ identifier }) => identifier));\n};\n\nconst compareVersions = (a: string, b: string): number => {\n const aParts = a.split(\".\");\n const bParts = b.split(\".\");\n const length = Math.max(aParts.length, bParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const difference = Number(aParts[index] ?? 0) - Number(bParts[index] ?? 0);\n\n if (difference !== 0) {\n return difference;\n }\n }\n\n return 0;\n};\n\nexport { resolveLibraries, discoverGirNamespaces, type LibrarySelection };\n"]}
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { readdirSync } from \"node:fs\";\n\ntype GirNamespace = { name: string; version: string; identifier: string };\n/** A `libraries` config value: an explicit list, `\"*\"` for everything installed, or absent for the default. */\ntype LibrarySelection = typeof LIBRARIES_WILDCARD | string[] | undefined;\n\n/** The `libraries` value that stands for every GIR library installed on the search path. */\nconst LIBRARIES_WILDCARD = \"*\";\nconst GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\\d+(?:\\.\\d+)*$/;\nconst DEFAULT_LIBRARIES: string[] = [\"Gtk-4.0\"];\nconst GIR_FILE_SUFFIX = \".gir\";\n\n/**\n * Expands a `libraries` config value into the GIR identifiers to generate from: `\"Gtk-4.0\"` alone when\n * nothing is configured, everything installed for `\"*\"`, and otherwise the given list with `\"Gtk-4.0\"`\n * prepended unless it already names a Gtk version.\n *\n * @throws If `\"*\"` matched no `.gir` file anywhere on the GIR path.\n */\nconst resolveLibraries = (libraries: LibrarySelection, girPath: string[]): string[] => {\n if (libraries === undefined) {\n return [...DEFAULT_LIBRARIES];\n }\n\n if (libraries === LIBRARIES_WILDCARD) {\n const discovered = discoverGirNamespaces(girPath);\n\n if (discovered.length === 0) {\n throw new Error(\n `gtkx.config.ts: \\`libraries: \"*\"\\` matched no .gir files in [${girPath.join(\", \")}]. ` +\n \"Install gobject-introspection data packages, or list the libraries explicitly.\",\n );\n }\n\n return discovered;\n }\n\n const hasGtk = libraries.some((library) => library.startsWith(\"Gtk-\"));\n\n return [...new Set([...(hasGtk ? [] : DEFAULT_LIBRARIES), ...libraries])];\n};\n\nconst readDirEntries = (dir: string): string[] => {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n};\n\nconst parseGirNamespace = (entry: string): GirNamespace | undefined => {\n if (!entry.endsWith(GIR_FILE_SUFFIX)) {\n return undefined;\n }\n\n const identifier = entry.slice(0, -GIR_FILE_SUFFIX.length);\n\n if (!GIR_LIBRARY_PATTERN.test(identifier)) {\n return undefined;\n }\n\n const separator = identifier.indexOf(\"-\");\n\n return { name: identifier.slice(0, separator), version: identifier.slice(separator + 1), identifier };\n};\n\nconst recordHighest = (highestByName: Map<string, GirNamespace>, parsed: GirNamespace): void => {\n const existing = highestByName.get(parsed.name);\n\n if (existing === undefined || compareVersions(parsed.version, existing.version) > 0) {\n highestByName.set(parsed.name, parsed);\n }\n};\n\nconst collectDirNamespaces = (highestByName: Map<string, GirNamespace>, dir: string): void => {\n for (const entry of readDirEntries(dir)) {\n const parsed = parseGirNamespace(entry);\n\n if (parsed !== undefined) {\n recordHighest(highestByName, parsed);\n }\n }\n};\n\n/**\n * Every GIR library installed on the search path, as sorted `Name-Version` identifiers. A namespace found\n * in more than one version contributes only its highest, and unreadable directories are skipped.\n */\nconst discoverGirNamespaces = (girPath: string[]): string[] => {\n const highestByName: Map<string, GirNamespace> = new Map();\n\n for (const dir of girPath) {\n collectDirNamespaces(highestByName, dir);\n }\n\n return sortStrings(highestByName.values().map(({ identifier }) => identifier));\n};\n\nconst compareVersions = (a: string, b: string): number => {\n const aParts = a.split(\".\");\n const bParts = b.split(\".\");\n const length = Math.max(aParts.length, bParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const difference = Number(aParts[index] ?? 0) - Number(bParts[index] ?? 0);\n\n if (difference !== 0) {\n return difference;\n }\n }\n\n return 0;\n};\n\nexport { resolveLibraries, discoverGirNamespaces, type LibrarySelection };\n"]}