@gtkx/codegen 0.21.0 → 1.0.0-rc.2
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 +25 -0
- package/dist/analysis/descriptor-render.d.ts.map +1 -0
- package/dist/analysis/descriptor-render.js +420 -0
- package/dist/analysis/descriptor-render.js.map +1 -0
- package/dist/analysis/descriptor.d.ts +62 -0
- package/dist/analysis/descriptor.d.ts.map +1 -0
- package/dist/analysis/descriptor.js +127 -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 +248 -0
- package/dist/analysis/inheritance.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +27 -0
- package/dist/analysis/param-structure.d.ts.map +1 -0
- package/dist/analysis/param-structure.js +158 -0
- package/dist/analysis/param-structure.js.map +1 -0
- package/dist/analysis/ts-type.d.ts +20 -0
- package/dist/analysis/ts-type.d.ts.map +1 -0
- package/dist/analysis/ts-type.js +111 -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 +130 -0
- package/dist/compile.js.map +1 -0
- package/dist/docs/api-reference.d.ts +67 -0
- package/dist/docs/api-reference.d.ts.map +1 -0
- package/dist/docs/api-reference.js +372 -0
- package/dist/docs/api-reference.js.map +1 -0
- package/dist/docs/element-page.d.ts +12 -0
- package/dist/docs/element-page.d.ts.map +1 -0
- package/dist/docs/element-page.js +156 -0
- package/dist/docs/element-page.js.map +1 -0
- package/dist/docs/pipeline.d.ts +26 -0
- package/dist/docs/pipeline.d.ts.map +1 -0
- package/dist/docs/pipeline.js +156 -0
- package/dist/docs/pipeline.js.map +1 -0
- package/dist/docs/render.d.ts +34 -0
- package/dist/docs/render.d.ts.map +1 -0
- package/dist/docs/render.js +143 -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 +380 -0
- package/dist/docs/symbol-page.js.map +1 -0
- package/dist/fingerprint.d.ts +31 -28
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +84 -19
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +13 -0
- package/dist/gi.d.ts.map +1 -0
- package/dist/gi.js +21 -0
- package/dist/gi.js.map +1 -0
- package/dist/gir/ancestry.d.ts +10 -0
- package/dist/gir/ancestry.d.ts.map +1 -0
- package/dist/gir/ancestry.js +26 -0
- package/dist/gir/ancestry.js.map +1 -0
- package/dist/gir/callback.d.ts +8 -14
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +16 -16
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +25 -44
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +16 -26
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +16 -34
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +10 -16
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +16 -24
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +35 -18
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -43
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +26 -23
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +3 -0
- package/dist/gir/gir-path.d.ts.map +1 -0
- package/dist/gir/gir-path.js +57 -0
- package/dist/gir/gir-path.js.map +1 -0
- package/dist/gir/libraries.d.ts +5 -0
- package/dist/gir/libraries.d.ts.map +1 -0
- package/dist/gir/libraries.js +74 -0
- package/dist/gir/libraries.js.map +1 -0
- package/dist/gir/library.d.ts +43 -0
- package/dist/gir/library.d.ts.map +1 -0
- package/dist/gir/library.js +242 -0
- package/dist/gir/library.js.map +1 -0
- package/dist/gir/namespace.d.ts +40 -54
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +51 -40
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/nullable-overrides.d.ts +3 -0
- package/dist/gir/nullable-overrides.d.ts.map +1 -0
- package/dist/gir/nullable-overrides.js +5 -0
- package/dist/gir/nullable-overrides.js.map +1 -0
- package/dist/gir/parameter.d.ts +34 -76
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +47 -59
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +12 -77
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +65 -103
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +5 -35
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js +21 -36
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +18 -26
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +16 -12
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +28 -0
- package/dist/gir/record.d.ts.map +1 -0
- package/dist/gir/record.js +26 -0
- package/dist/gir/record.js.map +1 -0
- package/dist/gir/size.d.ts +15 -61
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +49 -72
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +51 -0
- package/dist/gir/type-id.d.ts.map +1 -0
- package/dist/gir/type-id.js +12 -0
- package/dist/gir/type-id.js.map +1 -0
- package/dist/gir/type-ref.d.ts +4 -77
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +58 -77
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +34 -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 +7 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/jsx.d.ts +26 -0
- package/dist/jsx.d.ts.map +1 -0
- package/dist/jsx.js +40 -0
- package/dist/jsx.js.map +1 -0
- package/dist/khronos/args.d.ts +30 -0
- package/dist/khronos/args.d.ts.map +1 -0
- package/dist/khronos/args.js +171 -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 +72 -0
- package/dist/khronos/jsdoc.js.map +1 -0
- package/dist/khronos/model.d.ts +38 -0
- package/dist/khronos/model.d.ts.map +1 -0
- package/dist/khronos/model.js +167 -0
- package/dist/khronos/model.js.map +1 -0
- package/dist/khronos/modules.d.ts +12 -0
- package/dist/khronos/modules.d.ts.map +1 -0
- package/dist/khronos/modules.js +73 -0
- package/dist/khronos/modules.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +11 -0
- package/dist/khronos/param-pair.d.ts.map +1 -0
- package/dist/khronos/param-pair.js +6 -0
- package/dist/khronos/param-pair.js.map +1 -0
- package/dist/khronos/parse.d.ts +8 -0
- package/dist/khronos/parse.d.ts.map +1 -0
- package/dist/khronos/parse.js +62 -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 +223 -0
- package/dist/khronos/pipeline.js.map +1 -0
- package/dist/khronos/plan.d.ts +81 -0
- package/dist/khronos/plan.d.ts.map +1 -0
- package/dist/khronos/plan.js +200 -0
- package/dist/khronos/plan.js.map +1 -0
- package/dist/khronos/render.d.ts +17 -0
- package/dist/khronos/render.d.ts.map +1 -0
- package/dist/khronos/render.js +205 -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 +56 -0
- package/dist/khronos/select.js.map +1 -0
- package/dist/react/element-config.d.ts +17 -0
- package/dist/react/element-config.d.ts.map +1 -0
- package/dist/react/element-config.js +61 -0
- package/dist/react/element-config.js.map +1 -0
- package/dist/runner.d.ts +38 -49
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +81 -54
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +11 -0
- package/dist/store/compile-store.d.ts.map +1 -0
- package/dist/store/compile-store.js +40 -0
- package/dist/store/compile-store.js.map +1 -0
- package/dist/store/gi/async.d.ts +5 -0
- package/dist/store/gi/async.d.ts.map +1 -0
- package/dist/store/gi/async.js +45 -0
- package/dist/store/gi/async.js.map +1 -0
- package/dist/store/gi/callables.d.ts +42 -0
- package/dist/store/gi/callables.d.ts.map +1 -0
- package/dist/store/gi/callables.js +264 -0
- package/dist/store/gi/callables.js.map +1 -0
- package/dist/store/gi/callback.d.ts +5 -0
- package/dist/store/gi/callback.d.ts.map +1 -0
- package/dist/store/gi/callback.js +17 -0
- package/dist/store/gi/callback.js.map +1 -0
- package/dist/store/gi/class-struct-record.d.ts +10 -0
- package/dist/store/gi/class-struct-record.d.ts.map +1 -0
- package/dist/store/gi/class-struct-record.js +52 -0
- package/dist/store/gi/class-struct-record.js.map +1 -0
- package/dist/store/gi/class.d.ts +5 -0
- package/dist/store/gi/class.d.ts.map +1 -0
- package/dist/store/gi/class.js +208 -0
- package/dist/store/gi/class.js.map +1 -0
- package/dist/store/gi/companion.d.ts +5 -0
- package/dist/store/gi/companion.d.ts.map +1 -0
- package/dist/store/gi/companion.js +16 -0
- package/dist/store/gi/companion.js.map +1 -0
- package/dist/store/gi/constant.d.ts +6 -0
- package/dist/store/gi/constant.d.ts.map +1 -0
- package/dist/store/gi/constant.js +35 -0
- package/dist/store/gi/constant.js.map +1 -0
- package/dist/store/gi/constructor-props.d.ts +6 -0
- package/dist/store/gi/constructor-props.d.ts.map +1 -0
- package/dist/store/gi/constructor-props.js +71 -0
- package/dist/store/gi/constructor-props.js.map +1 -0
- package/dist/store/gi/enum.d.ts +6 -0
- package/dist/store/gi/enum.d.ts.map +1 -0
- package/dist/store/gi/enum.js +41 -0
- package/dist/store/gi/enum.js.map +1 -0
- package/dist/store/gi/function.d.ts +9 -0
- package/dist/store/gi/function.d.ts.map +1 -0
- package/dist/store/gi/function.js +114 -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 +24 -0
- package/dist/store/gi/gtype-binding.js.map +1 -0
- package/dist/store/gi/interface.d.ts +5 -0
- package/dist/store/gi/interface.d.ts.map +1 -0
- package/dist/store/gi/interface.js +117 -0
- package/dist/store/gi/interface.js.map +1 -0
- package/dist/store/gi/item-comparators.d.ts +7 -0
- package/dist/store/gi/item-comparators.d.ts.map +1 -0
- package/dist/store/gi/item-comparators.js +88 -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 +336 -0
- package/dist/store/gi/method.js.map +1 -0
- package/dist/store/gi/param-marshal.d.ts +10 -0
- package/dist/store/gi/param-marshal.d.ts.map +1 -0
- package/dist/store/gi/param-marshal.js +50 -0
- package/dist/store/gi/param-marshal.js.map +1 -0
- package/dist/store/gi/pipeline.d.ts +5 -0
- package/dist/store/gi/pipeline.d.ts.map +1 -0
- package/dist/store/gi/pipeline.js +95 -0
- package/dist/store/gi/pipeline.js.map +1 -0
- package/dist/store/gi/properties.d.ts +6 -0
- package/dist/store/gi/properties.d.ts.map +1 -0
- package/dist/store/gi/properties.js +32 -0
- package/dist/store/gi/properties.js.map +1 -0
- package/dist/store/gi/property-accessor.d.ts +27 -0
- package/dist/store/gi/property-accessor.d.ts.map +1 -0
- package/dist/store/gi/property-accessor.js +158 -0
- package/dist/store/gi/property-accessor.js.map +1 -0
- package/dist/store/gi/record-constructor.d.ts +6 -0
- package/dist/store/gi/record-constructor.d.ts.map +1 -0
- package/dist/store/gi/record-constructor.js +76 -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 +360 -0
- package/dist/store/gi/record-field-accessor.js.map +1 -0
- package/dist/store/gi/record-layout.d.ts +15 -0
- package/dist/store/gi/record-layout.d.ts.map +1 -0
- package/dist/store/gi/record-layout.js +132 -0
- package/dist/store/gi/record-layout.js.map +1 -0
- package/dist/store/gi/record.d.ts +5 -0
- package/dist/store/gi/record.d.ts.map +1 -0
- package/dist/store/gi/record.js +65 -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 +21 -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 +67 -0
- package/dist/store/gi/return-wrap.js.map +1 -0
- package/dist/store/gi/runtime-override.d.ts +4 -0
- package/dist/store/gi/runtime-override.d.ts.map +1 -0
- package/dist/store/gi/runtime-override.js +32 -0
- package/dist/store/gi/runtime-override.js.map +1 -0
- package/dist/store/gi/signal.d.ts +6 -0
- package/dist/store/gi/signal.d.ts.map +1 -0
- package/dist/store/gi/signal.js +280 -0
- package/dist/store/gi/signal.js.map +1 -0
- package/dist/store/gi/vtable.d.ts +5 -0
- package/dist/store/gi/vtable.d.ts.map +1 -0
- package/dist/store/gi/vtable.js +108 -0
- package/dist/store/gi/vtable.js.map +1 -0
- package/dist/store/gi-store.d.ts +10 -0
- package/dist/store/gi-store.d.ts.map +1 -0
- package/dist/store/gi-store.js +59 -0
- package/dist/store/gi-store.js.map +1 -0
- package/dist/store/jsx/element-components.d.ts +23 -0
- package/dist/store/jsx/element-components.d.ts.map +1 -0
- package/dist/store/jsx/element-components.js +86 -0
- package/dist/store/jsx/element-components.js.map +1 -0
- package/dist/store/jsx/element-prop-imports.d.ts +17 -0
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
- package/dist/store/jsx/element-prop-imports.js +15 -0
- package/dist/store/jsx/element-prop-imports.js.map +1 -0
- package/dist/store/jsx/element-prop-types.d.ts +10 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
- package/dist/store/jsx/element-prop-types.js +41 -0
- package/dist/store/jsx/element-prop-types.js.map +1 -0
- package/dist/store/jsx/gir-index.d.ts +16 -0
- package/dist/store/jsx/gir-index.d.ts.map +1 -0
- package/dist/store/jsx/gir-index.js +33 -0
- package/dist/store/jsx/gir-index.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
- package/dist/store/jsx/intrinsic-elements.js +128 -0
- package/dist/store/jsx/intrinsic-elements.js.map +1 -0
- package/dist/store/jsx/jsx.d.ts +16 -0
- package/dist/store/jsx/jsx.d.ts.map +1 -0
- package/dist/store/jsx/jsx.js +242 -0
- package/dist/store/jsx/jsx.js.map +1 -0
- package/dist/store/jsx/metadata.d.ts +4 -0
- package/dist/store/jsx/metadata.d.ts.map +1 -0
- package/dist/store/jsx/metadata.js +253 -0
- package/dist/store/jsx/metadata.js.map +1 -0
- package/dist/store/jsx/pipeline.d.ts +21 -0
- package/dist/store/jsx/pipeline.d.ts.map +1 -0
- package/dist/store/jsx/pipeline.js +81 -0
- package/dist/store/jsx/pipeline.js.map +1 -0
- package/dist/store/jsx/props.d.ts +33 -0
- package/dist/store/jsx/props.d.ts.map +1 -0
- package/dist/store/jsx/props.js +158 -0
- package/dist/store/jsx/props.js.map +1 -0
- package/dist/store/jsx-store.d.ts +7 -0
- package/dist/store/jsx-store.d.ts.map +1 -0
- package/dist/store/jsx-store.js +26 -0
- package/dist/store/jsx-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +43 -0
- package/dist/store/store-fs.d.ts.map +1 -0
- package/dist/store/store-fs.js +73 -0
- package/dist/store/store-fs.js.map +1 -0
- package/dist/writer/context.d.ts +17 -0
- package/dist/writer/context.d.ts.map +1 -0
- package/dist/writer/context.js +50 -0
- package/dist/writer/context.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -0
- package/dist/writer/doc.d.ts.map +1 -0
- package/dist/writer/doc.js +18 -0
- package/dist/writer/doc.js.map +1 -0
- package/dist/writer/emit.d.ts +9 -0
- package/dist/writer/emit.d.ts.map +1 -0
- package/dist/writer/emit.js +24 -0
- package/dist/writer/emit.js.map +1 -0
- package/dist/writer/gtk-doc.d.ts +3 -0
- package/dist/writer/gtk-doc.d.ts.map +1 -0
- package/dist/writer/gtk-doc.js +78 -0
- package/dist/writer/gtk-doc.js.map +1 -0
- package/dist/writer/imports.d.ts +12 -0
- package/dist/writer/imports.d.ts.map +1 -0
- package/dist/writer/imports.js +61 -0
- package/dist/writer/imports.js.map +1 -0
- package/dist/writer/module.d.ts +16 -0
- package/dist/writer/module.d.ts.map +1 -0
- package/dist/writer/module.js +53 -0
- package/dist/writer/module.js.map +1 -0
- package/dist/xml.d.ts +4 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +10 -0
- package/dist/xml.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/package.json +21 -15
- package/src/analysis/descriptor-render.ts +723 -0
- package/src/analysis/descriptor.ts +300 -0
- package/src/analysis/inheritance.ts +430 -0
- package/src/analysis/param-structure.ts +258 -0
- package/src/analysis/ts-type.ts +174 -0
- package/src/compile.ts +179 -0
- package/src/docs/api-reference.ts +557 -0
- package/src/docs/element-page.ts +281 -0
- package/src/docs/pipeline.ts +241 -0
- package/src/docs/render.ts +255 -0
- package/src/docs/symbol-page.ts +589 -0
- package/src/fingerprint.ts +144 -35
- package/src/gi.ts +26 -0
- package/src/gir/ancestry.ts +53 -0
- package/src/gir/callback.ts +22 -24
- package/src/gir/class.ts +39 -61
- package/src/gir/enum.ts +25 -41
- package/src/gir/field.ts +51 -37
- package/src/gir/function.ts +44 -59
- package/src/gir/gir-path.ts +73 -0
- package/src/gir/libraries.ts +102 -0
- package/src/gir/library.ts +351 -0
- package/src/gir/namespace.ts +109 -88
- package/src/gir/nullable-overrides.ts +5 -0
- package/src/gir/parameter.ts +111 -102
- package/src/gir/parse.ts +124 -121
- package/src/gir/primitives.ts +43 -63
- package/src/gir/property.ts +33 -33
- package/src/gir/record.ts +55 -0
- package/src/gir/size.ts +93 -107
- package/src/gir/type-id.ts +64 -0
- package/src/gir/type-ref.ts +77 -146
- package/src/gir/type.ts +18 -0
- package/src/index.ts +27 -15
- package/src/jsx.ts +70 -0
- package/src/khronos/args.ts +271 -0
- package/src/khronos/jsdoc.ts +114 -0
- package/src/khronos/model.ts +267 -0
- package/src/khronos/modules.ts +115 -0
- package/src/khronos/param-pair.ts +14 -0
- package/src/khronos/parse.ts +86 -0
- package/src/khronos/pipeline.ts +337 -0
- package/src/khronos/plan.ts +340 -0
- package/src/khronos/registry/LICENSE +202 -0
- package/src/khronos/registry/gl.xml +47748 -0
- package/src/khronos/render.ts +330 -0
- package/src/khronos/select.ts +97 -0
- package/src/react/element-config.ts +91 -0
- package/src/runner.ts +153 -80
- package/src/store/compile-store.ts +55 -0
- package/src/store/gi/async.ts +69 -0
- package/src/store/gi/callables.ts +518 -0
- package/src/store/gi/callback.ts +24 -0
- package/src/store/gi/class-struct-record.ts +72 -0
- package/src/store/gi/class.ts +334 -0
- package/src/store/gi/companion.ts +22 -0
- package/src/store/gi/constant.ts +58 -0
- package/src/store/gi/constructor-props.ts +108 -0
- package/src/store/gi/enum.ts +64 -0
- package/src/store/gi/function.ts +173 -0
- package/src/store/gi/gtype-binding.ts +46 -0
- package/src/store/gi/interface.ts +222 -0
- package/src/store/gi/item-comparators.ts +138 -0
- package/src/store/gi/method.ts +634 -0
- package/src/store/gi/param-marshal.ts +71 -0
- package/src/store/gi/pipeline.ts +135 -0
- package/src/store/gi/properties.ts +50 -0
- package/src/store/gi/property-accessor.ts +302 -0
- package/src/store/gi/record-constructor.ts +119 -0
- package/src/store/gi/record-field-accessor.ts +607 -0
- package/src/store/gi/record-layout.ts +221 -0
- package/src/store/gi/record.ts +89 -0
- package/src/store/gi/registration.ts +44 -0
- package/src/store/gi/return-wrap.ts +100 -0
- package/src/store/gi/runtime-override.ts +46 -0
- package/src/store/gi/signal.ts +450 -0
- package/src/store/gi/vtable.ts +175 -0
- package/src/store/gi-store.ts +92 -0
- package/src/store/jsx/element-components.ts +152 -0
- package/src/store/jsx/element-prop-imports.ts +24 -0
- package/src/store/jsx/element-prop-types.ts +59 -0
- package/src/store/jsx/gir-index.ts +62 -0
- package/src/store/jsx/intrinsic-elements.ts +262 -0
- package/src/store/jsx/jsx.ts +408 -0
- package/src/store/jsx/metadata.ts +385 -0
- package/src/store/jsx/pipeline.ts +145 -0
- package/src/store/jsx/props.ts +274 -0
- package/src/store/jsx-store.ts +39 -0
- package/src/store/store-fs.ts +128 -0
- package/src/writer/context.ts +67 -0
- package/src/writer/doc.ts +25 -0
- package/src/writer/emit.ts +35 -0
- package/src/writer/gtk-doc.ts +101 -0
- package/src/writer/imports.ts +94 -0
- package/src/writer/module.ts +69 -0
- package/src/xml.ts +12 -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 +0 -44
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../../src/analysis/inheritance.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, lowerFirst, pascalCase, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { ancestorChain, type ResolvedAncestor, resolveInterface } from \"../gir/ancestry.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { resolveAccessorType } from \"../store/gi/property-accessor.js\";\nimport { inputParameters } from \"./param-structure.js\";\nimport { renderTsType } from \"./ts-type.js\";\n\ntype AncestryContext = {\n library: Library;\n namespace: { name: string };\n};\n\ntype OwnedProperty = { owner: GirClass; property: GirProperty };\ntype MethodSignature = { returnType: string; arity: number };\n\ntype InheritedMethod = {\n method: GirFunction;\n namespaceName: string;\n};\n\ntype InheritedMethods = {\n returnTypes: Map<string, string>;\n definitions: Map<string, InheritedMethod>;\n};\n\ntype InheritedMatch = {\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n};\n\nconst RESERVED_SIGNAL_MEMBERS = new Set([\n \"connect\",\n \"disconnect\",\n \"emit\",\n \"on\",\n \"once\",\n \"off\",\n \"addEventListener\",\n \"removeEventListener\",\n]);\n\nconst resolveImplementedInterface = (\n context: AncestryContext,\n name: string,\n defaultNamespace: string = context.namespace.name,\n): ResolvedAncestor | undefined => resolveInterface(context.library, defaultNamespace, name);\n\nconst resolveDirectInterfaces = (\n context: AncestryContext,\n klass: GirClass,\n defaultNamespace: string,\n): ResolvedAncestor[] => {\n const interfaces: ResolvedAncestor[] = [];\n\n for (const implementName of klass.implements) {\n const iface = resolveImplementedInterface(context, implementName, defaultNamespace);\n\n if (iface !== undefined) {\n interfaces.push(iface);\n }\n }\n\n return interfaces;\n};\n\nconst resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {\n const resolved = context.library.resolveType(context.namespace.name, name);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n if (resolved.kind !== \"interface\" && resolved.kind !== \"class\") {\n return undefined;\n }\n\n return context.qualify(resolved.namespace.name, pascalCase(resolved.value.name));\n};\n\nconst forEachAncestor = (\n context: AncestryContext,\n klass: GirClass,\n visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void,\n shouldStop: (ancestor: GirClass) => boolean = () => false,\n): void => {\n let isFirst = true;\n\n for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {\n if (isFirst) {\n isFirst = false;\n continue;\n }\n\n if (shouldStop(ancestor.klass)) {\n break;\n }\n\n visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));\n }\n};\n\nconst visitInterfaceProperties = (\n interfaces: ResolvedAncestor[],\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n for (const iface of interfaces) {\n for (const property of iface.klass.properties) {\n visit(iface.klass, property);\n }\n }\n};\n\nconst forEachInheritedProperty = (\n context: ModuleContext,\n klass: GirClass,\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n for (const property of ancestor.klass.properties) {\n visit(ancestor.klass, property);\n }\n\n visitInterfaceProperties(interfaces, visit);\n });\n};\n\nconst collectSeenPropertyNames = (context: ModuleContext, klass: GirClass): Set<string> => {\n const seen: Set<string> = new Set();\n\n for (const property of klass.properties) {\n seen.add(toCamelIdentifier(property.name));\n }\n\n forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));\n\n return seen;\n};\n\nconst collectNewInterfaceProperties = (iface: ResolvedAncestor, seen: Set<string>): OwnedProperty[] => {\n const result: OwnedProperty[] = [];\n\n for (const property of iface.klass.properties) {\n const name = toCamelIdentifier(property.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n result.push({ owner: iface.klass, property });\n }\n\n return result;\n};\n\nconst collectInterfaceProperties = (context: ModuleContext, klass: GirClass): OwnedProperty[] => {\n const seen = collectSeenPropertyNames(context, klass);\n const result: OwnedProperty[] = [];\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n result.push(...collectNewInterfaceProperties(iface, seen));\n }\n\n return result;\n};\n\nconst recordAncestorSignatures = (\n context: ModuleContext,\n klass: GirClass,\n signatures: Map<string, MethodSignature>,\n): void => {\n for (const method of klass.methods) {\n const name = camelCase(method.name);\n\n if (!method.introspectable || signatures.has(name)) {\n continue;\n }\n\n signatures.set(name, {\n returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),\n arity: inputParameters(context.library, method).length,\n });\n }\n};\n\nconst ancestorClassMethodSignatures = (context: ModuleContext, klass: GirClass): Map<string, MethodSignature> => {\n const signatures: Map<string, MethodSignature> = new Map();\n\n forEachAncestor(context, klass, (ancestor) => {\n recordAncestorSignatures(context, ancestor.klass, signatures);\n });\n\n return signatures;\n};\n\nconst mergeOmissionName = (\n context: ModuleContext,\n method: GirFunction,\n ancestors: Map<string, MethodSignature>,\n): string | undefined => {\n if (!method.introspectable) {\n return undefined;\n }\n\n const name = camelCase(method.name);\n const ancestor = ancestors.get(name);\n\n if (ancestor === undefined) {\n return undefined;\n }\n\n const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);\n const arity = inputParameters(context.library, method).length;\n\n return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;\n};\n\nconst collectInterfaceMergeOmissions = (\n context: ModuleContext,\n klass: GirClass,\n iface: { klass: GirClass; namespaceName: string },\n): string[] => {\n const ancestors = ancestorClassMethodSignatures(context, klass);\n const omissions: string[] = [];\n\n for (const method of iface.klass.methods) {\n const name = mergeOmissionName(context, method, ancestors);\n\n if (name !== undefined) {\n omissions.push(name);\n }\n }\n\n return omissions;\n};\n\nconst collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {\n const types: Map<string, string> = new Map();\n\n const record = (owner: GirClass, property: GirProperty): void => {\n const jsName = toCamelIdentifier(property.name);\n\n if (types.has(jsName)) {\n return;\n }\n\n const tsType = resolveAccessorType(context, property, owner.methods);\n\n if (tsType !== undefined) {\n types.set(jsName, tsType);\n }\n };\n\n forEachInheritedProperty(context, klass, record);\n\n return types;\n};\n\nconst collectInheritedMethods = (context: ModuleContext, klass: GirClass): InheritedMethods => {\n const accumulator: InheritedMethods = {\n returnTypes: new Map<string, string>(),\n definitions: new Map<string, InheritedMethod>(),\n };\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n absorbInheritedMethods(context, ancestor, accumulator);\n\n for (const iface of interfaces) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n });\n\n return accumulator;\n};\n\nconst absorbInheritedMethods = (\n context: ModuleContext,\n resolved: { klass: GirClass; namespaceName: string },\n accumulator: InheritedMethods,\n): void => {\n const { returnTypes, definitions } = accumulator;\n\n for (const method of resolved.klass.methods) {\n if (!method.introspectable) {\n continue;\n }\n\n const name = camelCase(method.name);\n\n if (returnTypes.has(name)) {\n continue;\n }\n\n definitions.set(name, { method, namespaceName: resolved.namespaceName });\n returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));\n }\n};\n\nconst inheritedMatch = (inherited: InheritedMethods, name: string): InheritedMatch | undefined => {\n const inheritedReturn = inherited.returnTypes.get(name);\n const inheritedMethod = inherited.definitions.get(name);\n\n if (inheritedReturn === undefined || inheritedMethod === undefined) {\n return undefined;\n }\n\n return { inheritedReturn, inheritedMethod };\n};\n\nconst hasMethodConflict = (options: {\n context: ModuleContext;\n callable: GirFunction;\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n}): boolean => {\n const { context, callable, inheritedReturn, inheritedMethod } = options;\n const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);\n\n return (\n inheritedReturn !== ownReturn ||\n hasParameterEnumConflict(context, callable, inheritedMethod) ||\n inputParameters(context.library, callable).length !==\n inputParameters(context.library, inheritedMethod.method).length\n );\n};\n\nconst conflictRename = (\n context: ModuleContext,\n callable: GirFunction,\n inherited: InheritedMethods,\n className: string,\n): string | undefined => {\n if (!callable.introspectable) {\n return undefined;\n }\n\n const name = methodExportName(callable);\n\n if (RESERVED_SIGNAL_MEMBERS.has(name)) {\n return conflictingMethodName(className, callable.name);\n }\n\n const match = inheritedMatch(inherited, name);\n\n if (match === undefined) {\n return undefined;\n }\n\n const hasConflict = hasMethodConflict({ context, callable, ...match });\n\n return hasConflict ? conflictingMethodName(className, callable.name) : undefined;\n};\n\nconst conflictingMethodName = (className: string, methodName: string): string =>\n `${lowerFirst(className)}${pascalCase(methodName)}`;\n\nconst reservedSignalMemberRename = (className: string, callable: GirFunction): string | undefined =>\n RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))\n ? conflictingMethodName(className, callable.name)\n : undefined;\n\nconst hasEnumConflict = (\n context: ModuleContext,\n ownRef: TypeId | undefined,\n inheritedRef: TypeId | undefined,\n): boolean => {\n const ownEnum = enumIdentity(context, ownRef);\n const inheritedEnum = enumIdentity(context, inheritedRef);\n\n return ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum;\n};\n\nconst hasParameterEnumConflict = (context: ModuleContext, own: GirFunction, inherited: InheritedMethod): boolean => {\n const ownParams = inputParameters(context.library, own);\n const inheritedParams = inputParameters(context.library, inherited.method);\n const count = Math.min(ownParams.length, inheritedParams.length);\n\n for (let index = 0; index < count; index += 1) {\n const ownParam = ownParams[index];\n const inheritedParam = inheritedParams[index];\n\n if (\n ownParam !== undefined &&\n inheritedParam !== undefined &&\n hasEnumConflict(context, ownParam.parameter.type, inheritedParam.parameter.type)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = context.library.typeFor(ref);\n\n if (resolved?.kind !== \"enum\") {\n return undefined;\n }\n\n return `${resolved.namespace.name}.${resolved.value.name}`;\n};\n\nexport {\n resolveImplementedInterface,\n resolvePrerequisiteReference,\n forEachAncestor,\n collectInterfaceProperties,\n collectInterfaceMergeOmissions,\n collectInheritedPropertyTypes,\n collectInheritedMethods,\n conflictRename,\n reservedSignalMemberRename,\n type OwnedProperty,\n type InheritedMethods,\n};\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GirFunction } from "../gir/function.js";
|
|
2
|
+
import type { Library } from "../gir/library.js";
|
|
3
|
+
import type { TypeId } from "../gir/type-id.js";
|
|
4
|
+
import { type GirCallable, type GirParameter } from "../gir/parameter.js";
|
|
5
|
+
type InputParameter = {
|
|
6
|
+
parameter: GirParameter;
|
|
7
|
+
index: number;
|
|
8
|
+
};
|
|
9
|
+
type HandlerResultOptions = {
|
|
10
|
+
library: Library;
|
|
11
|
+
signal: GirCallable;
|
|
12
|
+
renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
|
|
13
|
+
includeCallerAllocated: boolean;
|
|
14
|
+
optOut: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare const inputParameters: (library: Library, fn: GirFunction) => InputParameter[];
|
|
17
|
+
declare const closureAndDestroyIndices: (fn: GirFunction) => Set<number>;
|
|
18
|
+
declare const emittedArgIndices: (fn: GirFunction, instanceOffset: number) => Map<number, number>;
|
|
19
|
+
declare const arrayLengthSources: (library: Library, fn: GirFunction) => Map<number, number>;
|
|
20
|
+
declare const hasCallerAllocatedArrayLength: (library: Library, fn: GirFunction) => boolean;
|
|
21
|
+
declare const foldedLengthIndices: (library: Library, fn: GirFunction) => Set<number>;
|
|
22
|
+
declare const parameterIdentifier: (parameter: GirParameter, index: number) => string;
|
|
23
|
+
declare const renderHandlerParameters: (parameters: GirParameter[], renderType: (ref: TypeId | undefined, isNullable: boolean) => string, shouldExclude?: (parameter: GirParameter) => boolean) => string[];
|
|
24
|
+
declare const foldOutParamShape: (primary: string | undefined, outTypes: string[]) => string;
|
|
25
|
+
declare const renderHandlerResultType: (options: HandlerResultOptions) => string;
|
|
26
|
+
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources, hasCallerAllocatedArrayLength, foldedLengthIndices, parameterIdentifier, renderHandlerParameters, foldOutParamShape, renderHandlerResultType, };
|
|
27
|
+
//# sourceMappingURL=param-structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-structure.d.ts","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAwC,MAAM,qBAAqB,CAAC;AAGhH,KAAK,cAAc,GAAG;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,KAAK,MAAM,CAAC;IACrE,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AA6BF,QAAA,MAAM,eAAe,GAAI,SAAS,OAAO,EAAE,IAAI,WAAW,KAAG,cAAc,EAY1E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAI,IAAI,WAAW,KAAG,GAAG,CAAC,MAAM,CAc7D,CAAC;AAIF,QAAA,MAAM,iBAAiB,GAAI,IAAI,WAAW,EAAE,gBAAgB,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAetF,CAAC;AAkBF,QAAA,MAAM,kBAAkB,GAAI,SAAS,OAAO,EAAE,IAAI,WAAW,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAYjF,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,SAAS,OAAO,EAAE,IAAI,WAAW,KAAG,OAU1E,CAAC;AAkBF,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,IAAI,WAAW,KAAG,GAAG,CAAC,MAAM,CAQ1E,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,WAAW,YAAY,EAAE,OAAO,MAAM,KAAG,MAMrE,CAAC;AAEF,QAAA,MAAM,uBAAuB,GACzB,YAAY,YAAY,EAAE,EAC1B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,KAAK,MAAM,EACpE,gBAAe,CAAC,SAAS,EAAE,YAAY,KAAK,OAAqB,KAClE,MAAM,EAMA,CAAC;AAEV,QAAA,MAAM,iBAAiB,GAAI,SAAS,MAAM,GAAG,SAAS,EAAE,UAAU,MAAM,EAAE,KAAG,MAY5E,CAAC;AAgCF,QAAA,MAAM,uBAAuB,GAAI,SAAS,oBAAoB,KAAG,MAgBhE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,GAC1B,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { toCamelIdentifier } from "@gtkx/utils";
|
|
2
|
+
import { isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
|
|
3
|
+
import { isCellInout, shouldOmitPrimaryReturn } from "./descriptor-render.js";
|
|
4
|
+
const isInputParameter = (options) => {
|
|
5
|
+
const { parameter, index, lengthIndices, closureIndices } = options;
|
|
6
|
+
if (parameter.isVarargs) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (isOutParameter(parameter)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (isCallerAllocatedOut(parameter)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (lengthIndices.has(index)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return !closureIndices.has(index);
|
|
19
|
+
};
|
|
20
|
+
const inputParameters = (library, fn) => {
|
|
21
|
+
const lengthIndices = arrayLengthIndices(library, fn);
|
|
22
|
+
const closureIndices = closureAndDestroyIndices(fn);
|
|
23
|
+
const result = [];
|
|
24
|
+
for (const [index, parameter] of fn.parameters.entries()) {
|
|
25
|
+
if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {
|
|
26
|
+
result.push({ parameter, index });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
const closureAndDestroyIndices = (fn) => {
|
|
32
|
+
const indices = new Set();
|
|
33
|
+
for (const parameter of fn.parameters) {
|
|
34
|
+
if (parameter.closureIndex !== undefined) {
|
|
35
|
+
indices.add(parameter.closureIndex);
|
|
36
|
+
}
|
|
37
|
+
if (parameter.destroyIndex !== undefined) {
|
|
38
|
+
indices.add(parameter.destroyIndex);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return indices;
|
|
42
|
+
};
|
|
43
|
+
// The emitted argument list is the instance parameter followed by every parameter `planParameter`
|
|
44
|
+
// keeps, so a GIR index only lines up with an emitted index when nothing before it was dropped.
|
|
45
|
+
const emittedArgIndices = (fn, instanceOffset) => {
|
|
46
|
+
const closureIndices = closureAndDestroyIndices(fn);
|
|
47
|
+
const map = new Map();
|
|
48
|
+
let emitted = instanceOffset;
|
|
49
|
+
for (const [index, parameter] of fn.parameters.entries()) {
|
|
50
|
+
if (parameter.isVarargs || closureIndices.has(index)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
map.set(index, emitted);
|
|
54
|
+
emitted += 1;
|
|
55
|
+
}
|
|
56
|
+
return map;
|
|
57
|
+
};
|
|
58
|
+
const arrayLengthIndices = (library, fn) => {
|
|
59
|
+
const map = arrayLengthSources(library, fn);
|
|
60
|
+
return new Set(map.keys());
|
|
61
|
+
};
|
|
62
|
+
const carrayLengthIndex = (library, ref) => {
|
|
63
|
+
const type = ref === undefined ? undefined : library.typeFor(ref);
|
|
64
|
+
if (type?.kind !== "carray") {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return type.lengthParameterIndex;
|
|
68
|
+
};
|
|
69
|
+
const arrayLengthSources = (library, fn) => {
|
|
70
|
+
const map = new Map();
|
|
71
|
+
for (const [index, parameter] of fn.parameters.entries()) {
|
|
72
|
+
const lengthIndex = carrayLengthIndex(library, parameter.type);
|
|
73
|
+
if (lengthIndex !== undefined) {
|
|
74
|
+
map.set(lengthIndex, index);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return map;
|
|
78
|
+
};
|
|
79
|
+
const hasCallerAllocatedArrayLength = (library, fn) => {
|
|
80
|
+
for (const arrayIndex of arrayLengthSources(library, fn).values()) {
|
|
81
|
+
const array = fn.parameters[arrayIndex];
|
|
82
|
+
if (array !== undefined && isCallerAllocatedOut(array)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
};
|
|
88
|
+
const returnArrayLengthIndices = (library, fn) => {
|
|
89
|
+
const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);
|
|
90
|
+
if (returnType?.kind !== "carray") {
|
|
91
|
+
return new Set();
|
|
92
|
+
}
|
|
93
|
+
const lengthIndex = returnType.lengthParameterIndex;
|
|
94
|
+
if (lengthIndex === undefined) {
|
|
95
|
+
return new Set();
|
|
96
|
+
}
|
|
97
|
+
return new Set([lengthIndex]);
|
|
98
|
+
};
|
|
99
|
+
const foldedLengthIndices = (library, fn) => {
|
|
100
|
+
const indices = new Set(arrayLengthSources(library, fn).keys());
|
|
101
|
+
for (const index of returnArrayLengthIndices(library, fn)) {
|
|
102
|
+
indices.add(index);
|
|
103
|
+
}
|
|
104
|
+
return indices;
|
|
105
|
+
};
|
|
106
|
+
const parameterIdentifier = (parameter, index) => {
|
|
107
|
+
if (parameter.name.length === 0) {
|
|
108
|
+
return `arg${String(index)}`;
|
|
109
|
+
}
|
|
110
|
+
return toCamelIdentifier(parameter.name);
|
|
111
|
+
};
|
|
112
|
+
const renderHandlerParameters = (parameters, renderType, shouldExclude = () => false) => parameters
|
|
113
|
+
.filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter))
|
|
114
|
+
.map((parameter, index) => `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`);
|
|
115
|
+
const foldOutParamShape = (primary, outTypes) => {
|
|
116
|
+
if (primary !== undefined) {
|
|
117
|
+
return `[${primary}, ${outTypes.join(", ")}]`;
|
|
118
|
+
}
|
|
119
|
+
const [single, ...rest] = outTypes;
|
|
120
|
+
if (single !== undefined && rest.length === 0) {
|
|
121
|
+
return single;
|
|
122
|
+
}
|
|
123
|
+
return `[${outTypes.join(", ")}]`;
|
|
124
|
+
};
|
|
125
|
+
const isHandlerOutParameter = (options) => {
|
|
126
|
+
const { library, parameter, includeCallerAllocated } = options;
|
|
127
|
+
if (parameter.isVarargs) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (isOutParameter(parameter)) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (isCellInout(library, parameter)) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return includeCallerAllocated && isCallerAllocatedOut(parameter);
|
|
137
|
+
};
|
|
138
|
+
const scalarResultType = (primary, isOptOut) => {
|
|
139
|
+
if (primary === undefined) {
|
|
140
|
+
return "void";
|
|
141
|
+
}
|
|
142
|
+
return isOptOut ? `${primary} | undefined` : primary;
|
|
143
|
+
};
|
|
144
|
+
const renderHandlerResultType = (options) => {
|
|
145
|
+
const { library, signal, renderType, includeCallerAllocated, optOut } = options;
|
|
146
|
+
const primary = shouldOmitPrimaryReturn(library, signal.returnValue)
|
|
147
|
+
? undefined
|
|
148
|
+
: renderType(signal.returnValue.type, signal.returnValue.nullable);
|
|
149
|
+
const outTypes = signal.parameters
|
|
150
|
+
.filter((parameter) => isHandlerOutParameter({ library, parameter, includeCallerAllocated }))
|
|
151
|
+
.map((parameter) => renderType(parameter.type, parameter.nullable));
|
|
152
|
+
if (outTypes.length === 0) {
|
|
153
|
+
return scalarResultType(primary, optOut);
|
|
154
|
+
}
|
|
155
|
+
return foldOutParamShape(primary, outTypes);
|
|
156
|
+
};
|
|
157
|
+
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources, hasCallerAllocatedArrayLength, foldedLengthIndices, parameterIdentifier, renderHandlerParameters, foldOutParamShape, renderHandlerResultType, };
|
|
158
|
+
//# sourceMappingURL=param-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport { isCellInout, shouldOmitPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirCallable;\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string;\n includeCallerAllocated: boolean;\n optOut: boolean;\n};\n\nconst isInputParameter = (options: {\n parameter: GirParameter;\n index: number;\n lengthIndices: Set<number>;\n closureIndices: Set<number>;\n}): boolean => {\n const { parameter, index, lengthIndices, closureIndices } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n if (lengthIndices.has(index)) {\n return false;\n }\n\n return !closureIndices.has(index);\n};\n\nconst inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {\n result.push({ parameter, index });\n }\n }\n\n return result;\n};\n\nconst closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set();\n\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) {\n indices.add(parameter.closureIndex);\n }\n\n if (parameter.destroyIndex !== undefined) {\n indices.add(parameter.destroyIndex);\n }\n }\n\n return indices;\n};\n\n// The emitted argument list is the instance parameter followed by every parameter `planParameter`\n// keeps, so a GIR index only lines up with an emitted index when nothing before it was dropped.\nconst emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {\n const closureIndices = closureAndDestroyIndices(fn);\n const map: Map<number, number> = new Map();\n let emitted = instanceOffset;\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (parameter.isVarargs || closureIndices.has(index)) {\n continue;\n }\n\n map.set(index, emitted);\n emitted += 1;\n }\n\n return map;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n\n return new Set(map.keys());\n};\n\nconst carrayLengthIndex = (library: Library, ref: TypeId | undefined): number | undefined => {\n const type = ref === undefined ? undefined : library.typeFor(ref);\n\n if (type?.kind !== \"carray\") {\n return undefined;\n }\n\n return type.lengthParameterIndex;\n};\n\nconst arrayLengthSources = (library: Library, fn: GirFunction): Map<number, number> => {\n const map: Map<number, number> = new Map();\n\n for (const [index, parameter] of fn.parameters.entries()) {\n const lengthIndex = carrayLengthIndex(library, parameter.type);\n\n if (lengthIndex !== undefined) {\n map.set(lengthIndex, index);\n }\n }\n\n return map;\n};\n\nconst hasCallerAllocatedArrayLength = (library: Library, fn: GirFunction): boolean => {\n for (const arrayIndex of arrayLengthSources(library, fn).values()) {\n const array = fn.parameters[arrayIndex];\n\n if (array !== undefined && isCallerAllocatedOut(array)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);\n\n if (returnType?.kind !== \"carray\") {\n return new Set();\n }\n\n const lengthIndex = returnType.lengthParameterIndex;\n\n if (lengthIndex === undefined) {\n return new Set();\n }\n\n return new Set([lengthIndex]);\n};\n\nconst foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());\n\n for (const index of returnArrayLengthIndices(library, fn)) {\n indices.add(index);\n }\n\n return indices;\n};\n\nconst parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) {\n return `arg${String(index)}`;\n }\n\n return toCamelIdentifier(parameter.name);\n};\n\nconst renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string,\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n parameters\n .filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter))\n .map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nconst foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) {\n return `[${primary}, ${outTypes.join(\", \")}]`;\n }\n\n const [single, ...rest] = outTypes;\n\n if (single !== undefined && rest.length === 0) {\n return single;\n }\n\n return `[${outTypes.join(\", \")}]`;\n};\n\nconst isHandlerOutParameter = (options: {\n library: Library;\n parameter: GirParameter;\n includeCallerAllocated: boolean;\n}): boolean => {\n const { library, parameter, includeCallerAllocated } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return true;\n }\n\n if (isCellInout(library, parameter)) {\n return true;\n }\n\n return includeCallerAllocated && isCallerAllocatedOut(parameter);\n};\n\nconst scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {\n if (primary === undefined) {\n return \"void\";\n }\n\n return isOptOut ? `${primary} | undefined` : primary;\n};\n\nconst renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, includeCallerAllocated, optOut } = options;\n\n const primary = shouldOmitPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n\n const outTypes = signal.parameters\n .filter((parameter) => isHandlerOutParameter({ library, parameter, includeCallerAllocated }))\n .map((parameter) => renderType(parameter.type, parameter.nullable));\n\n if (outTypes.length === 0) {\n return scalarResultType(primary, optOut);\n }\n\n return foldOutParamShape(primary, outTypes);\n};\n\nexport {\n emittedArgIndices,\n inputParameters,\n closureAndDestroyIndices,\n arrayLengthSources,\n hasCallerAllocatedArrayLength,\n foldedLengthIndices,\n parameterIdentifier,\n renderHandlerParameters,\n foldOutParamShape,\n renderHandlerResultType,\n};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Library } from "../gir/library.js";
|
|
2
|
+
import type { GirType } from "../gir/type.js";
|
|
3
|
+
import type { ModuleContext } from "../writer/context.js";
|
|
4
|
+
import { type TypeId } from "../gir/type-id.js";
|
|
5
|
+
type ReferenceName = {
|
|
6
|
+
namespaceName: string;
|
|
7
|
+
typeName: string;
|
|
8
|
+
};
|
|
9
|
+
type TsTypeTarget = {
|
|
10
|
+
containerStyle: "map" | "record";
|
|
11
|
+
callbackType: string;
|
|
12
|
+
byteArrayAsNumber: boolean;
|
|
13
|
+
renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;
|
|
14
|
+
renderGtype: () => string;
|
|
15
|
+
};
|
|
16
|
+
declare const renderBaseType: (library: Library, target: TsTypeTarget, ref: TypeId | undefined) => string;
|
|
17
|
+
declare const renderTsType: (context: ModuleContext, ref: TypeId | undefined, isNullable?: boolean) => string;
|
|
18
|
+
declare const recordTypeTarget: (library: Library, renderNamedRef: (name: ReferenceName) => string, renderGtype: () => string) => TsTypeTarget;
|
|
19
|
+
export { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };
|
|
20
|
+
//# sourceMappingURL=ts-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-type.d.ts","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AAI3B,KAAK,aAAa,GAAG;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,cAAc,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;IAC5E,WAAW,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAkCF,QAAA,MAAM,cAAc,GAAI,SAAS,OAAO,EAAE,QAAQ,YAAY,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAiCzF,CAAC;AAmDF,QAAA,MAAM,YAAY,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,oBAAkB,KAAG,MAI3F,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAClB,SAAS,OAAO,EAChB,gBAAgB,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,EAC/C,aAAa,MAAM,MAAM,KAC1B,YAkBF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { PRIMITIVE_TS_TYPE } from "../gir/primitives.js";
|
|
2
|
+
import { hasUnknownArrayLength, } from "../gir/type-id.js";
|
|
3
|
+
import { isClassStructRecord } from "../store/gi/class-struct-record.js";
|
|
4
|
+
import { gtypeTsType } from "../store/gi/gtype-binding.js";
|
|
5
|
+
const willEmitEntity = (library, type) => {
|
|
6
|
+
switch (type.kind) {
|
|
7
|
+
case "callback": {
|
|
8
|
+
return type.value.introspectable && type.value.name.length > 0;
|
|
9
|
+
}
|
|
10
|
+
case "record": {
|
|
11
|
+
return (type.value.introspectable &&
|
|
12
|
+
!type.value.isVtable &&
|
|
13
|
+
type.value.name.length > 0 &&
|
|
14
|
+
!isClassStructRecord(library, type.namespace.name, type.value));
|
|
15
|
+
}
|
|
16
|
+
case "alias":
|
|
17
|
+
case "class":
|
|
18
|
+
case "enum":
|
|
19
|
+
case "interface": {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const renderPrimitiveType = (target, type) => type.category === "gtype" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];
|
|
25
|
+
const renderEntityType = (library, target, type, name) => renderNamedType(target, type, willEmitEntity(library, type) ? name : undefined);
|
|
26
|
+
const renderBaseType = (library, target, ref) => {
|
|
27
|
+
if (ref === undefined) {
|
|
28
|
+
return "void";
|
|
29
|
+
}
|
|
30
|
+
const type = library.typeFor(ref);
|
|
31
|
+
const name = library.nameFor(ref);
|
|
32
|
+
if (type === undefined) {
|
|
33
|
+
return renderNamedType(target, undefined, name);
|
|
34
|
+
}
|
|
35
|
+
switch (type.kind) {
|
|
36
|
+
case "primitive": {
|
|
37
|
+
return renderPrimitiveType(target, type);
|
|
38
|
+
}
|
|
39
|
+
case "varargs": {
|
|
40
|
+
return "unknown[]";
|
|
41
|
+
}
|
|
42
|
+
case "callback":
|
|
43
|
+
case "class":
|
|
44
|
+
case "interface":
|
|
45
|
+
case "record":
|
|
46
|
+
case "enum":
|
|
47
|
+
case "alias": {
|
|
48
|
+
return renderEntityType(library, target, type, name);
|
|
49
|
+
}
|
|
50
|
+
case "carray":
|
|
51
|
+
case "list":
|
|
52
|
+
case "hashtable": {
|
|
53
|
+
return renderContainerType(library, target, type);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const renderContainerType = (library, target, type) => {
|
|
58
|
+
if (type.kind === "hashtable") {
|
|
59
|
+
const key = renderBaseType(library, target, type.key);
|
|
60
|
+
const value = renderBaseType(library, target, type.value);
|
|
61
|
+
return target.containerStyle === "record" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;
|
|
62
|
+
}
|
|
63
|
+
return renderSequenceType(library, target, type);
|
|
64
|
+
};
|
|
65
|
+
// An array whose length nothing states decodes as the bare pointer it is, so its TypeScript type has
|
|
66
|
+
// to say so too rather than promising elements nothing can count.
|
|
67
|
+
const renderSequenceType = (library, target, type) => {
|
|
68
|
+
if (type.kind === "list" && type.flavor === "gbytearray" && target.byteArrayAsNumber) {
|
|
69
|
+
return "number[]";
|
|
70
|
+
}
|
|
71
|
+
if (type.kind === "carray" && hasUnknownArrayLength(type)) {
|
|
72
|
+
return "number";
|
|
73
|
+
}
|
|
74
|
+
return `${renderBaseType(library, target, type.element)}[]`;
|
|
75
|
+
};
|
|
76
|
+
const renderNamedType = (target, resolved, name) => {
|
|
77
|
+
if (name === undefined || name.typeName.length === 0) {
|
|
78
|
+
return resolved?.kind === "callback" ? target.callbackType : "unknown";
|
|
79
|
+
}
|
|
80
|
+
return target.renderNamed(resolved, name);
|
|
81
|
+
};
|
|
82
|
+
const moduleTarget = (context) => ({
|
|
83
|
+
containerStyle: "map",
|
|
84
|
+
callbackType: "((...args: any[]) => any)",
|
|
85
|
+
byteArrayAsNumber: true,
|
|
86
|
+
renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),
|
|
87
|
+
renderGtype: () => gtypeTsType(context),
|
|
88
|
+
});
|
|
89
|
+
const renderTsType = (context, ref, isNullable = false) => {
|
|
90
|
+
const base = renderBaseType(context.library, moduleTarget(context), ref);
|
|
91
|
+
return isNullable ? `${base} | null` : base;
|
|
92
|
+
};
|
|
93
|
+
const recordTypeTarget = (library, renderNamedRef, renderGtype) => {
|
|
94
|
+
const target = {
|
|
95
|
+
containerStyle: "record",
|
|
96
|
+
callbackType: "((...args: unknown[]) => unknown)",
|
|
97
|
+
byteArrayAsNumber: false,
|
|
98
|
+
renderNamed: (resolved, name) => {
|
|
99
|
+
if (resolved?.kind === "alias") {
|
|
100
|
+
return resolved.value.target === undefined
|
|
101
|
+
? "number"
|
|
102
|
+
: renderBaseType(library, target, resolved.value.target);
|
|
103
|
+
}
|
|
104
|
+
return renderNamedRef(name);
|
|
105
|
+
},
|
|
106
|
+
renderGtype,
|
|
107
|
+
};
|
|
108
|
+
return target;
|
|
109
|
+
};
|
|
110
|
+
export { renderBaseType, renderTsType, recordTypeTarget };
|
|
111
|
+
//# sourceMappingURL=ts-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport {\n type CArrayType,\n type HashTableType,\n hasUnknownArrayLength,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isClassStructRecord } from \"../store/gi/class-struct-record.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\ntype TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n byteArrayAsNumber: boolean;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst willEmitEntity = (library: Library, type: EntityType): boolean => {\n switch (type.kind) {\n case \"callback\": {\n return type.value.introspectable && type.value.name.length > 0;\n }\n case \"record\": {\n return (\n type.value.introspectable &&\n !type.value.isVtable &&\n type.value.name.length > 0 &&\n !isClassStructRecord(library, type.namespace.name, type.value)\n );\n }\n case \"alias\":\n case \"class\":\n case \"enum\":\n case \"interface\": {\n return true;\n }\n }\n};\n\nconst renderPrimitiveType = (target: TsTypeTarget, type: Extract<GirType, { kind: \"primitive\" }>): string =>\n type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n\nconst renderEntityType = (\n library: Library,\n target: TsTypeTarget,\n type: EntityType,\n name: ReferenceName | undefined,\n): string => renderNamedType(target, type, willEmitEntity(library, type) ? name : undefined);\n\nconst renderBaseType = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n const name = library.nameFor(ref);\n\n if (type === undefined) {\n return renderNamedType(target, undefined, name);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return renderPrimitiveType(target, type);\n }\n case \"varargs\": {\n return \"unknown[]\";\n }\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return renderEntityType(library, target, type, name);\n }\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return renderContainerType(library, target, type);\n }\n }\n};\n\nconst renderContainerType = (\n library: Library,\n target: TsTypeTarget,\n type: CArrayType | ListType | HashTableType,\n): string => {\n if (type.kind === \"hashtable\") {\n const key = renderBaseType(library, target, type.key);\n const value = renderBaseType(library, target, type.value);\n\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n\n return renderSequenceType(library, target, type);\n};\n\n// An array whose length nothing states decodes as the bare pointer it is, so its TypeScript type has\n// to say so too rather than promising elements nothing can count.\nconst renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {\n if (type.kind === \"list\" && type.flavor === \"gbytearray\" && target.byteArrayAsNumber) {\n return \"number[]\";\n }\n\n if (type.kind === \"carray\" && hasUnknownArrayLength(type)) {\n return \"number\";\n }\n\n return `${renderBaseType(library, target, type.element)}[]`;\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined || name.typeName.length === 0) {\n return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n }\n\n return target.renderNamed(resolved, name);\n};\n\nconst moduleTarget = (context: ModuleContext): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n byteArrayAsNumber: true,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nconst renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n const base = renderBaseType(context.library, moduleTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst recordTypeTarget = (\n library: Library,\n renderNamedRef: (name: ReferenceName) => string,\n renderGtype: () => string,\n): TsTypeTarget => {\n const target: TsTypeTarget = {\n containerStyle: \"record\",\n callbackType: \"((...args: unknown[]) => unknown)\",\n byteArrayAsNumber: false,\n renderNamed: (resolved, name) => {\n if (resolved?.kind === \"alias\") {\n return resolved.value.target === undefined\n ? \"number\"\n : renderBaseType(library, target, resolved.value.target);\n }\n\n return renderNamedRef(name);\n },\n renderGtype,\n };\n\n return target;\n};\n\nexport { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type SourceModule = {
|
|
2
|
+
fileName: string;
|
|
3
|
+
source: string;
|
|
4
|
+
};
|
|
5
|
+
type CompileProjectParams = {
|
|
6
|
+
projectDir: string;
|
|
7
|
+
fileNames: string[];
|
|
8
|
+
compilerOptions: Record<string, unknown>;
|
|
9
|
+
label: string;
|
|
10
|
+
};
|
|
11
|
+
declare const compileProject: (params: CompileProjectParams) => void;
|
|
12
|
+
declare const checkModules: (params: {
|
|
13
|
+
modules: SourceModule[];
|
|
14
|
+
resolveFrom: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}) => void;
|
|
17
|
+
export { compileProject, checkModules, type SourceModule, type CompileProjectParams };
|
|
18
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAKA,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AA8HF,QAAA,MAAM,cAAc,GAAI,QAAQ,oBAAoB,KAAG,IAYtD,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,QAAQ;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,IAqB/F,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
package/dist/compile.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, isAbsolute, join, relative } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import ts from "typescript";
|
|
5
|
+
const BASE_COMPILER_OPTIONS = {
|
|
6
|
+
module: "esnext",
|
|
7
|
+
moduleResolution: "bundler",
|
|
8
|
+
target: "esnext",
|
|
9
|
+
lib: ["esnext"],
|
|
10
|
+
jsx: "react-jsx",
|
|
11
|
+
jsxImportSource: "react",
|
|
12
|
+
customConditions: ["source"],
|
|
13
|
+
strict: true,
|
|
14
|
+
exactOptionalPropertyTypes: true,
|
|
15
|
+
noUncheckedIndexedAccess: true,
|
|
16
|
+
noImplicitReturns: true,
|
|
17
|
+
noFallthroughCasesInSwitch: true,
|
|
18
|
+
allowUnreachableCode: false,
|
|
19
|
+
forceConsistentCasingInFileNames: true,
|
|
20
|
+
resolveJsonModule: true,
|
|
21
|
+
skipLibCheck: true,
|
|
22
|
+
types: ["node"],
|
|
23
|
+
};
|
|
24
|
+
const CHECK_OPTIONS = {
|
|
25
|
+
declaration: true,
|
|
26
|
+
isolatedDeclarations: true,
|
|
27
|
+
noEmit: true,
|
|
28
|
+
};
|
|
29
|
+
const FORMAT_HOST = {
|
|
30
|
+
getCanonicalFileName: (fileName) => fileName,
|
|
31
|
+
getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
|
|
32
|
+
getNewLine: () => "\n",
|
|
33
|
+
};
|
|
34
|
+
/** `@gtkx/codegen`'s own `node_modules`, which has `@types/node` plus the `@gtkx/*` deps the store typecheck needs. */
|
|
35
|
+
const codegenModules = () => {
|
|
36
|
+
const sourceDir = dirname(fileURLToPath(import.meta.url));
|
|
37
|
+
return join(dirname(sourceDir), "node_modules");
|
|
38
|
+
};
|
|
39
|
+
const linkToolingModules = (projectDir) => {
|
|
40
|
+
const link = join(projectDir, "node_modules");
|
|
41
|
+
if (existsSync(link)) {
|
|
42
|
+
return () => undefined;
|
|
43
|
+
}
|
|
44
|
+
symlinkSync(codegenModules(), link, "junction");
|
|
45
|
+
return () => {
|
|
46
|
+
rmSync(link, { force: true });
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const isProjectFile = (rel) => !rel.startsWith("..") && !isAbsolute(rel) && !rel.split(/[/\\]/).includes("node_modules");
|
|
50
|
+
const projectDiagnosticLine = (diagnostic, projectDir) => {
|
|
51
|
+
const { file, start } = diagnostic;
|
|
52
|
+
if (file === undefined || start === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const filePath = relative(projectDir, file.fileName);
|
|
56
|
+
if (!isProjectFile(filePath)) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const { line, character } = file.getLineAndCharacterOfPosition(start);
|
|
60
|
+
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
|
|
61
|
+
return `${filePath}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`;
|
|
62
|
+
};
|
|
63
|
+
const projectDiagnosticLines = (diagnostics, projectDir) => {
|
|
64
|
+
const lines = [];
|
|
65
|
+
for (const diagnostic of diagnostics) {
|
|
66
|
+
const line = projectDiagnosticLine(diagnostic, projectDir);
|
|
67
|
+
if (line !== undefined) {
|
|
68
|
+
lines.push(line);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return lines;
|
|
72
|
+
};
|
|
73
|
+
const diagnosticError = (label, projectDir, diagnostics) => {
|
|
74
|
+
const lines = projectDiagnosticLines(diagnostics, projectDir);
|
|
75
|
+
if (lines.length > 0) {
|
|
76
|
+
return new Error(`Type checking ${label} found ${String(lines.length)} error(s):\n${lines.join("\n")}`);
|
|
77
|
+
}
|
|
78
|
+
return new Error(`Type checking ${label} failed:\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);
|
|
79
|
+
};
|
|
80
|
+
const runProgram = (params) => {
|
|
81
|
+
const parsed = ts.parseJsonConfigFileContent({
|
|
82
|
+
compilerOptions: { ...BASE_COMPILER_OPTIONS, ...params.compilerOptions },
|
|
83
|
+
files: params.fileNames.map((name) => `./${name}`),
|
|
84
|
+
}, ts.sys, params.projectDir);
|
|
85
|
+
const program = ts.createProgram({
|
|
86
|
+
rootNames: parsed.fileNames,
|
|
87
|
+
options: parsed.options,
|
|
88
|
+
configFileParsingDiagnostics: parsed.errors,
|
|
89
|
+
});
|
|
90
|
+
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
91
|
+
if (diagnostics.length > 0) {
|
|
92
|
+
return [...diagnostics];
|
|
93
|
+
}
|
|
94
|
+
return [...program.emit().diagnostics];
|
|
95
|
+
};
|
|
96
|
+
const compileProject = (params) => {
|
|
97
|
+
const unlinkToolingModules = linkToolingModules(params.projectDir);
|
|
98
|
+
try {
|
|
99
|
+
const diagnostics = runProgram(params);
|
|
100
|
+
if (diagnostics.length > 0) {
|
|
101
|
+
throw diagnosticError(params.label, params.projectDir, diagnostics);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
unlinkToolingModules();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const checkModules = (params) => {
|
|
109
|
+
const checkRoot = join(params.resolveFrom, "node_modules");
|
|
110
|
+
mkdirSync(checkRoot, { recursive: true });
|
|
111
|
+
const projectDir = mkdtempSync(join(checkRoot, ".gtkx-check-"));
|
|
112
|
+
try {
|
|
113
|
+
for (const module of params.modules) {
|
|
114
|
+
const filePath = join(projectDir, module.fileName);
|
|
115
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
116
|
+
writeFileSync(filePath, module.source);
|
|
117
|
+
}
|
|
118
|
+
compileProject({
|
|
119
|
+
projectDir,
|
|
120
|
+
fileNames: params.modules.map((module) => module.fileName),
|
|
121
|
+
compilerOptions: CHECK_OPTIONS,
|
|
122
|
+
label: params.label,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
rmSync(projectDir, { recursive: true, force: true });
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
export { compileProject, checkModules };
|
|
130
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\n\ntype SourceModule = {\n fileName: string;\n source: string;\n};\n\ntype CompileProjectParams = {\n projectDir: string;\n fileNames: string[];\n compilerOptions: Record<string, unknown>;\n label: string;\n};\n\nconst BASE_COMPILER_OPTIONS = {\n module: \"esnext\",\n moduleResolution: \"bundler\",\n target: \"esnext\",\n lib: [\"esnext\"],\n jsx: \"react-jsx\",\n jsxImportSource: \"react\",\n customConditions: [\"source\"],\n strict: true,\n exactOptionalPropertyTypes: true,\n noUncheckedIndexedAccess: true,\n noImplicitReturns: true,\n noFallthroughCasesInSwitch: true,\n allowUnreachableCode: false,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n skipLibCheck: true,\n types: [\"node\"],\n};\n\nconst CHECK_OPTIONS = {\n declaration: true,\n isolatedDeclarations: true,\n noEmit: true,\n};\n\nconst FORMAT_HOST: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: (fileName) => fileName,\n getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n getNewLine: () => \"\\n\",\n};\n\n/** `@gtkx/codegen`'s own `node_modules`, which has `@types/node` plus the `@gtkx/*` deps the store typecheck needs. */\nconst codegenModules = (): string => {\n const sourceDir = dirname(fileURLToPath(import.meta.url));\n\n return join(dirname(sourceDir), \"node_modules\");\n};\n\nconst linkToolingModules = (projectDir: string): (() => void) => {\n const link = join(projectDir, \"node_modules\");\n\n if (existsSync(link)) {\n return (): void => undefined;\n }\n\n symlinkSync(codegenModules(), link, \"junction\");\n\n return () => {\n rmSync(link, { force: true });\n };\n};\n\nconst isProjectFile = (rel: string): boolean =>\n !rel.startsWith(\"..\") && !isAbsolute(rel) && !rel.split(/[/\\\\]/).includes(\"node_modules\");\n\nconst projectDiagnosticLine = (diagnostic: ts.Diagnostic, projectDir: string): string | undefined => {\n const { file, start } = diagnostic;\n\n if (file === undefined || start === undefined) {\n return undefined;\n }\n\n const filePath = relative(projectDir, file.fileName);\n\n if (!isProjectFile(filePath)) {\n return undefined;\n }\n\n const { line, character } = file.getLineAndCharacterOfPosition(start);\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\");\n\n return `${filePath}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`;\n};\n\nconst projectDiagnosticLines = (diagnostics: ts.Diagnostic[], projectDir: string): string[] => {\n const lines: string[] = [];\n\n for (const diagnostic of diagnostics) {\n const line = projectDiagnosticLine(diagnostic, projectDir);\n\n if (line !== undefined) {\n lines.push(line);\n }\n }\n\n return lines;\n};\n\nconst diagnosticError = (label: string, projectDir: string, diagnostics: ts.Diagnostic[]): Error => {\n const lines = projectDiagnosticLines(diagnostics, projectDir);\n\n if (lines.length > 0) {\n return new Error(`Type checking ${label} found ${String(lines.length)} error(s):\\n${lines.join(\"\\n\")}`);\n }\n\n return new Error(`Type checking ${label} failed:\\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);\n};\n\nconst runProgram = (params: CompileProjectParams): ts.Diagnostic[] => {\n const parsed = ts.parseJsonConfigFileContent(\n {\n compilerOptions: { ...BASE_COMPILER_OPTIONS, ...params.compilerOptions },\n files: params.fileNames.map((name) => `./${name}`),\n },\n ts.sys,\n params.projectDir,\n );\n\n const program = ts.createProgram({\n rootNames: parsed.fileNames,\n options: parsed.options,\n configFileParsingDiagnostics: parsed.errors,\n });\n\n const diagnostics = ts.getPreEmitDiagnostics(program);\n\n if (diagnostics.length > 0) {\n return [...diagnostics];\n }\n\n return [...program.emit().diagnostics];\n};\n\nconst compileProject = (params: CompileProjectParams): void => {\n const unlinkToolingModules = linkToolingModules(params.projectDir);\n\n try {\n const diagnostics = runProgram(params);\n\n if (diagnostics.length > 0) {\n throw diagnosticError(params.label, params.projectDir, diagnostics);\n }\n } finally {\n unlinkToolingModules();\n }\n};\n\nconst checkModules = (params: { modules: SourceModule[]; resolveFrom: string; label: string }): void => {\n const checkRoot = join(params.resolveFrom, \"node_modules\");\n mkdirSync(checkRoot, { recursive: true });\n const projectDir = mkdtempSync(join(checkRoot, \".gtkx-check-\"));\n\n try {\n for (const module of params.modules) {\n const filePath = join(projectDir, module.fileName);\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, module.source);\n }\n\n compileProject({\n projectDir,\n fileNames: params.modules.map((module) => module.fileName),\n compilerOptions: CHECK_OPTIONS,\n label: params.label,\n });\n } finally {\n rmSync(projectDir, { recursive: true, force: true });\n }\n};\n\nexport { compileProject, checkModules, type SourceModule, type CompileProjectParams };\n"]}
|