@gtkx/codegen 1.4.0 → 1.6.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 (180) hide show
  1. package/README.md +1 -1
  2. package/dist/analysis/descriptor-render.d.ts +1 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +56 -28
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +3 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +10 -9
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/compile.d.ts.map +1 -1
  11. package/dist/compile.js +24 -3
  12. package/dist/compile.js.map +1 -1
  13. package/dist/docs/api-reference.d.ts +2 -0
  14. package/dist/docs/api-reference.d.ts.map +1 -1
  15. package/dist/docs/api-reference.js +2 -1
  16. package/dist/docs/api-reference.js.map +1 -1
  17. package/dist/docs/pipeline.d.ts +3 -0
  18. package/dist/docs/pipeline.d.ts.map +1 -1
  19. package/dist/docs/pipeline.js +44 -12
  20. package/dist/docs/pipeline.js.map +1 -1
  21. package/dist/fingerprint.d.ts +3 -0
  22. package/dist/fingerprint.d.ts.map +1 -1
  23. package/dist/fingerprint.js +4 -0
  24. package/dist/fingerprint.js.map +1 -1
  25. package/dist/gi.d.ts +1 -0
  26. package/dist/gi.d.ts.map +1 -1
  27. package/dist/gi.js +4 -1
  28. package/dist/gi.js.map +1 -1
  29. package/dist/gir/libraries.d.ts +12 -5
  30. package/dist/gir/libraries.d.ts.map +1 -1
  31. package/dist/gir/libraries.js +50 -14
  32. package/dist/gir/libraries.js.map +1 -1
  33. package/dist/gir/library.d.ts +5 -0
  34. package/dist/gir/library.d.ts.map +1 -1
  35. package/dist/gir/library.js +6 -0
  36. package/dist/gir/library.js.map +1 -1
  37. package/dist/internal.d.ts +1 -0
  38. package/dist/internal.d.ts.map +1 -1
  39. package/dist/internal.js +1 -0
  40. package/dist/internal.js.map +1 -1
  41. package/dist/jsx.d.ts +1 -0
  42. package/dist/jsx.d.ts.map +1 -1
  43. package/dist/jsx.js +2 -0
  44. package/dist/jsx.js.map +1 -1
  45. package/dist/runner.d.ts +2 -0
  46. package/dist/runner.d.ts.map +1 -1
  47. package/dist/runner.js +3 -1
  48. package/dist/runner.js.map +1 -1
  49. package/dist/store/gi/bootstrap.d.ts +4 -0
  50. package/dist/store/gi/bootstrap.d.ts.map +1 -0
  51. package/dist/store/gi/bootstrap.js +48 -0
  52. package/dist/store/gi/bootstrap.js.map +1 -0
  53. package/dist/store/gi/class.d.ts.map +1 -1
  54. package/dist/store/gi/class.js +75 -28
  55. package/dist/store/gi/class.js.map +1 -1
  56. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  57. package/dist/store/gi/constructor-props.js +2 -1
  58. package/dist/store/gi/constructor-props.js.map +1 -1
  59. package/dist/store/gi/enum.js +3 -3
  60. package/dist/store/gi/enum.js.map +1 -1
  61. package/dist/store/gi/folded.d.ts +14 -0
  62. package/dist/store/gi/folded.d.ts.map +1 -0
  63. package/dist/store/gi/folded.js +35 -0
  64. package/dist/store/gi/folded.js.map +1 -0
  65. package/dist/store/gi/function.d.ts.map +1 -1
  66. package/dist/store/gi/function.js +22 -3
  67. package/dist/store/gi/function.js.map +1 -1
  68. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  69. package/dist/store/gi/gtype-binding.js +11 -1
  70. package/dist/store/gi/gtype-binding.js.map +1 -1
  71. package/dist/store/gi/interface.d.ts.map +1 -1
  72. package/dist/store/gi/interface.js +43 -4
  73. package/dist/store/gi/interface.js.map +1 -1
  74. package/dist/store/gi/method.d.ts.map +1 -1
  75. package/dist/store/gi/method.js +2 -0
  76. package/dist/store/gi/method.js.map +1 -1
  77. package/dist/store/gi/pipeline.d.ts +5 -1
  78. package/dist/store/gi/pipeline.d.ts.map +1 -1
  79. package/dist/store/gi/pipeline.js +13 -1
  80. package/dist/store/gi/pipeline.js.map +1 -1
  81. package/dist/store/gi/property-accessor.js +1 -1
  82. package/dist/store/gi/property-accessor.js.map +1 -1
  83. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  84. package/dist/store/gi/record-field-accessor.js +3 -3
  85. package/dist/store/gi/record-field-accessor.js.map +1 -1
  86. package/dist/store/gi/record.d.ts.map +1 -1
  87. package/dist/store/gi/record.js +44 -12
  88. package/dist/store/gi/record.js.map +1 -1
  89. package/dist/store/gi/registration.js +2 -2
  90. package/dist/store/gi/registration.js.map +1 -1
  91. package/dist/store/gi/return-wrap.js +1 -1
  92. package/dist/store/gi/return-wrap.js.map +1 -1
  93. package/dist/store/gi/signal.d.ts.map +1 -1
  94. package/dist/store/gi/signal.js +7 -3
  95. package/dist/store/gi/signal.js.map +1 -1
  96. package/dist/store/gi/vtable.d.ts.map +1 -1
  97. package/dist/store/gi/vtable.js +1 -1
  98. package/dist/store/gi/vtable.js.map +1 -1
  99. package/dist/store/gi-store.d.ts +1 -0
  100. package/dist/store/gi-store.d.ts.map +1 -1
  101. package/dist/store/gi-store.js +16 -7
  102. package/dist/store/gi-store.js.map +1 -1
  103. package/dist/store/jsx/element-components.d.ts.map +1 -1
  104. package/dist/store/jsx/element-components.js +64 -10
  105. package/dist/store/jsx/element-components.js.map +1 -1
  106. package/dist/store/jsx/element-prop-types.d.ts +2 -0
  107. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  108. package/dist/store/jsx/element-prop-types.js +2 -0
  109. package/dist/store/jsx/element-prop-types.js.map +1 -1
  110. package/dist/store/jsx/metadata.d.ts.map +1 -1
  111. package/dist/store/jsx/metadata.js +28 -1
  112. package/dist/store/jsx/metadata.js.map +1 -1
  113. package/dist/store/jsx-store.d.ts +1 -0
  114. package/dist/store/jsx-store.d.ts.map +1 -1
  115. package/dist/store/jsx-store.js +7 -2
  116. package/dist/store/jsx-store.js.map +1 -1
  117. package/dist/store/resolve-store.d.ts.map +1 -1
  118. package/dist/store/resolve-store.js +2 -0
  119. package/dist/store/resolve-store.js.map +1 -1
  120. package/dist/store/store-fs.d.ts +2 -1
  121. package/dist/store/store-fs.d.ts.map +1 -1
  122. package/dist/store/store-fs.js +1 -1
  123. package/dist/store/store-fs.js.map +1 -1
  124. package/dist/writer/context.d.ts +17 -0
  125. package/dist/writer/context.d.ts.map +1 -1
  126. package/dist/writer/context.js +83 -11
  127. package/dist/writer/context.js.map +1 -1
  128. package/dist/writer/emit.d.ts +2 -1
  129. package/dist/writer/emit.d.ts.map +1 -1
  130. package/dist/writer/emit.js +2 -1
  131. package/dist/writer/emit.js.map +1 -1
  132. package/dist/writer/imports.d.ts.map +1 -1
  133. package/dist/writer/imports.js +6 -1
  134. package/dist/writer/imports.js.map +1 -1
  135. package/dist/writer/module.d.ts +1 -0
  136. package/dist/writer/module.d.ts.map +1 -1
  137. package/dist/writer/module.js +6 -1
  138. package/dist/writer/module.js.map +1 -1
  139. package/overrides/glib/regex.ts.ejs +2 -0
  140. package/package.json +4 -4
  141. package/src/analysis/descriptor-render.ts +79 -30
  142. package/src/analysis/descriptor.ts +19 -11
  143. package/src/compile.ts +42 -3
  144. package/src/docs/api-reference.ts +4 -1
  145. package/src/docs/pipeline.ts +64 -13
  146. package/src/fingerprint.ts +7 -0
  147. package/src/gi.ts +6 -1
  148. package/src/gir/libraries.ts +64 -16
  149. package/src/gir/library.ts +9 -0
  150. package/src/internal.ts +1 -0
  151. package/src/jsx.ts +3 -0
  152. package/src/runner.ts +5 -1
  153. package/src/store/gi/bootstrap.ts +64 -0
  154. package/src/store/gi/class.ts +100 -29
  155. package/src/store/gi/constructor-props.ts +2 -1
  156. package/src/store/gi/enum.ts +4 -4
  157. package/src/store/gi/folded.ts +57 -0
  158. package/src/store/gi/function.ts +22 -3
  159. package/src/store/gi/gtype-binding.ts +15 -2
  160. package/src/store/gi/interface.ts +64 -7
  161. package/src/store/gi/method.ts +2 -0
  162. package/src/store/gi/pipeline.ts +21 -2
  163. package/src/store/gi/property-accessor.ts +1 -1
  164. package/src/store/gi/record-field-accessor.ts +5 -3
  165. package/src/store/gi/record.ts +61 -14
  166. package/src/store/gi/registration.ts +2 -2
  167. package/src/store/gi/return-wrap.ts +1 -1
  168. package/src/store/gi/signal.ts +8 -3
  169. package/src/store/gi/vtable.ts +1 -0
  170. package/src/store/gi-store.ts +19 -7
  171. package/src/store/jsx/element-components.ts +107 -10
  172. package/src/store/jsx/element-prop-types.ts +4 -0
  173. package/src/store/jsx/metadata.ts +41 -0
  174. package/src/store/jsx-store.ts +10 -4
  175. package/src/store/resolve-store.ts +2 -0
  176. package/src/store/store-fs.ts +3 -2
  177. package/src/writer/context.ts +109 -16
  178. package/src/writer/emit.ts +3 -1
  179. package/src/writer/imports.ts +9 -1
  180. package/src/writer/module.ts +9 -1
