@gtkx/gir 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/index.d.ts +25 -12
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +21 -10
  4. package/dist/index.js.map +1 -1
  5. package/dist/internal/loader.d.ts +30 -0
  6. package/dist/internal/loader.d.ts.map +1 -0
  7. package/dist/internal/loader.js +109 -0
  8. package/dist/internal/loader.js.map +1 -0
  9. package/dist/internal/normalizer.d.ts +98 -15
  10. package/dist/internal/normalizer.d.ts.map +1 -1
  11. package/dist/internal/normalizer.js +381 -412
  12. package/dist/internal/normalizer.js.map +1 -1
  13. package/dist/internal/parser.d.ts +23 -31
  14. package/dist/internal/parser.d.ts.map +1 -1
  15. package/dist/internal/parser.js +228 -244
  16. package/dist/internal/parser.js.map +1 -1
  17. package/dist/internal/raw-types.d.ts +58 -109
  18. package/dist/internal/raw-types.d.ts.map +1 -1
  19. package/dist/internal/raw-types.js +0 -8
  20. package/dist/internal/raw-types.js.map +1 -1
  21. package/dist/intrinsics.d.ts.map +1 -1
  22. package/dist/intrinsics.js +7 -0
  23. package/dist/intrinsics.js.map +1 -1
  24. package/dist/model/alias.d.ts +21 -0
  25. package/dist/model/alias.d.ts.map +1 -0
  26. package/dist/model/alias.js +22 -0
  27. package/dist/model/alias.js.map +1 -0
  28. package/dist/model/callables.d.ts +102 -0
  29. package/dist/model/callables.d.ts.map +1 -0
  30. package/dist/model/callables.js +123 -0
  31. package/dist/model/callables.js.map +1 -0
  32. package/dist/model/callback.d.ts +22 -0
  33. package/dist/model/callback.d.ts.map +1 -0
  34. package/dist/model/callback.js +20 -0
  35. package/dist/model/callback.js.map +1 -0
  36. package/dist/model/class.d.ts +92 -0
  37. package/dist/model/class.d.ts.map +1 -0
  38. package/dist/model/class.js +171 -0
  39. package/dist/model/class.js.map +1 -0
  40. package/dist/model/constant.d.ts +21 -0
  41. package/dist/model/constant.d.ts.map +1 -0
  42. package/dist/model/constant.js +20 -0
  43. package/dist/model/constant.js.map +1 -0
  44. package/dist/model/enumeration.d.ts +41 -0
  45. package/dist/model/enumeration.d.ts.map +1 -0
  46. package/dist/model/enumeration.js +47 -0
  47. package/dist/model/enumeration.js.map +1 -0
  48. package/dist/model/field.d.ts +21 -0
  49. package/dist/model/field.d.ts.map +1 -0
  50. package/dist/model/field.js +20 -0
  51. package/dist/model/field.js.map +1 -0
  52. package/dist/model/interface.d.ts +44 -0
  53. package/dist/model/interface.d.ts.map +1 -0
  54. package/dist/model/interface.js +67 -0
  55. package/dist/model/interface.js.map +1 -0
  56. package/dist/model/namespace.d.ts +44 -0
  57. package/dist/model/namespace.d.ts.map +1 -0
  58. package/dist/model/namespace.js +36 -0
  59. package/dist/model/namespace.js.map +1 -0
  60. package/dist/model/parameter.d.ts +43 -0
  61. package/dist/model/parameter.d.ts.map +1 -0
  62. package/dist/model/parameter.js +54 -0
  63. package/dist/model/parameter.js.map +1 -0
  64. package/dist/model/property.d.ts +62 -0
  65. package/dist/model/property.d.ts.map +1 -0
  66. package/dist/model/property.js +69 -0
  67. package/dist/model/property.js.map +1 -0
  68. package/dist/model/record.d.ts +56 -0
  69. package/dist/model/record.d.ts.map +1 -0
  70. package/dist/model/record.js +70 -0
  71. package/dist/model/record.js.map +1 -0
  72. package/dist/model/repository-like.d.ts +19 -0
  73. package/dist/model/repository-like.d.ts.map +1 -0
  74. package/dist/model/repository-like.js +2 -0
  75. package/dist/model/repository-like.js.map +1 -0
  76. package/dist/model/signal.d.ts +22 -0
  77. package/dist/model/signal.d.ts.map +1 -0
  78. package/dist/model/signal.js +22 -0
  79. package/dist/model/signal.js.map +1 -0
  80. package/dist/model/type.d.ts +71 -0
  81. package/dist/model/type.d.ts.map +1 -0
  82. package/dist/model/type.js +112 -0
  83. package/dist/model/type.js.map +1 -0
  84. package/dist/repository.d.ts +92 -138
  85. package/dist/repository.d.ts.map +1 -1
  86. package/dist/repository.js +155 -219
  87. package/dist/repository.js.map +1 -1
  88. package/package.json +2 -2
  89. package/src/index.ts +25 -39
  90. package/src/internal/loader.ts +127 -0
  91. package/src/internal/normalizer.ts +451 -475
  92. package/src/internal/parser.ts +242 -284
  93. package/src/internal/raw-types.ts +65 -116
  94. package/src/intrinsics.ts +7 -0
  95. package/src/model/alias.ts +31 -0
  96. package/src/model/callables.ts +172 -0
  97. package/src/model/callback.ts +30 -0
  98. package/src/model/class.ts +215 -0
  99. package/src/model/constant.ts +29 -0
  100. package/src/model/enumeration.ts +64 -0
  101. package/src/model/field.ts +29 -0
  102. package/src/model/interface.ts +89 -0
  103. package/src/model/namespace.ts +60 -0
  104. package/src/model/parameter.ts +74 -0
  105. package/src/model/property.ts +97 -0
  106. package/src/model/record.ts +97 -0
  107. package/src/model/repository-like.ts +20 -0
  108. package/src/model/signal.ts +32 -0
  109. package/src/model/type.ts +143 -0
  110. package/src/repository.ts +197 -283
  111. package/dist/types.d.ts +0 -655
  112. package/dist/types.d.ts.map +0 -1
  113. package/dist/types.js +0 -879
  114. package/dist/types.js.map +0 -1
  115. package/src/types.ts +0 -1192
