@gtkx/codegen 1.0.0-rc.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -9
- package/dist/analysis/descriptor-render.d.ts +9 -4
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +51 -61
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +7 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +1 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +25 -22
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +130 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +13 -6
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +44 -20
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +3 -5
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +79 -3
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +68 -13
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +32 -20
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.d.ts +4 -4
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +6 -6
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +25 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +90 -28
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +22 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +129 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -6
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +6 -8
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -11
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +0 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +2 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +11 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +22 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -4
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -11
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +13 -2
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +11 -0
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +34 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +38 -0
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -5
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +39 -0
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +7 -7
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -3
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +36 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +2 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +2 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +7 -12
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -19
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +29 -7
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +96 -26
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +3 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +59 -28
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +5 -5
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +8 -8
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +16 -10
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +22 -15
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +33 -21
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +2 -3
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +3 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +16 -16
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +2 -2
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +5 -3
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +3 -4
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -16
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +28 -17
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +130 -16
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +9 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +92 -47
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +4 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +5 -1
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +3 -2
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +2 -2
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +4 -2
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +10 -11
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +3 -1
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +4 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +6 -11
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +1 -5
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +3 -2
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +27 -31
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -10
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -10
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +16 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +214 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -3
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -8
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -4
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -2
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +13 -12
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +9 -9
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +2 -4
- package/dist/store/jsx/omitted-props.d.ts.map +1 -1
- package/dist/store/jsx/omitted-props.js +2 -4
- package/dist/store/jsx/omitted-props.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +4 -2
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +3 -2
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +16 -8
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +3 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +8 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +13 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +56 -11
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +7 -11
- package/src/analysis/descriptor-render.ts +67 -73
- package/src/analysis/descriptor.ts +13 -16
- package/src/analysis/inheritance.ts +35 -34
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +172 -0
- package/src/analysis/param-structure.ts +90 -32
- package/src/analysis/ts-type.ts +4 -6
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +3 -2
- package/src/docs/api-reference.ts +162 -28
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +10 -10
- package/src/docs/render.ts +153 -39
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +8 -14
- package/src/gi.ts +4 -11
- package/src/gir/ancestry.ts +15 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -13
- package/src/gir/function.ts +15 -0
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +23 -2
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -7
- package/src/gir/parse.ts +8 -2
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -6
- package/src/gir/type-id.ts +51 -7
- package/src/gir/type-ref.ts +2 -1
- package/src/gir/type.ts +50 -6
- package/src/index.ts +18 -16
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -26
- package/src/khronos/args.ts +37 -14
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +134 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +12 -13
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +21 -18
- package/src/runner.ts +51 -40
- package/src/store/compile-store.ts +4 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +23 -17
- package/src/store/gi/callback.ts +3 -2
- package/src/store/gi/class.ts +6 -3
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/constant.ts +3 -6
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +55 -20
- package/src/store/gi/function.ts +44 -26
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +126 -68
- package/src/store/gi/param-marshal.ts +15 -1
- package/src/store/gi/pipeline.ts +7 -2
- package/src/store/gi/properties.ts +3 -2
- package/src/store/gi/property-accessor.ts +14 -11
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +9 -13
- package/src/store/gi/record-layout.ts +1 -5
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +36 -37
- package/src/store/gi/value-marshalable.ts +1 -10
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +8 -11
- package/src/store/jsx/element-prop-imports.ts +6 -5
- package/src/store/jsx/element-prop-types.ts +10 -2
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +15 -13
- package/src/store/jsx/metadata.ts +10 -10
- package/src/store/jsx/omitted-props.ts +2 -4
- package/src/store/jsx/pipeline.ts +6 -4
- package/src/store/jsx/props.ts +22 -9
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
package/src/compile.ts
CHANGED
|
@@ -29,8 +29,10 @@ const BASE_COMPILER_OPTIONS = {
|
|
|
29
29
|
noImplicitReturns: true,
|
|
30
30
|
noFallthroughCasesInSwitch: true,
|
|
31
31
|
allowUnreachableCode: false,
|
|
32
|
+
allowImportingTsExtensions: true,
|
|
32
33
|
forceConsistentCasingInFileNames: true,
|
|
33
34
|
resolveJsonModule: true,
|
|
35
|
+
rewriteRelativeImportExtensions: true,
|
|
34
36
|
skipLibCheck: true,
|
|
35
37
|
types: ["node"],
|
|
36
38
|
};
|
|
@@ -47,7 +49,6 @@ const FORMAT_HOST: ts.FormatDiagnosticsHost = {
|
|
|
47
49
|
getNewLine: () => "\n",
|
|
48
50
|
};
|
|
49
51
|
|
|
50
|
-
/** `@gtkx/codegen`'s own `node_modules`, which has `@types/node` plus the `@gtkx/*` deps the store typecheck needs. */
|
|
51
52
|
const codegenModules = (): string => {
|
|
52
53
|
const sourceDir = dirname(fileURLToPath(import.meta.url));
|
|
53
54
|
|
|
@@ -176,4 +177,4 @@ const checkModules = (params: { modules: SourceModule[]; resolveFrom: string; la
|
|
|
176
177
|
}
|
|
177
178
|
};
|
|
178
179
|
|
|
179
|
-
export { compileProject, checkModules, type SourceModule
|
|
180
|
+
export { compileProject, checkModules, type SourceModule };
|
|
@@ -6,55 +6,128 @@ import { Library } from "../gir/library.js";
|
|
|
6
6
|
import { type GirNamespace, namespaceDirectory } from "../gir/namespace.js";
|
|
7
7
|
import { dedupeCallables, isEmittableCallable } from "../store/gi/callables.js";
|
|
8
8
|
import { namespaceFunctionExportName } from "../store/gi/function.js";
|
|
9
|
+
import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
9
10
|
import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
|
|
10
|
-
import {
|
|
11
|
+
import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
12
|
+
import { type ElementPageContext, renderElementPage } from "./element-page.js";
|
|
11
13
|
import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
|
|
12
14
|
import { type GiSymbolEntry, renderSymbolPage, type SymbolPageOptions } from "./symbol-page.js";
|
|
13
15
|
|
|
16
|
+
/** What to index and the element config the rendered pages reflect. */
|
|
14
17
|
type ApiReferenceOptions = {
|
|
18
|
+
/** GIR library identifiers to load, such as `"Gtk-4.0"`; their dependencies are pulled in too. */
|
|
15
19
|
libraries: string[];
|
|
20
|
+
/** Directories to search for `.gir` files. */
|
|
16
21
|
girPath: string[];
|
|
22
|
+
/** Base props interfaces per element, as read by `readBuiltinElements`; without it pages miss them. */
|
|
23
|
+
props?: ElementProps;
|
|
24
|
+
/** GObject properties the project omits from generated props; without it pages show props that do not exist. */
|
|
25
|
+
omittedProps?: OmittedProps;
|
|
17
26
|
};
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
/** Narrows an `ApiReference.symbols` enumeration. */
|
|
29
|
+
type ApiSymbolQuery = {
|
|
30
|
+
/** GIR namespace to keep, matched case-insensitively; every namespace when omitted. */
|
|
31
|
+
namespace?: string;
|
|
32
|
+
/** Symbol kinds to keep; every kind when omitted. */
|
|
33
|
+
kinds?: ApiSymbolKind[];
|
|
34
|
+
};
|
|
20
35
|
|
|
36
|
+
/** What an indexed symbol is: one of the GIR symbol kinds, or a JSX element. */
|
|
37
|
+
type ApiSymbolKind =
|
|
38
|
+
"alias" |
|
|
39
|
+
"callback" |
|
|
40
|
+
"class" |
|
|
41
|
+
"constant" |
|
|
42
|
+
"element" |
|
|
43
|
+
"enum" |
|
|
44
|
+
"function" |
|
|
45
|
+
"interface" |
|
|
46
|
+
"record";
|
|
47
|
+
|
|
48
|
+
/** An indexed symbol, without its reference page. */
|
|
21
49
|
type ApiSymbol = {
|
|
50
|
+
/** GIR namespace declaring the symbol, such as `"Gtk"`. */
|
|
22
51
|
namespace: string;
|
|
52
|
+
/** Name within the namespace, which for an element is its GLib type name. */
|
|
23
53
|
name: string;
|
|
54
|
+
/** Kind the reference groups and filters the symbol by, `"element"` for a JSX tag. */
|
|
24
55
|
kind: ApiSymbolKind;
|
|
56
|
+
/** First sentence of the symbol's GIR documentation, elided past 220 characters and empty when it has none. */
|
|
25
57
|
summary: string;
|
|
26
58
|
};
|
|
27
59
|
|
|
60
|
+
/** How much of one namespace the reference indexes. */
|
|
28
61
|
type ApiNamespaceSummary = {
|
|
62
|
+
/** GIR namespace name, such as `"Gtk"`. */
|
|
29
63
|
name: string;
|
|
64
|
+
/** The `@gtkx/gi` subpath the namespace's symbols are imported from. */
|
|
30
65
|
importPath: string;
|
|
66
|
+
/** How many symbols other than JSX elements the namespace contributes. */
|
|
31
67
|
symbols: number;
|
|
68
|
+
/** How many JSX elements the namespace contributes. */
|
|
32
69
|
elements: number;
|
|
33
70
|
};
|
|
34
71
|
|
|
72
|
+
/** What an `ApiReference.lookup` found: a rendered page, several candidates for the name, or nothing. */
|
|
35
73
|
type ApiLookupResult =
|
|
36
|
-
| {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
74
|
+
| {
|
|
75
|
+
/** Discriminant selecting the variant. */
|
|
76
|
+
outcome: "page";
|
|
77
|
+
/** Index entry for the symbol the query resolved to. */
|
|
78
|
+
symbol: ApiSymbol;
|
|
79
|
+
/** The symbol's complete reference page, rendered as Markdown. */
|
|
80
|
+
markdown: string;
|
|
81
|
+
} |
|
|
82
|
+
{
|
|
83
|
+
/** Discriminant selecting the variant. */
|
|
84
|
+
outcome: "ambiguous";
|
|
85
|
+
/** Every symbol the name answers to, to be narrowed by namespace or kind. */
|
|
86
|
+
candidates: ApiSymbol[];
|
|
87
|
+
} |
|
|
88
|
+
{
|
|
89
|
+
/** Discriminant selecting the variant. */
|
|
90
|
+
outcome: "notFound";
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/** A fuzzy search over indexed symbol names. */
|
|
40
94
|
type ApiSearchOptions = {
|
|
95
|
+
/** Text matched case-insensitively against each symbol's name and its qualified `Namespace.Name` form. */
|
|
41
96
|
query: string;
|
|
97
|
+
/** GIR namespace to keep, matched case-insensitively; every namespace when omitted. */
|
|
42
98
|
namespace?: string;
|
|
99
|
+
/** Symbol kinds to keep; every kind when omitted. */
|
|
43
100
|
kinds?: ApiSymbolKind[];
|
|
101
|
+
/** Maximum number of results, 20 by default. */
|
|
44
102
|
limit?: number;
|
|
45
103
|
};
|
|
46
104
|
|
|
105
|
+
/** An indexed JSX element, carrying the widget class its page renders from. */
|
|
47
106
|
type ElementEntry = {
|
|
107
|
+
/** Discriminant marking the entry as a JSX element rather than a GIR symbol. */
|
|
48
108
|
kind: "element";
|
|
109
|
+
/** GIR namespace declaring the widget class. */
|
|
49
110
|
namespace: GirNamespace;
|
|
111
|
+
/** Element name, which is the class's GLib type name such as `GtkButton`. */
|
|
50
112
|
name: string;
|
|
113
|
+
/** Documentation text carried by the widget class's GIR node. */
|
|
51
114
|
doc: string | undefined;
|
|
115
|
+
/** The widget class the element is generated from. */
|
|
52
116
|
element: GlibNamedClass;
|
|
53
117
|
};
|
|
54
118
|
|
|
119
|
+
/** Anything the index holds: a GIR symbol or a JSX element. */
|
|
55
120
|
type SymbolEntry = GiSymbolEntry | ElementEntry;
|
|
56
|
-
type ScoredEntry = { score: number; entry: SymbolEntry };
|
|
57
121
|
|
|
122
|
+
/** A search hit: an indexed entry and how well its name answered the query. */
|
|
123
|
+
type ScoredEntry = {
|
|
124
|
+
/** Match strength, ranked best first: an exact name, then a prefix, then a substring. */
|
|
125
|
+
score: number;
|
|
126
|
+
/** The entry that matched. */
|
|
127
|
+
entry: SymbolEntry;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/** Every kind the reference indexes, in the order a namespace overview groups its symbols. */
|
|
58
131
|
const API_SYMBOL_KINDS: ApiSymbolKind[] = [
|
|
59
132
|
"element",
|
|
60
133
|
"class",
|
|
@@ -89,6 +162,35 @@ const compareNames = (a: string, b: string): number => {
|
|
|
89
162
|
return a > b ? 1 : 0;
|
|
90
163
|
};
|
|
91
164
|
|
|
165
|
+
const symbolKindSet = (kinds: ApiSymbolKind[] | undefined): Set<ApiSymbolKind> | undefined =>
|
|
166
|
+
kinds === undefined ? undefined : new Set(kinds);
|
|
167
|
+
|
|
168
|
+
const isQueriedEntry = (
|
|
169
|
+
entry: SymbolEntry,
|
|
170
|
+
namespaceFilter: string | undefined,
|
|
171
|
+
kinds: Set<ApiSymbolKind> | undefined,
|
|
172
|
+
): boolean => {
|
|
173
|
+
if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return kinds === undefined || kinds.has(entry.kind);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const compareApiSymbols = (a: ApiSymbol, b: ApiSymbol): number => {
|
|
181
|
+
const byNamespace = namespaceOrder(a.namespace).localeCompare(namespaceOrder(b.namespace));
|
|
182
|
+
|
|
183
|
+
return byNamespace === 0 ? a.name.localeCompare(b.name) : byNamespace;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Loads the GIR data for the given libraries and indexes every symbol and JSX element in it. The result is
|
|
188
|
+
* a read-only view: it generates no store and needs none, so a tool can explore the bindings a project would
|
|
189
|
+
* get without running codegen.
|
|
190
|
+
*
|
|
191
|
+
* @param options Which libraries to index, where to find them, and the project's element config.
|
|
192
|
+
* @returns The indexed reference.
|
|
193
|
+
*/
|
|
92
194
|
const loadApiReference = (options: ApiReferenceOptions): ApiReference => new ApiReference(options);
|
|
93
195
|
|
|
94
196
|
const functionEntry = (
|
|
@@ -204,29 +306,13 @@ const narrowToExactMatches = (candidates: SymbolEntry[], trimmed: string, isQual
|
|
|
204
306
|
return exact.length > 0 ? exact : candidates;
|
|
205
307
|
};
|
|
206
308
|
|
|
207
|
-
const isSearchFilterMatch = (
|
|
208
|
-
entry: SymbolEntry,
|
|
209
|
-
namespaceFilter: string | undefined,
|
|
210
|
-
kinds: ApiSymbolKind[] | undefined,
|
|
211
|
-
): boolean => {
|
|
212
|
-
if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (kinds !== undefined && !kinds.includes(entry.kind)) {
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
return true;
|
|
221
|
-
};
|
|
222
|
-
|
|
223
309
|
const getScoredEntry = (
|
|
224
310
|
entry: SymbolEntry,
|
|
225
311
|
query: string,
|
|
226
312
|
namespaceFilter: string | undefined,
|
|
227
|
-
kinds: ApiSymbolKind
|
|
313
|
+
kinds: Set<ApiSymbolKind> | undefined,
|
|
228
314
|
): ScoredEntry | undefined => {
|
|
229
|
-
if (!
|
|
315
|
+
if (!isQueriedEntry(entry, namespaceFilter, kinds)) {
|
|
230
316
|
return undefined;
|
|
231
317
|
}
|
|
232
318
|
|
|
@@ -265,6 +351,7 @@ const searchScore = (entry: SymbolEntry, query: string): number => {
|
|
|
265
351
|
return 0;
|
|
266
352
|
};
|
|
267
353
|
|
|
354
|
+
/** An index over the GIR data a project's bindings are generated from, queryable and renderable as Markdown. */
|
|
268
355
|
class ApiReference {
|
|
269
356
|
private library: Library;
|
|
270
357
|
private libraries: string[];
|
|
@@ -275,13 +362,24 @@ class ApiReference {
|
|
|
275
362
|
private byNamespace: Map<string, SymbolEntry[]> = new Map();
|
|
276
363
|
private elementsByClass: Map<string, string> = new Map();
|
|
277
364
|
|
|
365
|
+
private props: ElementProps;
|
|
366
|
+
private omittedProps: OmittedProps;
|
|
367
|
+
|
|
368
|
+
/** Indexes every symbol and JSX element in the GIR data the options point at. */
|
|
278
369
|
constructor(options: ApiReferenceOptions) {
|
|
279
370
|
this.libraries = options.libraries;
|
|
371
|
+
this.props = options.props ?? {};
|
|
372
|
+
this.omittedProps = options.omittedProps ?? {};
|
|
280
373
|
this.library = Library.load(options.libraries, options.girPath);
|
|
281
|
-
this.elementContext =
|
|
374
|
+
this.elementContext = { library: this.library, linkFor: (): string | undefined => undefined };
|
|
282
375
|
this.buildIndex();
|
|
283
376
|
}
|
|
284
377
|
|
|
378
|
+
private applyElementConfig(): void {
|
|
379
|
+
setElementProps(this.props);
|
|
380
|
+
setOmittedProps(this.omittedProps);
|
|
381
|
+
}
|
|
382
|
+
|
|
285
383
|
private add(entry: SymbolEntry): void {
|
|
286
384
|
this.entries.push(entry);
|
|
287
385
|
|
|
@@ -362,6 +460,8 @@ class ApiReference {
|
|
|
362
460
|
|
|
363
461
|
private renderPage(entry: SymbolEntry): string {
|
|
364
462
|
if (entry.kind === "element") {
|
|
463
|
+
this.applyElementConfig();
|
|
464
|
+
|
|
365
465
|
return renderElementPage(entry.element, this.elementContext);
|
|
366
466
|
}
|
|
367
467
|
|
|
@@ -395,7 +495,7 @@ class ApiReference {
|
|
|
395
495
|
private scoreEntries(
|
|
396
496
|
query: string,
|
|
397
497
|
namespaceFilter: string | undefined,
|
|
398
|
-
kinds: ApiSymbolKind
|
|
498
|
+
kinds: Set<ApiSymbolKind> | undefined,
|
|
399
499
|
): ScoredEntry[] {
|
|
400
500
|
const scored: ScoredEntry[] = [];
|
|
401
501
|
|
|
@@ -410,10 +510,18 @@ class ApiReference {
|
|
|
410
510
|
return scored;
|
|
411
511
|
}
|
|
412
512
|
|
|
513
|
+
/** Paths of the `.gir` files the index was built from, including the ones pulled in as dependencies. */
|
|
413
514
|
get girFiles(): string[] {
|
|
414
515
|
return this.library.girFiles;
|
|
415
516
|
}
|
|
416
517
|
|
|
518
|
+
/**
|
|
519
|
+
* Resolves a name to a single symbol and renders its reference page. The name may be bare (`Button`) or
|
|
520
|
+
* qualified (`Gtk.Button`), and is matched case-insensitively; a name several symbols answer to is
|
|
521
|
+
* reported as ambiguous rather than picked between.
|
|
522
|
+
*
|
|
523
|
+
* @param kind Restricts the match to one kind, which is how a class and its JSX element are told apart.
|
|
524
|
+
*/
|
|
417
525
|
lookup(query: string, kind?: ApiSymbolKind): ApiLookupResult {
|
|
418
526
|
const trimmed = query.trim();
|
|
419
527
|
|
|
@@ -435,6 +543,21 @@ class ApiReference {
|
|
|
435
543
|
return { outcome: "page", symbol: this.toApiSymbol(entry), markdown: this.renderPage(entry) };
|
|
436
544
|
}
|
|
437
545
|
|
|
546
|
+
/** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */
|
|
547
|
+
symbols(query: ApiSymbolQuery = {}): ApiSymbol[] {
|
|
548
|
+
const namespaceFilter = query.namespace?.toLowerCase();
|
|
549
|
+
const kinds = symbolKindSet(query.kinds);
|
|
550
|
+
|
|
551
|
+
return this.entries
|
|
552
|
+
.filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))
|
|
553
|
+
.map((entry) => this.toApiSymbol(entry))
|
|
554
|
+
.toSorted(compareApiSymbols);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Symbols whose name matches the query, best first: an exact name beats a prefix, which beats a
|
|
559
|
+
* substring, and shorter names win ties. An empty query matches nothing.
|
|
560
|
+
*/
|
|
438
561
|
search(options: ApiSearchOptions): ApiSymbol[] {
|
|
439
562
|
const query = options.query.trim().toLowerCase();
|
|
440
563
|
|
|
@@ -444,12 +567,13 @@ class ApiReference {
|
|
|
444
567
|
|
|
445
568
|
const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
|
|
446
569
|
const namespaceFilter = options.namespace?.toLowerCase();
|
|
447
|
-
const scored = this.scoreEntries(query, namespaceFilter, options.kinds);
|
|
570
|
+
const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));
|
|
448
571
|
scored.sort(compareScoredEntries);
|
|
449
572
|
|
|
450
573
|
return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));
|
|
451
574
|
}
|
|
452
575
|
|
|
576
|
+
/** A summary of every indexed namespace, ordered Gtk, Adw, then alphabetically. */
|
|
453
577
|
namespaces(): ApiNamespaceSummary[] {
|
|
454
578
|
const summaries = [...this.byNamespace].map(([name, entries]) => ({
|
|
455
579
|
name,
|
|
@@ -461,6 +585,10 @@ class ApiReference {
|
|
|
461
585
|
return sortStringsBy(summaries, (summary) => namespaceOrder(summary.name));
|
|
462
586
|
}
|
|
463
587
|
|
|
588
|
+
/**
|
|
589
|
+
* Sorted names of everything a namespace contributes, JSX elements included. The namespace is matched
|
|
590
|
+
* case-insensitively, and an unindexed one yields an empty array.
|
|
591
|
+
*/
|
|
464
592
|
symbolNames(namespaceName: string): string[] {
|
|
465
593
|
const namespace = this.findNamespace(namespaceName);
|
|
466
594
|
|
|
@@ -473,6 +601,7 @@ class ApiReference {
|
|
|
473
601
|
return sortStrings(entries.map((entry) => entry.name));
|
|
474
602
|
}
|
|
475
603
|
|
|
604
|
+
/** Renders the reference's Markdown landing page: every namespace, its import path, and its totals. */
|
|
476
605
|
overview(): string {
|
|
477
606
|
const rows = this.namespaces().map(
|
|
478
607
|
(summary) =>
|
|
@@ -500,6 +629,10 @@ class ApiReference {
|
|
|
500
629
|
].join("\n");
|
|
501
630
|
}
|
|
502
631
|
|
|
632
|
+
/**
|
|
633
|
+
* Renders one namespace's Markdown page: its import line and its symbol names grouped by kind. The
|
|
634
|
+
* namespace is matched case-insensitively, and an unindexed one yields undefined.
|
|
635
|
+
*/
|
|
503
636
|
namespaceOverview(name: string): string | undefined {
|
|
504
637
|
const namespace = this.findNamespace(name);
|
|
505
638
|
|
|
@@ -549,4 +682,5 @@ export {
|
|
|
549
682
|
type ApiNamespaceSummary,
|
|
550
683
|
type ApiLookupResult,
|
|
551
684
|
type ApiSearchOptions,
|
|
685
|
+
type ApiSymbolQuery,
|
|
552
686
|
};
|
package/src/docs/element-page.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
|
|
2
2
|
import type { GirClass } from "../gir/class.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
|
+
import type { HandwrittenProp } from "./handwritten-props.js";
|
|
4
5
|
import { ancestorChain } from "../gir/ancestry.js";
|
|
5
6
|
import { type GirNamespace, namespaceDirectory } from "../gir/namespace.js";
|
|
6
7
|
import { type GirProperty, isConstructableProperty } from "../gir/property.js";
|
|
8
|
+
import { annotationSpec } from "../store/gi/doc-spec.js";
|
|
7
9
|
import { elementPropTypeFor } from "../store/jsx/element-prop-imports.js";
|
|
8
|
-
import { buildGirIndex, type GirIndex } from "../store/jsx/gir-index.js";
|
|
9
10
|
import {
|
|
10
11
|
getGlibName,
|
|
11
12
|
type GlibNamedClass,
|
|
@@ -15,23 +16,30 @@ import {
|
|
|
15
16
|
} from "../store/jsx/intrinsic-elements.js";
|
|
16
17
|
import { isOmittedProp } from "../store/jsx/omitted-props.js";
|
|
17
18
|
import { isObjectProp } from "../store/jsx/props.js";
|
|
19
|
+
import { handwrittenPropsFor } from "./handwritten-props.js";
|
|
18
20
|
import {
|
|
21
|
+
annotationNotes,
|
|
19
22
|
classMethodEntries,
|
|
20
23
|
docMarkdown,
|
|
21
|
-
docsDefaultValue,
|
|
22
24
|
firstSentence,
|
|
23
25
|
implementsLine,
|
|
24
26
|
joinSections,
|
|
25
|
-
|
|
27
|
+
type MetaDocEntry,
|
|
26
28
|
methodsSectionBlocks,
|
|
27
29
|
originSignatureBlocks,
|
|
30
|
+
type OriginSignatureEntry,
|
|
31
|
+
propertyMetaLine,
|
|
28
32
|
renderDocsSignalSignature,
|
|
29
33
|
renderDocsType,
|
|
34
|
+
signalTags,
|
|
35
|
+
sortedMetaBlocks,
|
|
30
36
|
} from "./render.js";
|
|
31
37
|
|
|
38
|
+
/** Shared state an element's reference page renders from. */
|
|
32
39
|
type ElementPageContext = {
|
|
40
|
+
/** Parsed GIR the element, its ancestors, and the interfaces it implements are read from. */
|
|
33
41
|
library: Library;
|
|
34
|
-
|
|
42
|
+
/** Resolves a GLib type name to the URL of its page, undefined when it has none. */
|
|
35
43
|
linkFor: (glibName: string) => string | undefined;
|
|
36
44
|
};
|
|
37
45
|
|
|
@@ -42,24 +50,6 @@ type MemberOwner = {
|
|
|
42
50
|
glibName: string | undefined;
|
|
43
51
|
};
|
|
44
52
|
|
|
45
|
-
type PropEntry = {
|
|
46
|
-
name: string;
|
|
47
|
-
meta: string;
|
|
48
|
-
doc: string;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
type SignalEntry = {
|
|
52
|
-
name: string;
|
|
53
|
-
signature: string;
|
|
54
|
-
doc: string;
|
|
55
|
-
origin: string | undefined;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const createElementPageContext = (
|
|
59
|
-
library: Library,
|
|
60
|
-
linkFor: (glibName: string) => string | undefined,
|
|
61
|
-
): ElementPageContext => ({ library, girIndex: buildGirIndex(library), linkFor });
|
|
62
|
-
|
|
63
53
|
const frontmatter = (entry: GlibNamedClass): string => {
|
|
64
54
|
const sentence = firstSentence(entry.klass.doc);
|
|
65
55
|
const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;
|
|
@@ -120,29 +110,45 @@ const propertyEntry = (
|
|
|
120
110
|
owner: MemberOwner,
|
|
121
111
|
property: GirProperty,
|
|
122
112
|
jsName: string,
|
|
123
|
-
):
|
|
113
|
+
): MetaDocEntry => {
|
|
124
114
|
const isObject = isObjectProp(context.library, property);
|
|
125
115
|
const baseType = renderDocsType(context.library, property.type, false);
|
|
126
116
|
const type = isObject ? `${baseType} | ReactElement` : baseType;
|
|
127
|
-
const meta: string[] = [`\`${type}\``];
|
|
128
117
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
const accessNotes = isConstructableProperty(property)
|
|
119
|
+
? []
|
|
120
|
+
: [`read-only, observe with \`onNotify${upperFirst(jsName)}\``];
|
|
132
121
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
return {
|
|
123
|
+
name: jsName,
|
|
124
|
+
meta: propertyMetaLine({ type, property, accessNotes, origin: owner.origin }),
|
|
125
|
+
doc: docMarkdown(property.doc),
|
|
126
|
+
tags: annotationSpec(property.annotations),
|
|
127
|
+
};
|
|
128
|
+
};
|
|
136
129
|
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
const handwrittenPropMeta = (prop: HandwrittenProp, owner: MemberOwner): string =>
|
|
131
|
+
[`\`${prop.type}\``, ...(owner.origin === undefined ? [] : [`from \`${owner.origin}\``])].join(" · ");
|
|
132
|
+
|
|
133
|
+
const handwrittenPropEntries = (owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
|
|
134
|
+
const declared = owner.glibName === undefined ? undefined : elementPropTypeFor(owner.glibName);
|
|
135
|
+
|
|
136
|
+
if (declared === undefined) {
|
|
137
|
+
return [];
|
|
139
138
|
}
|
|
140
139
|
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
const entries: MetaDocEntry[] = [];
|
|
141
|
+
|
|
142
|
+
for (const prop of handwrittenPropsFor(declared)) {
|
|
143
|
+
if (seen.has(prop.name)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
seen.add(prop.name);
|
|
148
|
+
entries.push({ name: prop.name, meta: handwrittenPropMeta(prop, owner), doc: prop.doc });
|
|
143
149
|
}
|
|
144
150
|
|
|
145
|
-
return
|
|
151
|
+
return entries;
|
|
146
152
|
};
|
|
147
153
|
|
|
148
154
|
const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {
|
|
@@ -161,8 +167,8 @@ const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>
|
|
|
161
167
|
return jsName;
|
|
162
168
|
};
|
|
163
169
|
|
|
164
|
-
const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>):
|
|
165
|
-
const entries:
|
|
170
|
+
const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
|
|
171
|
+
const entries: MetaDocEntry[] = [...handwrittenPropEntries(owner, seen)];
|
|
166
172
|
|
|
167
173
|
for (const property of owner.klass.properties) {
|
|
168
174
|
const jsName = propJsName(property, owner, seen);
|
|
@@ -175,8 +181,8 @@ const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen:
|
|
|
175
181
|
return entries;
|
|
176
182
|
};
|
|
177
183
|
|
|
178
|
-
const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>):
|
|
179
|
-
const entries:
|
|
184
|
+
const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): MetaDocEntry[] => {
|
|
185
|
+
const entries: MetaDocEntry[] = [];
|
|
180
186
|
|
|
181
187
|
for (const owner of memberOwners(entry, context)) {
|
|
182
188
|
entries.push(...ownerPropEntries(context, owner, seen));
|
|
@@ -200,9 +206,7 @@ const propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfTy
|
|
|
200
206
|
return ["## Props", intro];
|
|
201
207
|
}
|
|
202
208
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return ["## Props", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];
|
|
209
|
+
return ["## Props", intro, ...sortedMetaBlocks(entries)];
|
|
206
210
|
};
|
|
207
211
|
|
|
208
212
|
const ownerSignalEntries = (
|
|
@@ -210,8 +214,8 @@ const ownerSignalEntries = (
|
|
|
210
214
|
owner: MemberOwner,
|
|
211
215
|
selfType: string,
|
|
212
216
|
seen: Set<string>,
|
|
213
|
-
):
|
|
214
|
-
const entries:
|
|
217
|
+
): OriginSignatureEntry[] => {
|
|
218
|
+
const entries: OriginSignatureEntry[] = [];
|
|
215
219
|
|
|
216
220
|
for (const signal of owner.klass.signals) {
|
|
217
221
|
const name = signalHandlerName(signal.name);
|
|
@@ -226,6 +230,7 @@ const ownerSignalEntries = (
|
|
|
226
230
|
name,
|
|
227
231
|
signature: renderDocsSignalSignature(context.library, signal, selfType),
|
|
228
232
|
doc: docMarkdown(signal.doc),
|
|
233
|
+
tags: signalTags(signal, true),
|
|
229
234
|
origin: owner.origin,
|
|
230
235
|
});
|
|
231
236
|
}
|
|
@@ -235,7 +240,7 @@ const ownerSignalEntries = (
|
|
|
235
240
|
|
|
236
241
|
const signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {
|
|
237
242
|
const seen: Set<string> = new Set();
|
|
238
|
-
const entries:
|
|
243
|
+
const entries: OriginSignatureEntry[] = [];
|
|
239
244
|
|
|
240
245
|
for (const owner of memberOwners(entry, context)) {
|
|
241
246
|
entries.push(...ownerSignalEntries(context, owner, selfType, seen));
|
|
@@ -266,6 +271,7 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
|
|
|
266
271
|
frontmatter(entry),
|
|
267
272
|
`# ${entry.glibName}`,
|
|
268
273
|
docMarkdown(entry.klass.doc),
|
|
274
|
+
...annotationNotes(entry.klass.annotations),
|
|
269
275
|
importBlock(entry),
|
|
270
276
|
...hierarchySection(entry, context),
|
|
271
277
|
...propsSection(entry, context, selfType),
|
|
@@ -274,4 +280,4 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
|
|
|
274
280
|
]);
|
|
275
281
|
};
|
|
276
282
|
|
|
277
|
-
export {
|
|
283
|
+
export { renderElementPage, type ElementPageContext };
|