@gtkx/codegen 1.3.0 → 1.4.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 (47) hide show
  1. package/README.md +5 -4
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +1 -0
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +1 -0
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +1 -0
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/fingerprint.d.ts.map +1 -1
  10. package/dist/fingerprint.js +5 -1
  11. package/dist/fingerprint.js.map +1 -1
  12. package/dist/gi.d.ts.map +1 -1
  13. package/dist/gi.js +5 -1
  14. package/dist/gi.js.map +1 -1
  15. package/dist/guards.d.ts +2 -1
  16. package/dist/guards.d.ts.map +1 -1
  17. package/dist/guards.js +3 -1
  18. package/dist/guards.js.map +1 -1
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/store/gi/generated-libraries.d.ts +26 -0
  24. package/dist/store/gi/generated-libraries.d.ts.map +1 -0
  25. package/dist/store/gi/generated-libraries.js +53 -0
  26. package/dist/store/gi/generated-libraries.js.map +1 -0
  27. package/dist/store/gi-store.d.ts +6 -1
  28. package/dist/store/gi-store.d.ts.map +1 -1
  29. package/dist/store/gi-store.js +6 -2
  30. package/dist/store/gi-store.js.map +1 -1
  31. package/dist/store/jsx/metadata.d.ts.map +1 -1
  32. package/dist/store/jsx/metadata.js +35 -60
  33. package/dist/store/jsx/metadata.js.map +1 -1
  34. package/dist/store/resolve-store.d.ts.map +1 -1
  35. package/dist/store/resolve-store.js +1 -0
  36. package/dist/store/resolve-store.js.map +1 -1
  37. package/package.json +5 -5
  38. package/src/analysis/descriptor-render.ts +1 -0
  39. package/src/analysis/descriptor.ts +2 -0
  40. package/src/fingerprint.ts +8 -1
  41. package/src/gi.ts +5 -1
  42. package/src/guards.ts +6 -1
  43. package/src/index.ts +2 -0
  44. package/src/store/gi/generated-libraries.ts +91 -0
  45. package/src/store/gi-store.ts +15 -2
  46. package/src/store/jsx/metadata.ts +46 -99
  47. package/src/store/resolve-store.ts +1 -0
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  <h1 align="center">GTKX</h1>
6
6
 
7
7
  <p align="center">
8
- The React framework for Linux.<br />
9
- Write native Linux applications with React and TypeScript.
10
- Built on the GNOME stack and standard web tooling.
8
+ The React framework for Linux, built on GTK.<br />
9
+ Write native GTK4 desktop applications with React and TypeScript.
10
+ Real GTK widgets, the GNOME stack, and standard web tooling.
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -98,7 +98,7 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
98
98
  - a React reconciler that exposes every GObject as a JSX element,
99
99
  - a CLI for scaffolding, development, and production builds,
100
100
  - a dev server with Fast Refresh that patches your running UI in place,
101
- - CSS-in-JS styling, React Spring animations, and high-level list, grid, and dialog components,
101
+ - CSS-in-JS styling, React Spring animations, React Navigation stack, tab, drawer, and split view navigators, and high-level list, grid, and dialog components,
102
102
  - a Testing Library-style API for querying and driving your widgets in tests,
103
103
  - and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
104
104
 
@@ -158,6 +158,7 @@ Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
158
158
  - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
159
159
  - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
160
160
  - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