@@ -1,197 +1,179 @@
1
+ import { GirLoader } from "./internal/loader.js";
2
+ import { GirNormalizer } from "./internal/normalizer.js";
3
+ import { GirParser } from "./internal/parser.js";
4
+ import { isIntrinsicType } from "./intrinsics.js";
5
+ import { GirClass } from "./model/class.js";
6
+ import { GirInterface } from "./model/interface.js";
7
+ import { GirNamespace } from "./model/namespace.js";
1
8
  /**
2
- * GIR Repository - Central entry point for GIR data.
9
+ * Central registry for GIR data.
10
+ *
11
+ * Loads, resolves, and provides query access to GIR namespaces.
12
+ * All type references use fully qualified names (`Namespace.TypeName`).
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const repo = await GirRepository.load(["Gtk-4.0", "Adw-1"], {
17
+ * girPath: ["/usr/share/gir-1.0"]
18
+ * });
3
19
  *
4
- * Loads, normalizes, and provides query access to GIR namespaces.
5
- * All type references are normalized to fully qualified names.
20
+ * const button = repo.resolveClass("Gtk.Button");
21
+ * button.isSubclassOf("Gtk.Widget"); // true
22
+ * button.getInheritanceChain();
23
+ * // ["Gtk.Button", "Gtk.Widget", "GObject.InitiallyUnowned", "GObject.Object"]
24
+ * ```
6
25
  */