@@ -21,8 +21,7 @@ const namespaceIndexPage = (namespace, elements) => {
21
21
  const description = firstSentence(entry.klass.doc).replaceAll("|", String.raw `\|`);
22
22
  return `| [${entry.glibName}](${link}) | ${description} |`;
23
23
  });
24
- const description = `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +
25
- `the ${namespace.name} namespace.`;
24
+ const description = `Reference pages for the JSX elements in the ${namespace.name} namespace.`;
26
25
  return [
27
26
  "---",
28
27
  `description: ${JSON.stringify(description)}`,
@@ -39,7 +38,35 @@ const namespaceIndexPage = (namespace, elements) => {
39
38
  "",
40
39
  ].join("\n");
41
40
  };
42
- const rootIndexPage = (namespaces, libraries) => {
41
+ const fileIndexPage = (namespaces, libraries) => {
42
+ const rows = namespaces.map((ns) => `| ${ns.name} | \`@gtkx/jsx/${ns.directory}\` | ${String(ns.elements.length)} | ${ns.link} |`);
43
+ const librariesList = libraries.map((library) => `\`${library}\``).join(", ");
44
+ return [
45
+ "# Element reference",
46
+ "",
47
+ `Every JSX element generated from ${librariesList} by \`gtkx codegen\` has a page here, regenerated ` +
48
+ "whenever the GIR libraries or the project's element configuration change. These pages describe " +
49
+ "this project's bindings exactly, so they are the authority on props, signals, and method signatures.",
50
+ "",
51
+ "Every path here is from the project root, ready to read as-is.",
52
+ "",
53
+ "One page per element, at `<namespace>/<element>.md`, where the element file name is its class name in " +
54
+ "kebab-case without the namespace prefix: `GtkButton` is `gtk/button.md`, `AdwHeaderBar` is " +
55
+ "`adw/header-bar.md`. Read a page directly by that path rather than searching for it.",
56
+ "",
57
+ "Each page lists the element's props (GObject properties plus what GTKX adds, with types and defaults), " +
58
+ "its signals as `on<Signal>` handler props with exact signatures, and the methods reachable through `ref`.",
59
+ "",
60
+ "| Namespace | Import | Elements | Index |",
61
+ "| --- | --- | --- | --- |",
62
+ ...rows,
63
+ "",
64
+ ].join("\n");
65
+ };
66
+ const rootIndexPage = (namespaces, libraries, linkStyle) => {
67
+ if (linkStyle === "file") {
68
+ return fileIndexPage(namespaces, libraries);
69
+ }
43
70
  const rows = namespaces.map((ns) => `| [${ns.name}](${ns.link}) | \`@gtkx/jsx/${ns.directory}\` | ${String(ns.elements.length)} |`);
44
71
  const librariesList = libraries.map((library) => `\`${library}\``).join(", ");
45
72
  return [
@@ -78,11 +105,12 @@ const groupElementsByNamespace = (elements) => {
78
105
  }
79
106
  return byNamespace;
80
107
  };
81
- const buildElementLinks = (elements, basePath) => {
108
+ const buildElementLinks = (elements, basePath, linkStyle) => {
82
109
  const linkByGlibName = new Map();
110
+ const suffix = linkStyle === "file" ? ".md" : "";
83
111
  for (const entry of elements) {
84
112
  const directory = namespaceDirectory(entry.namespace);
85
- const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;
113
+ const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}${suffix}`;
86
114
  if (linkByGlibName.values().some((existing) => existing === link)) {
87
115
  throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);
88
116
  }
@@ -104,12 +132,12 @@ const elementPagePath = (directory, entry) => {
104
132
  return `${directory}/${slug}.md`;
105
133
  };
106
134
  const namespacePages = (input) => {
107
- const { name, elements, basePath, linkByGlibName, pageContext } = input;
135
+ const { name, elements, basePath, linkStyle, linkByGlibName, pageContext } = input;
108
136
  const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);
109
137
  const docs = {
110
138
  name,
111
139
  directory,
112
- link: `${basePath}/${directory}/`,
140
+ link: linkStyle === "file" ? `${basePath}/${directory}/index.md` : `${basePath}/${directory}/`,
113
141
  elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? "" })),
114
142
  };
115
143
  const pages = elements.map((entry) => ({
@@ -119,21 +147,21 @@ const namespacePages = (input) => {
119
147
  pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });
120
148
  return { docs, pages };
121
149
  };
122
- const generatePages = (options, basePath, library) => {
150
+ const generatePages = (options, basePath, linkStyle, library) => {
123
151
  const intrinsicElements = collectIntrinsicElementClasses(library);
124
152
  const byNamespace = groupElementsByNamespace(intrinsicElements);
125
- const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
153
+ const linkByGlibName = buildElementLinks(intrinsicElements, basePath, linkStyle);
126
154
  const pageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
127
155
  const pages = [];
128
156
  const namespaces = [];
129
157
  const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
130
158
  for (const name of orderedNames) {
131
159
  const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);
132
- const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });
160
+ const result = namespacePages({ name, elements, basePath, linkStyle, linkByGlibName, pageContext });
133
161
  pages.push(...result.pages);
134
162
  namespaces.push(result.docs);
135
163
  }
136
- pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries) });
164
+ pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries, linkStyle) });
137
165
  return { pages, namespaces };
138
166
  };
139
167
  const isGeneratorTag = (value) => value === MANIFEST_GENERATOR;
@@ -160,6 +188,7 @@ const giInputs = (options, girFiles) => ({
160
188
  isValueUnwrapped: options.isValueUnwrapped === true,
161
189
  isFinishTrimmed: options.isFinishTrimmed === true,
162
190
  isInoutInPlace: options.isInoutInPlace === true,
191
+ isTreeShaken: options.isTreeShaken === true,
163
192
  });
164
193
  const assertOwnedOutDir = (options, manifest) => {
165
194
  const stats = statSync(options.outDir, { throwIfNoEntry: false });
@@ -207,10 +236,12 @@ const writePages = (outDir, pages) => {
207
236
  };
208
237
  const docsFingerprintInput = (options) => ({
209
238
  basePath: options.basePath ?? DEFAULT_BASE_PATH,
239
+ linkStyle: options.linkStyle ?? "url",
210
240
  props: options.props ?? {},
211
241
  omittedProps: options.omittedProps ?? {},
212
242
  });
213
243
  const writeDocs = (options) => {
244
+ const linkStyle = options.linkStyle ?? "url";
214
245
  const input = docsFingerprintInput(options);
215
246
  setElementProps(input.props);
216
247
  setOmittedProps(input.omittedProps);
@@ -226,8 +257,9 @@ const writeDocs = (options) => {
226
257
  isValueUnwrapped: options.isValueUnwrapped === true,
227
258
  isFinishTrimmed: options.isFinishTrimmed === true,
228
259
  isInoutInPlace: options.isInoutInPlace === true,
260
+ isTreeShaken: options.isTreeShaken === true,
229
261
  });
230
- const { pages, namespaces } = generatePages(options, input.basePath, library);
262
+ const { pages, namespaces } = generatePages(options, input.basePath, linkStyle, library);
231
263
  clearOutDir(options, previous);
232
264
  mkdirSync(options.outDir, { recursive: true });
233
265
  const manifest = { generator: MANIFEST_GENERATOR, namespaces };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport {\n computeDocsFingerprint,\n type DocsFingerprintInput,\n FINGERPRINT_FILENAME,\n type GiInputs,\n isDocsOutputFresh,\n} from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.js\";\nimport { arrayGuard, hasFields, isString } from \"../guards.js\";\nimport { readJsonFile } from \"../json.js\";\nimport { type ElementProps, setElementProps } from \"../store/jsx/element-prop-imports.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { type OmittedProps, setOmittedProps } from \"../store/jsx/omitted-props.js\";\nimport { type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n props?: ElementProps;\n omittedProps?: OmittedProps;\n isForced?: boolean;\n isByteArrayTyped?: boolean;\n isValueUnwrapped?: boolean;\n isFinishTrimmed?: boolean;\n isInoutInPlace?: boolean;\n};\n\ntype DocsManifest = {\n generator: string;\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n isRegenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\nconst MANIFEST_GENERATOR = \"gtkx-docs\";\nconst ROOT_INDEX_FILENAME = \"index.md\";\nconst DEFAULT_BASE_PATH = \"/reference\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description =\n `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +\n `the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst isEntryInsideOutDir = (value: string): boolean =>\n value.length > 0 && value !== \".\" && value !== \"..\" && !value.includes(\"/\") && !value.includes(\"\\\\\");\n\nconst isChildEntry = (value: unknown): value is string => isString(value) && isEntryInsideOutDir(value);\n\nconst ownedEntry = (entry: string, source: string): string => {\n if (isEntryInsideOutDir(entry)) {\n return entry;\n }\n\n throw new Error(\n `Refusing to generate documentation outside the output directory: ${source} maps to \\`${entry}\\`, ` +\n \"which is not an entry inside it. The GIR that declares it is malformed.\",\n );\n};\n\nconst elementPagePath = (directory: string, entry: GlibNamedClass): string => {\n const slug = ownedEntry(elementSlug(entry.klass.name), `the element ${entry.glibName}`);\n\n return `${directory}/${slug}.md`;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkByGlibName, pageContext } = input;\n const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: elementPagePath(directory, entry),\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (options: DocsOptions, basePath: string, library: Library): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath);\n const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries) });\n\n return { pages, namespaces };\n};\n\nconst isGeneratorTag = (value: unknown): value is string => value === MANIFEST_GENERATOR;\n\nconst isDocsElementLink = (value: unknown): value is DocsElementLink =>\n hasFields<DocsElementLink>(value, { text: isString, link: isString });\n\nconst isDocsNamespace = (value: unknown): value is DocsNamespace =>\n hasFields<DocsNamespace>(value, {\n name: isString,\n directory: isChildEntry,\n link: isString,\n elements: arrayGuard(isDocsElementLink),\n });\n\nconst isDocsManifest = (value: unknown): value is DocsManifest =>\n hasFields<DocsManifest>(value, { generator: isGeneratorTag, namespaces: arrayGuard(isDocsNamespace) });\n\nconst readDocsManifest = (manifestPath: string): DocsManifest | undefined => {\n const parsed = readJsonFile(manifestPath);\n\n return isDocsManifest(parsed) ? parsed : undefined;\n};\n\nconst outDirRefusal = (outDir: string, reason: string): Error =>\n new Error(\n `Refusing to generate documentation into ${outDir}: ${reason}. Point the output directory at an ` +\n \"empty directory or at one gtkx generated, or remove it yourself first.\",\n );\n\nconst giInputs = (options: DocsOptions, girFiles: string[]): GiInputs => ({\n girFiles,\n libraries: options.libraries,\n girPath: options.girPath,\n storeVersion: undefined,\n isByteArrayTyped: options.isByteArrayTyped === true,\n isValueUnwrapped: options.isValueUnwrapped === true,\n isFinishTrimmed: options.isFinishTrimmed === true,\n isInoutInPlace: options.isInoutInPlace === true,\n});\n\nconst assertOwnedOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n const stats = statSync(options.outDir, { throwIfNoEntry: false });\n\n if (stats === undefined) {\n return;\n }\n\n if (!stats.isDirectory()) {\n throw outDirRefusal(options.outDir, \"it already exists and is not a directory\");\n }\n\n if (manifest !== undefined || readdirSync(options.outDir).length === 0) {\n return;\n }\n\n throw outDirRefusal(\n options.outDir,\n `it is not empty and holds no ${MANIFEST_FILENAME} written by \\`gtkx docs\\`, ` +\n \"so its contents are not gtkx's to replace\",\n );\n};\n\nconst clearOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n if (manifest === undefined) {\n return;\n }\n\n const entries = [\n ...manifest.namespaces.map((namespace) => namespace.directory),\n ROOT_INDEX_FILENAME,\n MANIFEST_FILENAME,\n FINGERPRINT_FILENAME,\n ];\n\n for (const entry of entries) {\n rmSync(join(options.outDir, entry), { recursive: true, force: true });\n }\n};\n\nconst cachedDocsResult = (\n options: DocsOptions,\n manifest: DocsManifest | undefined,\n input: DocsFingerprintInput,\n): DocsResult | undefined => {\n if (manifest === undefined || options.isForced === true) {\n return undefined;\n }\n\n if (!isDocsOutputFresh(options.outDir, giInputs(options, []), input)) {\n return undefined;\n }\n\n return { isRegenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst docsFingerprintInput = (options: DocsOptions): DocsFingerprintInput => ({\n basePath: options.basePath ?? DEFAULT_BASE_PATH,\n props: options.props ?? {},\n omittedProps: options.omittedProps ?? {},\n});\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n const input = docsFingerprintInput(options);\n setElementProps(input.props);\n setOmittedProps(input.omittedProps);\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const previous = readDocsManifest(manifestPath);\n const cached = cachedDocsResult(options, previous, input);\n\n if (cached !== undefined) {\n return cached;\n }\n\n assertOwnedOutDir(options, previous);\n\n const library = Library.load(options.libraries, options.girPath, {\n isByteArrayTyped: options.isByteArrayTyped === true,\n isValueUnwrapped: options.isValueUnwrapped === true,\n isFinishTrimmed: options.isFinishTrimmed === true,\n isInoutInPlace: options.isInoutInPlace === true,\n });\n\n const { pages, namespaces } = generatePages(options, input.basePath, library);\n clearOutDir(options, previous);\n mkdirSync(options.outDir, { recursive: true });\n const manifest: DocsManifest = { generator: MANIFEST_GENERATOR, namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n writePages(options.outDir, pages);\n const fingerprint = computeDocsFingerprint(giInputs(options, library.girFiles), input);\n writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(fingerprint));\n\n return { isRegenerated: true, namespaces };\n};\n\nexport { writeDocs };\n"]}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport {\n computeDocsFingerprint,\n type DocsFingerprintInput,\n FINGERPRINT_FILENAME,\n type GiInputs,\n isDocsOutputFresh,\n} from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.js\";\nimport { arrayGuard, hasFields, isString } from \"../guards.js\";\nimport { readJsonFile } from \"../json.js\";\nimport { type ElementProps, setElementProps } from \"../store/jsx/element-prop-imports.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { type OmittedProps, setOmittedProps } from \"../store/jsx/omitted-props.js\";\nimport { type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsLinkStyle = \"url\" | \"file\";\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n linkStyle?: DocsLinkStyle;\n props?: ElementProps;\n omittedProps?: OmittedProps;\n isForced?: boolean;\n isByteArrayTyped?: boolean;\n isValueUnwrapped?: boolean;\n isFinishTrimmed?: boolean;\n isInoutInPlace?: boolean;\n isTreeShaken?: boolean;\n};\n\ntype DocsManifest = {\n generator: string;\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n isRegenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\nconst MANIFEST_GENERATOR = \"gtkx-docs\";\nconst ROOT_INDEX_FILENAME = \"index.md\";\nconst DEFAULT_BASE_PATH = \"/reference\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description = `Reference pages for the JSX elements in the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst fileIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| ${ns.name} | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} | ${ns.link} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"# Element reference\",\n \"\",\n `Every JSX element generated from ${librariesList} by \\`gtkx codegen\\` has a page here, regenerated ` +\n \"whenever the GIR libraries or the project's element configuration change. These pages describe \" +\n \"this project's bindings exactly, so they are the authority on props, signals, and method signatures.\",\n \"\",\n \"Every path here is from the project root, ready to read as-is.\",\n \"\",\n \"One page per element, at `<namespace>/<element>.md`, where the element file name is its class name in \" +\n \"kebab-case without the namespace prefix: `GtkButton` is `gtk/button.md`, `AdwHeaderBar` is \" +\n \"`adw/header-bar.md`. Read a page directly by that path rather than searching for it.\",\n \"\",\n \"Each page lists the element's props (GObject properties plus what GTKX adds, with types and defaults), \" +\n \"its signals as `on<Signal>` handler props with exact signatures, and the methods reachable through `ref`.\",\n \"\",\n \"| Namespace | Import | Elements | Index |\",\n \"| --- | --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[], linkStyle: DocsLinkStyle): string => {\n if (linkStyle === \"file\") {\n return fileIndexPage(namespaces, libraries);\n }\n\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (\n elements: GlibNamedClass[],\n basePath: string,\n linkStyle: DocsLinkStyle,\n): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n const suffix = linkStyle === \"file\" ? \".md\" : \"\";\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}${suffix}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst isEntryInsideOutDir = (value: string): boolean =>\n value.length > 0 && value !== \".\" && value !== \"..\" && !value.includes(\"/\") && !value.includes(\"\\\\\");\n\nconst isChildEntry = (value: unknown): value is string => isString(value) && isEntryInsideOutDir(value);\n\nconst ownedEntry = (entry: string, source: string): string => {\n if (isEntryInsideOutDir(entry)) {\n return entry;\n }\n\n throw new Error(\n `Refusing to generate documentation outside the output directory: ${source} maps to \\`${entry}\\`, ` +\n \"which is not an entry inside it. The GIR that declares it is malformed.\",\n );\n};\n\nconst elementPagePath = (directory: string, entry: GlibNamedClass): string => {\n const slug = ownedEntry(elementSlug(entry.klass.name), `the element ${entry.glibName}`);\n\n return `${directory}/${slug}.md`;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkStyle: DocsLinkStyle;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkStyle, linkByGlibName, pageContext } = input;\n const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: linkStyle === \"file\" ? `${basePath}/${directory}/index.md` : `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: elementPagePath(directory, entry),\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (\n options: DocsOptions,\n basePath: string,\n linkStyle: DocsLinkStyle,\n library: Library,\n): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath, linkStyle);\n const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkStyle, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries, linkStyle) });\n\n return { pages, namespaces };\n};\n\nconst isGeneratorTag = (value: unknown): value is string => value === MANIFEST_GENERATOR;\n\nconst isDocsElementLink = (value: unknown): value is DocsElementLink =>\n hasFields<DocsElementLink>(value, { text: isString, link: isString });\n\nconst isDocsNamespace = (value: unknown): value is DocsNamespace =>\n hasFields<DocsNamespace>(value, {\n name: isString,\n directory: isChildEntry,\n link: isString,\n elements: arrayGuard(isDocsElementLink),\n });\n\nconst isDocsManifest = (value: unknown): value is DocsManifest =>\n hasFields<DocsManifest>(value, { generator: isGeneratorTag, namespaces: arrayGuard(isDocsNamespace) });\n\nconst readDocsManifest = (manifestPath: string): DocsManifest | undefined => {\n const parsed = readJsonFile(manifestPath);\n\n return isDocsManifest(parsed) ? parsed : undefined;\n};\n\nconst outDirRefusal = (outDir: string, reason: string): Error =>\n new Error(\n `Refusing to generate documentation into ${outDir}: ${reason}. Point the output directory at an ` +\n \"empty directory or at one gtkx generated, or remove it yourself first.\",\n );\n\nconst giInputs = (options: DocsOptions, girFiles: string[]): GiInputs => ({\n girFiles,\n libraries: options.libraries,\n girPath: options.girPath,\n storeVersion: undefined,\n isByteArrayTyped: options.isByteArrayTyped === true,\n isValueUnwrapped: options.isValueUnwrapped === true,\n isFinishTrimmed: options.isFinishTrimmed === true,\n isInoutInPlace: options.isInoutInPlace === true,\n isTreeShaken: options.isTreeShaken === true,\n});\n\nconst assertOwnedOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n const stats = statSync(options.outDir, { throwIfNoEntry: false });\n\n if (stats === undefined) {\n return;\n }\n\n if (!stats.isDirectory()) {\n throw outDirRefusal(options.outDir, \"it already exists and is not a directory\");\n }\n\n if (manifest !== undefined || readdirSync(options.outDir).length === 0) {\n return;\n }\n\n throw outDirRefusal(\n options.outDir,\n `it is not empty and holds no ${MANIFEST_FILENAME} written by \\`gtkx docs\\`, ` +\n \"so its contents are not gtkx's to replace\",\n );\n};\n\nconst clearOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n if (manifest === undefined) {\n return;\n }\n\n const entries = [\n ...manifest.namespaces.map((namespace) => namespace.directory),\n ROOT_INDEX_FILENAME,\n MANIFEST_FILENAME,\n FINGERPRINT_FILENAME,\n ];\n\n for (const entry of entries) {\n rmSync(join(options.outDir, entry), { recursive: true, force: true });\n }\n};\n\nconst cachedDocsResult = (\n options: DocsOptions,\n manifest: DocsManifest | undefined,\n input: DocsFingerprintInput,\n): DocsResult | undefined => {\n if (manifest === undefined || options.isForced === true) {\n return undefined;\n }\n\n if (!isDocsOutputFresh(options.outDir, giInputs(options, []), input)) {\n return undefined;\n }\n\n return { isRegenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst docsFingerprintInput = (options: DocsOptions): DocsFingerprintInput => ({\n basePath: options.basePath ?? DEFAULT_BASE_PATH,\n linkStyle: options.linkStyle ?? \"url\",\n props: options.props ?? {},\n omittedProps: options.omittedProps ?? {},\n});\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n const linkStyle = options.linkStyle ?? \"url\";\n const input = docsFingerprintInput(options);\n setElementProps(input.props);\n setOmittedProps(input.omittedProps);\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const previous = readDocsManifest(manifestPath);\n const cached = cachedDocsResult(options, previous, input);\n\n if (cached !== undefined) {\n return cached;\n }\n\n assertOwnedOutDir(options, previous);\n\n const library = Library.load(options.libraries, options.girPath, {\n isByteArrayTyped: options.isByteArrayTyped === true,\n isValueUnwrapped: options.isValueUnwrapped === true,\n isFinishTrimmed: options.isFinishTrimmed === true,\n isInoutInPlace: options.isInoutInPlace === true,\n isTreeShaken: options.isTreeShaken === true,\n });\n\n const { pages, namespaces } = generatePages(options, input.basePath, linkStyle, library);\n clearOutDir(options, previous);\n mkdirSync(options.outDir, { recursive: true });\n const manifest: DocsManifest = { generator: MANIFEST_GENERATOR, namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n writePages(options.outDir, pages);\n const fingerprint = computeDocsFingerprint(giInputs(options, library.girFiles), input);\n writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(fingerprint));\n\n return { isRegenerated: true, namespaces };\n};\n\nexport { writeDocs };\n"]}