161
+ - [`navigation`](https://github.com/gtkx-org/gtkx/tree/main/examples/navigation): a tour of `@gtkx/navigation`, React Navigation's stack, tab, and drawer navigators rendered with libadwaita.
161
162
  - [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
162
163
 
163
164
  ## Status
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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"}
@@ -341,6 +341,7 @@ const boxedRecordExpression = (options) => {
341
341
  ownership,
342
342
  sharedLibrary: resolved.namespace.sharedLibrary,
343
343
  getTypeFnName: typeFnName,
344
+ freeFnName: record.freeFunc,
344
345
  isCallerAllocated,
345
346
  isInline,
346
347
  size: size > 0 ? size : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAM1E,OAAO,EAIH,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,qBAAqB,GAIxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAKH,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,IAAI,EACJ,OAAO,EACP,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GACR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AA6DpG,MAAM,YAAY,GAAkE;IAChF,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,qBAAqB,GAAgB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE/D,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAE,QAAgB,EAAU,EAAE,CACvE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;AAE5E,MAAM,iBAAiB,GAAG,CAAC,QAA2B,EAAa,EAAE;IACjE,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,QAA2B,EAAqB,EAAE,CAC7E,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAEjD,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE,CACrE,GAAG,KAAK,SAAS,IAAI,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AAEvE,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE,CAC/E,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAEzG,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAqB,EAAE;IAC3F,IAAI,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACvF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,UAAU,CAAC;AAE3D,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACtF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AAE1D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACnF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,MAAM,CAAC;AAEvD,MAAM,eAAe,GAAG,CAAC,OAAgC,EAAmB,EAAE,CAAC,CAAC;IAC5E,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;IAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;IAChC,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,KAAK,IAAI;CACxD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,GAAuB,EACvB,WAA8B,MAAM,EACpC,UAAmC,EAAE,EAC/B,EAAE;IACR,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5C,GAAG,YAAY;gBACf,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,KAAK,IAAI;aACxD,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;YAEnF,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,OAAsB,EACtB,IAAc,EACd,QAA2B,EAC3B,YAA6B,EACvB,EAAE;IACR,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IAEvG,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,GAAuB,EAA2B,EAAE;IACrG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,IAAa,EAAW,EAAE;IAC9D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE;IACvE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE;IACrE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,SAAuB,EAAW,EAAE,CACvE,gBAAgB,CAAC,SAAS,CAAC;IAC3B,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,SAAuB,EACvB,GAAuB,EACvB,WAAqC,EAAE,EACjC,EAAE;IACR,MAAM,SAAS,GAA4B,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAE9G,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE;QAC/D,GAAG,QAAQ;QACX,iBAAiB,EAAE,oBAAoB,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;KAC1F,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAA0B,EAAsB,EAAE;IAC3E,IAAI,aAAiC,CAAC;IAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9D,aAAa,GAAG,KAAK,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAA0B,EAAsB,EAAE;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAEtF,OAAO,QAAQ,EAAE,YAAY,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACvB,eAA6B,EAC7B,aAAiC,EACjC,QAAiB,EACT,EAAE;IACV,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,eAAe,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,eAAe,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,UAAU,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACvB,OAAsB,EACtB,GAAuB,EACvB,eAA6B,EAC7B,YAAkC,EAChB,EAAE;IACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CACpC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAC9G,CAAC;IAEF,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAEjC,OAAO,SAAS,CAAC;QACb,QAAQ;QACR,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,iBAAiB,CAAC;QACnF,OAAO,EAAE,kBAAkB,CAAC,eAAe,EAAE,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;KACxG,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,QAA2B,EAAE,SAAoB,EAAU,EAAE;IACtF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC,QAAuC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAiC,EAAU,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE/G,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE;QACzC,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,iBAAiB;QACjB,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAClB,QAA6B,EAC7B,SAAoB,EACpB,cAAuB,EACd,EAAE;IACX,IAAI,CAAC,cAAc,IAAI,SAAS,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,OAAsB,EACtB,QAA8D,EAC9D,SAAoB,EACpB,cAAuB,EACjB,EAAE;IACR,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAExD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAyB,EAAgE,EAAE,CACnH,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAE/E,MAAM,cAAc,GAAG,CACnB,IAA0D,EAC3B,EAAE;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;IAEzC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5G,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACH,GAAG;QACH,OAAO,EAAE,GAAG,CAAC,WAAW;QACxB,SAAS,EAAE,GAAG,CAAC,aAAa;QAC5B,QAAQ,EAAE,GAAG,CAAC,YAAY;KAC7B,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,OAA4B,EAC5B,IAAiB,EACc,EAAE;IACjC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzF,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,KAA2D,EAC5B,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;AAEzF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,IAA0D,EAC1D,SAAoB,EACd,EAAE;IACR,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAsB,EAAE,QAAsB,EAAU,EAAE;IACpF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAA0B,EAAgB,EAAE,CAAC,CAAC;IAChE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,KAAK;IACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,KAAK;CACxC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,MAAsB,EAAkE,EAAE,CAAC,CAAC;IAC/G,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ;IAC9C,SAAS,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ;CACrD,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,MAAsB,EAAW,EAAE;IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,OAA0D,EACpD,EAAE;IACR,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3G,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExF,OAAO,OAAO,CAAC,SAAS,EAAE;QACtB,IAAI,EAAE,UAAU,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC/C,YAAY;QACZ,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC7B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAiC,EAAU,EAAE;IAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE5G,OAAO,iBAAiB,CAAC;QACrB,GAAG;QACH,OAAO;QACP,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;QACrC,SAAS;QACT,YAAY;QACZ,iBAAiB;QACjB,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAO9B,EAAU,EAAE;IACT,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC1F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjF,OAAO,MAAM,CAAC,QAAQ,EAAE;QACpB,SAAS;QACT,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,aAAa;QAC/C,aAAa,EAAE,UAAU;QACzB,iBAAiB;QACjB,QAAQ;QACR,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACpC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,SAA0B,EACpB,EAAE;IACR,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAiD,EAAW,EAAE;IACjF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,YAA6B,EAAE,EACzB,EAAE;IACR,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;IAE7C,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,2BAA2B,CAAC;YAC/B,QAAQ;YACR,GAAG;YACH,OAAO;YACP,SAAS;YACT,SAAS;YACT,YAAY;YACZ,GAAG,YAAY,CAAC,SAAS,CAAC;SAC7B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEvF,MAAM,SAAS,GAAG,CAAC,QAA+C,EAAU,EAAE,CAC1E,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5F,MAAM,cAAc,GAAG,CAAC,QAA+C,EAAU,EAAE;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;IAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IAEtD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAA4F,EAC5F,QAA2B,EAC3B,OAAgC,EAC1B,EAAE;IACR,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE9C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;QACrG,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;gBACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;aACtC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAwB,EAClB,EAAE,CACR,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE;IACpE,GAAG,OAAO;IACV,MAAM,EAAE,SAAS;IACjB,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEP,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAwD,EAClD,EAAE,CACR,YAAY,CACR,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAClD;IACI,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IACzD,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;CAChE,EACD,iBAAiB,CAAC,QAAQ,CAAC,EAC3B,OAAO,CAAC,MAAM,CACjB,CAAC;AAEN,MAAM,WAAW,GAAG,CAAC,OAAsB,EAAE,GAAe,EAAE,OAAwB,EAAe,EAAE,CAAC,CAAC;IACrG,WAAW,EAAE,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC;IACvE,OAAO,EACH,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;CAC9G,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,MAAmB,EAAE,iBAA0B,EAAe,EAAE,CACtF,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAExE,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAgC,EAC1B,EAAE;IACR,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,GAAG,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,YAAgC,EAAE,iBAA0B,EAAU,EAAE;IACjG,MAAM,QAAQ,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAErF,OAAO,iBAAiB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,GAAe,EAAE,iBAA0B,EAAsB,EAAE;IAClH,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,MAA0B,EAC1B,QAA2B,EAC3B,OAAgC,EAC1B,EAAE;IACR,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,OAAO,EACH,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\ntype CArrayExpressionOptions = ArgIndexOptions & { isCallerAllocated: boolean };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype RecordLayout = {\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tBiguint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, {\n ...indexOptions,\n isCallerAllocated: options.isCallerAllocated === true,\n });\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (\n owningParameter: GirParameter,\n userDataIndex: number | undefined,\n canThrow: boolean,\n): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (canThrow) {\n options.push(\"canThrow: true\");\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isCallerAllocated, isInline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n if (ancestor === undefined) {\n return tObject(ownership);\n }\n\n return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordLayout = (placement: RecordPlacement): RecordLayout => ({\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n});\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isCallerAllocated, isInline } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n const layout = recordLayout(placement);\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst isPlainStruct = (resolved: Extract<EntityType, { kind: \"record\" }>): boolean => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {\n return false;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n ...recordLayout(placement),\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst flagsMask = (resolved: Extract<EntityType, { kind: \"enum\" }>): number =>\n resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n const isBitfield = resolved.value.kind === \"bitfield\";\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return isBitfield ? tFlags(\"\", \"\", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);\n }\n\n return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n isCallerAllocated: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst fixedArrayLayout = (layout: ArrayLayout, isCallerAllocated: boolean): ArrayLayout =>\n isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CArrayExpressionOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isPlainStruct,\n transferOwnership,\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
1
+ {"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\ntype CArrayExpressionOptions = ArgIndexOptions & { isCallerAllocated: boolean };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype RecordLayout = {\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tBiguint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, {\n ...indexOptions,\n isCallerAllocated: options.isCallerAllocated === true,\n });\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (\n owningParameter: GirParameter,\n userDataIndex: number | undefined,\n canThrow: boolean,\n): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (canThrow) {\n options.push(\"canThrow: true\");\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isCallerAllocated, isInline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n if (ancestor === undefined) {\n return tObject(ownership);\n }\n\n return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordLayout = (placement: RecordPlacement): RecordLayout => ({\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n});\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isCallerAllocated, isInline } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n freeFnName: record.freeFunc,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n const layout = recordLayout(placement);\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst isPlainStruct = (resolved: Extract<EntityType, { kind: \"record\" }>): boolean => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {\n return false;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n ...recordLayout(placement),\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst flagsMask = (resolved: Extract<EntityType, { kind: \"enum\" }>): number =>\n resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n const isBitfield = resolved.value.kind === \"bitfield\";\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return isBitfield ? tFlags(\"\", \"\", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);\n }\n\n return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n isCallerAllocated: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst fixedArrayLayout = (layout: ArrayLayout, isCallerAllocated: boolean): ArrayLayout =>\n isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CArrayExpressionOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isPlainStruct,\n transferOwnership,\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
@@ -5,6 +5,7 @@ type BoxedOptions = {
5
5
  ownership: Ownership;
6
6
  sharedLibrary: string | undefined;
7
7
  getTypeFnName: string;
8
+ freeFnName: string | undefined;
8
9
  isCallerAllocated: boolean;
9
10
  isInline?: boolean;
10
11
  size: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,7 @@ const tBoxed = (glibName, options) => call("boxed", [
67
67
  ? undefined
68
68
  : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,
69
69
  `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,
70
+ options.freeFnName === undefined ? undefined : `freeFnName: ${sourceStringLiteral(options.freeFnName)}`,
70
71
  options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
71
72
  options.isInline === true ? "isInline: true" : undefined,
72
73
  options.size === undefined ? undefined : `size: ${String(options.size)}`,
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCursorBounds } from \"../gir/parameter.js\";\nimport { joinArgs } from \"../writer/emit.js\";\n\ntype Ownership = \"borrowed\" | \"full\";\n\ntype DescriptorName =\n | \"bind\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"boolean\" |\n \"void\" |\n \"unichar\" |\n \"buffer\" |\n \"string\" |\n \"object\" |\n \"boxed\" |\n \"struct\" |\n \"fundamental\" |\n \"ref\" |\n \"hashTable\" |\n \"enum\" |\n \"flags\" |\n \"array\" |\n \"list\" |\n \"slist\" |\n \"ptrArray\" |\n \"gArray\" |\n \"byteArray\" |\n \"sizedArray\" |\n \"fixedArray\" |\n \"cursorArray\" |\n \"callback\" |\n \"fn\";\n\ntype DescriptorNames = { [K in DescriptorName]: `t.${K}` };\n\ntype ScalarDescriptorName =\n | \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"float32\" |\n \"float64\" |\n \"unichar\";\n\ntype BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n isCallerAllocated: boolean;\n isInline?: boolean;\n size: number | undefined;\n};\n\ntype StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline?: boolean;\n};\n\ntype FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\ntype ArrayLayout = {\n elementSize?: number | undefined;\n isBytes: boolean;\n isCallerAllocated?: boolean | undefined;\n};\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\n\ntype FnSpecParts = {\n args: string;\n returns: string;\n isReturnSkipped: boolean;\n isReturnUnpacked: boolean;\n canThrow: boolean;\n};\n\ntype CallbackSpecParts = {\n argTypes: string[];\n returns: string;\n options: string[];\n};\n\nconst SKIPPED_RETURN_ENTRY = \"isReturnSkipped: true\";\nconst UNPACKED_RETURN_ENTRY = \"isReturnUnpacked: true\";\n\nconst T: DescriptorNames = {\n bind: \"t.bind\",\n int8: \"t.int8\",\n uint8: \"t.uint8\",\n int16: \"t.int16\",\n uint16: \"t.uint16\",\n int32: \"t.int32\",\n uint32: \"t.uint32\",\n int64: \"t.int64\",\n uint64: \"t.uint64\",\n bigint64: \"t.bigint64\",\n biguint64: \"t.biguint64\",\n gtype: \"t.gtype\",\n float32: \"t.float32\",\n float64: \"t.float64\",\n boolean: \"t.boolean\",\n void: \"t.void\",\n unichar: \"t.unichar\",\n buffer: \"t.buffer\",\n string: \"t.string\",\n object: \"t.object\",\n boxed: \"t.boxed\",\n struct: \"t.struct\",\n fundamental: \"t.fundamental\",\n ref: \"t.ref\",\n hashTable: \"t.hashTable\",\n enum: \"t.enum\",\n flags: \"t.flags\",\n array: \"t.array\",\n list: \"t.list\",\n slist: \"t.slist\",\n ptrArray: \"t.ptrArray\",\n gArray: \"t.gArray\",\n byteArray: \"t.byteArray\",\n sizedArray: \"t.sizedArray\",\n fixedArray: \"t.fixedArray\",\n cursorArray: \"t.cursorArray\",\n callback: \"t.callback\",\n fn: \"t.fn\",\n};\n\nconst tVoid: string = T.void;\nconst tBoolean: string = T.boolean;\nconst tUint8: string = T.uint8;\nconst tUint32: string = T.uint32;\nconst tInt32: string = T.int32;\nconst tUint64: string = T.uint64;\nconst tBiguint64: string = T.biguint64;\nconst tGtype: string = T.gtype;\nconst tBuffer: string = T.buffer;\n\nconst call = (name: DescriptorName, args: (string | undefined)[]): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: (string | undefined)[]): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nconst tScalar = (name: ScalarDescriptorName): string => T[name];\n\nconst tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nconst tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nconst tBoxed = (glibName: string, options: BoxedOptions): string =>\n call(\"boxed\", [\n sourceStringLiteral(glibName),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.sharedLibrary === undefined\n ? undefined\n : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,\n `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n ]),\n ]);\n\nconst tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, isCallerAllocated: false });\n\nconst tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>\n call(\"fundamental\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(refFunc),\n sourceStringLiteral(unrefFunc),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isCallerAllocated === true ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tRef = (inner: string, isInout = false): string => call(\"ref\", [inner, isInout ? \"true\" : undefined]);\n\nconst tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nconst tEnum = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tFlags = (lib: string, typeFnName: string, isSigned: boolean, mask?: number): string =>\n call(\"flags\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(typeFnName),\n String(isSigned),\n mask === undefined ? undefined : `0x${mask.toString(16)}`,\n ]);\n\nconst tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nconst tNumericByteArray = (ownership: Ownership): string =>\n call(\"array\", [\n tUint8,\n sourceStringLiteral(\"gbytearray\"),\n sourceStringLiteral(ownership),\n ]);\n\nconst tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nconst arrayLayoutArg = (ownership: Ownership | undefined, layout: ArrayLayout): string | undefined => {\n if (ownership === undefined) {\n return undefined;\n }\n\n const entries = [\n layout.elementSize === undefined ? undefined : `elementSize: ${String(layout.elementSize)}`,\n layout.isBytes ? \"isBytes: true\" : undefined,\n layout.isCallerAllocated === true ? \"isCallerAllocated: true\" : undefined,\n ].filter((entry): entry is string => entry !== undefined);\n\n return entries.length === 0 ? undefined : `{ ${entries.join(\", \")} }`;\n};\n\nconst tArray = (element: string, ownership: Ownership | undefined, layout: ArrayLayout): string =>\n call(\"array\", [\n element,\n ownership === undefined ? undefined : sourceStringLiteral(\"array\"),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tSizedArray = (\n element: string,\n lengthIndex: number,\n ownership: Ownership | undefined,\n layout: ArrayLayout,\n): string =>\n call(\"sizedArray\", [\n element,\n String(lengthIndex),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tCursorArray = (\n element: string,\n bounds: GirCursorBounds,\n ownership: Ownership | undefined,\n layout: ArrayLayout,\n): string =>\n call(\"cursorArray\", [\n element,\n `{ baseParamIndex: ${String(bounds.baseIndex)}, sizeParamIndex: ${String(bounds.lengthIndex)} }`,\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tFixedArray = (element: string, length: number, ownership: Ownership | undefined, layout: ArrayLayout): string =>\n call(\"fixedArray\", [\n element,\n String(length),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tCallback = (spec: CallbackSpecParts): string => {\n const optionsArg = spec.options.length > 0 ? `{ ${spec.options.join(\", \")} }` : undefined;\n\n return call(\"callback\", [`[${spec.argTypes.join(\", \")}]`, spec.returns, optionsArg]);\n};\n\nconst tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nconst tFn = (lib: string, cIdentifier: string, spec: FnSpecParts): string => {\n const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : \"\";\n const unpackEntry = spec.isReturnUnpacked ? `, ${UNPACKED_RETURN_ENTRY}` : \"\";\n const throwsEntry = spec.canThrow ? \", canThrow: true\" : \"\";\n\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${unpackEntry}${throwsEntry} }`,\n ]);\n};\n\nexport {\n tVoid,\n tBoolean,\n tUint8,\n tUint32,\n tInt32,\n tUint64,\n tBiguint64,\n tGtype,\n tBuffer,\n tScalar,\n tString,\n tObject,\n tBoxed,\n tStruct,\n tInlineStruct,\n tFundamental,\n tRef,\n tHashTable,\n tEnum,\n tFlags,\n tByteArray,\n tNumericByteArray,\n tList,\n tArray,\n tSizedArray,\n tFixedArray,\n tCursorArray,\n tCallback,\n tBind,\n tFn,\n type ArrayLayout,\n type Ownership,\n type ScalarDescriptorName,\n type ListDescriptorName,\n};\n"]}
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCursorBounds } from \"../gir/parameter.js\";\nimport { joinArgs } from \"../writer/emit.js\";\n\ntype Ownership = \"borrowed\" | \"full\";\n\ntype DescriptorName =\n | \"bind\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"boolean\" |\n \"void\" |\n \"unichar\" |\n \"buffer\" |\n \"string\" |\n \"object\" |\n \"boxed\" |\n \"struct\" |\n \"fundamental\" |\n \"ref\" |\n \"hashTable\" |\n \"enum\" |\n \"flags\" |\n \"array\" |\n \"list\" |\n \"slist\" |\n \"ptrArray\" |\n \"gArray\" |\n \"byteArray\" |\n \"sizedArray\" |\n \"fixedArray\" |\n \"cursorArray\" |\n \"callback\" |\n \"fn\";\n\ntype DescriptorNames = { [K in DescriptorName]: `t.${K}` };\n\ntype ScalarDescriptorName =\n | \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"float32\" |\n \"float64\" |\n \"unichar\";\n\ntype BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n freeFnName: string | undefined;\n isCallerAllocated: boolean;\n isInline?: boolean;\n size: number | undefined;\n};\n\ntype StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline?: boolean;\n};\n\ntype FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\ntype ArrayLayout = {\n elementSize?: number | undefined;\n isBytes: boolean;\n isCallerAllocated?: boolean | undefined;\n};\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\n\ntype FnSpecParts = {\n args: string;\n returns: string;\n isReturnSkipped: boolean;\n isReturnUnpacked: boolean;\n canThrow: boolean;\n};\n\ntype CallbackSpecParts = {\n argTypes: string[];\n returns: string;\n options: string[];\n};\n\nconst SKIPPED_RETURN_ENTRY = \"isReturnSkipped: true\";\nconst UNPACKED_RETURN_ENTRY = \"isReturnUnpacked: true\";\n\nconst T: DescriptorNames = {\n bind: \"t.bind\",\n int8: \"t.int8\",\n uint8: \"t.uint8\",\n int16: \"t.int16\",\n uint16: \"t.uint16\",\n int32: \"t.int32\",\n uint32: \"t.uint32\",\n int64: \"t.int64\",\n uint64: \"t.uint64\",\n bigint64: \"t.bigint64\",\n biguint64: \"t.biguint64\",\n gtype: \"t.gtype\",\n float32: \"t.float32\",\n float64: \"t.float64\",\n boolean: \"t.boolean\",\n void: \"t.void\",\n unichar: \"t.unichar\",\n buffer: \"t.buffer\",\n string: \"t.string\",\n object: \"t.object\",\n boxed: \"t.boxed\",\n struct: \"t.struct\",\n fundamental: \"t.fundamental\",\n ref: \"t.ref\",\n hashTable: \"t.hashTable\",\n enum: \"t.enum\",\n flags: \"t.flags\",\n array: \"t.array\",\n list: \"t.list\",\n slist: \"t.slist\",\n ptrArray: \"t.ptrArray\",\n gArray: \"t.gArray\",\n byteArray: \"t.byteArray\",\n sizedArray: \"t.sizedArray\",\n fixedArray: \"t.fixedArray\",\n cursorArray: \"t.cursorArray\",\n callback: \"t.callback\",\n fn: \"t.fn\",\n};\n\nconst tVoid: string = T.void;\nconst tBoolean: string = T.boolean;\nconst tUint8: string = T.uint8;\nconst tUint32: string = T.uint32;\nconst tInt32: string = T.int32;\nconst tUint64: string = T.uint64;\nconst tBiguint64: string = T.biguint64;\nconst tGtype: string = T.gtype;\nconst tBuffer: string = T.buffer;\n\nconst call = (name: DescriptorName, args: (string | undefined)[]): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: (string | undefined)[]): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nconst tScalar = (name: ScalarDescriptorName): string => T[name];\n\nconst tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nconst tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nconst tBoxed = (glibName: string, options: BoxedOptions): string =>\n call(\"boxed\", [\n sourceStringLiteral(glibName),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.sharedLibrary === undefined\n ? undefined\n : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,\n `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,\n options.freeFnName === undefined ? undefined : `freeFnName: ${sourceStringLiteral(options.freeFnName)}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n ]),\n ]);\n\nconst tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, isCallerAllocated: false });\n\nconst tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>\n call(\"fundamental\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(refFunc),\n sourceStringLiteral(unrefFunc),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isCallerAllocated === true ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tRef = (inner: string, isInout = false): string => call(\"ref\", [inner, isInout ? \"true\" : undefined]);\n\nconst tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nconst tEnum = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tFlags = (lib: string, typeFnName: string, isSigned: boolean, mask?: number): string =>\n call(\"flags\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(typeFnName),\n String(isSigned),\n mask === undefined ? undefined : `0x${mask.toString(16)}`,\n ]);\n\nconst tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nconst tNumericByteArray = (ownership: Ownership): string =>\n call(\"array\", [\n tUint8,\n sourceStringLiteral(\"gbytearray\"),\n sourceStringLiteral(ownership),\n ]);\n\nconst tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nconst arrayLayoutArg = (ownership: Ownership | undefined, layout: ArrayLayout): string | undefined => {\n if (ownership === undefined) {\n return undefined;\n }\n\n const entries = [\n layout.elementSize === undefined ? undefined : `elementSize: ${String(layout.elementSize)}`,\n layout.isBytes ? \"isBytes: true\" : undefined,\n layout.isCallerAllocated === true ? \"isCallerAllocated: true\" : undefined,\n ].filter((entry): entry is string => entry !== undefined);\n\n return entries.length === 0 ? undefined : `{ ${entries.join(\", \")} }`;\n};\n\nconst tArray = (element: string, ownership: Ownership | undefined, layout: ArrayLayout): string =>\n call(\"array\", [\n element,\n ownership === undefined ? undefined : sourceStringLiteral(\"array\"),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tSizedArray = (\n element: string,\n lengthIndex: number,\n ownership: Ownership | undefined,\n layout: ArrayLayout,\n): string =>\n call(\"sizedArray\", [\n element,\n String(lengthIndex),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tCursorArray = (\n element: string,\n bounds: GirCursorBounds,\n ownership: Ownership | undefined,\n layout: ArrayLayout,\n): string =>\n call(\"cursorArray\", [\n element,\n `{ baseParamIndex: ${String(bounds.baseIndex)}, sizeParamIndex: ${String(bounds.lengthIndex)} }`,\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tFixedArray = (element: string, length: number, ownership: Ownership | undefined, layout: ArrayLayout): string =>\n call(\"fixedArray\", [\n element,\n String(length),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n arrayLayoutArg(ownership, layout),\n ]);\n\nconst tCallback = (spec: CallbackSpecParts): string => {\n const optionsArg = spec.options.length > 0 ? `{ ${spec.options.join(\", \")} }` : undefined;\n\n return call(\"callback\", [`[${spec.argTypes.join(\", \")}]`, spec.returns, optionsArg]);\n};\n\nconst tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nconst tFn = (lib: string, cIdentifier: string, spec: FnSpecParts): string => {\n const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : \"\";\n const unpackEntry = spec.isReturnUnpacked ? `, ${UNPACKED_RETURN_ENTRY}` : \"\";\n const throwsEntry = spec.canThrow ? \", canThrow: true\" : \"\";\n\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${unpackEntry}${throwsEntry} }`,\n ]);\n};\n\nexport {\n tVoid,\n tBoolean,\n tUint8,\n tUint32,\n tInt32,\n tUint64,\n tBiguint64,\n tGtype,\n tBuffer,\n tScalar,\n tString,\n tObject,\n tBoxed,\n tStruct,\n tInlineStruct,\n tFundamental,\n tRef,\n tHashTable,\n tEnum,\n tFlags,\n tByteArray,\n tNumericByteArray,\n tList,\n tArray,\n tSizedArray,\n tFixedArray,\n tCursorArray,\n tCallback,\n tBind,\n tFn,\n type ArrayLayout,\n type Ownership,\n type ScalarDescriptorName,\n type ListDescriptorName,\n};\n"]}
@@ -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;AA6JzD,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;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"}
@@ -77,7 +77,11 @@ const dependencyVersions = () => sortOrdinal(Object.entries(packageManifest.depe
77
77
  .filter(([name]) => !name.startsWith("@types/"))
78
78
  .map(([name, range]) => `${name}@${installedVersion(name) ?? range}`));
79
79
  const hashPackageCode = (hash, label, root) => {
80
- hashTree(hash, join(label, "src"), join(root, "src"));
80
+ const source = join(root, "src");
81
+ if (existsSync(source)) {
82
+ hashTree(hash, join(label, "src"), source);
83
+ return;
84
+ }
81
85
  hashTree(hash, join(label, "dist"), join(root, "dist"));
82
86
  };
83
87
  const computeCodegenHash = () => {
@@ -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 hashTree(hash, join(label, \"src\"), join(root, \"src\"));\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":"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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"]}
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;AAOxD,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,MAkBnE,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;CAC3B,CAAC;AAkCF,QAAA,MAAM,YAAY,GAAI,SAAS,OAAO,EAAE,SAAS,gBAAgB,KAAG,MAqBnE,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/gi.js CHANGED
@@ -2,6 +2,7 @@ import { computeGiFingerprint } from "./fingerprint.js";
2
2
  import { externalPackageFor } from "./gir/external-namespaces.js";
3
3
  import { namespaceDirectory } from "./gir/namespace.js";
4
4
  import { writeGiStore } from "./store/gi-store.js";
5
+ import { collectGeneratedLibraries } from "./store/gi/generated-libraries.js";
5
6
  import { generateNamespaceModule } from "./store/gi/pipeline.js";
6
7
  const splitNamespaces = (library) => {
7
8
  const namespaces = [];
@@ -37,7 +38,10 @@ const runGiCodegen = (library, options) => {
37
38
  isFinishTrimmed,
38
39
  isInoutInPlace,
39
40
  });
40
- writeGiStore(gi, namespaces, externalNamespaces, fingerprint);
41
+ writeGiStore(gi, namespaces, externalNamespaces, {
42
+ fingerprint,
43
+ libraries: collectGeneratedLibraries(library.namespaces, libraries),
44
+ });
41
45
  return library.namespaces.size;
42
46
  };
43
47
  export { runGiCodegen };