@gtkx/codegen 1.0.0-rc.2 → 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 (254) hide show
  1. package/README.md +4 -5
  2. package/dist/analysis/descriptor-render.d.ts +2 -2
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +30 -32
  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 +7 -13
  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 +66 -8
  24. package/dist/docs/api-reference.js.map +1 -1
  25. package/dist/docs/element-page.d.ts.map +1 -1
  26. package/dist/docs/element-page.js +5 -4
  27. package/dist/docs/element-page.js.map +1 -1
  28. package/dist/docs/pipeline.d.ts +5 -3
  29. package/dist/docs/pipeline.d.ts.map +1 -1
  30. package/dist/docs/pipeline.js +5 -3
  31. package/dist/docs/pipeline.js.map +1 -1
  32. package/dist/docs/render.js +6 -6
  33. package/dist/docs/render.js.map +1 -1
  34. package/dist/docs/symbol-page.d.ts +5 -0
  35. package/dist/docs/symbol-page.d.ts.map +1 -1
  36. package/dist/docs/symbol-page.js +2 -2
  37. package/dist/docs/symbol-page.js.map +1 -1
  38. package/dist/fingerprint.d.ts +2 -4
  39. package/dist/fingerprint.d.ts.map +1 -1
  40. package/dist/fingerprint.js +7 -6
  41. package/dist/fingerprint.js.map +1 -1
  42. package/dist/gi.d.ts +7 -10
  43. package/dist/gi.d.ts.map +1 -1
  44. package/dist/gi.js +4 -9
  45. package/dist/gi.js.map +1 -1
  46. package/dist/gir/field.d.ts +0 -1
  47. package/dist/gir/field.d.ts.map +1 -1
  48. package/dist/gir/field.js +0 -3
  49. package/dist/gir/field.js.map +1 -1
  50. package/dist/gir/gir-path.d.ts +7 -0
  51. package/dist/gir/gir-path.d.ts.map +1 -1
  52. package/dist/gir/gir-path.js +7 -0
  53. package/dist/gir/gir-path.js.map +1 -1
  54. package/dist/gir/libraries.d.ts +17 -3
  55. package/dist/gir/libraries.d.ts.map +1 -1
  56. package/dist/gir/libraries.js +14 -1
  57. package/dist/gir/libraries.js.map +1 -1
  58. package/dist/gir/parameter.d.ts.map +1 -1
  59. package/dist/gir/parameter.js +0 -4
  60. package/dist/gir/parameter.js.map +1 -1
  61. package/dist/gir/size.d.ts.map +1 -1
  62. package/dist/gir/size.js +0 -3
  63. package/dist/gir/size.js.map +1 -1
  64. package/dist/gir/type-id.d.ts +1 -1
  65. package/dist/gir/type-id.d.ts.map +1 -1
  66. package/dist/gir/type-id.js +1 -3
  67. package/dist/gir/type-id.js.map +1 -1
  68. package/dist/gir/type-ref.js +1 -1
  69. package/dist/gir/type-ref.js.map +1 -1
  70. package/dist/index.d.ts +18 -5
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/internal.d.ts +3 -0
  75. package/dist/internal.d.ts.map +1 -0
  76. package/dist/internal.js +3 -0
  77. package/dist/internal.js.map +1 -0
  78. package/dist/jsx.d.ts +8 -11
  79. package/dist/jsx.d.ts.map +1 -1
  80. package/dist/jsx.js +18 -15
  81. package/dist/jsx.js.map +1 -1
  82. package/dist/khronos/args.d.ts.map +1 -1
  83. package/dist/khronos/args.js +1 -1
  84. package/dist/khronos/args.js.map +1 -1
  85. package/dist/khronos/pipeline.js +1 -1
  86. package/dist/khronos/pipeline.js.map +1 -1
  87. package/dist/khronos/plan.d.ts +2 -2
  88. package/dist/khronos/plan.d.ts.map +1 -1
  89. package/dist/khronos/plan.js +6 -6
  90. package/dist/khronos/plan.js.map +1 -1
  91. package/dist/react/element-config.d.ts +18 -9
  92. package/dist/react/element-config.d.ts.map +1 -1
  93. package/dist/react/element-config.js +23 -13
  94. package/dist/react/element-config.js.map +1 -1
  95. package/dist/runner.d.ts +36 -16
  96. package/dist/runner.d.ts.map +1 -1
  97. package/dist/runner.js +22 -20
  98. package/dist/runner.js.map +1 -1
  99. package/dist/store/compile-store.d.ts +1 -2
  100. package/dist/store/compile-store.d.ts.map +1 -1
  101. package/dist/store/compile-store.js +2 -2
  102. package/dist/store/compile-store.js.map +1 -1
  103. package/dist/store/gi/callables.d.ts.map +1 -1
  104. package/dist/store/gi/callables.js +4 -9
  105. package/dist/store/gi/callables.js.map +1 -1
  106. package/dist/store/gi/constant.d.ts.map +1 -1
  107. package/dist/store/gi/constant.js +0 -2
  108. package/dist/store/gi/constant.js.map +1 -1
  109. package/dist/store/gi/function.d.ts.map +1 -1
  110. package/dist/store/gi/function.js +1 -7
  111. package/dist/store/gi/function.js.map +1 -1
  112. package/dist/store/gi/method.d.ts.map +1 -1
  113. package/dist/store/gi/method.js +26 -23
  114. package/dist/store/gi/method.js.map +1 -1
  115. package/dist/store/gi/property-accessor.d.ts +1 -1
  116. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  117. package/dist/store/gi/property-accessor.js +5 -7
  118. package/dist/store/gi/property-accessor.js.map +1 -1
  119. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  120. package/dist/store/gi/record-constructor.js +5 -4
  121. package/dist/store/gi/record-constructor.js.map +1 -1
  122. package/dist/store/gi/record-field-accessor.d.ts +3 -2
  123. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  124. package/dist/store/gi/record-field-accessor.js +21 -11
  125. package/dist/store/gi/record-field-accessor.js.map +1 -1
  126. package/dist/store/gi/record-layout.d.ts.map +1 -1
  127. package/dist/store/gi/record-layout.js +0 -4
  128. package/dist/store/gi/record-layout.js.map +1 -1
  129. package/dist/store/gi/record.d.ts.map +1 -1
  130. package/dist/store/gi/record.js +0 -7
  131. package/dist/store/gi/record.js.map +1 -1
  132. package/dist/store/gi/return-wrap.d.ts +1 -1
  133. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  134. package/dist/store/gi/return-wrap.js +4 -4
  135. package/dist/store/gi/return-wrap.js.map +1 -1
  136. package/dist/store/gi/signal.d.ts.map +1 -1
  137. package/dist/store/gi/signal.js +13 -16
  138. package/dist/store/gi/signal.js.map +1 -1
  139. package/dist/store/gi/value-marshalable.d.ts +7 -0
  140. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  141. package/dist/store/gi/value-marshalable.js +57 -0
  142. package/dist/store/gi/value-marshalable.js.map +1 -0
  143. package/dist/store/gi-store.d.ts +2 -3
  144. package/dist/store/gi-store.d.ts.map +1 -1
  145. package/dist/store/gi-store.js.map +1 -1
  146. package/dist/store/jsx/element-components.d.ts +0 -2
  147. package/dist/store/jsx/element-components.d.ts.map +1 -1
  148. package/dist/store/jsx/element-components.js +0 -4
  149. package/dist/store/jsx/element-components.js.map +1 -1
  150. package/dist/store/jsx/element-prop-imports.d.ts +2 -3
  151. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  152. package/dist/store/jsx/element-prop-imports.js +0 -2
  153. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  154. package/dist/store/jsx/element-prop-types.d.ts +0 -1
  155. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  156. package/dist/store/jsx/element-prop-types.js +0 -1
  157. package/dist/store/jsx/element-prop-types.js.map +1 -1
  158. package/dist/store/jsx/generated-elements.d.ts +29 -0
  159. package/dist/store/jsx/generated-elements.d.ts.map +1 -0
  160. package/dist/store/jsx/generated-elements.js +30 -0
  161. package/dist/store/jsx/generated-elements.js.map +1 -0
  162. package/dist/store/jsx/intrinsic-elements.d.ts +1 -2
  163. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  164. package/dist/store/jsx/intrinsic-elements.js +1 -2
  165. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  166. package/dist/store/jsx/jsx.js +6 -6
  167. package/dist/store/jsx/jsx.js.map +1 -1
  168. package/dist/store/jsx/metadata.js +7 -7
  169. package/dist/store/jsx/metadata.js.map +1 -1
  170. package/dist/store/jsx/omitted-props.d.ts +8 -0
  171. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  172. package/dist/store/jsx/omitted-props.js +20 -0
  173. package/dist/store/jsx/omitted-props.js.map +1 -0
  174. package/dist/store/jsx/pipeline.d.ts +4 -0
  175. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  176. package/dist/store/jsx/pipeline.js +4 -1
  177. package/dist/store/jsx/pipeline.js.map +1 -1
  178. package/dist/store/jsx/props.d.ts +1 -1
  179. package/dist/store/jsx/props.d.ts.map +1 -1
  180. package/dist/store/jsx/props.js +8 -13
  181. package/dist/store/jsx/props.js.map +1 -1
  182. package/dist/store/jsx-store.d.ts +2 -3
  183. package/dist/store/jsx-store.d.ts.map +1 -1
  184. package/dist/store/jsx-store.js +3 -3
  185. package/dist/store/jsx-store.js.map +1 -1
  186. package/dist/store/resolve-store.d.ts +28 -0
  187. package/dist/store/resolve-store.d.ts.map +1 -0
  188. package/dist/store/resolve-store.js +65 -0
  189. package/dist/store/resolve-store.js.map +1 -0
  190. package/dist/store/store-fs.d.ts +5 -1
  191. package/dist/store/store-fs.d.ts.map +1 -1
  192. package/dist/store/store-fs.js +6 -4
  193. package/dist/store/store-fs.js.map +1 -1
  194. package/overrides/gobject/object.ts.ejs +8 -8
  195. package/package.json +6 -11
  196. package/src/analysis/descriptor-render.ts +45 -38
  197. package/src/analysis/descriptor.ts +13 -13
  198. package/src/analysis/param-structure.ts +8 -10
  199. package/src/analysis/ts-type.ts +8 -17
  200. package/src/compile.ts +2 -1
  201. package/src/docs/api-reference.ts +131 -13
  202. package/src/docs/element-page.ts +5 -9
  203. package/src/docs/pipeline.ts +9 -6
  204. package/src/docs/render.ts +7 -7
  205. package/src/docs/symbol-page.ts +7 -2
  206. package/src/fingerprint.ts +21 -12
  207. package/src/gi.ts +13 -11
  208. package/src/gir/field.ts +0 -4
  209. package/src/gir/gir-path.ts +7 -0
  210. package/src/gir/libraries.ts +18 -4
  211. package/src/gir/parameter.ts +0 -4
  212. package/src/gir/size.ts +0 -3
  213. package/src/gir/type-id.ts +2 -4
  214. package/src/gir/type-ref.ts +1 -1
  215. package/src/index.ts +18 -15
  216. package/src/internal.ts +2 -0
  217. package/src/jsx.ts +26 -21
  218. package/src/khronos/args.ts +1 -1
  219. package/src/khronos/pipeline.ts +1 -1
  220. package/src/khronos/plan.ts +8 -8
  221. package/src/react/element-config.ts +25 -16
  222. package/src/runner.ts +62 -37
  223. package/src/store/compile-store.ts +3 -4
  224. package/src/store/gi/callables.ts +5 -11
  225. package/src/store/gi/constant.ts +0 -2
  226. package/src/store/gi/function.ts +1 -7
  227. package/src/store/gi/method.ts +31 -28
  228. package/src/store/gi/property-accessor.ts +6 -8
  229. package/src/store/gi/record-constructor.ts +9 -4
  230. package/src/store/gi/record-field-accessor.ts +41 -12
  231. package/src/store/gi/record-layout.ts +0 -4
  232. package/src/store/gi/record.ts +0 -9
  233. package/src/store/gi/return-wrap.ts +5 -5
  234. package/src/store/gi/signal.ts +17 -17
  235. package/src/store/gi/value-marshalable.ts +87 -0
  236. package/src/store/gi-store.ts +2 -4
  237. package/src/store/jsx/element-components.ts +0 -6
  238. package/src/store/jsx/element-prop-imports.ts +7 -4
  239. package/src/store/jsx/element-prop-types.ts +0 -1
  240. package/src/store/jsx/generated-elements.ts +60 -0
  241. package/src/store/jsx/intrinsic-elements.ts +0 -9
  242. package/src/store/jsx/jsx.ts +7 -7
  243. package/src/store/jsx/metadata.ts +8 -8
  244. package/src/store/jsx/omitted-props.ts +30 -0
  245. package/src/store/jsx/pipeline.ts +6 -1
  246. package/src/store/jsx/props.ts +8 -20
  247. package/src/store/jsx-store.ts +5 -7
  248. package/src/store/resolve-store.ts +100 -0
  249. package/src/store/store-fs.ts +12 -5
  250. package/dist/store/gi/class-struct-record.d.ts +0 -10
  251. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  252. package/dist/store/gi/class-struct-record.js +0 -52
  253. package/dist/store/gi/class-struct-record.js.map +0 -1
  254. package/src/store/gi/class-struct-record.ts +0 -72