@@ -7,6 +7,7 @@ type GiInputs = {
7
7
  isValueUnwrapped: boolean;
8
8
  isFinishTrimmed: boolean;
9
9
  isInoutInPlace: boolean;
10
+ isTreeShaken: boolean;
10
11
  };
11
12
  type GiFingerprint = {
12
13
  value: string;
@@ -20,6 +21,7 @@ type ModuleExport = {
20
21
  };
21
22
  type DocsFingerprintInput = {
22
23
  basePath: string;
24
+ linkStyle: string;
23
25
  props: Record<string, ModuleExport>;
24
26
  omittedProps: Record<string, string[]>;
25
27
  };
@@ -34,6 +36,7 @@ type JsxFingerprintInput = {
34
36
  lazyElements: string[];
35
37
  props: Record<string, ModuleExport>;
36
38
  omittedProps: Record<string, string[]>;
39
+ isTreeShaken: boolean;
37
40
  };
38
41
  type JsxFingerprint = {
39
42
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAUA,KAAK,QAAQ,GAAG;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,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,oBAAoB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,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;AAIF,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAoKzD,QAAA,MAAM,oBAAoB,GAAI,QAAQ,QAAQ,KAAG,aAK/C,CAAC;AA8BH,QAAA,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,QAAQ,QAAQ,KAAG,OAI9D,CAAC;AAkBF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,QAAQ,EAAE,OAAO,oBAAoB,KAAG,eAI/E,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,QAAQ,EAAE,OAAO,oBAAoB,KAAG,OAU1F,CAAC;AAuBF,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;CAUnD,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,GAC3B,CAAC"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAUA,KAAK,QAAQ,GAAG;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,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,oBAAoB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,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;IACvC,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;CACjC,CAAC;AAIF,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAsKzD,QAAA,MAAM,oBAAoB,GAAI,QAAQ,QAAQ,KAAG,aAK/C,CAAC;AA8BH,QAAA,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,QAAQ,QAAQ,KAAG,OAI9D,CAAC;AAmBF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,QAAQ,EAAE,OAAO,oBAAoB,KAAG,eAI/E,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,QAAQ,EAAE,OAAO,oBAAoB,KAAG,OAU1F,CAAC;AAwBF,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;CAUnD,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,GAC3B,CAAC"}
@@ -122,6 +122,8 @@ const hashGi = (inputs) => {
122
122
  hash.update("\n");
123
123
  hash.update(String(inputs.isInoutInPlace));
124
124
  hash.update("\n");
125
+ hash.update(String(inputs.isTreeShaken));
126
+ hash.update("\n");
125
127
  hash.update(String(inputs.storeVersion));
126
128
  const girFiles = sortOrdinal(inputs.girFiles);
127
129
  for (const file of girFiles) {
@@ -168,6 +170,7 @@ const hashDocs = (giValue, input) => createHash("sha256")
168
170
  .update(JSON.stringify([
169
171
  giValue,
170
172
  input.basePath,
173
+ input.linkStyle,
171
174
  serializeModuleExports(input.props),
172
175
  serializeOmittedProps(input.omittedProps),
173
176
  ]))
@@ -195,6 +198,7 @@ const hashJsx = (input) => createHash("sha256")
195
198
  sortOrdinal(input.lazyElements),
196
199
  serializeModuleExports(input.props),
197
200
  serializeOmittedProps(input.omittedProps),
201
+ input.isTreeShaken,
198
202
  ]))
