@gtkx/gir 0.19.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 +4 -3
  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
package/dist/index.d.ts CHANGED
@@ -1,28 +1,41 @@
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
22
20
  */
23
21
  export { INTRINSIC_TYPES, isIntrinsicType, isNumericType, isStringType, isVoidType, NUMERIC_TYPES, STRING_TYPES, VOID_TYPES, } from "./intrinsics.js";
24
- export { GirRepository, type RepositoryOptions } from "./repository.js";
25
- export type { ContainerType, DefaultValue, QualifiedName, TypeKind, } from "./types.js";
26
- export { GirAlias, GirCallback, GirClass, GirConstant, GirConstructor, GirEnumeration, GirEnumerationMember, GirField, GirFunction, GirInterface, GirMethod, GirNamespace, GirParameter, GirProperty, GirRecord, GirSignal, GirType, parseDefaultValue, parseQualifiedName, qualifiedName, } from "./types.js";
22
+ export { GirAlias } from "./model/alias.js";
23
+ export { GirConstructor, GirFunction, GirMethod } from "./model/callables.js";
24
+ export { GirCallback } from "./model/callback.js";
25
+ export { GirClass } from "./model/class.js";
26
+ export { GirConstant } from "./model/constant.js";
27
+ export { GirEnumeration, GirEnumerationMember } from "./model/enumeration.js";
28
+ export { GirField } from "./model/field.js";
29
+ export { GirInterface } from "./model/interface.js";
30
+ export { GirNamespace } from "./model/namespace.js";
31
+ export { GirParameter } from "./model/parameter.js";
32
+ export type { DefaultValue } from "./model/property.js";
33
+ export { GirProperty, parseDefaultValue } from "./model/property.js";
34
+ export { GirRecord } from "./model/record.js";
35
+ export type { RepositoryLike, TypeKind } from "./model/repository-like.js";
36
+ export { GirSignal } from "./model/signal.js";
37
+ export type { ContainerType } from "./model/type.js";
38
+ export { GirType } from "./model/type.js";
39
+ export { type DependencyGraph, GirRepository, type RepositoryOptions } from "./repository.js";
27
40
  export { toCamelCase, toPascalCase } from "./utils.js";
28
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACH,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EACH,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,27 +1,38 @@
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
22
20
  */
23
21
  export { INTRINSIC_TYPES, isIntrinsicType, isNumericType, isStringType, isVoidType, NUMERIC_TYPES, STRING_TYPES, VOID_TYPES, } from "./intrinsics.js";
22
+ export { GirAlias } from "./model/alias.js";
23
+ export { GirConstructor, GirFunction, GirMethod } from "./model/callables.js";
24
+ export { GirCallback } from "./model/callback.js";
25
+ export { GirClass } from "./model/class.js";
26
+ export { GirConstant } from "./model/constant.js";
27
+ export { GirEnumeration, GirEnumerationMember } from "./model/enumeration.js";
28
+ export { GirField } from "./model/field.js";
29
+ export { GirInterface } from "./model/interface.js";
30
+ export { GirNamespace } from "./model/namespace.js";
31
+ export { GirParameter } from "./model/parameter.js";
32
+ export { GirProperty, parseDefaultValue } from "./model/property.js";
33
+ export { GirRecord } from "./model/record.js";
34
+ export { GirSignal } from "./model/signal.js";
35
+ export { GirType } from "./model/type.js";
24
36
  export { GirRepository } from "./repository.js";
25
- export { GirAlias, GirCallback, GirClass, GirConstant, GirConstructor, GirEnumeration, GirEnumerationMember, GirField, GirFunction, GirInterface, GirMethod, GirNamespace, GirParameter, GirProperty, GirRecord, GirSignal, GirType, parseDefaultValue, parseQualifiedName, qualifiedName, } from "./types.js";
26
37
  export { toCamelCase, toPascalCase } from "./utils.js";