7
- import { readdir, readFile } from "node:fs/promises";
8
- import { join } from "node:path";
9
- import { normalizeNamespace } from "./internal/normalizer.js";
10
- import { RawGirParser } from "./internal/parser.js";
11
- import { isIntrinsicType } from "./intrinsics.js";
12
- import { parseQualifiedName, } from "./types.js";
13
26
  export class GirRepository {
14
- rawNamespaces = new Map();
15
- normalizedNamespaces = new Map();
16
- parser;
17
- resolved = false;
18
- constructor(options = {}) {
19
- this.parser = new RawGirParser(options);
27
+ namespaces;
28
+ constructor(namespaces) {
29
+ this.namespaces = namespaces;
20
30
  }
21
31
  /**
22
- * Loads a single GIR file from XML content.
23
- */
24
- loadFromXml(xml) {
25
- const raw = this.parser.parse(xml);
26
- const existing = this.rawNamespaces.get(raw.name);
27
- if (existing && this.compareVersions(existing.version, raw.version) >= 0) {
28
- return;
29
- }
30
- this.rawNamespaces.set(raw.name, raw);
31
- this.resolved = false;
32
- }
33
- /**
34
- * Loads a GIR file from disk.
32
+ * Discovers all transitive dependencies for the given roots without
33
+ * performing a full parse. Returns namespace keys and their file paths.
34
+ *
35
+ * @param roots - Namespace keys to start from (e.g., `["Gtk-4.0", "Adw-1"]`)
36
+ * @param options - Search paths for GIR files
35
37
  */
36
- async loadFromFile(path) {
37
- const xml = await readFile(path, "utf-8");
38
- this.loadFromXml(xml);
38
+ static async discoverDependencies(roots, options) {
39
+ const loader = new GirLoader(options.girPath);
40
+ return loader.discoverDependencies(roots);
39
41
  }
40
42
  /**
41
- * Loads all .gir files from a directory.
43
+ * Loads GIR files for the given namespace roots and all their transitive
44
+ * dependencies, returning a fully resolved repository.
45
+ *
46
+ * @param roots - Namespace keys to load (e.g., `["Gtk-4.0", "Adw-1"]`)
47
+ * @param options - Search paths for GIR files
42
48
  */
43
- async loadFromDirectory(dirPath) {
44
- const files = await readdir(dirPath);
45
- const girFiles = files.filter((f) => f.endsWith(".gir"));
46
- await Promise.all(girFiles.map((file) => this.loadFromFile(join(dirPath, file))));
49
+ static async load(roots, options) {
50
+ const loader = new GirLoader(options.girPath);
51
+ const loaded = await loader.loadAll(roots);
52
+ const rawNamespaces = new Map();
53
+ for (const [name, { raw }] of loaded) {
54
+ rawNamespaces.set(name, raw);
55
+ }
56
+ return GirRepository.buildFromRaw(rawNamespaces);
47
57
  }
48
58
  /**
49
- * After loading all raw GIR files, normalize and resolve all references.
50
- * This must be called after loading and before querying.
59
+ * Creates a repository from inline GIR XML strings.
60
+ * Useful for testing and scenarios where GIR data is already in memory.
51
61
  */
52
- resolve() {
53
- if (this.resolved)
54
- return;
55
- const ctx = {
56
- rawNamespaces: this.rawNamespaces,
57
- };
58
- for (const [name, raw] of this.rawNamespaces) {
59
- const normalized = normalizeNamespace(raw, ctx);
60
- this.normalizedNamespaces.set(name, normalized);
62
+ static fromXml(xmlStrings) {
63
+ const parser = new GirParser();
64
+ const rawNamespaces = new Map();
65
+ for (const xml of xmlStrings) {
66
+ const raw = parser.parseNamespace(xml);
67
+ rawNamespaces.set(raw.name, raw);
61
68
  }
62
- for (const ns of this.normalizedNamespaces.values()) {
63
- for (const cls of ns.classes.values()) {
64
- cls._setRepository(this);
69
+ return GirRepository.buildFromRaw(rawNamespaces);
70
+ }
71
+ static buildFromRaw(rawNamespaces) {
72
+ const normalizer = new GirNormalizer();
73
+ const intermediates = normalizer.normalize(rawNamespaces);
74
+ return GirRepository.buildFromIntermediates(intermediates);
75
+ }
76
+ static buildFromIntermediates(intermediates) {
77
+ const namespaceMap = new Map();
78
+ const repo = new GirRepository(namespaceMap);
79
+ for (const [nsName, data] of intermediates) {
80
+ const classes = new Map();
81
+ for (const [name, classData] of data.classes) {
82
+ classes.set(name, new GirClass(classData, repo));
65
83
  }
66
- for (const iface of ns.interfaces.values()) {
67
- iface._setRepository(this);
84
+ const interfaces = new Map();
85
+ for (const [name, ifaceData] of data.interfaces) {
86
+ interfaces.set(name, new GirInterface(ifaceData, repo));
68
87
  }
88
+ namespaceMap.set(nsName, new GirNamespace({
89
+ name: data.name,
90
+ version: data.version,
91
+ sharedLibrary: data.sharedLibrary,
92
+ cPrefix: data.cPrefix,
93
+ classes,
94
+ interfaces,
95
+ records: data.records,
96
+ enumerations: data.enumerations,
97
+ bitfields: data.bitfields,
98
+ callbacks: data.callbacks,
99
+ functions: data.functions,
100
+ constants: data.constants,
101
+ aliases: data.aliases,
102
+ doc: data.doc,
103
+ }));
69
104
  }
70
- this.resolved = true;
105
+ return repo;
71
106
  }
72
- /**
73
- * Gets all loaded namespace names.
74
- */
107
+ /** Gets all loaded namespace names. */
75
108
  getNamespaceNames() {
76
- this.ensureResolved();
77
- return [...this.normalizedNamespaces.keys()];
109
+ return [...this.namespaces.keys()];
78
110
  }
79
- /**
80
- * Gets a normalized namespace by name.
81
- */
111
+ /** Gets a namespace by name, or null if not loaded. */
82
112
  getNamespace(name) {
83
- this.ensureResolved();
84
- return this.normalizedNamespaces.get(name) ?? null;
113
+ return this.namespaces.get(name) ?? null;
85
114
  }
86
- /**
87
- * Gets all normalized namespaces.
88
- */
115
+ /** Gets all loaded namespaces. */
89
116
  getAllNamespaces() {
90
- this.ensureResolved();
91
- return this.normalizedNamespaces;
117
+ return this.namespaces;
92
118
  }
93
- /**
94
- * Resolves a class by qualified name.
95
- * @example repo.resolveClass("Gtk.Button" as QualifiedName)
96
- */
119
+ /** Resolves a class by qualified name (e.g., `"Gtk.Button"`). */
97
120
  resolveClass(qualifiedName) {
98
- this.ensureResolved();
99
- const { namespace, name } = parseQualifiedName(qualifiedName);
100
- return this.normalizedNamespaces.get(namespace)?.classes.get(name) ?? null;
121
+ const { namespace, name } = splitQualifiedName(qualifiedName);
122
+ return this.namespaces.get(namespace)?.classes.get(name) ?? null;
101
123
  }
102
- /**
103
- * Resolves an interface by qualified name.
104
- * @example repo.resolveInterface("Gio.ListModel" as QualifiedName)
105
- */
124
+ /** Resolves an interface by qualified name (e.g., `"Gio.ListModel"`). */
106
125
  resolveInterface(qualifiedName) {
107
- this.ensureResolved();
108
- const { namespace, name } = parseQualifiedName(qualifiedName);
109
- return this.normalizedNamespaces.get(namespace)?.interfaces.get(name) ?? null;
126
+ const { namespace, name } = splitQualifiedName(qualifiedName);
127
+ return this.namespaces.get(namespace)?.interfaces.get(name) ?? null;
110
128
  }
111
- /**
112
- * Resolves a record (boxed type) by qualified name.
113
- * @example repo.resolveRecord("Gdk.Rectangle" as QualifiedName)
114
- */
129
+ /** Resolves a record by qualified name (e.g., `"Gdk.Rectangle"`). */
115
130
  resolveRecord(qualifiedName) {
116
- this.ensureResolved();
117
- const { namespace, name } = parseQualifiedName(qualifiedName);
118
- return this.normalizedNamespaces.get(namespace)?.records.get(name) ?? null;
131
+ const { namespace, name } = splitQualifiedName(qualifiedName);
132
+ return this.namespaces.get(namespace)?.records.get(name) ?? null;
119
133
  }
120
- /**
121
- * Resolves an enumeration by qualified name.
122
- * @example repo.resolveEnum("Gtk.Orientation" as QualifiedName)
123
- */
134
+ /** Resolves an enumeration by qualified name (e.g., `"Gtk.Orientation"`). */
124
135
  resolveEnum(qualifiedName) {
125
- this.ensureResolved();
126
- const { namespace, name } = parseQualifiedName(qualifiedName);
127
- return this.normalizedNamespaces.get(namespace)?.enumerations.get(name) ?? null;
136
+ const { namespace, name } = splitQualifiedName(qualifiedName);
137
+ return this.namespaces.get(namespace)?.enumerations.get(name) ?? null;
128
138
  }
129
- /**
130
- * Resolves a bitfield (flags) by qualified name.
131
- * @example repo.resolveFlags("Gdk.ModifierType" as QualifiedName)
132
- */
139
+ /** Resolves a bitfield by qualified name (e.g., `"Gdk.ModifierType"`). */
133
140
  resolveFlags(qualifiedName) {
134
- this.ensureResolved();
135
- const { namespace, name } = parseQualifiedName(qualifiedName);
136
- return this.normalizedNamespaces.get(namespace)?.bitfields.get(name) ?? null;
141
+ const { namespace, name } = splitQualifiedName(qualifiedName);
142
+ return this.namespaces.get(namespace)?.bitfields.get(name) ?? null;
137
143
  }
138
- /**
139
- * Resolves a callback type by qualified name.
140
- * @example repo.resolveCallback("Gio.AsyncReadyCallback" as QualifiedName)
141
- */
144
+ /** Resolves a callback by qualified name (e.g., `"Gio.AsyncReadyCallback"`). */
142
145
  resolveCallback(qualifiedName) {
143
- this.ensureResolved();
144
- const { namespace, name } = parseQualifiedName(qualifiedName);
145
- return this.normalizedNamespaces.get(namespace)?.callbacks.get(name) ?? null;
146
+ const { namespace, name } = splitQualifiedName(qualifiedName);
147
+ return this.namespaces.get(namespace)?.callbacks.get(name) ?? null;
146
148
  }
147
- /**
148
- * Resolves a constant by qualified name.
149
- * @example repo.resolveConstant("Gtk.MAJOR_VERSION" as QualifiedName)
150
- */
149
+ /** Resolves a constant by qualified name (e.g., `"Gtk.MAJOR_VERSION"`). */
151
150
  resolveConstant(qualifiedName) {
152
- this.ensureResolved();
153
- const { namespace, name } = parseQualifiedName(qualifiedName);
154
- return this.normalizedNamespaces.get(namespace)?.constants.get(name) ?? null;
151
+ const { namespace, name } = splitQualifiedName(qualifiedName);
152
+ return this.namespaces.get(namespace)?.constants.get(name) ?? null;
155
153
  }
156
- /**
157
- * Resolves a standalone function by qualified name.
158
- * @example repo.resolveFunction("Gtk.init" as QualifiedName)
159
- */
154
+ /** Resolves a standalone function by qualified name (e.g., `"Gtk.init"`). */
160
155
  resolveFunction(qualifiedName) {
161
- this.ensureResolved();
162
- const { namespace, name } = parseQualifiedName(qualifiedName);
163
- return this.normalizedNamespaces.get(namespace)?.functions.get(name) ?? null;
156
+ const { namespace, name } = splitQualifiedName(qualifiedName);
157
+ return this.namespaces.get(namespace)?.functions.get(name) ?? null;
164
158
  }
165
- /**
166
- * Resolves an alias by qualified name.
167
- * @example repo.resolveAlias("Pango.LayoutRun" as QualifiedName)
168
- */
159
+ /** Resolves an alias by qualified name (e.g., `"Pango.LayoutRun"`). */
169
160
  resolveAlias(qualifiedName) {
170
- this.ensureResolved();
171
- const { namespace, name } = parseQualifiedName(qualifiedName);
172
- return this.normalizedNamespaces.get(namespace)?.aliases.get(name) ?? null;
161
+ const { namespace, name } = splitQualifiedName(qualifiedName);
162
+ return this.namespaces.get(namespace)?.aliases.get(name) ?? null;
173
163
  }
174
- /**
175
- * Resolves a type name through aliases to get the target type.
176
- * If the type is an alias, returns the target type.
177
- * If not an alias, returns null.
178
- * @example repo.resolveTypeAlias("Pango.LayoutRun" as QualifiedName) // returns GirType pointing to Pango.GlyphItem
179
- */
164
+ /** Resolves a type alias to its target type, or null if not an alias. */
180
165
  resolveTypeAlias(qualifiedName) {
181
- const alias = this.resolveAlias(qualifiedName);
182
- return alias?.targetType ?? null;
166
+ return this.resolveAlias(qualifiedName)?.targetType ?? null;
183
167
  }
184
168
  /**
185
169
  * Gets the kind of a type (class, interface, record, enum, flags, callback).
186
170
  * Returns null for intrinsic types or unknown types.
187
171
  */
188
172
  getTypeKind(qualifiedName) {
189
- this.ensureResolved();
190
- if (isIntrinsicType(qualifiedName)) {
173
+ if (isIntrinsicType(qualifiedName))
191
174
  return null;
192
- }
193
- const { namespace, name } = parseQualifiedName(qualifiedName);
194
- const ns = this.normalizedNamespaces.get(namespace);
175
+ const { namespace, name } = splitQualifiedName(qualifiedName);
176
+ const ns = this.namespaces.get(namespace);
195
177
  if (!ns)
196
178
  return null;
197
179
  if (ns.classes.has(name))
@@ -208,32 +190,18 @@ export class GirRepository {
208
190
  return "callback";
209
191
  return null;
210
192
  }
211
- /**
212
- * Gets the full inheritance chain for a class.
213
- * Returns array from most derived to base.
214
- *
215
- * @example
216
- * getInheritanceChain("Gtk.Button" as QualifiedName)
217
- * // ["Gtk.Button", "Gtk.Widget", "GObject.InitiallyUnowned", "GObject.Object"]
218
- */
193
+ /** Gets the full inheritance chain for a class (most derived to base). */
219
194
  getInheritanceChain(qualifiedName) {
220
- const cls = this.resolveClass(qualifiedName);
221
- return cls?.getInheritanceChain() ?? [];
195
+ return this.resolveClass(qualifiedName)?.getInheritanceChain() ?? [];
222
196
  }
223
- /**
224
- * Gets all interfaces implemented by a class (including inherited).
225
- */
197
+ /** Gets all interfaces implemented by a class (including inherited). */
226
198
  getImplementedInterfaces(qualifiedName) {
227
- const cls = this.resolveClass(qualifiedName);
228
- return cls?.getAllImplementedInterfaces() ?? [];
199
+ return this.resolveClass(qualifiedName)?.getAllImplementedInterfaces() ?? [];
229
200
  }
230
- /**
231
- * Gets all classes that derive from a given class.
232
- */
201
+ /** Gets all classes that derive from a given class. */
233
202
  getDerivedClasses(qualifiedName) {
234
- this.ensureResolved();
235
203
  const derived = [];
236
- for (const ns of this.normalizedNamespaces.values()) {
204
+ for (const ns of this.namespaces.values()) {
237
205
  for (const cls of ns.classes.values()) {
238
206
  if (cls.qualifiedName !== qualifiedName && cls.isSubclassOf(qualifiedName)) {
239
207
  derived.push(cls.qualifiedName);
@@ -242,13 +210,10 @@ export class GirRepository {
242
210
  }
243
211
  return derived;
244
212
  }
245
- /**
246
- * Gets all classes that implement a given interface.
247
- */
213
+ /** Gets all classes that implement a given interface. */
248
214
  getImplementors(interfaceName) {
249
- this.ensureResolved();
250
215
  const implementors = [];
251
- for (const ns of this.normalizedNamespaces.values()) {
216
+ for (const ns of this.namespaces.values()) {
252
217
  for (const cls of ns.classes.values()) {
253
218
  if (cls.implementsInterface(interfaceName)) {
254
219
  implementors.push(cls.qualifiedName);
@@ -257,86 +222,57 @@ export class GirRepository {
257
222
  }
258
223
  return implementors;
259
224
  }
260
- /**
261
- * Checks if a type is a GObject (class with GType).
262
- */
225
+ /** Checks if a type is a GObject (class with GType). */
263
226
  isGObject(qualifiedName) {
264
- const cls = this.resolveClass(qualifiedName);
265
- return cls?.hasGType() ?? false;
227
+ return this.resolveClass(qualifiedName)?.hasGType() ?? false;
266
228
  }
267
- /**
268
- * Checks if a type is a boxed type (record with GType).
269
- */
229
+ /** Checks if a type is a boxed type (record with GType). */
270
230
  isBoxed(qualifiedName) {
271
- const record = this.resolveRecord(qualifiedName);
272
- return record?.isBoxed() ?? false;
231
+ return this.resolveRecord(qualifiedName)?.isBoxed() ?? false;
273
232
  }
274
- /**
275
- * Checks if a type is a primitive (intrinsic).
276
- */
233
+ /** Checks if a type is a primitive (intrinsic). */
277
234
  isPrimitive(typeName) {
278
235
  return isIntrinsicType(typeName);
279
236
  }
280
- /**
281
- * Finds all classes matching a predicate across all namespaces.
282
- */
237
+ /** Finds all classes matching a predicate across all namespaces. */
283
238
  findClasses(predicate) {
284
- this.ensureResolved();
285
239
  const results = [];
286
- for (const ns of this.normalizedNamespaces.values()) {
240
+ for (const ns of this.namespaces.values()) {
287
241
  for (const cls of ns.classes.values()) {
288
- if (predicate(cls)) {
242
+ if (predicate(cls))
289
243
  results.push(cls);
290
- }
291
244
  }
292
245
  }
293
246
  return results;
294
247
  }
295
- /**
296
- * Finds all interfaces matching a predicate across all namespaces.
297
- */
248
+ /** Finds all interfaces matching a predicate across all namespaces. */
298
249
  findInterfaces(predicate) {
299
- this.ensureResolved();
300
250
  const results = [];
301
- for (const ns of this.normalizedNamespaces.values()) {
251
+ for (const ns of this.namespaces.values()) {
302
252
  for (const iface of ns.interfaces.values()) {
303
- if (predicate(iface)) {
253
+ if (predicate(iface))
304
254
  results.push(iface);
305
- }
306
255
  }
307
256
  }
308
257
  return results;
309
258
  }
310
- /**
311
- * Finds all records matching a predicate across all namespaces.
312
- */
259
+ /** Finds all records matching a predicate across all namespaces. */
313
260
  findRecords(predicate) {
314
- this.ensureResolved();
315
261
  const results = [];
316
- for (const ns of this.normalizedNamespaces.values()) {
262
+ for (const ns of this.namespaces.values()) {
317
263
  for (const record of ns.records.values()) {
318
- if (predicate(record)) {
264
+ if (predicate(record))
319
265
  results.push(record);
320
- }
321
266
  }
322
267
  }
323
268
  return results;
324
269
  }
325
- compareVersions(a, b) {
326
- const partsA = a.split(".").map(Number);
327
- const partsB = b.split(".").map(Number);
328
- const len = Math.max(partsA.length, partsB.length);
329
- for (let i = 0; i < len; i++) {
330
- const diff = (partsA[i] ?? 0) - (partsB[i] ?? 0);
331
- if (diff !== 0)
332
- return diff;
333
- }
334
- return 0;
335
- }
336
- ensureResolved() {
337
- if (!this.resolved) {
338
- throw new Error("GirRepository.resolve() must be called before querying. Call resolve() after loading all GIR files.");
339
- }
340
- }
270
+ }
271
+ function splitQualifiedName(qn) {
272
+ const dot = qn.indexOf(".");
273
+ return {
274
+ namespace: qn.slice(0, dot),
275
+ name: qn.slice(dot + 1),
276
+ };
341
277
  }
342
278
  //# sourceMappingURL=repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtkx/gir",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "GObject Introspection file parser for GTKX",
5
5
  "keywords": [
6
6
  "gtkx",
@@ -37,7 +37,7 @@
37
37
  "src"
38
38
  ],
39
39
  "dependencies": {
40
- "fast-xml-parser": "^5.3.7"
40
+ "fast-xml-parser": "^5.5.9"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc -b tsconfig.lib.json",
package/src/index.ts CHANGED
@@ -1,21 +1,19 @@
1
1
  /**
2
2
  * @gtkx/gir - GObject Introspection Repository
3
3
  *
4
- * Pure GIR data layer with normalized types and a queryable API.
5
- * All type references use fully qualified names (Namespace.TypeName).
4
+ * Parses GIR files and exposes a fully queryable registry of namespaces
5
+ * with resolved type references.
6
6
  *
7
7
  * @example
8
8
  * ```typescript
9
9
  * import { GirRepository } from "@gtkx/gir";
10
10
  *
11
- * const repo = new GirRepository();
12
- * await repo.loadFromDirectory("./girs");
13
- * repo.resolve();
11
+ * const repo = await GirRepository.load(["Gtk-4.0"], {
12
+ * girPath: ["/usr/share/gir-1.0"]
13
+ * });
14
14
  *
15
- * const button = repo.resolveClass("Gtk.Button" as QualifiedName);
16
- * button.isSubclassOf("Gtk.Widget" as QualifiedName); // true
17
- * button.getInheritanceChain();
18
- * // ["Gtk.Button", "Gtk.Widget", "GObject.InitiallyUnowned", "GObject.Object"]
15
+ * const button = repo.resolveClass("Gtk.Button");
16
+ * button.isSubclassOf("Gtk.Widget"); // true
19
17
  * ```
20
18
  *
21
19
  * @packageDocumentation
@@ -31,34 +29,22 @@ export {
31
29
  STRING_TYPES,
32
30
  VOID_TYPES,
33
31
  } from "./intrinsics.js";
34
- export { GirRepository, type RepositoryOptions } from "./repository.js";
35
- export type {
36
- ContainerType,
37
- DefaultValue,
38
- QualifiedName,
39
- TypeKind,
40
- } from "./types.js";
41
- export {
42
- GirAlias,
43
- GirCallback,
44
- GirClass,
45
- GirConstant,
46
- GirConstructor,
47
- GirEnumeration,
48
- GirEnumerationMember,
49
- GirField,
50
- GirFunction,
51
- GirInterface,
52
- GirMethod,
53
- GirNamespace,
54
- GirParameter,
55
- GirProperty,
56
- GirRecord,
57
- GirSignal,
58
- GirType,
59
- parseDefaultValue,
60
- parseQualifiedName,
61
- qualifiedName,
62
- } from "./types.js";
63
-
32
+ export { GirAlias } from "./model/alias.js";
33
+ export { GirConstructor, GirFunction, GirMethod } from "./model/callables.js";
34
+ export { GirCallback } from "./model/callback.js";
35
+ export { GirClass } from "./model/class.js";
36
+ export { GirConstant } from "./model/constant.js";
37
+ export { GirEnumeration, GirEnumerationMember } from "./model/enumeration.js";
38
+ export { GirField } from "./model/field.js";
39
+ export { GirInterface } from "./model/interface.js";
40
+ export { GirNamespace } from "./model/namespace.js";
41
+ export { GirParameter } from "./model/parameter.js";
42
+ export type { DefaultValue } from "./model/property.js";
43
+ export { GirProperty, parseDefaultValue } from "./model/property.js";
44
+ export { GirRecord } from "./model/record.js";
45
+ export type { RepositoryLike, TypeKind } from "./model/repository-like.js";
46
+ export { GirSignal } from "./model/signal.js";
47
+ export type { ContainerType } from "./model/type.js";
48
+ export { GirType } from "./model/type.js";
49
+ export { type DependencyGraph, GirRepository, type RepositoryOptions } from "./repository.js";
64
50
  export { toCamelCase, toPascalCase } from "./utils.js";