199
203
  .digest("hex");
200
204
  const computeJsxFingerprint = (input, intrinsicElementCount) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, type Hash } from \"node:crypto\";\nimport { type Dirent, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { EXTERNAL_NAMESPACES } from \"./gir/external-namespaces.js\";\nimport { arrayGuard, hasFields, isNumber, isString, optionalGuard } from \"./guards.js\";\nimport { readJsonFile } from \"./json.js\";\n\ntype GiInputs = {\n girFiles: string[];\n libraries: string[];\n girPath: string[];\n storeVersion: string | undefined;\n isByteArrayTyped: boolean;\n isValueUnwrapped: boolean;\n isFinishTrimmed: boolean;\n isInoutInPlace: boolean;\n};\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 DocsFingerprintInput = {\n basePath: string;\n props: Record<string, ModuleExport>;\n omittedProps: Record<string, string[]>;\n};\n\ntype DocsFingerprint = {\n value: string;\n gi: GiFingerprint;\n};\n\ntype JsxFingerprintInput = {\n reactVersion: string;\n reactSubexports: 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\ntype InstalledManifest = { name: string; version: string };\n\nconst FINGERPRINT_FILENAME = \".codegen-fingerprint.json\";\nconst PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\");\nconst OVERRIDES_ROOT = join(PACKAGE_ROOT, \"overrides\");\nconst requireFromCodegen = createRequire(import.meta.url);\nconst codegenHashCache: Map<string, string> = new Map();\n\nconst compareOrdinal = (a: string, b: string): number => {\n if (a < b) {\n return -1;\n }\n\n return a > b ? 1 : 0;\n};\n\nconst sortOrdinal = (values: string[]): string[] => values.toSorted(compareOrdinal);\nconst sortAlpha = (values: string[]): string => sortOrdinal(values).join(\",\");\n\nconst filesUnder = (root: string): string[] => {\n if (!existsSync(root)) {\n return [];\n }\n\n return readdirSync(root, { recursive: true, withFileTypes: true })\n .filter((entry: Dirent) => entry.isFile())\n .map((entry: Dirent) => join(entry.parentPath, entry.name));\n};\n\nconst hashTree = (hash: Hash, label: string, root: string): void => {\n const files = sortOrdinal(filesUnder(root));\n\n for (const file of files) {\n hash.update(\"\\n\");\n hash.update(join(label, relative(root, file)));\n hash.update(\"\\0\");\n hash.update(readFileSync(file));\n }\n};\n\nconst isInstalledManifest = (value: unknown): value is InstalledManifest =>\n hasFields<InstalledManifest>(value, { name: isString, version: isString });\n\nconst tryResolve = (specifier: string): string | undefined => {\n try {\n return requireFromCodegen.resolve(specifier);\n } catch {\n return undefined;\n }\n};\n\nconst manifestVersion = (path: string | undefined, name: string): string | undefined => {\n if (path === undefined) {\n return undefined;\n }\n\n const manifest = readJsonFile(path);\n\n return isInstalledManifest(manifest) && manifest.name === name ? manifest.version : undefined;\n};\n\nconst packageRootFor = (name: string): string | undefined => {\n const entry = tryResolve(name);\n\n if (entry === undefined) {\n return undefined;\n }\n\n for (let directory = dirname(entry); directory !== dirname(directory); directory = dirname(directory)) {\n if (manifestVersion(join(directory, \"package.json\"), name) !== undefined) {\n return directory;\n }\n }\n\n return undefined;\n};\n\nconst installedVersion = (name: string): string | undefined => {\n const direct = manifestVersion(tryResolve(`${name}/package.json`), name);\n\n if (direct !== undefined) {\n return direct;\n }\n\n const root = packageRootFor(name);\n\n return root === undefined ? undefined : manifestVersion(join(root, \"package.json\"), name);\n};\n\nconst dependencyVersions = (): string[] =>\n sortOrdinal(\n Object.entries(packageManifest.dependencies)\n .filter(([name]) => !name.startsWith(\"@types/\"))\n .map(([name, range]) => `${name}@${installedVersion(name) ?? range}`),\n );\n\nconst hashPackageCode = (hash: Hash, label: string, root: string): void => {\n const source = join(root, \"src\");\n\n if (existsSync(source)) {\n hashTree(hash, join(label, \"src\"), source);\n\n return;\n }\n\n hashTree(hash, join(label, \"dist\"), join(root, \"dist\"));\n};\n\nconst computeCodegenHash = (): string => {\n const hash = createHash(\"sha256\");\n hash.update(dependencyVersions().join(\",\"));\n hashPackageCode(hash, \"codegen\", PACKAGE_ROOT);\n hashTree(hash, \"overrides\", OVERRIDES_ROOT);\n const utilsRoot = packageRootFor(\"@gtkx/utils\");\n\n if (utilsRoot !== undefined) {\n hashPackageCode(hash, \"@gtkx/utils\", utilsRoot);\n }\n\n return hash.digest(\"hex\");\n};\n\nconst codegenHash = (): string => {\n const cached = codegenHashCache.get(\"codegen\");\n\n if (cached !== undefined) {\n return cached;\n }\n\n const value = computeCodegenHash();\n codegenHashCache.set(\"codegen\", value);\n\n return value;\n};\n\nconst hashGi = (inputs: GiInputs): string => {\n const hash = createHash(\"sha256\");\n hash.update(codegenHash());\n hash.update(\"\\n\");\n hash.update(JSON.stringify(EXTERNAL_NAMESPACES));\n hash.update(\"\\n\");\n hash.update(sortAlpha(inputs.libraries));\n hash.update(\"\\n\");\n hash.update(sortAlpha(inputs.girPath));\n hash.update(\"\\n\");\n hash.update(String(inputs.isByteArrayTyped));\n hash.update(\"\\n\");\n hash.update(String(inputs.isValueUnwrapped));\n hash.update(\"\\n\");\n hash.update(String(inputs.isFinishTrimmed));\n hash.update(\"\\n\");\n hash.update(String(inputs.isInoutInPlace));\n hash.update(\"\\n\");\n hash.update(String(inputs.storeVersion));\n const girFiles = sortOrdinal(inputs.girFiles);\n\n for (const file of girFiles) {\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 = (inputs: GiInputs): GiFingerprint => ({\n value: hashGi(inputs),\n girFiles: inputs.girFiles,\n libraries: inputs.libraries,\n girPath: inputs.girPath,\n});\n\nconst readSentinel = (storeDir: string): unknown => readJsonFile(join(storeDir, FINGERPRINT_FILENAME));\n\nconst isGiFingerprint = (value: unknown): value is GiFingerprint =>\n hasFields<GiFingerprint>(value, {\n value: isString,\n girFiles: arrayGuard(isString),\n libraries: arrayGuard(isString),\n girPath: optionalGuard(arrayGuard(isString)),\n });\n\nconst isDocsFingerprint = (value: unknown): value is DocsFingerprint =>\n hasFields<DocsFingerprint>(value, { value: isString, gi: isGiFingerprint });\n\nconst isJsxFingerprint = (value: unknown): value is JsxFingerprint =>\n hasFields<JsxFingerprint>(value, { value: isString, intrinsicElementCount: isNumber });\n\nconst recordedGiValue = (sentinel: GiFingerprint, inputs: GiInputs): string | undefined => {\n if (!hasMatchingRecordedInputs(sentinel, inputs)) {\n return undefined;\n }\n\n try {\n return hashGi({ ...inputs, girFiles: sentinel.girFiles, libraries: sentinel.libraries });\n } catch {\n return undefined;\n }\n};\n\nconst isGiStoreFresh = (giStoreDir: string, inputs: GiInputs): boolean => {\n const sentinel = readSentinel(giStoreDir);\n\n return isGiFingerprint(sentinel) && recordedGiValue(sentinel, inputs) === sentinel.value;\n};\n\nconst hasMatchingRecordedInputs = (sentinel: GiFingerprint, inputs: GiInputs): boolean =>\n sortAlpha(sentinel.libraries) === sortAlpha(inputs.libraries) &&\n sortAlpha(sentinel.girPath ?? []) === sortAlpha(inputs.girPath);\n\nconst hashDocs = (giValue: string, input: DocsFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n giValue,\n input.basePath,\n serializeModuleExports(input.props),\n serializeOmittedProps(input.omittedProps),\n ]),\n )\n .digest(\"hex\");\n\nconst computeDocsFingerprint = (inputs: GiInputs, input: DocsFingerprintInput): DocsFingerprint => {\n const gi = computeGiFingerprint(inputs);\n\n return { value: hashDocs(gi.value, input), gi };\n};\n\nconst isDocsOutputFresh = (outDir: string, inputs: GiInputs, input: DocsFingerprintInput): boolean => {\n const sentinel = readSentinel(outDir);\n\n if (!isDocsFingerprint(sentinel)) {\n return false;\n }\n\n const giValue = recordedGiValue(sentinel.gi, inputs);\n\n return giValue !== undefined && hashDocs(giValue, input) === sentinel.value;\n};\n\nconst serializeModuleExports = (map: Record<string, ModuleExport>): [string, string, string][] =>\n sortOrdinal(Object.keys(map)).map((type) => [type, map[type]?.module ?? \"\", map[type]?.export ?? \"\"]);\n\nconst serializeOmittedProps = (map: Record<string, string[]>): [string, string][] =>\n sortOrdinal(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);\n\nconst hashJsx = (input: JsxFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n codegenHash(),\n input.reactVersion,\n sortOrdinal(input.reactSubexports),\n serializeModuleExports(input.components),\n sortOrdinal(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 sentinel = readSentinel(jsxStoreDir);\n\n if (!isJsxFingerprint(sentinel)) {\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 computeDocsFingerprint,\n isGiStoreFresh,\n isDocsOutputFresh,\n computeJsxFingerprint,\n jsxStoreFreshness,\n type DocsFingerprintInput,\n type GiInputs,\n type GiFingerprint,\n type JsxFingerprintInput,\n};\n"]}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAC;AACpD,OAAO,EAAe,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoDzC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AACzD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,MAAM,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAExD,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IACpD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACR,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpF,MAAM,SAAS,GAAG,CAAC,MAAgB,EAAU,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE9E,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,KAAa,EAAE,IAAY,EAAQ,EAAE;IAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAA8B,EAAE,CACvE,SAAS,CAAoB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE/E,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAsB,EAAE;IACzD,IAAI,CAAC;QACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAwB,EAAE,IAAY,EAAsB,EAAE;IACnF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAsB,EAAE;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACpG,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvE,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;IAEzE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAa,EAAE,CACtC,WAAW,CACP,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC;KACvC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;KAC/C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAC5E,CAAC;AAEN,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,KAAa,EAAE,IAAY,EAAQ,EAAE;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEjC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAE3C,OAAO;IACX,CAAC;IAED,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAW,EAAE;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAEhD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAW,EAAE;IAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,MAAgB,EAAU,EAAE;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAgB,EAAiB,EAAE,CAAC,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;CAC1B,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAEvG,MAAM,eAAe,GAAG,CAAC,KAAc,EAA0B,EAAE,CAC/D,SAAS,CAAgB,KAAK,EAAE;IAC5B,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC9B,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEP,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAA4B,EAAE,CACnE,SAAS,CAAkB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AAEhF,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA2B,EAAE,CACjE,SAAS,CAAiB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE3F,MAAM,eAAe,GAAG,CAAC,QAAuB,EAAE,MAAgB,EAAsB,EAAE;IACtF,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,MAAgB,EAAW,EAAE;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1C,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,QAAuB,EAAE,MAAgB,EAAW,EAAE,CACrF,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAEpE,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,KAA2B,EAAU,EAAE,CACtE,UAAU,CAAC,QAAQ,CAAC;KACf,MAAM,CACH,IAAI,CAAC,SAAS,CAAC;IACX,OAAO;IACP,KAAK,CAAC,QAAQ;IACd,KAAK,CAAC,SAAS;IACf,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;CAC5C,CAAC,CACL;KACA,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,sBAAsB,GAAG,CAAC,MAAgB,EAAE,KAA2B,EAAmB,EAAE;IAC9F,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAgB,EAAE,KAA2B,EAAW,EAAE;IACjG,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,GAAiC,EAA8B,EAAE,CAC7F,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;AAE1G,MAAM,qBAAqB,GAAG,CAAC,GAA6B,EAAsB,EAAE,CAChF,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,OAAO,GAAG,CAAC,KAA0B,EAAU,EAAE,CACnD,UAAU,CAAC,QAAQ,CAAC;KACf,MAAM,CACH,IAAI,CAAC,SAAS,CAAC;IACX,WAAW,EAAE;IACb,KAAK,CAAC,YAAY;IAClB,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC;IAClC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAC/B,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;IACzC,KAAK,CAAC,YAAY;CACrB,CAAC,CACL;KACA,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAE,qBAA6B,EAAkB,EAAE,CAAC,CAAC;IAC1G,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;IACrB,qBAAqB;CACxB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CACtB,WAAmB,EACnB,KAA0B,EACyB,EAAE;IACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,EAAE;QAC1E,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAKpB,CAAC","sourcesContent":["import { createHash, type Hash } from \"node:crypto\";\nimport { type Dirent, existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { EXTERNAL_NAMESPACES } from \"./gir/external-namespaces.js\";\nimport { arrayGuard, hasFields, isNumber, isString, optionalGuard } from \"./guards.js\";\nimport { readJsonFile } from \"./json.js\";\n\ntype GiInputs = {\n girFiles: string[];\n libraries: string[];\n girPath: string[];\n storeVersion: string | undefined;\n isByteArrayTyped: boolean;\n isValueUnwrapped: boolean;\n isFinishTrimmed: boolean;\n isInoutInPlace: boolean;\n isTreeShaken: boolean;\n};\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 DocsFingerprintInput = {\n basePath: string;\n linkStyle: string;\n props: Record<string, ModuleExport>;\n omittedProps: Record<string, string[]>;\n};\n\ntype DocsFingerprint = {\n value: string;\n gi: GiFingerprint;\n};\n\ntype JsxFingerprintInput = {\n reactVersion: string;\n reactSubexports: string[];\n components: Record<string, ModuleExport>;\n lazyElements: string[];\n props: Record<string, ModuleExport>;\n omittedProps: Record<string, string[]>;\n isTreeShaken: boolean;\n};\n\ntype JsxFingerprint = {\n value: string;\n intrinsicElementCount: number;\n};\n\ntype InstalledManifest = { name: string; version: string };\n\nconst FINGERPRINT_FILENAME = \".codegen-fingerprint.json\";\nconst PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\");\nconst OVERRIDES_ROOT = join(PACKAGE_ROOT, \"overrides\");\nconst requireFromCodegen = createRequire(import.meta.url);\nconst codegenHashCache: Map<string, string> = new Map();\n\nconst compareOrdinal = (a: string, b: string): number => {\n if (a < b) {\n return -1;\n }\n\n return a > b ? 1 : 0;\n};\n\nconst sortOrdinal = (values: string[]): string[] => values.toSorted(compareOrdinal);\nconst sortAlpha = (values: string[]): string => sortOrdinal(values).join(\",\");\n\nconst filesUnder = (root: string): string[] => {\n if (!existsSync(root)) {\n return [];\n }\n\n return readdirSync(root, { recursive: true, withFileTypes: true })\n .filter((entry: Dirent) => entry.isFile())\n .map((entry: Dirent) => join(entry.parentPath, entry.name));\n};\n\nconst hashTree = (hash: Hash, label: string, root: string): void => {\n const files = sortOrdinal(filesUnder(root));\n\n for (const file of files) {\n hash.update(\"\\n\");\n hash.update(join(label, relative(root, file)));\n hash.update(\"\\0\");\n hash.update(readFileSync(file));\n }\n};\n\nconst isInstalledManifest = (value: unknown): value is InstalledManifest =>\n hasFields<InstalledManifest>(value, { name: isString, version: isString });\n\nconst tryResolve = (specifier: string): string | undefined => {\n try {\n return requireFromCodegen.resolve(specifier);\n } catch {\n return undefined;\n }\n};\n\nconst manifestVersion = (path: string | undefined, name: string): string | undefined => {\n if (path === undefined) {\n return undefined;\n }\n\n const manifest = readJsonFile(path);\n\n return isInstalledManifest(manifest) && manifest.name === name ? manifest.version : undefined;\n};\n\nconst packageRootFor = (name: string): string | undefined => {\n const entry = tryResolve(name);\n\n if (entry === undefined) {\n return undefined;\n }\n\n for (let directory = dirname(entry); directory !== dirname(directory); directory = dirname(directory)) {\n if (manifestVersion(join(directory, \"package.json\"), name) !== undefined) {\n return directory;\n }\n }\n\n return undefined;\n};\n\nconst installedVersion = (name: string): string | undefined => {\n const direct = manifestVersion(tryResolve(`${name}/package.json`), name);\n\n if (direct !== undefined) {\n return direct;\n }\n\n const root = packageRootFor(name);\n\n return root === undefined ? undefined : manifestVersion(join(root, \"package.json\"), name);\n};\n\nconst dependencyVersions = (): string[] =>\n sortOrdinal(\n Object.entries(packageManifest.dependencies)\n .filter(([name]) => !name.startsWith(\"@types/\"))\n .map(([name, range]) => `${name}@${installedVersion(name) ?? range}`),\n );\n\nconst hashPackageCode = (hash: Hash, label: string, root: string): void => {\n const source = join(root, \"src\");\n\n if (existsSync(source)) {\n hashTree(hash, join(label, \"src\"), source);\n\n return;\n }\n\n hashTree(hash, join(label, \"dist\"), join(root, \"dist\"));\n};\n\nconst computeCodegenHash = (): string => {\n const hash = createHash(\"sha256\");\n hash.update(dependencyVersions().join(\",\"));\n hashPackageCode(hash, \"codegen\", PACKAGE_ROOT);\n hashTree(hash, \"overrides\", OVERRIDES_ROOT);\n const utilsRoot = packageRootFor(\"@gtkx/utils\");\n\n if (utilsRoot !== undefined) {\n hashPackageCode(hash, \"@gtkx/utils\", utilsRoot);\n }\n\n return hash.digest(\"hex\");\n};\n\nconst codegenHash = (): string => {\n const cached = codegenHashCache.get(\"codegen\");\n\n if (cached !== undefined) {\n return cached;\n }\n\n const value = computeCodegenHash();\n codegenHashCache.set(\"codegen\", value);\n\n return value;\n};\n\nconst hashGi = (inputs: GiInputs): string => {\n const hash = createHash(\"sha256\");\n hash.update(codegenHash());\n hash.update(\"\\n\");\n hash.update(JSON.stringify(EXTERNAL_NAMESPACES));\n hash.update(\"\\n\");\n hash.update(sortAlpha(inputs.libraries));\n hash.update(\"\\n\");\n hash.update(sortAlpha(inputs.girPath));\n hash.update(\"\\n\");\n hash.update(String(inputs.isByteArrayTyped));\n hash.update(\"\\n\");\n hash.update(String(inputs.isValueUnwrapped));\n hash.update(\"\\n\");\n hash.update(String(inputs.isFinishTrimmed));\n hash.update(\"\\n\");\n hash.update(String(inputs.isInoutInPlace));\n hash.update(\"\\n\");\n hash.update(String(inputs.isTreeShaken));\n hash.update(\"\\n\");\n hash.update(String(inputs.storeVersion));\n const girFiles = sortOrdinal(inputs.girFiles);\n\n for (const file of girFiles) {\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 = (inputs: GiInputs): GiFingerprint => ({\n value: hashGi(inputs),\n girFiles: inputs.girFiles,\n libraries: inputs.libraries,\n girPath: inputs.girPath,\n});\n\nconst readSentinel = (storeDir: string): unknown => readJsonFile(join(storeDir, FINGERPRINT_FILENAME));\n\nconst isGiFingerprint = (value: unknown): value is GiFingerprint =>\n hasFields<GiFingerprint>(value, {\n value: isString,\n girFiles: arrayGuard(isString),\n libraries: arrayGuard(isString),\n girPath: optionalGuard(arrayGuard(isString)),\n });\n\nconst isDocsFingerprint = (value: unknown): value is DocsFingerprint =>\n hasFields<DocsFingerprint>(value, { value: isString, gi: isGiFingerprint });\n\nconst isJsxFingerprint = (value: unknown): value is JsxFingerprint =>\n hasFields<JsxFingerprint>(value, { value: isString, intrinsicElementCount: isNumber });\n\nconst recordedGiValue = (sentinel: GiFingerprint, inputs: GiInputs): string | undefined => {\n if (!hasMatchingRecordedInputs(sentinel, inputs)) {\n return undefined;\n }\n\n try {\n return hashGi({ ...inputs, girFiles: sentinel.girFiles, libraries: sentinel.libraries });\n } catch {\n return undefined;\n }\n};\n\nconst isGiStoreFresh = (giStoreDir: string, inputs: GiInputs): boolean => {\n const sentinel = readSentinel(giStoreDir);\n\n return isGiFingerprint(sentinel) && recordedGiValue(sentinel, inputs) === sentinel.value;\n};\n\nconst hasMatchingRecordedInputs = (sentinel: GiFingerprint, inputs: GiInputs): boolean =>\n sortAlpha(sentinel.libraries) === sortAlpha(inputs.libraries) &&\n sortAlpha(sentinel.girPath ?? []) === sortAlpha(inputs.girPath);\n\nconst hashDocs = (giValue: string, input: DocsFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n giValue,\n input.basePath,\n input.linkStyle,\n serializeModuleExports(input.props),\n serializeOmittedProps(input.omittedProps),\n ]),\n )\n .digest(\"hex\");\n\nconst computeDocsFingerprint = (inputs: GiInputs, input: DocsFingerprintInput): DocsFingerprint => {\n const gi = computeGiFingerprint(inputs);\n\n return { value: hashDocs(gi.value, input), gi };\n};\n\nconst isDocsOutputFresh = (outDir: string, inputs: GiInputs, input: DocsFingerprintInput): boolean => {\n const sentinel = readSentinel(outDir);\n\n if (!isDocsFingerprint(sentinel)) {\n return false;\n }\n\n const giValue = recordedGiValue(sentinel.gi, inputs);\n\n return giValue !== undefined && hashDocs(giValue, input) === sentinel.value;\n};\n\nconst serializeModuleExports = (map: Record<string, ModuleExport>): [string, string, string][] =>\n sortOrdinal(Object.keys(map)).map((type) => [type, map[type]?.module ?? \"\", map[type]?.export ?? \"\"]);\n\nconst serializeOmittedProps = (map: Record<string, string[]>): [string, string][] =>\n sortOrdinal(Object.keys(map)).map((type) => [type, sortAlpha(map[type] ?? [])]);\n\nconst hashJsx = (input: JsxFingerprintInput): string =>\n createHash(\"sha256\")\n .update(\n JSON.stringify([\n codegenHash(),\n input.reactVersion,\n sortOrdinal(input.reactSubexports),\n serializeModuleExports(input.components),\n sortOrdinal(input.lazyElements),\n serializeModuleExports(input.props),\n serializeOmittedProps(input.omittedProps),\n input.isTreeShaken,\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 sentinel = readSentinel(jsxStoreDir);\n\n if (!isJsxFingerprint(sentinel)) {\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 computeDocsFingerprint,\n isGiStoreFresh,\n isDocsOutputFresh,\n computeJsxFingerprint,\n jsxStoreFreshness,\n type DocsFingerprintInput,\n type GiInputs,\n type GiFingerprint,\n type JsxFingerprintInput,\n};\n"]}
