@gtkx/codegen 0.21.0 → 1.0.0-rc.1
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.
- package/README.md +173 -0
- package/dist/analysis/descriptor-render.d.ts +18 -0
- package/dist/analysis/descriptor-render.d.ts.map +1 -0
- package/dist/analysis/descriptor-render.js +297 -0
- package/dist/analysis/descriptor-render.js.map +1 -0
- package/dist/analysis/descriptor.d.ts +59 -0
- package/dist/analysis/descriptor.d.ts.map +1 -0
- package/dist/analysis/descriptor.js +123 -0
- package/dist/analysis/descriptor.js.map +1 -0
- package/dist/analysis/inheritance.d.ts +38 -0
- package/dist/analysis/inheritance.d.ts.map +1 -0
- package/dist/analysis/inheritance.js +193 -0
- package/dist/analysis/inheritance.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +26 -0
- package/dist/analysis/param-structure.d.ts.map +1 -0
- package/dist/analysis/param-structure.js +107 -0
- package/dist/analysis/param-structure.js.map +1 -0
- package/dist/analysis/ts-type.d.ts +19 -0
- package/dist/analysis/ts-type.d.ts.map +1 -0
- package/dist/analysis/ts-type.js +65 -0
- package/dist/analysis/ts-type.js.map +1 -0
- package/dist/compile.d.ts +18 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +123 -0
- package/dist/compile.js.map +1 -0
- package/dist/docs/api-reference.d.ts +66 -0
- package/dist/docs/api-reference.d.ts.map +1 -0
- package/dist/docs/api-reference.js +299 -0
- package/dist/docs/api-reference.js.map +1 -0
- package/dist/docs/element-page.d.ts +15 -0
- package/dist/docs/element-page.d.ts.map +1 -0
- package/dist/docs/element-page.js +221 -0
- package/dist/docs/element-page.js.map +1 -0
- package/dist/docs/pipeline.d.ts +25 -0
- package/dist/docs/pipeline.d.ts.map +1 -0
- package/dist/docs/pipeline.js +130 -0
- package/dist/docs/pipeline.js.map +1 -0
- package/dist/docs/render.d.ts +32 -0
- package/dist/docs/render.d.ts.map +1 -0
- package/dist/docs/render.js +134 -0
- package/dist/docs/render.js.map +1 -0
- package/dist/docs/symbol-page.d.ts +41 -0
- package/dist/docs/symbol-page.d.ts.map +1 -0
- package/dist/docs/symbol-page.js +338 -0
- package/dist/docs/symbol-page.js.map +1 -0
- package/dist/fingerprint.d.ts +6 -26
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +30 -18
- package/dist/fingerprint.js.map +1 -1
- package/dist/gir/ancestry.d.ts +9 -0
- package/dist/gir/ancestry.d.ts.map +1 -0
- package/dist/gir/ancestry.js +29 -0
- package/dist/gir/ancestry.js.map +1 -0
- package/dist/gir/callback.d.ts +9 -10
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +17 -16
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +22 -43
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +11 -23
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +13 -31
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +7 -14
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +10 -23
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +12 -18
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +11 -42
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +7 -20
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +2 -0
- package/dist/gir/gir-path.d.ts.map +1 -0
- package/dist/gir/gir-path.js +41 -0
- package/dist/gir/gir-path.js.map +1 -0
- package/dist/gir/libraries.d.ts +4 -0
- package/dist/gir/libraries.d.ts.map +1 -0
- package/dist/gir/libraries.js +62 -0
- package/dist/gir/libraries.js.map +1 -0
- package/dist/gir/library.d.ts +37 -0
- package/dist/gir/library.d.ts.map +1 -0
- package/dist/gir/library.js +218 -0
- package/dist/gir/library.js.map +1 -0
- package/dist/gir/namespace.d.ts +36 -50
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +46 -36
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +25 -69
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +36 -57
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +6 -70
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +32 -80
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +3 -34
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js +19 -35
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -25
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +12 -9
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +27 -0
- package/dist/gir/record.d.ts.map +1 -0
- package/dist/gir/record.js +25 -0
- package/dist/gir/record.js.map +1 -0
- package/dist/gir/size.d.ts +10 -57
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -25
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +49 -0
- package/dist/gir/type-id.d.ts.map +1 -0
- package/dist/gir/type-id.js +8 -0
- package/dist/gir/type-id.js.map +1 -0
- package/dist/gir/type-ref.d.ts +3 -77
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +35 -65
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +33 -0
- package/dist/gir/type.d.ts.map +1 -0
- package/dist/gir/type.js +2 -0
- package/dist/gir/type.js.map +1 -0
- package/dist/index.d.ts +5 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/dist/khronos/args.d.ts +30 -0
- package/dist/khronos/args.d.ts.map +1 -0
- package/dist/khronos/args.js +150 -0
- package/dist/khronos/args.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +21 -0
- package/dist/khronos/jsdoc.d.ts.map +1 -0
- package/dist/khronos/jsdoc.js +59 -0
- package/dist/khronos/jsdoc.js.map +1 -0
- package/dist/khronos/model.d.ts +37 -0
- package/dist/khronos/model.d.ts.map +1 -0
- package/dist/khronos/model.js +132 -0
- package/dist/khronos/model.js.map +1 -0
- package/dist/khronos/modules.d.ts +11 -0
- package/dist/khronos/modules.d.ts.map +1 -0
- package/dist/khronos/modules.js +58 -0
- package/dist/khronos/modules.js.map +1 -0
- package/dist/khronos/parse.d.ts +9 -0
- package/dist/khronos/parse.d.ts.map +1 -0
- package/dist/khronos/parse.js +61 -0
- package/dist/khronos/parse.js.map +1 -0
- package/dist/khronos/pipeline.d.ts +24 -0
- package/dist/khronos/pipeline.d.ts.map +1 -0
- package/dist/khronos/pipeline.js +182 -0
- package/dist/khronos/pipeline.js.map +1 -0
- package/dist/khronos/plan.d.ts +80 -0
- package/dist/khronos/plan.d.ts.map +1 -0
- package/dist/khronos/plan.js +136 -0
- package/dist/khronos/plan.js.map +1 -0
- package/dist/khronos/render.d.ts +16 -0
- package/dist/khronos/render.d.ts.map +1 -0
- package/dist/khronos/render.js +158 -0
- package/dist/khronos/render.js.map +1 -0
- package/dist/khronos/select.d.ts +15 -0
- package/dist/khronos/select.d.ts.map +1 -0
- package/dist/khronos/select.js +45 -0
- package/dist/khronos/select.js.map +1 -0
- package/dist/runner.d.ts +29 -47
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +78 -53
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +9 -0
- package/dist/store/compile-store.d.ts.map +1 -0
- package/dist/store/compile-store.js +38 -0
- package/dist/store/compile-store.js.map +1 -0
- package/dist/store/gi/async.d.ts +4 -0
- package/dist/store/gi/async.d.ts.map +1 -0
- package/dist/store/gi/async.js +41 -0
- package/dist/store/gi/async.js.map +1 -0
- package/dist/store/gi/callables.d.ts +36 -0
- package/dist/store/gi/callables.d.ts.map +1 -0
- package/dist/store/gi/callables.js +202 -0
- package/dist/store/gi/callables.js.map +1 -0
- package/dist/store/gi/callback.d.ts +4 -0
- package/dist/store/gi/callback.d.ts.map +1 -0
- package/dist/store/gi/callback.js +14 -0
- package/dist/store/gi/callback.js.map +1 -0
- package/dist/store/gi/class-struct-record.d.ts +9 -0
- package/dist/store/gi/class-struct-record.d.ts.map +1 -0
- package/dist/store/gi/class-struct-record.js +34 -0
- package/dist/store/gi/class-struct-record.js.map +1 -0
- package/dist/store/gi/class.d.ts +4 -0
- package/dist/store/gi/class.d.ts.map +1 -0
- package/dist/store/gi/class.js +169 -0
- package/dist/store/gi/class.js.map +1 -0
- package/dist/store/gi/companion.d.ts +4 -0
- package/dist/store/gi/companion.d.ts.map +1 -0
- package/dist/store/gi/companion.js +13 -0
- package/dist/store/gi/companion.js.map +1 -0
- package/dist/store/gi/constant.d.ts +5 -0
- package/dist/store/gi/constant.d.ts.map +1 -0
- package/dist/store/gi/constant.js +18 -0
- package/dist/store/gi/constant.js.map +1 -0
- package/dist/store/gi/constructor-props.d.ts +5 -0
- package/dist/store/gi/constructor-props.d.ts.map +1 -0
- package/dist/store/gi/constructor-props.js +64 -0
- package/dist/store/gi/constructor-props.js.map +1 -0
- package/dist/store/gi/enum.d.ts +5 -0
- package/dist/store/gi/enum.d.ts.map +1 -0
- package/dist/store/gi/enum.js +38 -0
- package/dist/store/gi/enum.js.map +1 -0
- package/dist/store/gi/function.d.ts +8 -0
- package/dist/store/gi/function.d.ts.map +1 -0
- package/dist/store/gi/function.js +87 -0
- package/dist/store/gi/function.js.map +1 -0
- package/dist/store/gi/gtype-binding.d.ts +10 -0
- package/dist/store/gi/gtype-binding.d.ts.map +1 -0
- package/dist/store/gi/gtype-binding.js +20 -0
- package/dist/store/gi/gtype-binding.js.map +1 -0
- package/dist/store/gi/interface.d.ts +4 -0
- package/dist/store/gi/interface.d.ts.map +1 -0
- package/dist/store/gi/interface.js +99 -0
- package/dist/store/gi/interface.js.map +1 -0
- package/dist/store/gi/item-comparators.d.ts +6 -0
- package/dist/store/gi/item-comparators.d.ts.map +1 -0
- package/dist/store/gi/item-comparators.js +76 -0
- package/dist/store/gi/item-comparators.js.map +1 -0
- package/dist/store/gi/method.d.ts +24 -0
- package/dist/store/gi/method.d.ts.map +1 -0
- package/dist/store/gi/method.js +279 -0
- package/dist/store/gi/method.js.map +1 -0
- package/dist/store/gi/param-marshal.d.ts +9 -0
- package/dist/store/gi/param-marshal.d.ts.map +1 -0
- package/dist/store/gi/param-marshal.js +37 -0
- package/dist/store/gi/param-marshal.js.map +1 -0
- package/dist/store/gi/pipeline.d.ts +4 -0
- package/dist/store/gi/pipeline.d.ts.map +1 -0
- package/dist/store/gi/pipeline.js +80 -0
- package/dist/store/gi/pipeline.js.map +1 -0
- package/dist/store/gi/properties.d.ts +5 -0
- package/dist/store/gi/properties.d.ts.map +1 -0
- package/dist/store/gi/properties.js +30 -0
- package/dist/store/gi/properties.js.map +1 -0
- package/dist/store/gi/property-accessor.d.ts +26 -0
- package/dist/store/gi/property-accessor.d.ts.map +1 -0
- package/dist/store/gi/property-accessor.js +132 -0
- package/dist/store/gi/property-accessor.js.map +1 -0
- package/dist/store/gi/record-constructor.d.ts +5 -0
- package/dist/store/gi/record-constructor.d.ts.map +1 -0
- package/dist/store/gi/record-constructor.js +65 -0
- package/dist/store/gi/record-constructor.js.map +1 -0
- package/dist/store/gi/record-field-accessor.d.ts +25 -0
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
- package/dist/store/gi/record-field-accessor.js +288 -0
- package/dist/store/gi/record-field-accessor.js.map +1 -0
- package/dist/store/gi/record-layout.d.ts +14 -0
- package/dist/store/gi/record-layout.d.ts.map +1 -0
- package/dist/store/gi/record-layout.js +96 -0
- package/dist/store/gi/record-layout.js.map +1 -0
- package/dist/store/gi/record.d.ts +4 -0
- package/dist/store/gi/record.d.ts.map +1 -0
- package/dist/store/gi/record.js +59 -0
- package/dist/store/gi/record.js.map +1 -0
- package/dist/store/gi/registration.d.ts +16 -0
- package/dist/store/gi/registration.d.ts.map +1 -0
- package/dist/store/gi/registration.js +20 -0
- package/dist/store/gi/registration.js.map +1 -0
- package/dist/store/gi/return-wrap.d.ts +10 -0
- package/dist/store/gi/return-wrap.d.ts.map +1 -0
- package/dist/store/gi/return-wrap.js +46 -0
- package/dist/store/gi/return-wrap.js.map +1 -0
- package/dist/store/gi/runtime-override.d.ts +3 -0
- package/dist/store/gi/runtime-override.d.ts.map +1 -0
- package/dist/{writers → store/gi}/runtime-override.js +0 -15
- package/dist/store/gi/runtime-override.js.map +1 -0
- package/dist/store/gi/signal.d.ts +5 -0
- package/dist/store/gi/signal.d.ts.map +1 -0
- package/dist/store/gi/signal.js +233 -0
- package/dist/store/gi/signal.js.map +1 -0
- package/dist/store/gi/vtable.d.ts +4 -0
- package/dist/store/gi/vtable.d.ts.map +1 -0
- package/dist/store/gi/vtable.js +78 -0
- package/dist/store/gi/vtable.js.map +1 -0
- package/dist/store/gi-store.d.ts +9 -0
- package/dist/store/gi-store.d.ts.map +1 -0
- package/dist/store/gi-store.js +57 -0
- package/dist/store/gi-store.js.map +1 -0
- package/dist/store/jsx-store.d.ts +5 -0
- package/dist/store/jsx-store.d.ts.map +1 -0
- package/dist/store/jsx-store.js +23 -0
- package/dist/store/jsx-store.js.map +1 -0
- package/dist/store/react/built-ins.d.ts +9 -0
- package/dist/store/react/built-ins.d.ts.map +1 -0
- package/dist/store/react/built-ins.js +226 -0
- package/dist/store/react/built-ins.js.map +1 -0
- package/dist/store/react/element-components.d.ts +15 -0
- package/dist/store/react/element-components.d.ts.map +1 -0
- package/dist/store/react/element-components.js +92 -0
- package/dist/store/react/element-components.js.map +1 -0
- package/dist/store/react/element-prop-types.d.ts +19 -0
- package/dist/store/react/element-prop-types.d.ts.map +1 -0
- package/dist/store/react/element-prop-types.js +244 -0
- package/dist/store/react/element-prop-types.js.map +1 -0
- package/dist/store/react/element-props.d.ts +4 -0
- package/dist/store/react/element-props.d.ts.map +1 -0
- package/dist/store/react/element-props.js +178 -0
- package/dist/store/react/element-props.js.map +1 -0
- package/dist/store/react/gir-index.d.ts +25 -0
- package/dist/store/react/gir-index.d.ts.map +1 -0
- package/dist/store/react/gir-index.js +55 -0
- package/dist/store/react/gir-index.js.map +1 -0
- package/dist/store/react/intrinsic-elements.d.ts +26 -0
- package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
- package/dist/store/react/intrinsic-elements.js +107 -0
- package/dist/store/react/intrinsic-elements.js.map +1 -0
- package/dist/store/react/jsx.d.ts +18 -0
- package/dist/store/react/jsx.d.ts.map +1 -0
- package/dist/store/react/jsx.js +203 -0
- package/dist/store/react/jsx.js.map +1 -0
- package/dist/store/react/metadata.d.ts +4 -0
- package/dist/store/react/metadata.d.ts.map +1 -0
- package/dist/store/react/metadata.js +174 -0
- package/dist/store/react/metadata.js.map +1 -0
- package/dist/store/react/pipeline.d.ts +14 -0
- package/dist/store/react/pipeline.d.ts.map +1 -0
- package/dist/store/react/pipeline.js +60 -0
- package/dist/store/react/pipeline.js.map +1 -0
- package/dist/store/react/props.d.ts +36 -0
- package/dist/store/react/props.d.ts.map +1 -0
- package/dist/store/react/props.js +133 -0
- package/dist/store/react/props.js.map +1 -0
- package/dist/store/store-fs.d.ts +41 -0
- package/dist/store/store-fs.d.ts.map +1 -0
- package/dist/store/store-fs.js +71 -0
- package/dist/store/store-fs.js.map +1 -0
- package/dist/writer/context.d.ts +16 -0
- package/dist/writer/context.d.ts.map +1 -0
- package/dist/writer/context.js +44 -0
- package/dist/writer/context.js.map +1 -0
- package/dist/writer/doc.d.ts +2 -0
- package/dist/writer/doc.d.ts.map +1 -0
- package/dist/writer/doc.js +12 -0
- package/dist/writer/doc.js.map +1 -0
- package/dist/writer/emit.d.ts +8 -0
- package/dist/writer/emit.d.ts.map +1 -0
- package/dist/writer/emit.js +21 -0
- package/dist/writer/emit.js.map +1 -0
- package/dist/writer/gtk-doc.d.ts +2 -0
- package/dist/writer/gtk-doc.d.ts.map +1 -0
- package/dist/writer/gtk-doc.js +67 -0
- package/dist/writer/gtk-doc.js.map +1 -0
- package/dist/writer/imports.d.ts +10 -0
- package/dist/writer/imports.d.ts.map +1 -0
- package/dist/writer/imports.js +50 -0
- package/dist/writer/imports.js.map +1 -0
- package/dist/writer/module.d.ts +15 -0
- package/dist/writer/module.d.ts.map +1 -0
- package/dist/writer/module.js +46 -0
- package/dist/writer/module.js.map +1 -0
- package/overrides/cairo/context.ts.ejs +1269 -0
- package/overrides/cairo/font-face.ts.ejs +151 -0
- package/overrides/cairo/font-options.ts.ejs +199 -0
- package/overrides/cairo/image-surface.ts.ejs +132 -0
- package/overrides/cairo/index.ts.ejs +22 -0
- package/overrides/cairo/matrix.ts.ejs +171 -0
- package/overrides/cairo/pattern.ts.ejs +476 -0
- package/overrides/cairo/recording-surface.ts.ejs +102 -0
- package/overrides/cairo/region.ts.ejs +237 -0
- package/overrides/cairo/scaled-font.ts.ejs +330 -0
- package/overrides/cairo/surface.ts.ejs +296 -0
- package/overrides/gdk/index.ts.ejs +2 -0
- package/overrides/gdk/rgba.ts.ejs +11 -0
- package/overrides/gobject/index.ts.ejs +29 -0
- package/overrides/gobject/object.ts.ejs +51 -0
- package/overrides/gobject/value.ts.ejs +17 -0
- package/overrides/graphene/index.ts.ejs +2 -0
- package/overrides/graphene/structs.ts.ejs +37 -0
- package/overrides/gtk/constants.ts.ejs +3 -0
- package/overrides/gtk/index.ts.ejs +2 -0
- package/package.json +15 -15
- package/src/analysis/descriptor-render.ts +407 -0
- package/src/analysis/descriptor.ts +263 -0
- package/src/analysis/inheritance.ts +242 -0
- package/src/analysis/param-structure.ts +127 -0
- package/src/analysis/ts-type.ts +88 -0
- package/src/compile.ts +152 -0
- package/src/docs/api-reference.ts +361 -0
- package/src/docs/element-page.ts +290 -0
- package/src/docs/pipeline.ts +182 -0
- package/src/docs/render.ts +191 -0
- package/src/docs/symbol-page.ts +444 -0
- package/src/fingerprint.ts +40 -29
- package/src/gir/ancestry.ts +41 -0
- package/src/gir/callback.ts +25 -22
- package/src/gir/class.ts +31 -57
- package/src/gir/enum.ts +20 -38
- package/src/gir/field.ts +21 -36
- package/src/gir/function.ts +17 -56
- package/src/gir/gir-path.ts +49 -0
- package/src/gir/libraries.ts +77 -0
- package/src/gir/library.ts +248 -0
- package/src/gir/namespace.ts +85 -80
- package/src/gir/parameter.ts +64 -93
- package/src/gir/parse.ts +43 -95
- package/src/gir/primitives.ts +23 -45
- package/src/gir/property.ts +27 -29
- package/src/gir/record.ts +53 -0
- package/src/gir/size.ts +9 -56
- package/src/gir/type-id.ts +49 -0
- package/src/gir/type-ref.ts +35 -140
- package/src/gir/type.ts +16 -0
- package/src/index.ts +20 -15
- package/src/khronos/args.ts +202 -0
- package/src/khronos/jsdoc.ts +76 -0
- package/src/khronos/model.ts +166 -0
- package/src/khronos/modules.ts +75 -0
- package/src/khronos/parse.ts +66 -0
- package/src/khronos/pipeline.ts +234 -0
- package/src/khronos/plan.ts +191 -0
- package/src/khronos/registry/LICENSE +202 -0
- package/src/khronos/registry/gl.xml +47748 -0
- package/src/khronos/render.ts +193 -0
- package/src/khronos/select.ts +67 -0
- package/src/runner.ts +112 -75
- package/src/store/compile-store.ts +49 -0
- package/src/store/gi/async.ts +42 -0
- package/src/store/gi/callables.ts +309 -0
- package/src/store/gi/callback.ts +15 -0
- package/src/store/gi/class-struct-record.ts +40 -0
- package/src/store/gi/class.ts +212 -0
- package/src/store/gi/companion.ts +13 -0
- package/src/store/gi/constant.ts +24 -0
- package/src/store/gi/constructor-props.ts +82 -0
- package/src/store/gi/enum.ts +49 -0
- package/src/store/gi/function.ts +107 -0
- package/src/store/gi/gtype-binding.ts +33 -0
- package/src/store/gi/interface.ts +157 -0
- package/src/store/gi/item-comparators.ts +90 -0
- package/src/store/gi/method.ts +417 -0
- package/src/store/gi/param-marshal.ts +48 -0
- package/src/store/gi/pipeline.ts +85 -0
- package/src/store/gi/properties.ts +39 -0
- package/src/store/gi/property-accessor.ts +194 -0
- package/src/store/gi/record-constructor.ts +87 -0
- package/src/store/gi/record-field-accessor.ts +394 -0
- package/src/store/gi/record-layout.ts +134 -0
- package/src/store/gi/record.ts +66 -0
- package/src/store/gi/registration.ts +38 -0
- package/src/store/gi/return-wrap.ts +52 -0
- package/src/store/gi/runtime-override.ts +36 -0
- package/src/store/gi/signal.ts +310 -0
- package/src/store/gi/vtable.ts +99 -0
- package/src/store/gi-store.ts +79 -0
- package/src/store/jsx-store.ts +27 -0
- package/src/store/react/built-ins.ts +260 -0
- package/src/store/react/element-components.ts +138 -0
- package/src/store/react/element-prop-types.ts +280 -0
- package/src/store/react/element-props.ts +204 -0
- package/src/store/react/gir-index.ts +85 -0
- package/src/store/react/intrinsic-elements.ts +161 -0
- package/src/store/react/jsx.ts +294 -0
- package/src/store/react/metadata.ts +197 -0
- package/src/store/react/pipeline.ts +90 -0
- package/src/store/react/props.ts +197 -0
- package/src/store/store-fs.ts +112 -0
- package/src/writer/context.ts +48 -0
- package/src/writer/doc.ts +11 -0
- package/src/writer/emit.ts +26 -0
- package/src/writer/gtk-doc.ts +74 -0
- package/src/writer/imports.ts +59 -0
- package/src/writer/module.ts +45 -0
- package/LICENSE +0 -373
- package/dist/dsl/context.d.ts +0 -104
- package/dist/dsl/context.d.ts.map +0 -1
- package/dist/dsl/context.js +0 -140
- package/dist/dsl/context.js.map +0 -1
- package/dist/dsl/emit.d.ts +0 -28
- package/dist/dsl/emit.d.ts.map +0 -1
- package/dist/dsl/emit.js +0 -41
- package/dist/dsl/emit.js.map +0 -1
- package/dist/dsl/identifier.d.ts +0 -28
- package/dist/dsl/identifier.d.ts.map +0 -1
- package/dist/dsl/identifier.js +0 -45
- package/dist/dsl/identifier.js.map +0 -1
- package/dist/dsl/imports.d.ts +0 -58
- package/dist/dsl/imports.d.ts.map +0 -1
- package/dist/dsl/imports.js +0 -107
- package/dist/dsl/imports.js.map +0 -1
- package/dist/dsl/module.d.ts +0 -53
- package/dist/dsl/module.d.ts.map +0 -1
- package/dist/dsl/module.js +0 -76
- package/dist/dsl/module.js.map +0 -1
- package/dist/ffi/pipeline.d.ts +0 -19
- package/dist/ffi/pipeline.d.ts.map +0 -1
- package/dist/ffi/pipeline.js +0 -107
- package/dist/ffi/pipeline.js.map +0 -1
- package/dist/gi-store.d.ts +0 -34
- package/dist/gi-store.d.ts.map +0 -1
- package/dist/gi-store.js +0 -154
- package/dist/gi-store.js.map +0 -1
- package/dist/gir/boxed.d.ts +0 -66
- package/dist/gir/boxed.d.ts.map +0 -1
- package/dist/gir/boxed.js +0 -49
- package/dist/gir/boxed.js.map +0 -1
- package/dist/gir/qualified-name.d.ts +0 -37
- package/dist/gir/qualified-name.d.ts.map +0 -1
- package/dist/gir/qualified-name.js +0 -39
- package/dist/gir/qualified-name.js.map +0 -1
- package/dist/gir/qualify.d.ts +0 -32
- package/dist/gir/qualify.d.ts.map +0 -1
- package/dist/gir/qualify.js +0 -60
- package/dist/gir/qualify.js.map +0 -1
- package/dist/gir/repository.d.ts +0 -82
- package/dist/gir/repository.d.ts.map +0 -1
- package/dist/gir/repository.js +0 -122
- package/dist/gir/repository.js.map +0 -1
- package/dist/gir/signal.d.ts +0 -22
- package/dist/gir/signal.d.ts.map +0 -1
- package/dist/gir/signal.js +0 -20
- package/dist/gir/signal.js.map +0 -1
- package/dist/jsx-store.d.ts +0 -22
- package/dist/jsx-store.d.ts.map +0 -1
- package/dist/jsx-store.js +0 -40
- package/dist/jsx-store.js.map +0 -1
- package/dist/react/compounds-meta.d.ts +0 -18
- package/dist/react/compounds-meta.d.ts.map +0 -1
- package/dist/react/compounds-meta.js +0 -93
- package/dist/react/compounds-meta.js.map +0 -1
- package/dist/react/compounds.d.ts +0 -27
- package/dist/react/compounds.d.ts.map +0 -1
- package/dist/react/compounds.js +0 -164
- package/dist/react/compounds.js.map +0 -1
- package/dist/react/internal.d.ts +0 -14
- package/dist/react/internal.d.ts.map +0 -1
- package/dist/react/internal.js +0 -79
- package/dist/react/internal.js.map +0 -1
- package/dist/react/jsx.d.ts +0 -22
- package/dist/react/jsx.d.ts.map +0 -1
- package/dist/react/jsx.js +0 -134
- package/dist/react/jsx.js.map +0 -1
- package/dist/react/pipeline.d.ts +0 -13
- package/dist/react/pipeline.d.ts.map +0 -1
- package/dist/react/pipeline.js +0 -25
- package/dist/react/pipeline.js.map +0 -1
- package/dist/react/props.d.ts +0 -38
- package/dist/react/props.d.ts.map +0 -1
- package/dist/react/props.js +0 -231
- package/dist/react/props.js.map +0 -1
- package/dist/react/slot-props.d.ts +0 -10
- package/dist/react/slot-props.d.ts.map +0 -1
- package/dist/react/slot-props.js +0 -56
- package/dist/react/slot-props.js.map +0 -1
- package/dist/react/widgets.d.ts +0 -83
- package/dist/react/widgets.d.ts.map +0 -1
- package/dist/react/widgets.js +0 -152
- package/dist/react/widgets.js.map +0 -1
- package/dist/store-fs.d.ts +0 -109
- package/dist/store-fs.d.ts.map +0 -1
- package/dist/store-fs.js +0 -98
- package/dist/store-fs.js.map +0 -1
- package/dist/transpile.d.ts +0 -32
- package/dist/transpile.d.ts.map +0 -1
- package/dist/transpile.js +0 -63
- package/dist/transpile.js.map +0 -1
- package/dist/typecheck-store.d.ts +0 -41
- package/dist/typecheck-store.d.ts.map +0 -1
- package/dist/typecheck-store.js +0 -102
- package/dist/typecheck-store.js.map +0 -1
- package/dist/writers/alias.d.ts +0 -13
- package/dist/writers/alias.d.ts.map +0 -1
- package/dist/writers/alias.js +0 -17
- package/dist/writers/alias.js.map +0 -1
- package/dist/writers/async.d.ts +0 -22
- package/dist/writers/async.d.ts.map +0 -1
- package/dist/writers/async.js +0 -48
- package/dist/writers/async.js.map +0 -1
- package/dist/writers/boxed-constructor.d.ts +0 -26
- package/dist/writers/boxed-constructor.d.ts.map +0 -1
- package/dist/writers/boxed-constructor.js +0 -85
- package/dist/writers/boxed-constructor.js.map +0 -1
- package/dist/writers/boxed-field-accessor.d.ts +0 -18
- package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
- package/dist/writers/boxed-field-accessor.js +0 -260
- package/dist/writers/boxed-field-accessor.js.map +0 -1
- package/dist/writers/boxed-layout.d.ts +0 -27
- package/dist/writers/boxed-layout.d.ts.map +0 -1
- package/dist/writers/boxed-layout.js +0 -128
- package/dist/writers/boxed-layout.js.map +0 -1
- package/dist/writers/boxed.d.ts +0 -20
- package/dist/writers/boxed.d.ts.map +0 -1
- package/dist/writers/boxed.js +0 -71
- package/dist/writers/boxed.js.map +0 -1
- package/dist/writers/callables.d.ts +0 -124
- package/dist/writers/callables.d.ts.map +0 -1
- package/dist/writers/callables.js +0 -283
- package/dist/writers/callables.js.map +0 -1
- package/dist/writers/callback.d.ts +0 -16
- package/dist/writers/callback.d.ts.map +0 -1
- package/dist/writers/callback.js +0 -38
- package/dist/writers/callback.js.map +0 -1
- package/dist/writers/class-struct-record.d.ts +0 -31
- package/dist/writers/class-struct-record.d.ts.map +0 -1
- package/dist/writers/class-struct-record.js +0 -67
- package/dist/writers/class-struct-record.js.map +0 -1
- package/dist/writers/class-struct.d.ts +0 -22
- package/dist/writers/class-struct.d.ts.map +0 -1
- package/dist/writers/class-struct.js +0 -85
- package/dist/writers/class-struct.js.map +0 -1
- package/dist/writers/class.d.ts +0 -16
- package/dist/writers/class.d.ts.map +0 -1
- package/dist/writers/class.js +0 -307
- package/dist/writers/class.js.map +0 -1
- package/dist/writers/constant.d.ts +0 -15
- package/dist/writers/constant.d.ts.map +0 -1
- package/dist/writers/constant.js +0 -23
- package/dist/writers/constant.js.map +0 -1
- package/dist/writers/constants.d.ts +0 -15
- package/dist/writers/constants.d.ts.map +0 -1
- package/dist/writers/constants.js +0 -23
- package/dist/writers/constants.js.map +0 -1
- package/dist/writers/constructor-props.d.ts +0 -32
- package/dist/writers/constructor-props.d.ts.map +0 -1
- package/dist/writers/constructor-props.js +0 -110
- package/dist/writers/constructor-props.js.map +0 -1
- package/dist/writers/enum.d.ts +0 -21
- package/dist/writers/enum.d.ts.map +0 -1
- package/dist/writers/enum.js +0 -48
- package/dist/writers/enum.js.map +0 -1
- package/dist/writers/function.d.ts +0 -40
- package/dist/writers/function.d.ts.map +0 -1
- package/dist/writers/function.js +0 -127
- package/dist/writers/function.js.map +0 -1
- package/dist/writers/gtype-binding.d.ts +0 -19
- package/dist/writers/gtype-binding.d.ts.map +0 -1
- package/dist/writers/gtype-binding.js +0 -40
- package/dist/writers/gtype-binding.js.map +0 -1
- package/dist/writers/inheritance.d.ts +0 -48
- package/dist/writers/inheritance.d.ts.map +0 -1
- package/dist/writers/inheritance.js +0 -90
- package/dist/writers/inheritance.js.map +0 -1
- package/dist/writers/interface.d.ts +0 -16
- package/dist/writers/interface.d.ts.map +0 -1
- package/dist/writers/interface.js +0 -155
- package/dist/writers/interface.js.map +0 -1
- package/dist/writers/method.d.ts +0 -150
- package/dist/writers/method.d.ts.map +0 -1
- package/dist/writers/method.js +0 -510
- package/dist/writers/method.js.map +0 -1
- package/dist/writers/param-classify.d.ts +0 -93
- package/dist/writers/param-classify.d.ts.map +0 -1
- package/dist/writers/param-classify.js +0 -163
- package/dist/writers/param-classify.js.map +0 -1
- package/dist/writers/property-accessor.d.ts +0 -19
- package/dist/writers/property-accessor.d.ts.map +0 -1
- package/dist/writers/property-accessor.js +0 -117
- package/dist/writers/property-accessor.js.map +0 -1
- package/dist/writers/registration.d.ts +0 -27
- package/dist/writers/registration.d.ts.map +0 -1
- package/dist/writers/registration.js +0 -30
- package/dist/writers/registration.js.map +0 -1
- package/dist/writers/return-wrap.d.ts +0 -39
- package/dist/writers/return-wrap.d.ts.map +0 -1
- package/dist/writers/return-wrap.js +0 -152
- package/dist/writers/return-wrap.js.map +0 -1
- package/dist/writers/runtime-override.d.ts +0 -18
- package/dist/writers/runtime-override.d.ts.map +0 -1
- package/dist/writers/runtime-override.js.map +0 -1
- package/dist/writers/signal.d.ts +0 -21
- package/dist/writers/signal.d.ts.map +0 -1
- package/dist/writers/signal.js +0 -260
- package/dist/writers/signal.js.map +0 -1
- package/dist/writers/ts-type.d.ts +0 -50
- package/dist/writers/ts-type.d.ts.map +0 -1
- package/dist/writers/ts-type.js +0 -75
- package/dist/writers/ts-type.js.map +0 -1
- package/dist/writers/types-ts.d.ts +0 -27
- package/dist/writers/types-ts.d.ts.map +0 -1
- package/dist/writers/types-ts.js +0 -97
- package/dist/writers/types-ts.js.map +0 -1
- package/dist/writers/value.d.ts +0 -89
- package/dist/writers/value.d.ts.map +0 -1
- package/dist/writers/value.js +0 -402
- package/dist/writers/value.js.map +0 -1
- package/src/dsl/context.ts +0 -146
- package/src/dsl/emit.ts +0 -42
- package/src/dsl/identifier.ts +0 -52
- package/src/dsl/imports.ts +0 -109
- package/src/dsl/module.ts +0 -75
- package/src/ffi/pipeline.ts +0 -113
- package/src/gi-store.ts +0 -199
- package/src/gir/boxed.ts +0 -94
- package/src/gir/qualified-name.ts +0 -55
- package/src/gir/qualify.ts +0 -64
- package/src/gir/repository.ts +0 -149
- package/src/gir/signal.ts +0 -36
- package/src/jsx-store.ts +0 -53
- package/src/react/compounds-meta.ts +0 -99
- package/src/react/compounds.ts +0 -204
- package/src/react/internal.ts +0 -91
- package/src/react/jsx.ts +0 -155
- package/src/react/pipeline.ts +0 -29
- package/src/react/props.ts +0 -307
- package/src/react/slot-props.ts +0 -57
- package/src/react/widgets.ts +0 -185
- package/src/store-fs.ts +0 -157
- package/src/transpile.ts +0 -80
- package/src/typecheck-store.ts +0 -136
- package/src/writers/alias.ts +0 -19
- package/src/writers/async.ts +0 -44
- package/src/writers/boxed-constructor.ts +0 -105
- package/src/writers/boxed-field-accessor.ts +0 -306
- package/src/writers/boxed-layout.ts +0 -166
- package/src/writers/boxed.ts +0 -77
- package/src/writers/callables.ts +0 -339
- package/src/writers/callback.ts +0 -40
- package/src/writers/class-struct-record.ts +0 -75
- package/src/writers/class-struct.ts +0 -96
- package/src/writers/class.ts +0 -384
- package/src/writers/constant.ts +0 -29
- package/src/writers/constructor-props.ts +0 -130
- package/src/writers/enum.ts +0 -53
- package/src/writers/function.ts +0 -136
- package/src/writers/gtype-binding.ts +0 -48
- package/src/writers/inheritance.ts +0 -104
- package/src/writers/interface.ts +0 -168
- package/src/writers/method.ts +0 -678
- package/src/writers/param-classify.ts +0 -178
- package/src/writers/property-accessor.ts +0 -139
- package/src/writers/registration.ts +0 -42
- package/src/writers/return-wrap.ts +0 -180
- package/src/writers/runtime-override.ts +0 -59
- package/src/writers/signal.ts +0 -318
- package/src/writers/ts-type.ts +0 -115
- package/src/writers/value.ts +0 -485
package/src/gir/parse.ts
CHANGED
|
@@ -1,31 +1,12 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { XMLParser } from "fast-xml-parser";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Raw GIR XML element after parsing.
|
|
6
|
-
*
|
|
7
|
-
* Attributes are exposed under `@_<name>` keys (the default
|
|
8
|
-
* `fast-xml-parser` convention). Child elements appear under their tag name.
|
|
9
|
-
* Multi-occurrence tags (every container in {@link MULTI_TAGS}) are always
|
|
10
|
-
* arrays so callers do not need to disambiguate "single child" from "many
|
|
11
|
-
* children" at every access. Single-occurrence tags appear as bare objects.
|
|
12
|
-
*/
|
|
13
4
|
export type RawNode = {
|
|
14
|
-
|
|
5
|
+
[attributeOrChild: string]: unknown;
|
|
15
6
|
};
|
|
16
7
|
|
|
17
|
-
|
|
18
|
-
* Tag names that the GIR schema permits at multi-occurrence positions.
|
|
19
|
-
*
|
|
20
|
-
* `fast-xml-parser` is configured to always materialize these as arrays so
|
|
21
|
-
* downstream traversal never needs to branch on "is this an object or an
|
|
22
|
-
* array of objects". Tags missing from this set may appear as a single
|
|
23
|
-
* object (e.g. `<return-value>`, `<parameters>`, `<type>`, `<doc>`).
|
|
24
|
-
*/
|
|
25
|
-
const MULTI_TAGS: ReadonlySet<string> = new Set([
|
|
8
|
+
const MULTI_TAGS: Set<string> = new Set([
|
|
26
9
|
"include",
|
|
27
|
-
"c:include",
|
|
28
|
-
"package",
|
|
29
10
|
"class",
|
|
30
11
|
"interface",
|
|
31
12
|
"record",
|
|
@@ -33,14 +14,11 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
|
|
|
33
14
|
"bitfield",
|
|
34
15
|
"callback",
|
|
35
16
|
"function",
|
|
36
|
-
"function-macro",
|
|
37
17
|
"constant",
|
|
38
18
|
"alias",
|
|
39
19
|
"union",
|
|
40
|
-
"glib:boxed",
|
|
41
20
|
"method",
|
|
42
21
|
"constructor",
|
|
43
|
-
"virtual-method",
|
|
44
22
|
"property",
|
|
45
23
|
"field",
|
|
46
24
|
"glib:signal",
|
|
@@ -48,33 +26,15 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
|
|
|
48
26
|
"prerequisite",
|
|
49
27
|
"member",
|
|
50
28
|
"parameter",
|
|
51
|
-
"attribute",
|
|
52
29
|
]);
|
|
53
30
|
|
|
54
|
-
/**
|
|
55
|
-
* The tag name codegen reads GIR constructors under.
|
|
56
|
-
*
|
|
57
|
-
* GIR spells constructors `<constructor>`, but `fast-xml-parser` rejects the
|
|
58
|
-
* literal names `constructor`, `prototype`, and `__proto__` to guard against
|
|
59
|
-
* prototype pollution, with no opt-out. {@link parseGirFile} rewrites the tag
|
|
60
|
-
* to this token via `transformTagName` before that guard runs, so every
|
|
61
|
-
* downstream lookup of a constructor child must use this constant rather than
|
|
62
|
-
* the raw GIR name.
|
|
63
|
-
*/
|
|
64
31
|
export const GIR_CONSTRUCTOR_TAG = "gir-constructor";
|
|
65
32
|
|
|
66
|
-
const RESERVED_TAG_RENAMES:
|
|
33
|
+
const RESERVED_TAG_RENAMES: Map<string, string> = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
|
|
67
34
|
|
|
68
|
-
/**
|
|
69
|
-
* Maps a GIR tag name to the token the parser exposes it under, rewriting the
|
|
70
|
-
* names {@link RESERVED_TAG_RENAMES} covers and passing every other tag
|
|
71
|
-
* through unchanged.
|
|
72
|
-
*
|
|
73
|
-
* @param tag - The raw GIR tag name
|
|
74
|
-
*/
|
|
75
35
|
const renameReservedTag = (tag: string): string => RESERVED_TAG_RENAMES.get(tag) ?? tag;
|
|
76
36
|
|
|
77
|
-
const RENAMED_MULTI_TAGS:
|
|
37
|
+
const RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map(renameReservedTag));
|
|
78
38
|
|
|
79
39
|
const PARSER = new XMLParser({
|
|
80
40
|
ignoreAttributes: false,
|
|
@@ -86,80 +46,51 @@ const PARSER = new XMLParser({
|
|
|
86
46
|
isArray: (name) => RENAMED_MULTI_TAGS.has(name),
|
|
87
47
|
});
|
|
88
48
|
|
|
89
|
-
/**
|
|
90
|
-
* Parses a GIR XML file from disk and returns its raw tree.
|
|
91
|
-
*
|
|
92
|
-
* The returned object always has a single `repository` property containing
|
|
93
|
-
* the root `<repository>` element. Callers should not interpret the tree
|
|
94
|
-
* directly — pass it to {@link GirRepository.load} (in `./repository.ts`),
|
|
95
|
-
* which builds the typed domain model on top of it.
|
|
96
|
-
*
|
|
97
|
-
* @param path - Absolute path to a `.gir` file
|
|
98
|
-
* @returns The raw repository node
|
|
99
|
-
*/
|
|
100
49
|
export const parseGirFile = (path: string): RawNode => {
|
|
101
50
|
const xml = readFileSync(path, "utf-8");
|
|
102
51
|
return PARSER.parse(xml) as RawNode;
|
|
103
52
|
};
|
|
104
53
|
|
|
105
|
-
/**
|
|
106
|
-
* Reads an attribute from a raw GIR node as a string, returning `undefined`
|
|
107
|
-
* when the attribute is absent.
|
|
108
|
-
*
|
|
109
|
-
* The `@_` prefix is added by `fast-xml-parser`; this helper hides that
|
|
110
|
-
* convention from the call sites.
|
|
111
|
-
*
|
|
112
|
-
* @param node - The raw element
|
|
113
|
-
* @param name - The attribute name (without the `@_` prefix)
|
|
114
|
-
*/
|
|
115
54
|
export const attr = (node: RawNode | undefined, name: string): string | undefined => {
|
|
116
55
|
if (node === undefined) return undefined;
|
|
117
56
|
const value = node[`@_${name}`];
|
|
118
57
|
return typeof value === "string" ? value : undefined;
|
|
119
58
|
};
|
|
120
59
|
|
|
121
|
-
/**
|
|
122
|
-
* Reads an attribute as a boolean using GIR's `"1"` / `"0"` convention.
|
|
123
|
-
*
|
|
124
|
-
* Attributes that are missing return the supplied default (defaulting to
|
|
125
|
-
* `false`). Any non-`"1"` value is treated as `false`.
|
|
126
|
-
*
|
|
127
|
-
* @param node - The raw element
|
|
128
|
-
* @param name - The attribute name (without the `@_` prefix)
|
|
129
|
-
* @param fallback - Value returned when the attribute is missing
|
|
130
|
-
*/
|
|
131
60
|
export const attrBool = (node: RawNode | undefined, name: string, fallback = false): boolean => {
|
|
132
61
|
const value = attr(node, name);
|
|
133
62
|
if (value === undefined) return fallback;
|
|
134
63
|
return value === "1";
|
|
135
64
|
};
|
|
136
65
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
66
|
+
export const nameAttr = (node: RawNode): string => attr(node, "name") ?? "";
|
|
67
|
+
|
|
68
|
+
export const intAttr = (node: RawNode, name: string): number | undefined => {
|
|
69
|
+
const raw = attr(node, name);
|
|
70
|
+
return raw === undefined ? undefined : Number.parseInt(raw, 10);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const parseEnumAttr = <T extends string, F extends T | undefined>(
|
|
74
|
+
raw: string | undefined,
|
|
75
|
+
members: Set<T>,
|
|
76
|
+
fallback: F,
|
|
77
|
+
label: string,
|
|
78
|
+
): T | F => {
|
|
79
|
+
if (raw === undefined) return fallback;
|
|
80
|
+
for (const member of members) {
|
|
81
|
+
if (member === raw) return member;
|
|
82
|
+
}
|
|
83
|
+
throw new Error(`Unknown ${label} value "${raw}"`);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const childrenOf = (node: RawNode | undefined, tag: string): RawNode[] => {
|
|
149
87
|
if (node === undefined) return [];
|
|
150
88
|
const value = node[tag];
|
|
151
89
|
if (value === undefined) return [];
|
|
152
|
-
if (Array.isArray(value)) return value as
|
|
90
|
+
if (Array.isArray(value)) return value as RawNode[];
|
|
153
91
|
return [value as RawNode];
|
|
154
92
|
};
|
|
155
93
|
|
|
156
|
-
/**
|
|
157
|
-
* Returns the single child of a raw node under a given tag, or `undefined`
|
|
158
|
-
* if absent. If multiple are present the first is returned.
|
|
159
|
-
*
|
|
160
|
-
* @param node - The parent element
|
|
161
|
-
* @param tag - The child tag name (with namespace prefix if any)
|
|
162
|
-
*/
|
|
163
94
|
export const childOf = (node: RawNode | undefined, tag: string): RawNode | undefined => {
|
|
164
95
|
if (node === undefined) return undefined;
|
|
165
96
|
const value = node[tag];
|
|
@@ -169,3 +100,20 @@ export const childOf = (node: RawNode | undefined, tag: string): RawNode | undef
|
|
|
169
100
|
}
|
|
170
101
|
return value as RawNode;
|
|
171
102
|
};
|
|
103
|
+
|
|
104
|
+
const normalizeDoc = (text: string): string | undefined => {
|
|
105
|
+
const trimmed = text.trim();
|
|
106
|
+
return trimmed.length === 0 ? undefined : trimmed;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export const docOf = (node: RawNode | undefined): string | undefined => {
|
|
110
|
+
if (node === undefined) return undefined;
|
|
111
|
+
const raw = node.doc;
|
|
112
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
113
|
+
if (typeof value === "string") return normalizeDoc(value);
|
|
114
|
+
if (value !== null && typeof value === "object") {
|
|
115
|
+
const text = (value as RawNode)["#text"];
|
|
116
|
+
if (typeof text === "string") return normalizeDoc(text);
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
};
|
package/src/gir/primitives.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mapping from GIR primitive type names to the FFI marshaling categories
|
|
3
|
-
* the writers emit.
|
|
4
|
-
*
|
|
5
|
-
* The categories mirror the `t.*` helpers exposed by `@gtkx/ffi`'s runtime
|
|
6
|
-
* (see `packages/ffi/src/helpers.ts`). Categories that are not directly
|
|
7
|
-
* marshaled (e.g. `void`, `string`, `unichar`) are still listed so callers
|
|
8
|
-
* can branch on them without falling through to a default.
|
|
9
|
-
*/
|
|
10
1
|
export type PrimitiveCategory =
|
|
11
2
|
| "void"
|
|
12
3
|
| "boolean"
|
|
@@ -18,19 +9,16 @@ export type PrimitiveCategory =
|
|
|
18
9
|
| "uint32"
|
|
19
10
|
| "int64"
|
|
20
11
|
| "uint64"
|
|
12
|
+
| "bigint64"
|
|
13
|
+
| "biguint64"
|
|
14
|
+
| "gtype"
|
|
21
15
|
| "float32"
|
|
22
16
|
| "float64"
|
|
23
17
|
| "string"
|
|
24
18
|
| "unichar"
|
|
25
19
|
| "pointer";
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
* Width in bytes of each primitive category on the x86-64 ABI (Linux LP64).
|
|
29
|
-
*
|
|
30
|
-
* The widths are also used as the natural alignment requirement of each
|
|
31
|
-
* category — every native integer/float aligns to its own size.
|
|
32
|
-
*/
|
|
33
|
-
export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Object.freeze({
|
|
21
|
+
export const PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {
|
|
34
22
|
void: 0,
|
|
35
23
|
boolean: 4,
|
|
36
24
|
int8: 1,
|
|
@@ -41,14 +29,17 @@ export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Objec
|
|
|
41
29
|
uint32: 4,
|
|
42
30
|
int64: 8,
|
|
43
31
|
uint64: 8,
|
|
32
|
+
bigint64: 8,
|
|
33
|
+
biguint64: 8,
|
|
34
|
+
gtype: 8,
|
|
44
35
|
float32: 4,
|
|
45
36
|
float64: 8,
|
|
46
37
|
string: 8,
|
|
47
38
|
unichar: 4,
|
|
48
39
|
pointer: 8,
|
|
49
|
-
}
|
|
40
|
+
};
|
|
50
41
|
|
|
51
|
-
const PRIMITIVE_BY_NAME:
|
|
42
|
+
const PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([
|
|
52
43
|
["none", "void"],
|
|
53
44
|
["void", "void"],
|
|
54
45
|
["gboolean", "boolean"],
|
|
@@ -69,21 +60,21 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
|
|
|
69
60
|
["uint16", "uint16"],
|
|
70
61
|
["int32", "int32"],
|
|
71
62
|
["uint32", "uint32"],
|
|
72
|
-
["int64", "
|
|
73
|
-
["uint64", "
|
|
63
|
+
["int64", "bigint64"],
|
|
64
|
+
["uint64", "biguint64"],
|
|
74
65
|
["guint", "uint32"],
|
|
75
66
|
["guint32", "uint32"],
|
|
76
|
-
["glong", "
|
|
77
|
-
["gint64", "
|
|
78
|
-
["long", "
|
|
67
|
+
["glong", "bigint64"],
|
|
68
|
+
["gint64", "bigint64"],
|
|
69
|
+
["long", "bigint64"],
|
|
79
70
|
["gssize", "int64"],
|
|
80
71
|
["gintptr", "int64"],
|
|
81
|
-
["gulong", "
|
|
82
|
-
["guint64", "
|
|
72
|
+
["gulong", "biguint64"],
|
|
73
|
+
["guint64", "biguint64"],
|
|
83
74
|
["gsize", "uint64"],
|
|
84
75
|
["guintptr", "uint64"],
|
|
85
|
-
["GType", "
|
|
86
|
-
["time_t", "
|
|
76
|
+
["GType", "gtype"],
|
|
77
|
+
["time_t", "bigint64"],
|
|
87
78
|
["pid_t", "int32"],
|
|
88
79
|
["uid_t", "uint32"],
|
|
89
80
|
["gid_t", "uint32"],
|
|
@@ -100,25 +91,9 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
|
|
|
100
91
|
["gconstpointer", "pointer"],
|
|
101
92
|
] as const);
|
|
102
93
|
|
|
103
|
-
/**
|
|
104
|
-
* Returns the FFI category for a GIR primitive name (`"gint"`, `"utf8"`,
|
|
105
|
-
* `"gsize"`, …) or `undefined` when the name is not a primitive.
|
|
106
|
-
*
|
|
107
|
-
* Aliases that GIR uses inconsistently (`gint` / `int` / `gint32`, …) all
|
|
108
|
-
* map to the same canonical category.
|
|
109
|
-
*
|
|
110
|
-
* @param name - The GIR type name as it appears in `<type name="…">`
|
|
111
|
-
*/
|
|
112
94
|
export const primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);
|
|
113
95
|
|
|
114
|
-
|
|
115
|
-
* TypeScript surface type for each primitive category.
|
|
116
|
-
*
|
|
117
|
-
* Codegen surfaces both raw C primitives and string-marshalled categories
|
|
118
|
-
* (`string`, `unichar`) through this map so writers in the FFI and React
|
|
119
|
-
* pipelines agree on the same annotation per category.
|
|
120
|
-
*/
|
|
121
|
-
export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Object.freeze({
|
|
96
|
+
export const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
|
|
122
97
|
void: "void",
|
|
123
98
|
boolean: "boolean",
|
|
124
99
|
int8: "number",
|
|
@@ -129,9 +104,12 @@ export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Ob
|
|
|
129
104
|
uint32: "number",
|
|
130
105
|
int64: "number",
|
|
131
106
|
uint64: "number",
|
|
107
|
+
bigint64: "bigint",
|
|
108
|
+
biguint64: "bigint",
|
|
109
|
+
gtype: "bigint",
|
|
132
110
|
float32: "number",
|
|
133
111
|
float64: "number",
|
|
134
112
|
string: "string",
|
|
135
113
|
unichar: "string",
|
|
136
114
|
pointer: "number",
|
|
137
|
-
}
|
|
115
|
+
};
|
package/src/gir/property.ts
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { attr, attrBool, type RawNode } from "./parse.js";
|
|
3
|
-
import {
|
|
1
|
+
import { type ParameterTransfer, transferOwnership } from "./parameter.js";
|
|
2
|
+
import { attr, attrBool, docOf, nameAttr, type RawNode } from "./parse.js";
|
|
3
|
+
import type { ParseContext, TypeId } from "./type-id.js";
|
|
4
|
+
import { typeRefFromNode } from "./type-ref.js";
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
* A `<property>` of a class or interface.
|
|
7
|
-
*
|
|
8
|
-
* GIR property names are kebab-case; the writers convert them to camelCase
|
|
9
|
-
* for the JS surface and pass the original GIR name through to
|
|
10
|
-
* `registerConstructionMeta` for `g_object_newv` parameter building.
|
|
11
|
-
*/
|
|
12
6
|
export type GirProperty = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
name: string;
|
|
8
|
+
doc: string | undefined;
|
|
9
|
+
type: TypeId | undefined;
|
|
10
|
+
readable: boolean;
|
|
11
|
+
writable: boolean;
|
|
12
|
+
construct: boolean;
|
|
13
|
+
constructOnly: boolean;
|
|
14
|
+
introspectable: boolean;
|
|
15
|
+
transferOwnership: ParameterTransfer;
|
|
16
|
+
getter: string | undefined;
|
|
17
|
+
setter: string | undefined;
|
|
18
|
+
defaultValue: string | undefined;
|
|
25
19
|
};
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export const propertyFromNode = (node: RawNode): GirProperty => ({
|
|
31
|
-
name:
|
|
32
|
-
|
|
21
|
+
export const isConstructableProperty = (property: GirProperty): boolean =>
|
|
22
|
+
property.writable || property.construct || property.constructOnly;
|
|
23
|
+
|
|
24
|
+
export const propertyFromNode = (node: RawNode, context: ParseContext): GirProperty => ({
|
|
25
|
+
name: nameAttr(node),
|
|
26
|
+
doc: docOf(node),
|
|
27
|
+
type: typeRefFromNode(node, context),
|
|
28
|
+
readable: attrBool(node, "readable", true),
|
|
33
29
|
writable: attrBool(node, "writable"),
|
|
34
30
|
construct: attrBool(node, "construct"),
|
|
35
31
|
constructOnly: attrBool(node, "construct-only"),
|
|
36
|
-
|
|
32
|
+
introspectable: attrBool(node, "introspectable", true),
|
|
33
|
+
transferOwnership: transferOwnership(node),
|
|
37
34
|
getter: attr(node, "getter"),
|
|
38
35
|
setter: attr(node, "setter"),
|
|
36
|
+
defaultValue: attr(node, "default-value"),
|
|
39
37
|
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { fieldFromNode, type GirField } from "./field.js";
|
|
2
|
+
import { functionFromNode, type GirFunction } from "./function.js";
|
|
3
|
+
import { attr, attrBool, childrenOf, docOf, GIR_CONSTRUCTOR_TAG, type RawNode } from "./parse.js";
|
|
4
|
+
import type { ParseContext } from "./type-id.js";
|
|
5
|
+
|
|
6
|
+
export type GirRecord = {
|
|
7
|
+
isVtable: boolean;
|
|
8
|
+
name: string;
|
|
9
|
+
doc: string | undefined;
|
|
10
|
+
cType: string | undefined;
|
|
11
|
+
glibTypeName: string | undefined;
|
|
12
|
+
glibGetType: string | undefined;
|
|
13
|
+
glibRefFunc: string | undefined;
|
|
14
|
+
glibUnrefFunc: string | undefined;
|
|
15
|
+
copyFunc: string | undefined;
|
|
16
|
+
freeFunc: string | undefined;
|
|
17
|
+
disguised: boolean;
|
|
18
|
+
opaque: boolean;
|
|
19
|
+
introspectable: boolean;
|
|
20
|
+
fields: GirField[];
|
|
21
|
+
methods: GirFunction[];
|
|
22
|
+
constructors: GirFunction[];
|
|
23
|
+
functions: GirFunction[];
|
|
24
|
+
isUnion: boolean;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const recordFromNode = (
|
|
28
|
+
node: RawNode,
|
|
29
|
+
isVtable: boolean,
|
|
30
|
+
isUnion: boolean,
|
|
31
|
+
context: ParseContext,
|
|
32
|
+
): GirRecord => ({
|
|
33
|
+
isVtable,
|
|
34
|
+
name: attr(node, "name") ?? attr(node, "glib:name") ?? "",
|
|
35
|
+
doc: docOf(node),
|
|
36
|
+
cType: attr(node, "c:type"),
|
|
37
|
+
glibTypeName: attr(node, "glib:type-name"),
|
|
38
|
+
glibGetType: attr(node, "glib:get-type"),
|
|
39
|
+
glibRefFunc: attr(node, "glib:ref-func"),
|
|
40
|
+
glibUnrefFunc: attr(node, "glib:unref-func"),
|
|
41
|
+
copyFunc: attr(node, "copy-function"),
|
|
42
|
+
freeFunc: attr(node, "free-function"),
|
|
43
|
+
disguised: attrBool(node, "disguised"),
|
|
44
|
+
opaque: attrBool(node, "opaque"),
|
|
45
|
+
introspectable: attrBool(node, "introspectable", true),
|
|
46
|
+
fields: childrenOf(node, "field").map((field) => fieldFromNode(field, context)),
|
|
47
|
+
methods: childrenOf(node, "method").map((method) => functionFromNode(method, context)),
|
|
48
|
+
constructors: childrenOf(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, context)),
|
|
49
|
+
functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, context)),
|
|
50
|
+
isUnion,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export const isVtableRecord = (node: RawNode): boolean => attr(node, "glib:is-gtype-struct-for") !== undefined;
|
package/src/gir/size.ts
CHANGED
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import { PRIMITIVE_SIZE, type PrimitiveCategory } from "./primitives.js";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Size and alignment of a single field as it appears in a C struct laid out
|
|
5
|
-
* according to the x86-64 ABI.
|
|
6
|
-
*/
|
|
7
3
|
export type FieldLayout = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/** Required alignment in bytes; storage offset rounds up to a multiple of this. */
|
|
11
|
-
readonly align: number;
|
|
4
|
+
size: number;
|
|
5
|
+
align: number;
|
|
12
6
|
};
|
|
13
7
|
|
|
14
|
-
/**
|
|
15
|
-
* Returns the `{ size, align }` pair for a primitive category.
|
|
16
|
-
*
|
|
17
|
-
* Pointers and pointer-sized integers (the `pointer` and 64-bit categories)
|
|
18
|
-
* report 8/8. Smaller integers and floats report their natural width.
|
|
19
|
-
*
|
|
20
|
-
* @param category - The primitive category
|
|
21
|
-
*/
|
|
22
8
|
export const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
|
|
23
9
|
const size = PRIMITIVE_SIZE[category];
|
|
24
10
|
return { size, align: size === 0 ? 1 : size };
|
|
@@ -30,54 +16,21 @@ const roundUp = (value: number, multiple: number): number => {
|
|
|
30
16
|
return remainder === 0 ? value : value + (multiple - remainder);
|
|
31
17
|
};
|
|
32
18
|
|
|
33
|
-
/**
|
|
34
|
-
* Layout slot for a single field that may participate in bitfield packing.
|
|
35
|
-
*
|
|
36
|
-
* `byteOffset` is always the offset of the underlying storage word; for
|
|
37
|
-
* non-bitfield fields it is the field's offset directly, and for bitfield
|
|
38
|
-
* members it is the start of the shared storage unit. `bitOffset` and
|
|
39
|
-
* `bitWidth` are populated only for bitfield members.
|
|
40
|
-
*/
|
|
41
19
|
export type FieldSlot = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
readonly bitOffset: number | undefined;
|
|
46
|
-
/** Width in bits, for bitfield members. */
|
|
47
|
-
readonly bitWidth: number | undefined;
|
|
20
|
+
byteOffset: number;
|
|
21
|
+
bitOffset: number | undefined;
|
|
22
|
+
bitWidth: number | undefined;
|
|
48
23
|
};
|
|
49
24
|
|
|
50
|
-
/**
|
|
51
|
-
* Describes a field for the purposes of layout computation.
|
|
52
|
-
*/
|
|
53
25
|
export type FieldLayoutInput = {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/** When set, the field is a bitfield member with this many bits. */
|
|
57
|
-
readonly bits: number | undefined;
|
|
26
|
+
layout: FieldLayout;
|
|
27
|
+
bits: number | undefined;
|
|
58
28
|
};
|
|
59
29
|
|
|
60
|
-
/**
|
|
61
|
-
* Computes per-field byte offsets for a record, grouping consecutive
|
|
62
|
-
* bitfield members of compatible storage widths into a shared storage
|
|
63
|
-
* word.
|
|
64
|
-
*
|
|
65
|
-
* Mirrors the GCC/Itanium ABI rules for C bitfield packing in a
|
|
66
|
-
* single-storage-word model: a new storage word is opened when the
|
|
67
|
-
* underlying type's size changes, when the new field is not a bitfield,
|
|
68
|
-
* or when adding the bits would exceed the word's bit count.
|
|
69
|
-
*
|
|
70
|
-
* A union (`isUnion`) overlays every member at byte offset 0; its size is the
|
|
71
|
-
* largest member rounded up to the strongest member alignment.
|
|
72
|
-
*
|
|
73
|
-
* @param fields - Ordered field layouts and bit widths
|
|
74
|
-
* @param isUnion - Whether the fields are union members (overlaid at offset 0)
|
|
75
|
-
* @returns Parallel slot array and the total record size in bytes
|
|
76
|
-
*/
|
|
77
30
|
export const computeFieldSlots = (
|
|
78
|
-
fields:
|
|
31
|
+
fields: FieldLayoutInput[],
|
|
79
32
|
isUnion = false,
|
|
80
|
-
): {
|
|
33
|
+
): { slots: FieldSlot[]; size: number } => {
|
|
81
34
|
if (isUnion) {
|
|
82
35
|
let maxSize = 0;
|
|
83
36
|
let maxAlign = 1;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { RawNode } from "./parse.js";
|
|
2
|
+
import type { PrimitiveCategory } from "./primitives.js";
|
|
3
|
+
|
|
4
|
+
export type TypeId = { nsId: number; id: number };
|
|
5
|
+
|
|
6
|
+
export const LIST_FLAVOR_BY_NAME = {
|
|
7
|
+
"GLib.List": "glist",
|
|
8
|
+
"GLib.SList": "gslist",
|
|
9
|
+
"GLib.PtrArray": "gptrarray",
|
|
10
|
+
"GLib.Array": "garray",
|
|
11
|
+
"GLib.ByteArray": "gbytearray",
|
|
12
|
+
} as const;
|
|
13
|
+
|
|
14
|
+
export type ListFlavor = (typeof LIST_FLAVOR_BY_NAME)[keyof typeof LIST_FLAVOR_BY_NAME];
|
|
15
|
+
|
|
16
|
+
type PrimitiveType = { kind: "primitive"; category: PrimitiveCategory };
|
|
17
|
+
|
|
18
|
+
type VarargsType = { kind: "varargs" };
|
|
19
|
+
|
|
20
|
+
export type CArrayType = {
|
|
21
|
+
kind: "carray";
|
|
22
|
+
element: TypeId;
|
|
23
|
+
elementCType: string | undefined;
|
|
24
|
+
lengthParameterIndex: number | undefined;
|
|
25
|
+
fixedSize: number | undefined;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type ListType = {
|
|
29
|
+
kind: "list";
|
|
30
|
+
flavor: ListFlavor;
|
|
31
|
+
element: TypeId;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type HashTableType = {
|
|
35
|
+
kind: "hashtable";
|
|
36
|
+
key: TypeId;
|
|
37
|
+
value: TypeId;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type StructuralType = PrimitiveType | VarargsType | CArrayType | ListType | HashTableType;
|
|
41
|
+
|
|
42
|
+
export type ParseContext = {
|
|
43
|
+
nsId: number;
|
|
44
|
+
findType(name: string): TypeId;
|
|
45
|
+
addPrimitive(category: PrimitiveCategory): TypeId;
|
|
46
|
+
addVarargs(): TypeId;
|
|
47
|
+
addContainer(type: CArrayType | ListType | HashTableType): TypeId;
|
|
48
|
+
addAnonymousCallback(node: RawNode): TypeId;
|
|
49
|
+
};
|