27
38
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACH,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AAOxE,OAAO,EACH,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAwB,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { RawNamespace } from "./raw-types.js";
2
+ /**
3
+ * Handles GIR file discovery, dependency graph resolution, and loading.
4
+ *
5
+ * Given a list of root namespace keys (e.g., `["Gtk-4.0"]`) and search paths,
6
+ * discovers all transitive dependencies via `<include>` tags, topologically
7
+ * sorts them, and returns fully parsed raw namespaces in dependency order.
8
+ */
9
+ export declare class GirLoader {
10
+ private readonly girPath;
11
+ private readonly parser;
12
+ constructor(girPath: string[]);
13
+ /**
14
+ * Loads all GIR namespaces required by the given roots, including
15
+ * all transitive dependencies discovered via `<include>` tags.
16
+ *
17
+ * @returns Raw namespaces keyed by namespace name, in dependency order.
18
+ */
19
+ loadAll(roots: string[]): Promise<Map<string, {
20
+ raw: RawNamespace;
21
+ xml: string;
22
+ }>>;
23
+ discoverDependencies(roots: string[]): Promise<Map<string, {
24
+ filePath: string;
25
+ dependencies: string[];
26
+ }>>;
27
+ private findGirFile;
28
+ private topologicalSort;
29
+ }
30
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/internal/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;gBAEvB,OAAO,EAAE,MAAM,EAAE;IAK7B;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiBlF,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IA0B/G,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,eAAe;CA4C1B"}
@@ -0,0 +1,109 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { GirParser } from "./parser.js";
5
+ /**
6
+ * Handles GIR file discovery, dependency graph resolution, and loading.
7
+ *
8
+ * Given a list of root namespace keys (e.g., `["Gtk-4.0"]`) and search paths,
9
+ * discovers all transitive dependencies via `<include>` tags, topologically
10
+ * sorts them, and returns fully parsed raw namespaces in dependency order.
11
+ */
12
+ export class GirLoader {
13
+ girPath;
14
+ parser;
15
+ constructor(girPath) {
16
+ this.girPath = girPath;
17
+ this.parser = new GirParser();
18
+ }
19
+ /**
20
+ * Loads all GIR namespaces required by the given roots, including
21
+ * all transitive dependencies discovered via `<include>` tags.
22
+ *
23
+ * @returns Raw namespaces keyed by namespace name, in dependency order.
24
+ */
25
+ async loadAll(roots) {
26
+ const fileMap = await this.discoverDependencies(roots);
27
+ const sorted = this.topologicalSort(fileMap);
28
+ const result = new Map();
29
+ for (const key of sorted) {
30
+ const entry = fileMap.get(key);
31
+ if (!entry)
32
+ continue;
33
+ const filePath = entry.filePath;
34
+ const xml = await readFile(filePath, "utf-8");
35
+ const raw = this.parser.parseNamespace(xml);
36
+ result.set(raw.name, { raw, xml });
37
+ }
38
+ return result;
39
+ }
40
+ async discoverDependencies(roots) {
41
+ const graph = new Map();
42
+ const queue = [...roots];
43
+ while (queue.length > 0) {
44
+ const key = queue.shift();
45
+ if (key === undefined || graph.has(key))
46
+ continue;
47
+ const filePath = this.findGirFile(key);
48
+ const xml = await readFile(filePath, "utf-8");
49
+ const header = this.parser.parseHeader(xml);
50
+ const dependencies = header.dependencies.map((dep) => `${dep.name}-${dep.version}`);
51
+ graph.set(key, { filePath, dependencies });
52
+ for (const dep of dependencies) {
53
+ if (!graph.has(dep)) {
54
+ queue.push(dep);
55
+ }
56
+ }
57
+ }
58
+ return graph;
59
+ }
60
+ findGirFile(namespaceKey) {
61
+ const filename = `${namespaceKey}.gir`;
62
+ for (const dir of this.girPath) {
63
+ const filePath = join(dir, filename);
64
+ if (existsSync(filePath)) {
65
+ return filePath;
66
+ }
67
+ }
68
+ throw new Error(`GIR file not found for "${namespaceKey}" in paths: [${this.girPath.join(", ")}]`);
69
+ }
70
+ topologicalSort(graph) {
71
+ const inDegree = new Map();
72
+ const dependents = new Map();
73
+ for (const key of graph.keys()) {
74
+ dependents.set(key, []);
75
+ }
76
+ for (const [key, { dependencies }] of graph) {
77
+ inDegree.set(key, dependencies.filter((d) => graph.has(d)).length);
78
+ for (const dep of dependencies) {
79
+ dependents.get(dep)?.push(key);
80
+ }
81
+ }
82
+ const queue = [];
83
+ for (const [key, degree] of inDegree) {
84
+ if (degree === 0) {
85
+ queue.push(key);
86
+ }
87
+ }
88
+ const sorted = [];
89
+ while (queue.length > 0) {
90
+ const key = queue.shift();
91
+ if (key === undefined)
92
+ break;
93
+ sorted.push(key);
94
+ for (const dependent of dependents.get(key) ?? []) {
95
+ const newDegree = (inDegree.get(dependent) ?? 0) - 1;
96
+ inDegree.set(dependent, newDegree);
97
+ if (newDegree === 0) {
98
+ queue.push(dependent);
99
+ }
100
+ }
101
+ }
102
+ if (sorted.length !== graph.size) {
103
+ const remaining = [...graph.keys()].filter((k) => !sorted.includes(k));
104
+ throw new Error(`Circular GIR dependency detected involving: ${remaining.join(", ")}`);
105
+ }
106
+ return sorted;
107
+ }
108
+ }
109
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/internal/loader.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,106 @@
1
+ import { GirAlias } from "../model/alias.js";
2
+ import { GirConstructor, GirFunction, GirMethod } from "../model/callables.js";
3
+ import { GirCallback } from "../model/callback.js";
4
+ import { GirConstant } from "../model/constant.js";
5
+ import { GirEnumeration } from "../model/enumeration.js";
6
+ import { GirProperty } from "../model/property.js";
7
+ import { GirRecord } from "../model/record.js";
8
+ import { GirSignal } from "../model/signal.js";
9
+ import type { RawNamespace } from "./raw-types.js";
1
10
  /**
2
- * Normalizer that converts raw GIR types to normalized types.
3
- *
4
- * The key job is to qualify all type references with their namespace,
5
- * except for intrinsic types which remain unqualified.
6
- *
7
- * @internal
11
+ * Data produced for a class before the repository exists.
12
+ * Used to defer GirClass construction until the repo is available.
8
13
  */