package/dist/gi.d.ts CHANGED
@@ -8,6 +8,7 @@ type GiCodegenOptions = {
8
8
  isValueUnwrapped: boolean;
9
9
  isFinishTrimmed: boolean;
10
10
  isInoutInPlace: boolean;
11
+ isTreeShaken: boolean;
11
12
  };
12
13
  declare const runGiCodegen: (library: Library, options: GiCodegenOptions) => number;
13
14
  export { runGiCodegen };
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;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,YAAY,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAkCF,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,SAAS,gBAAgB,KAAG,MAqBnE,CAAC;AAEF,OAAO,EAAE,YAAY,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;AAQxD,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,YAAY,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC;AAqCF,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,SAAS,gBAAgB,KAAG,MAsBnE,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/gi.js CHANGED
@@ -17,9 +17,11 @@ const splitNamespaces = (library) => {
17
17
  });
18
18
  continue;
19
19
  }
20
+ const generated = generateNamespaceModule(namespace, library);
20
21
  namespaces.push({
21
22
  directory: namespaceDirectory(namespace),
22
- rawSource: generateNamespaceModule(namespace, library),
23
+ rawSource: generated.source,
24
+ rawBootstrapSource: generated.bootstrapSource,
23
25
  girFile: namespace.girFile,
24
26
  });