@@ -0,0 +1,100 @@
1
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
2
+ import { dirname, join, parse } from "node:path";
3
+ import type { StoreOptions } from "./store-fs.js";
4
+
5
+ /**
6
+ * Where a project's generated stores live, ready to spread into `runCodegen`. `jsx` is null when the
7
+ * project has no `@gtkx/react` installed, in which case only the `@gtkx/gi` store can be generated.
8
+ */
9
+ type ResolvedStore = {
10
+ /** Where the `@gtkx/gi` store goes, versioned by the installed `@gtkx/runtime`. */
11
+ gi: StoreOptions;
12
+ /** Where the `@gtkx/jsx` store goes, versioned by the installed `@gtkx/react`; null when it is absent. */
13
+ jsx: StoreOptions | null;
14
+ /** Subexport names of the installed `@gtkx/react`, empty when it is absent. */
15
+ reactSubexports: string[];
16
+ };
17
+
18
+ type ResolvedPackage = { dir: string; version: string };
19
+
20
+ const STORE_DIR = ".gtkx";
21
+ const SCOPE = "@gtkx";
22
+
23
+ const readManifest = (path: string): { version?: string; exports?: Record<string, unknown> } =>
24
+ JSON.parse(readFileSync(path, "utf8")) as { version?: string; exports?: Record<string, unknown> };
25
+
26
+ const subexportNames = (packageDir: string): string[] =>
27
+ Object.keys(readManifest(join(packageDir, "package.json")).exports ?? {})
28
+ .filter((key) => key.startsWith("./") && key !== "./package.json")
29
+ .map((key) => key.slice(2));
30
+
31
+ const loadPackage = (manifest: string): ResolvedPackage | null => {
32
+ if (!existsSync(manifest)) {
33
+ return null;
34
+ }
35
+
36
+ const real = realpathSync(manifest);
37
+
38
+ return { dir: dirname(real), version: readManifest(real).version ?? "0.0.0" };
39
+ };
40
+
41
+ const nodeModulesChain = function* (projectRoot: string): Generator<string> {
42
+ const { root } = parse(projectRoot);
43
+ let current = projectRoot;
44
+
45
+ while (current !== root) {
46
+ yield join(current, "node_modules");
47
+ current = dirname(current);
48
+ }
49
+
50
+ yield join(root, "node_modules");
51
+ };
52
+
53
+ const resolvePackage = (projectRoot: string, packageName: string): ResolvedPackage | null => {
54
+ for (const nodeModules of nodeModulesChain(projectRoot)) {
55
+ const found = loadPackage(join(nodeModules, packageName, "package.json"));
56
+
57
+ if (found !== null) {
58
+ return found;
59
+ }
60
+ }
61
+
62
+ return loadPackage(join(projectRoot, "packages", packageName.replace(/^@[^/]+\//, ""), "package.json"));
63
+ };
64
+
65
+ const storeOptions = (nodeModules: string, name: string, version: string): StoreOptions => ({
66
+ storeDir: join(nodeModules, STORE_DIR, name),
67
+ linkDir: join(nodeModules, SCOPE, name),
68
+ version,
69
+ });
70
+
71
+ /**
72
+ * Resolves where a project's `@gtkx/gi` and `@gtkx/jsx` stores belong, from the project root alone. The
73
+ * result supplies every `runCodegen` input except `libraries` and `girPath`, so a caller that has
74
+ * already resolved those can spread it straight into the call.
75
+ *
76
+ * Store versions come from the installed `@gtkx/runtime` and `@gtkx/react`, so a dependency upgrade
77
+ * invalidates the stores. Pass explicit `gi` or `jsx` options to `runCodegen` to override any of it.
78
+ *
79
+ * @param projectRoot Directory holding the project's `package.json` and `node_modules`.
80
+ * @returns The store locations and the React subexports that shape the jsx store.
81
+ * @throws If `@gtkx/runtime` cannot be resolved from the project.
82
+ */
83
+ const resolveStore = (projectRoot: string): ResolvedStore => {
84
+ const runtime = resolvePackage(projectRoot, "@gtkx/runtime");
85
+
86
+ if (runtime === null) {
87
+ throw new Error(`Cannot resolve @gtkx/runtime from ${projectRoot}; is it installed?`);
88
+ }
89
+
90
+ const react = resolvePackage(projectRoot, "@gtkx/react");
91
+ const nodeModules = join(projectRoot, "node_modules");
92
+
93
+ return {
94
+ gi: storeOptions(nodeModules, "gi", runtime.version),
95
+ jsx: react === null ? null : storeOptions(nodeModules, "jsx", react.version),
96
+ reactSubexports: react === null ? [] : subexportNames(react.dir),
97
+ };
98
+ };
99
+
100
+ export { resolveStore, type ResolvedStore };
@@ -1,10 +1,14 @@
1
- import { existsSync, mkdirSync, mkdtempSync, renameSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
1
+ import { chmodSync, existsSync, mkdirSync, mkdtempSync, renameSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
2
2
  import { dirname, join, relative } from "node:path";
3
3
  import { compileStore } from "./compile-store.js";
4
4
 
5
+ /** Where one generated store is written and how it is reached. */
5
6
  type StoreOptions = {
7
+ /** Directory the generated package is written to, replaced atomically on each run. */
6
8
  storeDir: string;
9
+ /** Path the store is symlinked at, which is the specifier's resolution target under `node_modules`. */
7
10
  linkDir: string;
11
+ /** Version stamped on the store's `package.json`, taken from the dependency the store is generated for. */
8
12
  version: string;
9
13
  };
10
14
 
@@ -37,9 +41,11 @@ type WriteStoreParams = {
37
41
  files: StoreFile[];
38
42
  manifest: Manifest;
39
43
  rawFiles?: RawFile[];
40
- configEnv?: boolean;
44
+ requiresEnvReference?: boolean;
41
45
  };
42
46
 
47
+ const STORE_DIR_MODE = 0o755;
48
+
43
49
  const subpathExport = (stem: string): { types: string; default: string } => ({
44
50
  types: `./${stem}.d.ts`,
45
51
  default: `./${stem}.js`,
@@ -73,7 +79,7 @@ const writeStore = (params: WriteStoreParams): void => {
73
79
  storeDir: tmp,
74
80
  files: params.files,
75
81
  packageName: params.manifest.name,
76
- ...(params.configEnv !== undefined && { configEnv: params.configEnv }),
82
+ ...(params.requiresEnvReference !== undefined && { requiresEnvReference: params.requiresEnvReference }),
77
83
  });
78
84
 
79
85
  writePackageJson(tmp, params.manifest);
@@ -83,7 +89,6 @@ const writeStore = (params: WriteStoreParams): void => {
83
89
  writeFileSync(join(tmp, raw.relativePath), raw.content);
84
90
  }
85
91
 
86
- symlinkRelative(join(tmp, "node_modules", ...params.manifest.name.split("/")), tmp);
87
92
  swapStore(tmp, params.storeDir, params.linkDir);
88
93
  } finally {
89
94
  rmSync(tmp, { recursive: true, force: true });
@@ -121,8 +126,10 @@ const swapStore = (tmp: string, storeDir: string, visibleLink: string): void =>
121
126
 
122
127
  const createTempStore = (storeDir: string): string => {
123
128
  mkdirSync(dirname(storeDir), { recursive: true });
129
+ const tmp = mkdtempSync(`${storeDir}.tmp-`);
130
+ chmodSync(tmp, STORE_DIR_MODE);
124
131
 
125
- return mkdtempSync(`${storeDir}.tmp-`);
132
+ return tmp;
126
133
  };
127
134
 
128
135
  export { subpathExport, buildManifest, writeStore, type StoreOptions, type RawFile };
@@ -1,10 +0,0 @@
1
- import type { GirFunction } from "../../gir/function.js";
2
- import type { Library } from "../../gir/library.js";
3
- import type { GirRecord } from "../../gir/record.js";
4
- import type { TypeId } from "../../gir/type-id.js";
5
- import type { ModuleContext } from "../../writer/context.js";
6
- declare const isClassStructRecord: (library: Library, namespaceName: string, record: GirRecord) => boolean;
7
- declare const isClassStructRef: (context: ModuleContext, ref: TypeId | undefined) => boolean;
8
- declare const hasClassStructReference: (context: ModuleContext, fn: GirFunction) => boolean;
9
- export { isClassStructRecord, isClassStructRef, hasClassStructReference };
10
- //# sourceMappingURL=class-struct-record.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class-struct-record.d.ts","sourceRoot":"","sources":["../../../src/store/gi/class-struct-record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAO7D,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,eAAe,MAAM,EAAE,QAAQ,SAAS,KAAG,OAsBzF,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OA8B3E,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,SAAS,aAAa,EAAE,IAAI,WAAW,KAAG,OAEK,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,52 +0,0 @@
1
- const TYPE_STRUCT_ROOTS = new Set(["GObject.TypeClass", "GObject.TypeInterface"]);
2
- const EXPLICIT_CLASS_STRUCTS = new Set(["Pango.AttrClass"]);
3
- const qualify = (namespaceName, name) => `${namespaceName}.${name}`;
4
- const isClassStructRecord = (library, namespaceName, record) => {
5
- const qualified = qualify(namespaceName, record.name);
6
- if (TYPE_STRUCT_ROOTS.has(qualified) || EXPLICIT_CLASS_STRUCTS.has(qualified)) {
7
- return true;
8
- }
9
- const first = record.fields[0];
10
- // A class struct embeds its parent vtable by value (`GTypeClass g_type_class`); an instance
11
- // struct stores a pointer to it (`GTypeClass *g_class`). Only the first is a vtable.
12
- if (first?.type === undefined || first.cType?.endsWith("*") === true) {
13
- return false;
14
- }
15
- const name = library.nameFor(first.type);
16
- if (name === undefined) {
17
- return false;
18
- }
19
- return TYPE_STRUCT_ROOTS.has(qualify(name.namespaceName, name.typeName));
20
- };
21
- const isClassStructRef = (context, ref) => {
22
- if (ref === undefined) {
23
- return false;
24
- }
25
- const type = context.library.typeFor(ref);
26
- if (type === undefined) {
27
- return false;
28
- }
29
- switch (type.kind) {
30
- case "record": {
31
- return isClassStructRecord(context.library, type.namespace.name, type.value);
32
- }
33
- case "carray":
34
- case "list": {
35
- return isClassStructRef(context, type.element);
36
- }
37
- case "alias":
38
- case "callback":
39
- case "class":
40
- case "enum":
41
- case "hashtable":
42
- case "interface":
43
- case "primitive":
44
- case "varargs": {
45
- return false;
46
- }
47
- }
48
- };
49
- const hasClassStructReference = (context, fn) => isClassStructRef(context, fn.returnValue.type) ||
50
- fn.parameters.some((parameter) => isClassStructRef(context, parameter.type));
51
- export { isClassStructRecord, isClassStructRef, hasClassStructReference };
52
- //# sourceMappingURL=class-struct-record.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class-struct-record.js","sourceRoot":"","sources":["../../../src/store/gi/class-struct-record.ts"],"names":[],"mappings":"AAMA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAClF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAE5D,MAAM,OAAO,GAAG,CAAC,aAAqB,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,aAAa,IAAI,IAAI,EAAE,CAAC;AAE5F,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,aAAqB,EAAE,MAAiB,EAAW,EAAE;IAChG,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,4FAA4F;IAC5F,qFAAqF;IACrF,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,GAAuB,EAAW,EAAE;IAClF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAsB,EAAE,EAAe,EAAW,EAAE,CACjF,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;IAC9C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import type { GirFunction } from \"../../gir/function.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\n\nconst TYPE_STRUCT_ROOTS = new Set([\"GObject.TypeClass\", \"GObject.TypeInterface\"]);\nconst EXPLICIT_CLASS_STRUCTS = new Set([\"Pango.AttrClass\"]);\n\nconst qualify = (namespaceName: string, name: string): string => `${namespaceName}.${name}`;\n\nconst isClassStructRecord = (library: Library, namespaceName: string, record: GirRecord): boolean => {\n const qualified = qualify(namespaceName, record.name);\n\n if (TYPE_STRUCT_ROOTS.has(qualified) || EXPLICIT_CLASS_STRUCTS.has(qualified)) {\n return true;\n }\n\n const first = record.fields[0];\n\n // A class struct embeds its parent vtable by value (`GTypeClass g_type_class`); an instance\n // struct stores a pointer to it (`GTypeClass *g_class`). Only the first is a vtable.\n if (first?.type === undefined || first.cType?.endsWith(\"*\") === true) {\n return false;\n }\n\n const name = library.nameFor(first.type);\n\n if (name === undefined) {\n return false;\n }\n\n return TYPE_STRUCT_ROOTS.has(qualify(name.namespaceName, name.typeName));\n};\n\nconst isClassStructRef = (context: ModuleContext, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return false;\n }\n\n switch (type.kind) {\n case \"record\": {\n return isClassStructRecord(context.library, type.namespace.name, type.value);\n }\n case \"carray\":\n case \"list\": {\n return isClassStructRef(context, type.element);\n }\n case \"alias\":\n case \"callback\":\n case \"class\":\n case \"enum\":\n case \"hashtable\":\n case \"interface\":\n case \"primitive\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst hasClassStructReference = (context: ModuleContext, fn: GirFunction): boolean =>\n isClassStructRef(context, fn.returnValue.type) ||\n fn.parameters.some((parameter) => isClassStructRef(context, parameter.type));\n\nexport { isClassStructRecord, isClassStructRef, hasClassStructReference };\n"]}
@@ -1,72 +0,0 @@
1
- import type { GirFunction } from "../../gir/function.js";
2
- import type { Library } from "../../gir/library.js";
3
- import type { GirRecord } from "../../gir/record.js";
4
- import type { TypeId } from "../../gir/type-id.js";
5
- import type { ModuleContext } from "../../writer/context.js";
6
-
7
- const TYPE_STRUCT_ROOTS = new Set(["GObject.TypeClass", "GObject.TypeInterface"]);
8
- const EXPLICIT_CLASS_STRUCTS = new Set(["Pango.AttrClass"]);
9
-
10
- const qualify = (namespaceName: string, name: string): string => `${namespaceName}.${name}`;
11
-
12
- const isClassStructRecord = (library: Library, namespaceName: string, record: GirRecord): boolean => {
13
- const qualified = qualify(namespaceName, record.name);
14
-
15
- if (TYPE_STRUCT_ROOTS.has(qualified) || EXPLICIT_CLASS_STRUCTS.has(qualified)) {
16
- return true;
17
- }
18
-
19
- const first = record.fields[0];
20
-
21
- // A class struct embeds its parent vtable by value (`GTypeClass g_type_class`); an instance
22
- // struct stores a pointer to it (`GTypeClass *g_class`). Only the first is a vtable.
23
- if (first?.type === undefined || first.cType?.endsWith("*") === true) {
24
- return false;
25
- }
26
-
27
- const name = library.nameFor(first.type);
28
-
29
- if (name === undefined) {
30
- return false;
31
- }
32
-
33
- return TYPE_STRUCT_ROOTS.has(qualify(name.namespaceName, name.typeName));
34
- };
35
-
36
- const isClassStructRef = (context: ModuleContext, ref: TypeId | undefined): boolean => {
37
- if (ref === undefined) {
38
- return false;
39
- }
40
-
41
- const type = context.library.typeFor(ref);
42
-
43
- if (type === undefined) {
44
- return false;
45
- }
46
-
47
- switch (type.kind) {
48
- case "record": {
49
- return isClassStructRecord(context.library, type.namespace.name, type.value);
50
- }
51
- case "carray":
52
- case "list": {
53
- return isClassStructRef(context, type.element);
54
- }
55
- case "alias":
56
- case "callback":
57
- case "class":
58
- case "enum":
59
- case "hashtable":
60
- case "interface":
61
- case "primitive":
62
- case "varargs": {
63
- return false;
64
- }
65
- }
66
- };
67
-
68
- const hasClassStructReference = (context: ModuleContext, fn: GirFunction): boolean =>
69
- isClassStructRef(context, fn.returnValue.type) ||
70
- fn.parameters.some((parameter) => isClassStructRef(context, parameter.type));
71
-
72
- export { isClassStructRecord, isClassStructRef, hasClassStructReference };