9
- import { GirNamespace } from "../types.js";
10
- import type { RawNamespace } from "./raw-types.js";
14
+ export type GirClassData = {
15
+ name: string;
16
+ qualifiedName: string;
17
+ cType: string;
18
+ parent: string | null;
19
+ abstract: boolean;
20
+ glibTypeName?: string;
21
+ glibGetType?: string;
22
+ cSymbolPrefix?: string;
23
+ fundamental?: boolean;
24
+ refFunc?: string;
25
+ unrefFunc?: string;
26
+ implements: string[];
27
+ methods: GirMethod[];
28
+ constructors: GirConstructor[];
29
+ staticFunctions: GirFunction[];
30
+ properties: GirProperty[];
31
+ signals: GirSignal[];
32
+ doc?: string;
33
+ };
11
34
  /**
12
- * Context for normalization - provides access to all loaded namespaces
13
- * for resolving cross-namespace references.
35
+ * Data produced for an interface before the repository exists.
14
36
  */
15
- export type NormalizerContext = {
16
- /** All raw namespaces that have been loaded */
17
- rawNamespaces: Map<string, RawNamespace>;
37
+ export type GirInterfaceData = {
38
+ name: string;
39
+ qualifiedName: string;
40
+ cType: string;
41
+ glibTypeName?: string;
42
+ prerequisites: string[];
43
+ methods: GirMethod[];
44
+ properties: GirProperty[];
45
+ signals: GirSignal[];
46
+ doc?: string;
18
47
  };
19
48
  /**
20
- * Normalizes a raw namespace into a normalized namespace.
49
+ * Intermediate namespace data produced by the normalizer.
50
+ *
51
+ * Classes and interfaces are stored as plain data because they need
52
+ * the repository reference at construction time (which doesn't exist yet).
53
+ * All other types are fully constructed model instances.
54
+ */
55
+ export type GirNamespaceIntermediate = {
56
+ name: string;
57
+ version: string;
58
+ sharedLibrary: string;
59
+ cPrefix: string;
60
+ classes: Map<string, GirClassData>;
61
+ interfaces: Map<string, GirInterfaceData>;
62
+ records: Map<string, GirRecord>;
63
+ enumerations: Map<string, GirEnumeration>;
64
+ bitfields: Map<string, GirEnumeration>;
65
+ callbacks: Map<string, GirCallback>;
66
+ functions: Map<string, GirFunction>;
67
+ constants: Map<string, GirConstant>;
68
+ aliases: Map<string, GirAlias>;
69
+ doc?: string;
70
+ };
71
+ /**
72
+ * Converts raw parsed GIR data into model instances with fully qualified
73
+ * type names.
74
+ *
75
+ * Uses indexed lookups for O(1) type name resolution and strict error
76
+ * handling (throws on unresolvable type references).
21
77
  */
22
- export declare const normalizeNamespace: (raw: RawNamespace, ctx: NormalizerContext) => GirNamespace;
78
+ export declare class GirNormalizer {
79
+ private typeIndex;
80
+ /**
81
+ * Normalizes all raw namespaces into intermediate namespace data.
82
+ *
83
+ * @param rawNamespaces - Raw namespaces keyed by name, in dependency order
84
+ * @returns Intermediate namespace data keyed by name, in the same order
85
+ */
86
+ normalize(rawNamespaces: Map<string, RawNamespace>): Map<string, GirNamespaceIntermediate>;
87
+ private buildTypeIndex;
88
+ private normalizeNamespace;
89
+ private qualifyTypeName;
90
+ private normalizeType;
91
+ private normalizeClass;
92
+ private normalizeInterface;
93
+ private normalizeRecord;
94
+ private normalizeEnumeration;
95
+ private normalizeCallback;
96
+ private normalizeConstant;
97
+ private normalizeAlias;
98
+ private normalizeMethod;
99
+ private normalizeConstructor;
100
+ private normalizeFunction;
101
+ private normalizeParameter;
102
+ private normalizeProperty;
103
+ private normalizeSignal;
104
+ private normalizeField;
105
+ }
23
106
  //# sourceMappingURL=normalizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../src/internal/normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAYH,YAAY,EASf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAWR,YAAY,EAMf,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,+CAA+C;IAC/C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,YAAY,EAAE,KAAK,iBAAiB,KAAG,YA0E9E,CAAC"}
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../src/internal/normalizer.ts"],"names":[],"mappings":"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"}