25
27
  }
@@ -37,6 +39,7 @@ const runGiCodegen = (library, options) => {
37
39
  isValueUnwrapped,
38
40
  isFinishTrimmed,
39
41
  isInoutInPlace,
42
+ isTreeShaken: options.isTreeShaken,
40
43
  });
41
44
  writeGiStore(gi, namespaces, externalNamespaces, {
42
45
  fingerprint,
package/dist/gi.js.map CHANGED
@@ -1 +1 @@
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,8BAA8B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAwD,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAiBjE,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC1D,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,kBAAkB,GAA+B,EAAE,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,kBAAkB,CAAC,IAAI,CAAC;gBACpB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;gBACxC,WAAW;gBACX,OAAO,EAAE,SAAS,CAAC,OAAO;aAC7B,CAAC,CAAC;YAEH,SAAS;QACb,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,OAAO,EAAE,SAAS,CAAC,OAAO;SAC7B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAyB,EAAU,EAAE;IACzE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAChH,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,oBAAoB,CAAC;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;QACzB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;QACrB,YAAY,EAAE,EAAE,CAAC,OAAO;QACxB,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,cAAc;KACjB,CAAC,CAAC;IAEH,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE;QAC7C,WAAW;QACX,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;KACtE,CAAC,CAAC;IAEH,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 { externalPackageFor } from \"./gir/external-namespaces.js\";\nimport { namespaceDirectory } from \"./gir/namespace.js\";\nimport { type GiExternalNamespaceInput, type GiNamespaceInput, writeGiStore } from \"./store/gi-store.js\";\nimport { collectGeneratedLibraries } from \"./store/gi/generated-libraries.js\";\nimport { generateNamespaceModule } from \"./store/gi/pipeline.js\";\n\ntype GiCodegenOptions = {\n gi: StoreOptions;\n libraries: string[];\n girPath: string[];\n isByteArrayTyped: boolean;\n isValueUnwrapped: boolean;\n isFinishTrimmed: boolean;\n isInoutInPlace: boolean;\n};\n\ntype SplitNamespaces = {\n namespaces: GiNamespaceInput[];\n externalNamespaces: GiExternalNamespaceInput[];\n};\n\nconst splitNamespaces = (library: Library): SplitNamespaces => {\n const namespaces: GiNamespaceInput[] = [];\n const externalNamespaces: GiExternalNamespaceInput[] = [];\n\n for (const namespace of library.namespaces.values()) {\n const packageName = externalPackageFor(namespace.name);\n\n if (packageName !== undefined) {\n externalNamespaces.push({\n directory: namespaceDirectory(namespace),\n packageName,\n girFile: namespace.girFile,\n });\n\n continue;\n }\n\n namespaces.push({\n directory: namespaceDirectory(namespace),\n rawSource: generateNamespaceModule(namespace, library),\n girFile: namespace.girFile,\n });\n }\n\n return { namespaces, externalNamespaces };\n};\n\nconst runGiCodegen = (library: Library, options: GiCodegenOptions): number => {\n const { gi, libraries, girPath, isByteArrayTyped, isValueUnwrapped, isFinishTrimmed, isInoutInPlace } = options;\n const { namespaces, externalNamespaces } = splitNamespaces(library);\n\n const fingerprint = computeGiFingerprint({\n girFiles: library.girFiles,\n libraries: [...libraries],\n girPath: [...girPath],\n storeVersion: gi.version,\n isByteArrayTyped,\n isValueUnwrapped,\n isFinishTrimmed,\n isInoutInPlace,\n });\n\n writeGiStore(gi, namespaces, externalNamespaces, {\n fingerprint,\n libraries: collectGeneratedLibraries(library.namespaces, libraries),\n });\n\n return library.namespaces.size;\n};\n\nexport { runGiCodegen };\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,8BAA8B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAwD,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAkBjE,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC1D,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,kBAAkB,GAA+B,EAAE,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,kBAAkB,CAAC,IAAI,CAAC;gBACpB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;gBACxC,WAAW;gBACX,OAAO,EAAE,SAAS,CAAC,OAAO;aAC7B,CAAC,CAAC;YAEH,SAAS;QACb,CAAC;QAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE9D,UAAU,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,kBAAkB,EAAE,SAAS,CAAC,eAAe;YAC7C,OAAO,EAAE,SAAS,CAAC,OAAO;SAC7B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAyB,EAAU,EAAE;IACzE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAChH,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,oBAAoB,CAAC;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;QACzB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;QACrB,YAAY,EAAE,EAAE,CAAC,OAAO;QACxB,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,YAAY,EAAE,OAAO,CAAC,YAAY;KACrC,CAAC,CAAC;IAEH,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE;QAC7C,WAAW;QACX,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;KACtE,CAAC,CAAC;IAEH,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 { externalPackageFor } from \"./gir/external-namespaces.js\";\nimport { namespaceDirectory } from \"./gir/namespace.js\";\nimport { type GiExternalNamespaceInput, type GiNamespaceInput, writeGiStore } from \"./store/gi-store.js\";\nimport { collectGeneratedLibraries } from \"./store/gi/generated-libraries.js\";\nimport { generateNamespaceModule } from \"./store/gi/pipeline.js\";\n\ntype GiCodegenOptions = {\n gi: StoreOptions;\n libraries: string[];\n girPath: string[];\n isByteArrayTyped: boolean;\n isValueUnwrapped: boolean;\n isFinishTrimmed: boolean;\n isInoutInPlace: boolean;\n isTreeShaken: boolean;\n};\n\ntype SplitNamespaces = {\n namespaces: GiNamespaceInput[];\n externalNamespaces: GiExternalNamespaceInput[];\n};\n\nconst splitNamespaces = (library: Library): SplitNamespaces => {\n const namespaces: GiNamespaceInput[] = [];\n const externalNamespaces: GiExternalNamespaceInput[] = [];\n\n for (const namespace of library.namespaces.values()) {\n const packageName = externalPackageFor(namespace.name);\n\n if (packageName !== undefined) {\n externalNamespaces.push({\n directory: namespaceDirectory(namespace),\n packageName,\n girFile: namespace.girFile,\n });\n\n continue;\n }\n\n const generated = generateNamespaceModule(namespace, library);\n\n namespaces.push({\n directory: namespaceDirectory(namespace),\n rawSource: generated.source,\n rawBootstrapSource: generated.bootstrapSource,\n girFile: namespace.girFile,\n });\n }\n\n return { namespaces, externalNamespaces };\n};\n\nconst runGiCodegen = (library: Library, options: GiCodegenOptions): number => {\n const { gi, libraries, girPath, isByteArrayTyped, isValueUnwrapped, isFinishTrimmed, isInoutInPlace } = options;\n const { namespaces, externalNamespaces } = splitNamespaces(library);\n\n const fingerprint = computeGiFingerprint({\n girFiles: library.girFiles,\n libraries: [...libraries],\n girPath: [...girPath],\n storeVersion: gi.version,\n isByteArrayTyped,\n isValueUnwrapped,\n isFinishTrimmed,\n isInoutInPlace,\n isTreeShaken: options.isTreeShaken,\n });\n\n writeGiStore(gi, namespaces, externalNamespaces, {\n fingerprint,\n libraries: collectGeneratedLibraries(library.namespaces, libraries),\n });\n\n return library.namespaces.size;\n};\n\nexport { runGiCodegen };\n"]}
@@ -1,17 +1,24 @@
1
1
  /** A `libraries` config value: an explicit list, `"*"` for everything installed, or absent for the default. */
2
2
  type LibrarySelection = "*" | string[] | undefined;
3
+ declare const LIBRARIES_WILDCARD = "*";
3
4
  /**
4
- * Expands a `libraries` config value into the GIR identifiers to generate from: `"Gtk-4.0"` alone when
5
- * nothing is configured, everything installed for `"*"`, and otherwise the given list with `"Gtk-4.0"`
6
- * prepended unless it already names a Gtk version.
5
+ * Expands a `libraries` config value into the GIR identifiers to generate from: the mandatory set alone
6
+ * when nothing is configured, everything installed for `"*"`, and otherwise the given list with the
7
+ * mandatory set prepended.
8
+ *
9
+ * The mandatory set is `"Gtk-4.0"`, which joins a list that does not already name a Gtk version. Under
10
+ * `isAdwaitaDefault` it is `"Gtk-4.0"` and `"Adw-1"`, and it joins `"*"` as well as an explicit list.
11
+ * Each entry is mandatory by namespace rather than by version, so a list that pins another version of
12
+ * Gtk or Adwaita keeps its pin.
7
13
  *
8
14
  * @throws If `"*"` matched no `.gir` file anywhere on the GIR path.
9
15
  */
10
- declare const resolveLibraries: (libraries: LibrarySelection, girPath: string[]) => string[];
16
+ declare const resolveLibraries: (libraries: LibrarySelection, girPath: string[], isAdwaitaDefault?: boolean) => string[];
17
+ declare const redundantLibraries: (libraries: LibrarySelection, isAdwaitaDefault?: boolean) => string[];
11
18
  /**
12
19
  * Every GIR library installed on the search path, as sorted `Name-Version` identifiers. A namespace found
13
20
  * in more than one version contributes only its highest, and unreadable directories are skipped.
14
21
  */
15
22
  declare const discoverGirNamespaces: (girPath: string[]) => string[];
16
- export { resolveLibraries, discoverGirNamespaces, type LibrarySelection };
23
+ export { resolveLibraries, redundantLibraries, discoverGirNamespaces, LIBRARIES_WILDCARD, type LibrarySelection };
17
24
  //# sourceMappingURL=libraries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"AAaA,+GAA+G;AAC/G,KAAK,gBAAgB,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAOnD;;;;;;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
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../src/gir/libraries.ts"],"names":[],"mappings":"AAaA,+GAA+G;AAC/G,KAAK,gBAAgB,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAEnD,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAM/B;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,gBAAgB,GAAI,WAAW,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,0BAAwB,KAAG,MAAM,EAc1G,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,WAAW,gBAAgB,EAAE,0BAAwB,KAAG,MAAM,EAMzF,CAAC;AAqFF;;;GAGG;AACH,QAAA,MAAM,qBAAqB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EAQxD,CAAC;AAkBF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
@@ -3,28 +3,64 @@ import { readdirSync } from "node:fs";
3
3
  const LIBRARIES_WILDCARD = "*";
4
4
  const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
5
5
  const DEFAULT_LIBRARIES = ["Gtk-4.0"];
6
+ const ADWAITA_DEFAULT_LIBRARIES = ["Gtk-4.0", "Adw-1"];
6
7
  const GIR_FILE_SUFFIX = ".gir";
7
8
  /**
8
- * Expands a `libraries` config value into the GIR identifiers to generate from: `"Gtk-4.0"` alone when
9
- * nothing is configured, everything installed for `"*"`, and otherwise the given list with `"Gtk-4.0"`
10
- * prepended unless it already names a Gtk version.
9
+ * Expands a `libraries` config value into the GIR identifiers to generate from: the mandatory set alone
10
+ * when nothing is configured, everything installed for `"*"`, and otherwise the given list with the
11
+ * mandatory set prepended.
12
+ *
13
+ * The mandatory set is `"Gtk-4.0"`, which joins a list that does not already name a Gtk version. Under
14
+ * `isAdwaitaDefault` it is `"Gtk-4.0"` and `"Adw-1"`, and it joins `"*"` as well as an explicit list.
15
+ * Each entry is mandatory by namespace rather than by version, so a list that pins another version of
16
+ * Gtk or Adwaita keeps its pin.
11
17
  *
12
18
  * @throws If `"*"` matched no `.gir` file anywhere on the GIR path.
13
19
  */
14
- const resolveLibraries = (libraries, girPath) => {
20
+ const resolveLibraries = (libraries, girPath, isAdwaitaDefault = false) => {
15
21
  if (libraries === undefined) {
16
- return [...DEFAULT_LIBRARIES];
22
+ return [...mandatoryLibraries(isAdwaitaDefault)];
17
23
  }
18
24
  if (libraries === LIBRARIES_WILDCARD) {
19
- const discovered = discoverGirNamespaces(girPath);
20
- if (discovered.length === 0) {
21
- throw new Error(`gtkx.config.ts: \`libraries: "*"\` matched no .gir files in [${girPath.join(", ")}]. ` +
22
- "Install gobject-introspection data packages, or list the libraries explicitly.");
23
- }
24
- return discovered;
25
+ return installedLibraries(girPath, isAdwaitaDefault);
26
+ }
27
+ if (isAdwaitaDefault) {
28
+ return withMandatory(ADWAITA_DEFAULT_LIBRARIES, libraries);
29
+ }
30
+ return withDefaultGtk(libraries);
31
+ };
32
+ const redundantLibraries = (libraries, isAdwaitaDefault = false) => {
33
+ if (!isAdwaitaDefault || !Array.isArray(libraries)) {
34
+ return [];
35
+ }
36
+ return libraries.filter((entry) => ADWAITA_DEFAULT_LIBRARIES.includes(entry));
37
+ };
38
+ const mandatoryLibraries = (isAdwaitaDefault) => isAdwaitaDefault ? ADWAITA_DEFAULT_LIBRARIES : DEFAULT_LIBRARIES;
39
+ const installedLibraries = (girPath, isAdwaitaDefault) => {
40
+ const discovered = discoverGirNamespaces(girPath);
41
+ if (discovered.length === 0) {
42
+ throw new Error(`gtkx.config.ts: \`libraries: "*"\` matched no .gir files in [${girPath.join(", ")}]. ` +
43
+ "Install gobject-introspection data packages, or list the libraries explicitly.");
44
+ }
45
+ if (isAdwaitaDefault) {
46
+ return withMandatory(ADWAITA_DEFAULT_LIBRARIES, discovered);
47
+ }
48
+ return discovered;
49
+ };
50
+ const getNamespace = (library) => {
51
+ const separator = library.indexOf("-");
52
+ return separator === -1 ? library : library.slice(0, separator);
53
+ };
54
+ const withMandatory = (mandatory, selected) => {
55
+ const named = new Set(selected.map((entry) => getNamespace(entry)));
56
+ const missing = mandatory.filter((library) => !named.has(getNamespace(library)));
57
+ return [...new Set([...missing, ...selected])];
58
+ };
59
+ const withDefaultGtk = (libraries) => {
60
+ if (libraries.some((library) => library.startsWith("Gtk-"))) {
61
+ return [...new Set(libraries)];
25
62
  }
26
- const hasGtk = libraries.some((library) => library.startsWith("Gtk-"));
27
- return [...new Set([...(hasGtk ? [] : DEFAULT_LIBRARIES), ...libraries])];
63
+ return [...new Set([...DEFAULT_LIBRARIES, ...libraries])];
28
64
  };
29
65
  const readDirEntries = (dir) => {
30
66
  try {
@@ -82,5 +118,5 @@ const compareVersions = (a, b) => {
82
118
  }
83
119
  return 0;
84
120
  };
85
- export { resolveLibraries, discoverGirNamespaces };
121
+ export { resolveLibraries, redundantLibraries, discoverGirNamespaces, LIBRARIES_WILDCARD };
86
122
  //# sourceMappingURL=libraries.js.map