@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
|
@@ -3,10 +3,13 @@ import { Library } from "../gir/library.js";
|
|
|
3
3
|
import { namespaceDirectory } from "../gir/namespace.js";
|
|
4
4
|
import { dedupeCallables, isEmittableCallable } from "../store/gi/callables.js";
|
|
5
5
|
import { namespaceFunctionExportName } from "../store/gi/function.js";
|
|
6
|
+
import { setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
6
7
|
import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
|
|
7
|
-
import {
|
|
8
|
+
import { setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
9
|
+
import { renderElementPage } from "./element-page.js";
|
|
8
10
|
import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
|
|
9
11
|
import { renderSymbolPage } from "./symbol-page.js";
|
|
12
|
+
/** Every kind the reference indexes, in the order a namespace overview groups its symbols. */
|
|
10
13
|
const API_SYMBOL_KINDS = [
|
|
11
14
|
"element",
|
|
12
15
|
"class",
|
|
@@ -36,6 +39,25 @@ const compareNames = (a, b) => {
|
|
|
36
39
|
}
|
|
37
40
|
return a > b ? 1 : 0;
|
|
38
41
|
};
|
|
42
|
+
const symbolKindSet = (kinds) => kinds === undefined ? undefined : new Set(kinds);
|
|
43
|
+
const isQueriedEntry = (entry, namespaceFilter, kinds) => {
|
|
44
|
+
if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return kinds === undefined || kinds.has(entry.kind);
|
|
48
|
+
};
|
|
49
|
+
const compareApiSymbols = (a, b) => {
|
|
50
|
+
const byNamespace = namespaceOrder(a.namespace).localeCompare(namespaceOrder(b.namespace));
|
|
51
|
+
return byNamespace === 0 ? a.name.localeCompare(b.name) : byNamespace;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Loads the GIR data for the given libraries and indexes every symbol and JSX element in it. The result is
|
|
55
|
+
* a read-only view: it generates no store and needs none, so a tool can explore the bindings a project would
|
|
56
|
+
* get without running codegen.
|
|
57
|
+
*
|
|
58
|
+
* @param options Which libraries to index, where to find them, and the project's element config.
|
|
59
|
+
* @returns The indexed reference.
|
|
60
|
+
*/
|
|
39
61
|
const loadApiReference = (options) => new ApiReference(options);
|
|
40
62
|
const functionEntry = (namespace, docsContext, fn) => {
|
|
41
63
|
if (!isEmittableCallable(docsContext, fn)) {
|
|
@@ -122,17 +144,8 @@ const narrowToExactMatches = (candidates, trimmed, isQualified) => {
|
|
|
122
144
|
const exact = candidates.filter((entry) => (isQualified ? `${entry.namespace.name}.${entry.name}` : entry.name) === trimmed);
|
|
123
145
|
return exact.length > 0 ? exact : candidates;
|
|
124
146
|
};
|
|
125
|
-
const isSearchFilterMatch = (entry, namespaceFilter, kinds) => {
|
|
126
|
-
if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
if (kinds !== undefined && !kinds.includes(entry.kind)) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
return true;
|
|
133
|
-
};
|
|
134
147
|
const getScoredEntry = (entry, query, namespaceFilter, kinds) => {
|
|
135
|
-
if (!
|
|
148
|
+
if (!isQueriedEntry(entry, namespaceFilter, kinds)) {
|
|
136
149
|
return undefined;
|
|
137
150
|
}
|
|
138
151
|
const score = searchScore(entry, query);
|
|
@@ -160,6 +173,7 @@ const searchScore = (entry, query) => {
|
|
|
160
173
|
}
|
|
161
174
|
return 0;
|
|
162
175
|
};
|
|
176
|
+
/** An index over the GIR data a project's bindings are generated from, queryable and renderable as Markdown. */
|
|
163
177
|
class ApiReference {
|
|
164
178
|
library;
|
|
165
179
|
libraries;
|
|
@@ -169,12 +183,21 @@ class ApiReference {
|
|
|
169
183
|
byName = new Map();
|
|
170
184
|
byNamespace = new Map();
|
|
171
185
|
elementsByClass = new Map();
|
|
186
|
+
props;
|
|
187
|
+
omittedProps;
|
|
188
|
+
/** Indexes every symbol and JSX element in the GIR data the options point at. */
|
|
172
189
|
constructor(options) {
|
|
173
190
|
this.libraries = options.libraries;
|
|
191
|
+
this.props = options.props ?? {};
|
|
192
|
+
this.omittedProps = options.omittedProps ?? {};
|
|
174
193
|
this.library = Library.load(options.libraries, options.girPath);
|
|
175
|
-
this.elementContext =
|
|
194
|
+
this.elementContext = { library: this.library, linkFor: () => undefined };
|
|
176
195
|
this.buildIndex();
|
|
177
196
|
}
|
|
197
|
+
applyElementConfig() {
|
|
198
|
+
setElementProps(this.props);
|
|
199
|
+
setOmittedProps(this.omittedProps);
|
|
200
|
+
}
|
|
178
201
|
add(entry) {
|
|
179
202
|
this.entries.push(entry);
|
|
180
203
|
const push = (map, key) => {
|
|
@@ -240,6 +263,7 @@ class ApiReference {
|
|
|
240
263
|
}
|
|
241
264
|
renderPage(entry) {
|
|
242
265
|
if (entry.kind === "element") {
|
|
266
|
+
this.applyElementConfig();
|
|
243
267
|
return renderElementPage(entry.element, this.elementContext);
|
|
244
268
|
}
|
|
245
269
|
return renderSymbolPage(entry, this.symbolPageOptions());
|
|
@@ -272,9 +296,17 @@ class ApiReference {
|
|
|
272
296
|
}
|
|
273
297
|
return scored;
|
|
274
298
|
}
|
|
299
|
+
/** Paths of the `.gir` files the index was built from, including the ones pulled in as dependencies. */
|
|
275
300
|
get girFiles() {
|
|
276
301
|
return this.library.girFiles;
|
|
277
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* Resolves a name to a single symbol and renders its reference page. The name may be bare (`Button`) or
|
|
305
|
+
* qualified (`Gtk.Button`), and is matched case-insensitively; a name several symbols answer to is
|
|
306
|
+
* reported as ambiguous rather than picked between.
|
|
307
|
+
*
|
|
308
|
+
* @param kind Restricts the match to one kind, which is how a class and its JSX element are told apart.
|
|
309
|
+
*/
|
|
278
310
|
lookup(query, kind) {
|
|
279
311
|
const trimmed = query.trim();
|
|
280
312
|
if (trimmed.length === 0) {
|
|
@@ -290,6 +322,19 @@ class ApiReference {
|
|
|
290
322
|
}
|
|
291
323
|
return { outcome: "page", symbol: this.toApiSymbol(entry), markdown: this.renderPage(entry) };
|
|
292
324
|
}
|
|
325
|
+
/** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */
|
|
326
|
+
symbols(query = {}) {
|
|
327
|
+
const namespaceFilter = query.namespace?.toLowerCase();
|
|
328
|
+
const kinds = symbolKindSet(query.kinds);
|
|
329
|
+
return this.entries
|
|
330
|
+
.filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))
|
|
331
|
+
.map((entry) => this.toApiSymbol(entry))
|
|
332
|
+
.toSorted(compareApiSymbols);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Symbols whose name matches the query, best first: an exact name beats a prefix, which beats a
|
|
336
|
+
* substring, and shorter names win ties. An empty query matches nothing.
|
|
337
|
+
*/
|
|
293
338
|
search(options) {
|
|
294
339
|
const query = options.query.trim().toLowerCase();
|
|
295
340
|
if (query.length === 0) {
|
|
@@ -297,10 +342,11 @@ class ApiReference {
|
|
|
297
342
|
}
|
|
298
343
|
const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
|
|
299
344
|
const namespaceFilter = options.namespace?.toLowerCase();
|
|
300
|
-
const scored = this.scoreEntries(query, namespaceFilter, options.kinds);
|
|
345
|
+
const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));
|
|
301
346
|
scored.sort(compareScoredEntries);
|
|
302
347
|
return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));
|
|
303
348
|
}
|
|
349
|
+
/** A summary of every indexed namespace, ordered Gtk, Adw, then alphabetically. */
|
|
304
350
|
namespaces() {
|
|
305
351
|
const summaries = [...this.byNamespace].map(([name, entries]) => ({
|
|
306
352
|
name,
|
|
@@ -310,6 +356,10 @@ class ApiReference {
|
|
|
310
356
|
}));
|
|
311
357
|
return sortStringsBy(summaries, (summary) => namespaceOrder(summary.name));
|
|
312
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Sorted names of everything a namespace contributes, JSX elements included. The namespace is matched
|
|
361
|
+
* case-insensitively, and an unindexed one yields an empty array.
|
|
362
|
+
*/
|
|
313
363
|
symbolNames(namespaceName) {
|
|
314
364
|
const namespace = this.findNamespace(namespaceName);
|
|
315
365
|
if (namespace === undefined) {
|
|
@@ -318,6 +368,7 @@ class ApiReference {
|
|
|
318
368
|
const entries = this.byNamespace.get(namespace.name) ?? [];
|
|
319
369
|
return sortStrings(entries.map((entry) => entry.name));
|
|
320
370
|
}
|
|
371
|
+
/** Renders the reference's Markdown landing page: every namespace, its import path, and its totals. */
|
|
321
372
|
overview() {
|
|
322
373
|
const rows = this.namespaces().map((summary) => `| ${summary.name} | \`${summary.importPath}\` | ${String(summary.symbols)} | ` +
|
|
323
374
|
`${String(summary.elements)} |`);
|
|
@@ -339,6 +390,10 @@ class ApiReference {
|
|
|
339
390
|
"",
|
|
340
391
|
].join("\n");
|
|
341
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Renders one namespace's Markdown page: its import line and its symbol names grouped by kind. The
|
|
395
|
+
* namespace is matched case-insensitively, and an unindexed one yields undefined.
|
|
396
|
+
*/
|
|
342
397
|
namespaceOverview(name) {
|
|
343
398
|
const namespace = this.findNamespace(name);
|
|
344
399
|
if (namespace === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-reference.js","sourceRoot":"","sources":["../../src/docs/api-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAqB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAuB,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAE,wBAAwB,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAsB,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AA8ChG,MAAM,gBAAgB,GAAoB;IACtC,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;CACb,CAAC;AAEF,MAAM,mBAAmB,GAAkC;IACvD,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;CACxB,CAAC;AAEF,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAClD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACR,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAA4B,EAAgB,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;AAEnG,MAAM,aAAa,GAAG,CAClB,SAAuB,EACvB,WAAoD,EACpD,EAAe,EACU,EAAE;IAC3B,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;IAEnC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,2BAA2B,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAE1F,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,SAAuB,EAAE,KAAe,EAA6B,EAAE;IACvF,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAAuB,EAAmB,EAAE;IAC9D,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,SAAuB,EAAE,MAAiB,EAA6B,EAAE;IAC1F,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,SAAuB,EAAmB,EAAE;IAC/D,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAAuB,EAAmB,EAAE,CAAC;IAC/D,GAAG,SAAS,CAAC,KAAK;SACb,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;SACnD,GAAG,CAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,MAAM;QACZ,SAAS;QACT,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,WAAW;KACd,CAAC,CAAC;IACP,GAAG,SAAS,CAAC,SAAS;SACjB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SAC7C,GAAG,CAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,UAAU;QAChB,SAAS;QACT,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,QAAQ;KACX,CAAC,CAAC;IACP,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,OAAO;QACb,SAAS;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,KAAK;KACR,CAAC,CAAC;IACH,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,UAAU;QAChB,SAAS;QACT,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,QAAQ;KACX,CAAC,CAAC;CACN,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,UAAyB,EAAE,OAAe,EAAE,WAAoB,EAAiB,EAAE;IAC7G,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAC9F,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAkB,EAClB,eAAmC,EACnC,KAAkC,EAC3B,EAAE;IACT,IAAI,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;QAC1F,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,KAAkB,EAClB,KAAa,EACb,eAAmC,EACnC,KAAkC,EACX,EAAE;IACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAExC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAc,EAAE,CAAc,EAAU,EAAE,CACpE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;IACjB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;IACzC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACxC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5F,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE7C,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,KAAa,EAAU,EAAE;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;IAElE,IAAI,IAAI,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,YAAY;IACN,OAAO,CAAU;IACjB,SAAS,CAAW;IACpB,cAAc,CAAqB;IACnC,OAAO,GAAkB,EAAE,CAAC;IAC5B,WAAW,GAA+B,IAAI,GAAG,EAAE,CAAC;IACpD,MAAM,GAA+B,IAAI,GAAG,EAAE,CAAC;IAC/C,WAAW,GAA+B,IAAI,GAAG,EAAE,CAAC;IACpD,eAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAY,OAA4B;QACpC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAuB,EAAE,CAAC,SAAS,CAAC,CAAC;QAClG,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,GAAG,CAAC,KAAkB;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,IAAI,GAAG,CAAC,GAA+B,EAAE,GAAW,EAAQ,EAAE;YAChE,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU;QACd,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC;gBACL,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;gBACtB,OAAO;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,SAAuB;QAC1C,MAAM,OAAO,GAAG;YACZ,GAAG,YAAY,CAAC,SAAS,CAAC;YAC1B,GAAG,aAAa,CAAC,SAAS,CAAC;YAC3B,GAAG,YAAY,CAAC,SAAS,CAAC;SAC7B,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,cAAc,CAAC,SAAuB;QAC1C,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAElE,KAAK,MAAM,EAAE,IAAI,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YAExD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,KAAkB;QAClC,OAAO;YACH,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;SACpC,CAAC;IACN,CAAC;IAEO,iBAAiB;QACrB,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,aAAa,IAAI,SAAS,EAAE,CAAC;SAC1G,CAAC;IACN,CAAC;IAEO,UAAU,CAAC,KAAkB;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEO,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEjC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBACzC,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,gBAAgB,CAAC,OAAe,EAAE,IAA+B;QACrE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACzD,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAEO,YAAY,CAChB,KAAa,EACb,eAAmC,EACnC,KAAkC;QAElC,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;YAElE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,IAAoB;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC5G,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAClG,CAAC;IAED,MAAM,CAAC,OAAyB;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAElC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,UAAU;QACN,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI;YACJ,UAAU,EAAE,YAAY,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;YACnE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;SACvE,CAAC,CAAC,CAAC;QAEJ,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,WAAW,CAAC,aAAqB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAE3D,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAC9B,CAAC,OAAO,EAAE,EAAE,CACR,KAAK,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,UAAU,QAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;YAC/E,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CACtC,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnF,OAAO;YACH,iBAAiB;YACjB,EAAE;YACF,0BAA0B,aAAa,yDAAyD;gBAChG,iFAAiF;gBACjF,iFAAiF;YACjF,EAAE;YACF,+FAA+F;gBAC/F,+EAA+E;gBAC/E,4BAA4B;YAC5B,EAAE;YACF,iDAAiD;YACjD,2BAA2B;YAC3B,GAAG,IAAI;YACP,EAAE;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG;YACV,KAAK,SAAS,CAAC,IAAI,EAAE;YACrB,EAAE;YACF,yBAAyB,SAAS,CAAC,IAAI,mBAAmB,SAAS,YAAY;SAClF,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAExF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,SAAS;YACb,CAAC;YAED,KAAK,CAAC,IAAI,CACN,EAAE,EACF,MAAM,mBAAmB,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAC3D,EAAE,EACF,WAAW,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;iBACxC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QACN,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACJ;AAGD,OAAO,EACH,gBAAgB,EAChB,gBAAgB,GAOnB,CAAC","sourcesContent":["import { pascalCase, sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { GirRecord } from \"../gir/record.js\";\nimport { Library } from \"../gir/library.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { dedupeCallables, isEmittableCallable } from \"../store/gi/callables.js\";\nimport { namespaceFunctionExportName } from \"../store/gi/function.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { createElementPageContext, type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { docsSignatureContext, firstSentence, namespaceOrder } from \"./render.js\";\nimport { type GiSymbolEntry, renderSymbolPage, type SymbolPageOptions } from \"./symbol-page.js\";\n\ntype ApiReferenceOptions = {\n libraries: string[];\n girPath: string[];\n};\n\ntype ApiSymbolKind = GiSymbolEntry[\"kind\"] | \"element\";\n\ntype ApiSymbol = {\n namespace: string;\n name: string;\n kind: ApiSymbolKind;\n summary: string;\n};\n\ntype ApiNamespaceSummary = {\n name: string;\n importPath: string;\n symbols: number;\n elements: number;\n};\n\ntype ApiLookupResult =\n | { outcome: \"page\"; symbol: ApiSymbol; markdown: string } |\n { outcome: \"ambiguous\"; candidates: ApiSymbol[] } |\n { outcome: \"notFound\" };\n\ntype ApiSearchOptions = {\n query: string;\n namespace?: string;\n kinds?: ApiSymbolKind[];\n limit?: number;\n};\n\ntype ElementEntry = {\n kind: \"element\";\n namespace: GirNamespace;\n name: string;\n doc: string | undefined;\n element: GlibNamedClass;\n};\n\ntype SymbolEntry = GiSymbolEntry | ElementEntry;\ntype ScoredEntry = { score: number; entry: SymbolEntry };\n\nconst API_SYMBOL_KINDS: ApiSymbolKind[] = [\n \"element\",\n \"class\",\n \"interface\",\n \"record\",\n \"enum\",\n \"callback\",\n \"alias\",\n \"function\",\n \"constant\",\n];\n\nconst KIND_SECTION_TITLES: Record<ApiSymbolKind, string> = {\n element: \"JSX elements\",\n class: \"Classes\",\n interface: \"Interfaces\",\n record: \"Records\",\n enum: \"Enums\",\n callback: \"Callbacks\",\n alias: \"Aliases\",\n function: \"Functions\",\n constant: \"Constants\",\n};\n\nconst DEFAULT_SEARCH_LIMIT = 20;\n\nconst compareNames = (a: string, b: string): number => {\n if (a < b) {\n return -1;\n }\n\n return a > b ? 1 : 0;\n};\n\nconst loadApiReference = (options: ApiReferenceOptions): ApiReference => new ApiReference(options);\n\nconst functionEntry = (\n namespace: GirNamespace,\n docsContext: ReturnType<typeof docsSignatureContext>,\n fn: GirFunction,\n): GiSymbolEntry | undefined => {\n if (!isEmittableCallable(docsContext, fn)) {\n return undefined;\n }\n\n const cIdentifier = fn.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const name = namespaceFunctionExportName(cIdentifier, fn.name, namespace.cSymbolPrefixes);\n\n return { kind: \"function\", namespace, name, doc: fn.doc, fn };\n};\n\nconst classEntry = (namespace: GirNamespace, klass: GirClass): GiSymbolEntry | undefined => {\n if (!klass.introspectable || klass.name.length === 0) {\n return undefined;\n }\n\n const kind = klass.isInterface ? \"interface\" : \"class\";\n\n return { kind, namespace, name: pascalCase(klass.name), doc: klass.doc, klass };\n};\n\nconst classEntries = (namespace: GirNamespace): GiSymbolEntry[] => {\n const entries: GiSymbolEntry[] = [];\n\n for (const klass of [...namespace.classes, ...namespace.interfaces]) {\n const entry = classEntry(namespace, klass);\n\n if (entry !== undefined) {\n entries.push(entry);\n }\n }\n\n return entries;\n};\n\nconst recordEntry = (namespace: GirNamespace, record: GirRecord): GiSymbolEntry | undefined => {\n if (!record.introspectable || record.isVtable || record.name.length === 0) {\n return undefined;\n }\n\n return { kind: \"record\", namespace, name: record.name, doc: record.doc, record };\n};\n\nconst recordEntries = (namespace: GirNamespace): GiSymbolEntry[] => {\n const entries: GiSymbolEntry[] = [];\n\n for (const record of namespace.records) {\n const entry = recordEntry(namespace, record);\n\n if (entry !== undefined) {\n entries.push(entry);\n }\n }\n\n return entries;\n};\n\nconst valueEntries = (namespace: GirNamespace): GiSymbolEntry[] => [\n ...namespace.enums\n .filter((enumeration) => enumeration.introspectable)\n .map<GiSymbolEntry>((enumeration) => ({\n kind: \"enum\",\n namespace,\n name: enumeration.name,\n doc: enumeration.doc,\n enumeration,\n })),\n ...namespace.callbacks\n .filter((callback) => callback.introspectable)\n .map<GiSymbolEntry>((callback) => ({\n kind: \"callback\",\n namespace,\n name: callback.name,\n doc: callback.doc,\n callback,\n })),\n ...namespace.aliases.map<GiSymbolEntry>((alias) => ({\n kind: \"alias\",\n namespace,\n name: alias.name,\n doc: alias.doc,\n alias,\n })),\n ...namespace.constants.map<GiSymbolEntry>((constant) => ({\n kind: \"constant\",\n namespace,\n name: constant.name,\n doc: constant.doc,\n constant,\n })),\n];\n\nconst narrowToExactMatches = (candidates: SymbolEntry[], trimmed: string, isQualified: boolean): SymbolEntry[] => {\n if (candidates.length <= 1) {\n return candidates;\n }\n\n const exact = candidates.filter(\n (entry) => (isQualified ? `${entry.namespace.name}.${entry.name}` : entry.name) === trimmed,\n );\n\n return exact.length > 0 ? exact : candidates;\n};\n\nconst isSearchFilterMatch = (\n entry: SymbolEntry,\n namespaceFilter: string | undefined,\n kinds: ApiSymbolKind[] | undefined,\n): boolean => {\n if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {\n return false;\n }\n\n if (kinds !== undefined && !kinds.includes(entry.kind)) {\n return false;\n }\n\n return true;\n};\n\nconst getScoredEntry = (\n entry: SymbolEntry,\n query: string,\n namespaceFilter: string | undefined,\n kinds: ApiSymbolKind[] | undefined,\n): ScoredEntry | undefined => {\n if (!isSearchFilterMatch(entry, namespaceFilter, kinds)) {\n return undefined;\n }\n\n const score = searchScore(entry, query);\n\n if (score === 0) {\n return undefined;\n }\n\n return { score, entry };\n};\n\nconst compareScoredEntries = (a: ScoredEntry, b: ScoredEntry): number =>\n b.score - a.score ||\n a.entry.name.length - b.entry.name.length ||\n compareNames(a.entry.name, b.entry.name) ||\n compareNames(namespaceOrder(a.entry.namespace.name), namespaceOrder(b.entry.namespace.name)) ||\n compareNames(a.entry.kind, b.entry.kind);\n\nconst searchScore = (entry: SymbolEntry, query: string): number => {\n const name = entry.name.toLowerCase();\n const qualified = `${entry.namespace.name.toLowerCase()}.${name}`;\n\n if (name === query || qualified === query) {\n return 3;\n }\n\n if (name.startsWith(query)) {\n return 2;\n }\n\n if (name.includes(query) || qualified.includes(query)) {\n return 1;\n }\n\n return 0;\n};\n\nclass ApiReference {\n private library: Library;\n private libraries: string[];\n private elementContext: ElementPageContext;\n private entries: SymbolEntry[] = [];\n private byQualified: Map<string, SymbolEntry[]> = new Map();\n private byName: Map<string, SymbolEntry[]> = new Map();\n private byNamespace: Map<string, SymbolEntry[]> = new Map();\n private elementsByClass: Map<string, string> = new Map();\n\n constructor(options: ApiReferenceOptions) {\n this.libraries = options.libraries;\n this.library = Library.load(options.libraries, options.girPath);\n this.elementContext = createElementPageContext(this.library, (): string | undefined => undefined);\n this.buildIndex();\n }\n\n private add(entry: SymbolEntry): void {\n this.entries.push(entry);\n\n const push = (map: Map<string, SymbolEntry[]>, key: string): void => {\n const list = map.get(key) ?? [];\n list.push(entry);\n map.set(key, list);\n };\n\n push(this.byQualified, `${entry.namespace.name}.${entry.name}`.toLowerCase());\n push(this.byName, entry.name.toLowerCase());\n push(this.byNamespace, entry.namespace.name);\n }\n\n private buildIndex(): void {\n for (const namespace of this.library.namespaces.values()) {\n this.indexNamespace(namespace);\n }\n\n for (const element of collectIntrinsicElementClasses(this.library)) {\n this.add({\n kind: \"element\",\n namespace: element.namespace,\n name: element.glibName,\n doc: element.klass.doc,\n element,\n });\n\n this.elementsByClass.set(`${element.namespace.name}.${element.klass.name}`, element.glibName);\n }\n }\n\n private indexNamespace(namespace: GirNamespace): void {\n const entries = [\n ...classEntries(namespace),\n ...recordEntries(namespace),\n ...valueEntries(namespace),\n ];\n\n for (const entry of entries) {\n this.add(entry);\n }\n\n this.indexFunctions(namespace);\n }\n\n private indexFunctions(namespace: GirNamespace): void {\n if (namespace.sharedLibrary === undefined) {\n return;\n }\n\n const docsContext = docsSignatureContext(namespace, this.library);\n\n for (const fn of dedupeCallables(namespace.functions)) {\n const entry = functionEntry(namespace, docsContext, fn);\n\n if (entry !== undefined) {\n this.add(entry);\n }\n }\n }\n\n private toApiSymbol(entry: SymbolEntry): ApiSymbol {\n return {\n namespace: entry.namespace.name,\n name: entry.name,\n kind: entry.kind,\n summary: firstSentence(entry.doc),\n };\n }\n\n private symbolPageOptions(): SymbolPageOptions {\n return {\n library: this.library,\n elementNameFor: (namespaceName, className) => this.elementsByClass.get(`${namespaceName}.${className}`),\n };\n }\n\n private renderPage(entry: SymbolEntry): string {\n if (entry.kind === \"element\") {\n return renderElementPage(entry.element, this.elementContext);\n }\n\n return renderSymbolPage(entry, this.symbolPageOptions());\n }\n\n private findNamespace(name: string): GirNamespace | undefined {\n const lower = name.toLowerCase();\n\n for (const namespace of this.library.namespaces.values()) {\n if (namespace.name.toLowerCase() === lower) {\n return namespace;\n }\n }\n\n return undefined;\n }\n\n private lookupCandidates(trimmed: string, kind: ApiSymbolKind | undefined): SymbolEntry[] {\n const isQualified = trimmed.includes(\".\");\n const map = isQualified ? this.byQualified : this.byName;\n let candidates = map.get(trimmed.toLowerCase()) ?? [];\n\n if (kind !== undefined) {\n candidates = candidates.filter((entry) => entry.kind === kind);\n }\n\n return narrowToExactMatches(candidates, trimmed, isQualified);\n }\n\n private scoreEntries(\n query: string,\n namespaceFilter: string | undefined,\n kinds: ApiSymbolKind[] | undefined,\n ): ScoredEntry[] {\n const scored: ScoredEntry[] = [];\n\n for (const entry of this.entries) {\n const item = getScoredEntry(entry, query, namespaceFilter, kinds);\n\n if (item !== undefined) {\n scored.push(item);\n }\n }\n\n return scored;\n }\n\n get girFiles(): string[] {\n return this.library.girFiles;\n }\n\n lookup(query: string, kind?: ApiSymbolKind): ApiLookupResult {\n const trimmed = query.trim();\n\n if (trimmed.length === 0) {\n return { outcome: \"notFound\" };\n }\n\n const candidates = this.lookupCandidates(trimmed, kind);\n const entry = candidates[0];\n\n if (entry === undefined) {\n return { outcome: \"notFound\" };\n }\n\n if (candidates.length > 1) {\n return { outcome: \"ambiguous\", candidates: candidates.map((candidate) => this.toApiSymbol(candidate)) };\n }\n\n return { outcome: \"page\", symbol: this.toApiSymbol(entry), markdown: this.renderPage(entry) };\n }\n\n search(options: ApiSearchOptions): ApiSymbol[] {\n const query = options.query.trim().toLowerCase();\n\n if (query.length === 0) {\n return [];\n }\n\n const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));\n const namespaceFilter = options.namespace?.toLowerCase();\n const scored = this.scoreEntries(query, namespaceFilter, options.kinds);\n scored.sort(compareScoredEntries);\n\n return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));\n }\n\n namespaces(): ApiNamespaceSummary[] {\n const summaries = [...this.byNamespace].map(([name, entries]) => ({\n name,\n importPath: `@gtkx/gi/${namespaceDirectory({ name })}`,\n symbols: entries.filter((entry) => entry.kind !== \"element\").length,\n elements: entries.filter((entry) => entry.kind === \"element\").length,\n }));\n\n return sortStringsBy(summaries, (summary) => namespaceOrder(summary.name));\n }\n\n symbolNames(namespaceName: string): string[] {\n const namespace = this.findNamespace(namespaceName);\n\n if (namespace === undefined) {\n return [];\n }\n\n const entries = this.byNamespace.get(namespace.name) ?? [];\n\n return sortStrings(entries.map((entry) => entry.name));\n }\n\n overview(): string {\n const rows = this.namespaces().map(\n (summary) =>\n `| ${summary.name} | \\`${summary.importPath}\\` | ${String(summary.symbols)} | ` +\n `${String(summary.elements)} |`,\n );\n\n const librariesList = this.libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"# API Reference\",\n \"\",\n `Generated bindings for ${librariesList} and the namespaces they pull in. Classes, interfaces, ` +\n \"records, enums, callbacks, aliases, functions, and constants are imported from \" +\n \"`@gtkx/gi/<namespace>`; JSX elements are imported from `@gtkx/jsx/<namespace>`.\",\n \"\",\n \"Every symbol has a reference page addressed by its qualified name (for example `Gtk.Button`, \" +\n \"`Gtk.Orientation`, `GLib.idleAdd`) and every JSX element by its element name \" +\n \"(for example `GtkButton`).\",\n \"\",\n \"| Namespace | Import | Symbols | JSX elements |\",\n \"| --- | --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n }\n\n namespaceOverview(name: string): string | undefined {\n const namespace = this.findNamespace(name);\n\n if (namespace === undefined) {\n return undefined;\n }\n\n const entries = this.byNamespace.get(namespace.name) ?? [];\n const directory = namespaceDirectory(namespace);\n\n const lines = [\n `# ${namespace.name}`,\n \"\",\n `\\`\\`\\`ts\\nimport * as ${namespace.name} from \"@gtkx/gi/${directory}\";\\n\\`\\`\\``,\n ];\n\n for (const kind of API_SYMBOL_KINDS) {\n const names = entries.filter((entry) => entry.kind === kind).map((entry) => entry.name);\n\n if (names.length === 0) {\n continue;\n }\n\n lines.push(\n \"\",\n `## ${KIND_SECTION_TITLES[kind]} (${String(names.length)})`,\n \"\",\n sortStrings(names)\n .map((symbolName) => `\\`${symbolName}\\``)\n .join(\", \"),\n );\n }\n\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n }\n}\n\nexport type { ApiReference };\nexport {\n API_SYMBOL_KINDS,\n loadApiReference,\n type ApiReferenceOptions,\n type ApiSymbolKind,\n type ApiSymbol,\n type ApiNamespaceSummary,\n type ApiLookupResult,\n type ApiSearchOptions,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"api-reference.js","sourceRoot":"","sources":["../../src/docs/api-reference.ts"],"names":[],"mappings":"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","sourcesContent":["import { pascalCase, sortStrings, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { GirRecord } from \"../gir/record.js\";\nimport { Library } from \"../gir/library.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { dedupeCallables, isEmittableCallable } from \"../store/gi/callables.js\";\nimport { namespaceFunctionExportName } from \"../store/gi/function.js\";\nimport { type ElementProps, setElementProps } from \"../store/jsx/element-prop-imports.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { type OmittedProps, setOmittedProps } from \"../store/jsx/omitted-props.js\";\nimport { type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { docsSignatureContext, firstSentence, namespaceOrder } from \"./render.js\";\nimport { type GiSymbolEntry, renderSymbolPage, type SymbolPageOptions } from \"./symbol-page.js\";\n\n/** What to index and the element config the rendered pages reflect. */\ntype ApiReferenceOptions = {\n /** GIR library identifiers to load, such as `\"Gtk-4.0\"`; their dependencies are pulled in too. */\n libraries: string[];\n /** Directories to search for `.gir` files. */\n girPath: string[];\n /** Base props interfaces per element, as read by `readBuiltinElements`; without it pages miss them. */\n props?: ElementProps;\n /** GObject properties the project omits from generated props; without it pages show props that do not exist. */\n omittedProps?: OmittedProps;\n};\n\n/** Narrows an `ApiReference.symbols` enumeration. */\ntype ApiSymbolQuery = {\n /** GIR namespace to keep, matched case-insensitively; every namespace when omitted. */\n namespace?: string;\n /** Symbol kinds to keep; every kind when omitted. */\n kinds?: ApiSymbolKind[];\n};\n\n/** What an indexed symbol is: one of the GIR symbol kinds, or a JSX element. */\ntype ApiSymbolKind =\n \"alias\" |\n \"callback\" |\n \"class\" |\n \"constant\" |\n \"element\" |\n \"enum\" |\n \"function\" |\n \"interface\" |\n \"record\";\n\n/** An indexed symbol, without its reference page. */\ntype ApiSymbol = {\n /** GIR namespace declaring the symbol, such as `\"Gtk\"`. */\n namespace: string;\n /** Name within the namespace, which for an element is its GLib type name. */\n name: string;\n /** Kind the reference groups and filters the symbol by, `\"element\"` for a JSX tag. */\n kind: ApiSymbolKind;\n /** First sentence of the symbol's GIR documentation, elided past 220 characters and empty when it has none. */\n summary: string;\n};\n\n/** How much of one namespace the reference indexes. */\ntype ApiNamespaceSummary = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n name: string;\n /** The `@gtkx/gi` subpath the namespace's symbols are imported from. */\n importPath: string;\n /** How many symbols other than JSX elements the namespace contributes. */\n symbols: number;\n /** How many JSX elements the namespace contributes. */\n elements: number;\n};\n\n/** What an `ApiReference.lookup` found: a rendered page, several candidates for the name, or nothing. */\ntype ApiLookupResult =\n | {\n /** Discriminant selecting the variant. */\n outcome: \"page\";\n /** Index entry for the symbol the query resolved to. */\n symbol: ApiSymbol;\n /** The symbol's complete reference page, rendered as Markdown. */\n markdown: string;\n } |\n {\n /** Discriminant selecting the variant. */\n outcome: \"ambiguous\";\n /** Every symbol the name answers to, to be narrowed by namespace or kind. */\n candidates: ApiSymbol[];\n } |\n {\n /** Discriminant selecting the variant. */\n outcome: \"notFound\";\n };\n\n/** A fuzzy search over indexed symbol names. */\ntype ApiSearchOptions = {\n /** Text matched case-insensitively against each symbol's name and its qualified `Namespace.Name` form. */\n query: string;\n /** GIR namespace to keep, matched case-insensitively; every namespace when omitted. */\n namespace?: string;\n /** Symbol kinds to keep; every kind when omitted. */\n kinds?: ApiSymbolKind[];\n /** Maximum number of results, 20 by default. */\n limit?: number;\n};\n\n/** An indexed JSX element, carrying the widget class its page renders from. */\ntype ElementEntry = {\n /** Discriminant marking the entry as a JSX element rather than a GIR symbol. */\n kind: \"element\";\n /** GIR namespace declaring the widget class. */\n namespace: GirNamespace;\n /** Element name, which is the class's GLib type name such as `GtkButton`. */\n name: string;\n /** Documentation text carried by the widget class's GIR node. */\n doc: string | undefined;\n /** The widget class the element is generated from. */\n element: GlibNamedClass;\n};\n\n/** Anything the index holds: a GIR symbol or a JSX element. */\ntype SymbolEntry = GiSymbolEntry | ElementEntry;\n\n/** A search hit: an indexed entry and how well its name answered the query. */\ntype ScoredEntry = {\n /** Match strength, ranked best first: an exact name, then a prefix, then a substring. */\n score: number;\n /** The entry that matched. */\n entry: SymbolEntry;\n};\n\n/** Every kind the reference indexes, in the order a namespace overview groups its symbols. */\nconst API_SYMBOL_KINDS: ApiSymbolKind[] = [\n \"element\",\n \"class\",\n \"interface\",\n \"record\",\n \"enum\",\n \"callback\",\n \"alias\",\n \"function\",\n \"constant\",\n];\n\nconst KIND_SECTION_TITLES: Record<ApiSymbolKind, string> = {\n element: \"JSX elements\",\n class: \"Classes\",\n interface: \"Interfaces\",\n record: \"Records\",\n enum: \"Enums\",\n callback: \"Callbacks\",\n alias: \"Aliases\",\n function: \"Functions\",\n constant: \"Constants\",\n};\n\nconst DEFAULT_SEARCH_LIMIT = 20;\n\nconst compareNames = (a: string, b: string): number => {\n if (a < b) {\n return -1;\n }\n\n return a > b ? 1 : 0;\n};\n\nconst symbolKindSet = (kinds: ApiSymbolKind[] | undefined): Set<ApiSymbolKind> | undefined =>\n kinds === undefined ? undefined : new Set(kinds);\n\nconst isQueriedEntry = (\n entry: SymbolEntry,\n namespaceFilter: string | undefined,\n kinds: Set<ApiSymbolKind> | undefined,\n): boolean => {\n if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {\n return false;\n }\n\n return kinds === undefined || kinds.has(entry.kind);\n};\n\nconst compareApiSymbols = (a: ApiSymbol, b: ApiSymbol): number => {\n const byNamespace = namespaceOrder(a.namespace).localeCompare(namespaceOrder(b.namespace));\n\n return byNamespace === 0 ? a.name.localeCompare(b.name) : byNamespace;\n};\n\n/**\n * Loads the GIR data for the given libraries and indexes every symbol and JSX element in it. The result is\n * a read-only view: it generates no store and needs none, so a tool can explore the bindings a project would\n * get without running codegen.\n *\n * @param options Which libraries to index, where to find them, and the project's element config.\n * @returns The indexed reference.\n */\nconst loadApiReference = (options: ApiReferenceOptions): ApiReference => new ApiReference(options);\n\nconst functionEntry = (\n namespace: GirNamespace,\n docsContext: ReturnType<typeof docsSignatureContext>,\n fn: GirFunction,\n): GiSymbolEntry | undefined => {\n if (!isEmittableCallable(docsContext, fn)) {\n return undefined;\n }\n\n const cIdentifier = fn.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const name = namespaceFunctionExportName(cIdentifier, fn.name, namespace.cSymbolPrefixes);\n\n return { kind: \"function\", namespace, name, doc: fn.doc, fn };\n};\n\nconst classEntry = (namespace: GirNamespace, klass: GirClass): GiSymbolEntry | undefined => {\n if (!klass.introspectable || klass.name.length === 0) {\n return undefined;\n }\n\n const kind = klass.isInterface ? \"interface\" : \"class\";\n\n return { kind, namespace, name: pascalCase(klass.name), doc: klass.doc, klass };\n};\n\nconst classEntries = (namespace: GirNamespace): GiSymbolEntry[] => {\n const entries: GiSymbolEntry[] = [];\n\n for (const klass of [...namespace.classes, ...namespace.interfaces]) {\n const entry = classEntry(namespace, klass);\n\n if (entry !== undefined) {\n entries.push(entry);\n }\n }\n\n return entries;\n};\n\nconst recordEntry = (namespace: GirNamespace, record: GirRecord): GiSymbolEntry | undefined => {\n if (!record.introspectable || record.isVtable || record.name.length === 0) {\n return undefined;\n }\n\n return { kind: \"record\", namespace, name: record.name, doc: record.doc, record };\n};\n\nconst recordEntries = (namespace: GirNamespace): GiSymbolEntry[] => {\n const entries: GiSymbolEntry[] = [];\n\n for (const record of namespace.records) {\n const entry = recordEntry(namespace, record);\n\n if (entry !== undefined) {\n entries.push(entry);\n }\n }\n\n return entries;\n};\n\nconst valueEntries = (namespace: GirNamespace): GiSymbolEntry[] => [\n ...namespace.enums\n .filter((enumeration) => enumeration.introspectable)\n .map<GiSymbolEntry>((enumeration) => ({\n kind: \"enum\",\n namespace,\n name: enumeration.name,\n doc: enumeration.doc,\n enumeration,\n })),\n ...namespace.callbacks\n .filter((callback) => callback.introspectable)\n .map<GiSymbolEntry>((callback) => ({\n kind: \"callback\",\n namespace,\n name: callback.name,\n doc: callback.doc,\n callback,\n })),\n ...namespace.aliases.map<GiSymbolEntry>((alias) => ({\n kind: \"alias\",\n namespace,\n name: alias.name,\n doc: alias.doc,\n alias,\n })),\n ...namespace.constants.map<GiSymbolEntry>((constant) => ({\n kind: \"constant\",\n namespace,\n name: constant.name,\n doc: constant.doc,\n constant,\n })),\n];\n\nconst narrowToExactMatches = (candidates: SymbolEntry[], trimmed: string, isQualified: boolean): SymbolEntry[] => {\n if (candidates.length <= 1) {\n return candidates;\n }\n\n const exact = candidates.filter(\n (entry) => (isQualified ? `${entry.namespace.name}.${entry.name}` : entry.name) === trimmed,\n );\n\n return exact.length > 0 ? exact : candidates;\n};\n\nconst getScoredEntry = (\n entry: SymbolEntry,\n query: string,\n namespaceFilter: string | undefined,\n kinds: Set<ApiSymbolKind> | undefined,\n): ScoredEntry | undefined => {\n if (!isQueriedEntry(entry, namespaceFilter, kinds)) {\n return undefined;\n }\n\n const score = searchScore(entry, query);\n\n if (score === 0) {\n return undefined;\n }\n\n return { score, entry };\n};\n\nconst compareScoredEntries = (a: ScoredEntry, b: ScoredEntry): number =>\n b.score - a.score ||\n a.entry.name.length - b.entry.name.length ||\n compareNames(a.entry.name, b.entry.name) ||\n compareNames(namespaceOrder(a.entry.namespace.name), namespaceOrder(b.entry.namespace.name)) ||\n compareNames(a.entry.kind, b.entry.kind);\n\nconst searchScore = (entry: SymbolEntry, query: string): number => {\n const name = entry.name.toLowerCase();\n const qualified = `${entry.namespace.name.toLowerCase()}.${name}`;\n\n if (name === query || qualified === query) {\n return 3;\n }\n\n if (name.startsWith(query)) {\n return 2;\n }\n\n if (name.includes(query) || qualified.includes(query)) {\n return 1;\n }\n\n return 0;\n};\n\n/** An index over the GIR data a project's bindings are generated from, queryable and renderable as Markdown. */\nclass ApiReference {\n private library: Library;\n private libraries: string[];\n private elementContext: ElementPageContext;\n private entries: SymbolEntry[] = [];\n private byQualified: Map<string, SymbolEntry[]> = new Map();\n private byName: Map<string, SymbolEntry[]> = new Map();\n private byNamespace: Map<string, SymbolEntry[]> = new Map();\n private elementsByClass: Map<string, string> = new Map();\n\n private props: ElementProps;\n private omittedProps: OmittedProps;\n\n /** Indexes every symbol and JSX element in the GIR data the options point at. */\n constructor(options: ApiReferenceOptions) {\n this.libraries = options.libraries;\n this.props = options.props ?? {};\n this.omittedProps = options.omittedProps ?? {};\n this.library = Library.load(options.libraries, options.girPath);\n this.elementContext = { library: this.library, linkFor: (): string | undefined => undefined };\n this.buildIndex();\n }\n\n private applyElementConfig(): void {\n setElementProps(this.props);\n setOmittedProps(this.omittedProps);\n }\n\n private add(entry: SymbolEntry): void {\n this.entries.push(entry);\n\n const push = (map: Map<string, SymbolEntry[]>, key: string): void => {\n const list = map.get(key) ?? [];\n list.push(entry);\n map.set(key, list);\n };\n\n push(this.byQualified, `${entry.namespace.name}.${entry.name}`.toLowerCase());\n push(this.byName, entry.name.toLowerCase());\n push(this.byNamespace, entry.namespace.name);\n }\n\n private buildIndex(): void {\n for (const namespace of this.library.namespaces.values()) {\n this.indexNamespace(namespace);\n }\n\n for (const element of collectIntrinsicElementClasses(this.library)) {\n this.add({\n kind: \"element\",\n namespace: element.namespace,\n name: element.glibName,\n doc: element.klass.doc,\n element,\n });\n\n this.elementsByClass.set(`${element.namespace.name}.${element.klass.name}`, element.glibName);\n }\n }\n\n private indexNamespace(namespace: GirNamespace): void {\n const entries = [\n ...classEntries(namespace),\n ...recordEntries(namespace),\n ...valueEntries(namespace),\n ];\n\n for (const entry of entries) {\n this.add(entry);\n }\n\n this.indexFunctions(namespace);\n }\n\n private indexFunctions(namespace: GirNamespace): void {\n if (namespace.sharedLibrary === undefined) {\n return;\n }\n\n const docsContext = docsSignatureContext(namespace, this.library);\n\n for (const fn of dedupeCallables(namespace.functions)) {\n const entry = functionEntry(namespace, docsContext, fn);\n\n if (entry !== undefined) {\n this.add(entry);\n }\n }\n }\n\n private toApiSymbol(entry: SymbolEntry): ApiSymbol {\n return {\n namespace: entry.namespace.name,\n name: entry.name,\n kind: entry.kind,\n summary: firstSentence(entry.doc),\n };\n }\n\n private symbolPageOptions(): SymbolPageOptions {\n return {\n library: this.library,\n elementNameFor: (namespaceName, className) => this.elementsByClass.get(`${namespaceName}.${className}`),\n };\n }\n\n private renderPage(entry: SymbolEntry): string {\n if (entry.kind === \"element\") {\n this.applyElementConfig();\n\n return renderElementPage(entry.element, this.elementContext);\n }\n\n return renderSymbolPage(entry, this.symbolPageOptions());\n }\n\n private findNamespace(name: string): GirNamespace | undefined {\n const lower = name.toLowerCase();\n\n for (const namespace of this.library.namespaces.values()) {\n if (namespace.name.toLowerCase() === lower) {\n return namespace;\n }\n }\n\n return undefined;\n }\n\n private lookupCandidates(trimmed: string, kind: ApiSymbolKind | undefined): SymbolEntry[] {\n const isQualified = trimmed.includes(\".\");\n const map = isQualified ? this.byQualified : this.byName;\n let candidates = map.get(trimmed.toLowerCase()) ?? [];\n\n if (kind !== undefined) {\n candidates = candidates.filter((entry) => entry.kind === kind);\n }\n\n return narrowToExactMatches(candidates, trimmed, isQualified);\n }\n\n private scoreEntries(\n query: string,\n namespaceFilter: string | undefined,\n kinds: Set<ApiSymbolKind> | undefined,\n ): ScoredEntry[] {\n const scored: ScoredEntry[] = [];\n\n for (const entry of this.entries) {\n const item = getScoredEntry(entry, query, namespaceFilter, kinds);\n\n if (item !== undefined) {\n scored.push(item);\n }\n }\n\n return scored;\n }\n\n /** Paths of the `.gir` files the index was built from, including the ones pulled in as dependencies. */\n get girFiles(): string[] {\n return this.library.girFiles;\n }\n\n /**\n * Resolves a name to a single symbol and renders its reference page. The name may be bare (`Button`) or\n * qualified (`Gtk.Button`), and is matched case-insensitively; a name several symbols answer to is\n * reported as ambiguous rather than picked between.\n *\n * @param kind Restricts the match to one kind, which is how a class and its JSX element are told apart.\n */\n lookup(query: string, kind?: ApiSymbolKind): ApiLookupResult {\n const trimmed = query.trim();\n\n if (trimmed.length === 0) {\n return { outcome: \"notFound\" };\n }\n\n const candidates = this.lookupCandidates(trimmed, kind);\n const entry = candidates[0];\n\n if (entry === undefined) {\n return { outcome: \"notFound\" };\n }\n\n if (candidates.length > 1) {\n return { outcome: \"ambiguous\", candidates: candidates.map((candidate) => this.toApiSymbol(candidate)) };\n }\n\n return { outcome: \"page\", symbol: this.toApiSymbol(entry), markdown: this.renderPage(entry) };\n }\n\n /** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */\n symbols(query: ApiSymbolQuery = {}): ApiSymbol[] {\n const namespaceFilter = query.namespace?.toLowerCase();\n const kinds = symbolKindSet(query.kinds);\n\n return this.entries\n .filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))\n .map((entry) => this.toApiSymbol(entry))\n .toSorted(compareApiSymbols);\n }\n\n /**\n * Symbols whose name matches the query, best first: an exact name beats a prefix, which beats a\n * substring, and shorter names win ties. An empty query matches nothing.\n */\n search(options: ApiSearchOptions): ApiSymbol[] {\n const query = options.query.trim().toLowerCase();\n\n if (query.length === 0) {\n return [];\n }\n\n const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));\n const namespaceFilter = options.namespace?.toLowerCase();\n const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));\n scored.sort(compareScoredEntries);\n\n return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));\n }\n\n /** A summary of every indexed namespace, ordered Gtk, Adw, then alphabetically. */\n namespaces(): ApiNamespaceSummary[] {\n const summaries = [...this.byNamespace].map(([name, entries]) => ({\n name,\n importPath: `@gtkx/gi/${namespaceDirectory({ name })}`,\n symbols: entries.filter((entry) => entry.kind !== \"element\").length,\n elements: entries.filter((entry) => entry.kind === \"element\").length,\n }));\n\n return sortStringsBy(summaries, (summary) => namespaceOrder(summary.name));\n }\n\n /**\n * Sorted names of everything a namespace contributes, JSX elements included. The namespace is matched\n * case-insensitively, and an unindexed one yields an empty array.\n */\n symbolNames(namespaceName: string): string[] {\n const namespace = this.findNamespace(namespaceName);\n\n if (namespace === undefined) {\n return [];\n }\n\n const entries = this.byNamespace.get(namespace.name) ?? [];\n\n return sortStrings(entries.map((entry) => entry.name));\n }\n\n /** Renders the reference's Markdown landing page: every namespace, its import path, and its totals. */\n overview(): string {\n const rows = this.namespaces().map(\n (summary) =>\n `| ${summary.name} | \\`${summary.importPath}\\` | ${String(summary.symbols)} | ` +\n `${String(summary.elements)} |`,\n );\n\n const librariesList = this.libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"# API Reference\",\n \"\",\n `Generated bindings for ${librariesList} and the namespaces they pull in. Classes, interfaces, ` +\n \"records, enums, callbacks, aliases, functions, and constants are imported from \" +\n \"`@gtkx/gi/<namespace>`; JSX elements are imported from `@gtkx/jsx/<namespace>`.\",\n \"\",\n \"Every symbol has a reference page addressed by its qualified name (for example `Gtk.Button`, \" +\n \"`Gtk.Orientation`, `GLib.idleAdd`) and every JSX element by its element name \" +\n \"(for example `GtkButton`).\",\n \"\",\n \"| Namespace | Import | Symbols | JSX elements |\",\n \"| --- | --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n }\n\n /**\n * Renders one namespace's Markdown page: its import line and its symbol names grouped by kind. The\n * namespace is matched case-insensitively, and an unindexed one yields undefined.\n */\n namespaceOverview(name: string): string | undefined {\n const namespace = this.findNamespace(name);\n\n if (namespace === undefined) {\n return undefined;\n }\n\n const entries = this.byNamespace.get(namespace.name) ?? [];\n const directory = namespaceDirectory(namespace);\n\n const lines = [\n `# ${namespace.name}`,\n \"\",\n `\\`\\`\\`ts\\nimport * as ${namespace.name} from \"@gtkx/gi/${directory}\";\\n\\`\\`\\``,\n ];\n\n for (const kind of API_SYMBOL_KINDS) {\n const names = entries.filter((entry) => entry.kind === kind).map((entry) => entry.name);\n\n if (names.length === 0) {\n continue;\n }\n\n lines.push(\n \"\",\n `## ${KIND_SECTION_TITLES[kind]} (${String(names.length)})`,\n \"\",\n sortStrings(names)\n .map((symbolName) => `\\`${symbolName}\\``)\n .join(\", \"),\n );\n }\n\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n }\n}\n\nexport type { ApiReference };\nexport {\n API_SYMBOL_KINDS,\n loadApiReference,\n type ApiReferenceOptions,\n type ApiSymbolKind,\n type ApiSymbol,\n type ApiNamespaceSummary,\n type ApiLookupResult,\n type ApiSearchOptions,\n type ApiSymbolQuery,\n};\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { Library } from "../gir/library.js";
|
|
2
|
-
import { type GirIndex } from "../store/jsx/gir-index.js";
|
|
3
2
|
import { type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
|
|
3
|
+
/** Shared state an element's reference page renders from. */
|
|
4
4
|
type ElementPageContext = {
|
|
5
|
+
/** Parsed GIR the element, its ancestors, and the interfaces it implements are read from. */
|
|
5
6
|
library: Library;
|
|
6
|
-
|
|
7
|
+
/** Resolves a GLib type name to the URL of its page, undefined when it has none. */
|
|
7
8
|
linkFor: (glibName: string) => string | undefined;
|
|
8
9
|
};
|
|
9
|
-
declare const createElementPageContext: (library: Library, linkFor: (glibName: string) => string | undefined) => ElementPageContext;
|
|
10
10
|
declare const renderElementPage: (entry: GlibNamedClass, context: ElementPageContext) => string;
|
|
11
|
-
export {
|
|
11
|
+
export { renderElementPage, type ElementPageContext };
|
|
12
12
|
//# sourceMappingURL=element-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-page.d.ts","sourceRoot":"","sources":["../../src/docs/element-page.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"element-page.d.ts","sourceRoot":"","sources":["../../src/docs/element-page.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAOjD,OAAO,EAEH,KAAK,cAAc,EAItB,MAAM,oCAAoC,CAAC;AAsB5C,6DAA6D;AAC7D,KAAK,kBAAkB,GAAG;IACtB,6FAA6F;IAC7F,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACrD,CAAC;AA+NF,QAAA,MAAM,iBAAiB,GAAI,OAAO,cAAc,EAAE,SAAS,kBAAkB,KAAG,MAc/E,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
|
|
2
2
|
import { ancestorChain } from "../gir/ancestry.js";
|
|
3
3
|
import { namespaceDirectory } from "../gir/namespace.js";
|
|
4
4
|
import { isConstructableProperty } from "../gir/property.js";
|
|
5
|
+
import { annotationSpec } from "../store/gi/doc-spec.js";
|
|
5
6
|
import { elementPropTypeFor } from "../store/jsx/element-prop-imports.js";
|
|
6
|
-
import { buildGirIndex } from "../store/jsx/gir-index.js";
|
|
7
7
|
import { getGlibName, implementedInterfaces, newlyImplementedInterfaces, signalHandlerName, } from "../store/jsx/intrinsic-elements.js";
|
|
8
8
|
import { isOmittedProp } from "../store/jsx/omitted-props.js";
|
|
9
9
|
import { isObjectProp } from "../store/jsx/props.js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
10
|
+
import { handwrittenPropsFor } from "./handwritten-props.js";
|
|
11
|
+
import { annotationNotes, classMethodEntries, docMarkdown, firstSentence, implementsLine, joinSections, methodsSectionBlocks, originSignatureBlocks, propertyMetaLine, renderDocsSignalSignature, renderDocsType, signalTags, sortedMetaBlocks, } from "./render.js";
|
|
12
12
|
const frontmatter = (entry) => {
|
|
13
13
|
const sentence = firstSentence(entry.klass.doc);
|
|
14
14
|
const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;
|
|
@@ -47,20 +47,31 @@ const propertyEntry = (context, owner, property, jsName) => {
|
|
|
47
47
|
const isObject = isObjectProp(context.library, property);
|
|
48
48
|
const baseType = renderDocsType(context.library, property.type, false);
|
|
49
49
|
const type = isObject ? `${baseType} | ReactElement` : baseType;
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
meta.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
const accessNotes = isConstructableProperty(property)
|
|
51
|
+
? []
|
|
52
|
+
: [`read-only, observe with \`onNotify${upperFirst(jsName)}\``];
|
|
53
|
+
return {
|
|
54
|
+
name: jsName,
|
|
55
|
+
meta: propertyMetaLine({ type, property, accessNotes, origin: owner.origin }),
|
|
56
|
+
doc: docMarkdown(property.doc),
|
|
57
|
+
tags: annotationSpec(property.annotations),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
const handwrittenPropMeta = (prop, owner) => [`\`${prop.type}\``, ...(owner.origin === undefined ? [] : [`from \`${owner.origin}\``])].join(" · ");
|
|
61
|
+
const handwrittenPropEntries = (owner, seen) => {
|
|
62
|
+
const declared = owner.glibName === undefined ? undefined : elementPropTypeFor(owner.glibName);
|
|
63
|
+
if (declared === undefined) {
|
|
64
|
+
return [];
|
|
59
65
|
}
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
const entries = [];
|
|
67
|
+
for (const prop of handwrittenPropsFor(declared)) {
|
|
68
|
+
if (seen.has(prop.name)) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
seen.add(prop.name);
|
|
72
|
+
entries.push({ name: prop.name, meta: handwrittenPropMeta(prop, owner), doc: prop.doc });
|
|
62
73
|
}
|
|
63
|
-
return
|
|
74
|
+
return entries;
|
|
64
75
|
};
|
|
65
76
|
const propJsName = (property, owner, seen) => {
|
|
66
77
|
if (!property.introspectable) {
|
|
@@ -74,7 +85,7 @@ const propJsName = (property, owner, seen) => {
|
|
|
74
85
|
return jsName;
|
|
75
86
|
};
|
|
76
87
|
const ownerPropEntries = (context, owner, seen) => {
|
|
77
|
-
const entries = [];
|
|
88
|
+
const entries = [...handwrittenPropEntries(owner, seen)];
|
|
78
89
|
for (const property of owner.klass.properties) {
|
|
79
90
|
const jsName = propJsName(property, owner, seen);
|
|
80
91
|
if (jsName !== undefined) {
|
|
@@ -102,8 +113,7 @@ const propsSection = (entry, context, selfType) => {
|
|
|
102
113
|
if (entries.length === 0) {
|
|
103
114
|
return ["## Props", intro];
|
|
104
115
|
}
|
|
105
|
-
|
|
106
|
-
return ["## Props", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];
|
|
116
|
+
return ["## Props", intro, ...sortedMetaBlocks(entries)];
|
|
107
117
|
};
|
|
108
118
|
const ownerSignalEntries = (context, owner, selfType, seen) => {
|
|
109
119
|
const entries = [];
|
|
@@ -117,6 +127,7 @@ const ownerSignalEntries = (context, owner, selfType, seen) => {
|
|
|
117
127
|
name,
|
|
118
128
|
signature: renderDocsSignalSignature(context.library, signal, selfType),
|
|
119
129
|
doc: docMarkdown(signal.doc),
|
|
130
|
+
tags: signalTags(signal, true),
|
|
120
131
|
origin: owner.origin,
|
|
121
132
|
});
|
|
122
133
|
}
|
|
@@ -146,6 +157,7 @@ const renderElementPage = (entry, context) => {
|
|
|
146
157
|
frontmatter(entry),
|
|
147
158
|
`# ${entry.glibName}`,
|
|
148
159
|
docMarkdown(entry.klass.doc),
|
|
160
|
+
...annotationNotes(entry.klass.annotations),
|
|
149
161
|
importBlock(entry),
|
|
150
162
|
...hierarchySection(entry, context),
|
|
151
163
|
...propsSection(entry, context, selfType),
|
|
@@ -153,5 +165,5 @@ const renderElementPage = (entry, context) => {
|
|
|
153
165
|
...methodsSection(entry, context, selfType),
|
|
154
166
|
]);
|
|
155
167
|
};
|
|
156
|
-
export {
|
|
168
|
+
export { renderElementPage };
|
|
157
169
|
//# sourceMappingURL=element-page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-page.js","sourceRoot":"","sources":["../../src/docs/element-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { Library } from \"../gir/library.js\";\nimport { ancestorChain } from \"../gir/ancestry.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { type GirProperty, isConstructableProperty } from \"../gir/property.js\";\nimport { elementPropTypeFor } from \"../store/jsx/element-prop-imports.js\";\nimport { buildGirIndex, type GirIndex } from \"../store/jsx/gir-index.js\";\nimport {\n getGlibName,\n type GlibNamedClass,\n implementedInterfaces,\n newlyImplementedInterfaces,\n signalHandlerName,\n} from \"../store/jsx/intrinsic-elements.js\";\nimport { isOmittedProp } from \"../store/jsx/omitted-props.js\";\nimport { isObjectProp } from \"../store/jsx/props.js\";\nimport {\n classMethodEntries,\n docMarkdown,\n docsDefaultValue,\n firstSentence,\n implementsLine,\n joinSections,\n metaBlock,\n methodsSectionBlocks,\n originSignatureBlocks,\n renderDocsSignalSignature,\n renderDocsType,\n} from \"./render.js\";\n\ntype ElementPageContext = {\n library: Library;\n girIndex: GirIndex;\n linkFor: (glibName: string) => string | undefined;\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n glibName: string | undefined;\n};\n\ntype PropEntry = {\n name: string;\n meta: string;\n doc: string;\n};\n\ntype SignalEntry = {\n name: string;\n signature: string;\n doc: string;\n origin: string | undefined;\n};\n\nconst createElementPageContext = (\n library: Library,\n linkFor: (glibName: string) => string | undefined,\n): ElementPageContext => ({ library, girIndex: buildGirIndex(library), linkFor });\n\nconst frontmatter = (entry: GlibNamedClass): string => {\n const sentence = firstSentence(entry.klass.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;\n\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst importBlock = (entry: GlibNamedClass): string =>\n `\\`\\`\\`tsx\\nimport { ${entry.glibName} } from \"@gtkx/jsx/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst glibLabel = (context: ElementPageContext, glibName: string): string => {\n const link = context.linkFor(glibName);\n\n return link === undefined ? `\\`${glibName}\\`` : `[${glibName}](${link})`;\n};\n\nconst hierarchySection = (entry: GlibNamedClass, context: ElementPageContext): string[] => {\n const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).toReversed();\n\n if (ancestors.length === 0) {\n return [];\n }\n\n const parts = ancestors.map((ancestor) => {\n const glib = getGlibName(ancestor.klass);\n\n return glib === undefined ? `\\`${ancestor.namespaceName}.${ancestor.klass.name}\\`` : glibLabel(context, glib);\n });\n\n parts.push(`**${entry.glibName}**`);\n const lines = [\"## Hierarchy\", parts.join(\" → \")];\n\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, context.library)\n .map((iface) => getGlibName(iface.klass))\n .filter((name): name is string => name !== undefined);\n\n lines.push(...implementsLine(interfaces));\n\n return lines;\n};\n\nconst memberOwners = (entry: GlibNamedClass, context: ElementPageContext): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined, glibName: entry.glibName },\n ...newlyImplementedInterfaces(\n entry.klass,\n entry.namespace,\n context.library,\n (glibName) => glibName !== undefined && elementPropTypeFor(glibName) !== undefined,\n ).map((iface) => {\n const glibName = getGlibName(iface.klass);\n\n return { klass: iface.klass, namespace: iface.namespace, origin: glibName, glibName };\n }),\n];\n\nconst propertyEntry = (\n context: ElementPageContext,\n owner: MemberOwner,\n property: GirProperty,\n jsName: string,\n): PropEntry => {\n const isObject = isObjectProp(context.library, property);\n const baseType = renderDocsType(context.library, property.type, false);\n const type = isObject ? `${baseType} | ReactElement` : baseType;\n const meta: string[] = [`\\`${type}\\``];\n\n if (property.defaultValue !== undefined) {\n meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n }\n\n if (property.constructOnly) {\n meta.push(\"construct-only\");\n }\n\n if (!isConstructableProperty(property)) {\n meta.push(`read-only, observe with \\`onNotify${upperFirst(jsName)}\\``);\n }\n\n if (owner.origin !== undefined) {\n meta.push(`from \\`${owner.origin}\\``);\n }\n\n return { name: jsName, meta: meta.join(\" · \"), doc: docMarkdown(property.doc) };\n};\n\nconst propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {\n if (!property.introspectable) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName) || isOmittedProp(owner.glibName, jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n\n return jsName;\n};\n\nconst ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): PropEntry[] => {\n const entries: PropEntry[] = [];\n\n for (const property of owner.klass.properties) {\n const jsName = propJsName(property, owner, seen);\n\n if (jsName !== undefined) {\n entries.push(propertyEntry(context, owner, property, jsName));\n }\n }\n\n return entries;\n};\n\nconst propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): PropEntry[] => {\n const entries: PropEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerPropEntries(context, owner, seen));\n }\n\n return entries;\n};\n\nconst propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries = propertyEntries(entry, context, seen);\n\n const intro = [\n `\\`ref\\` receives the \\`${selfType}\\` instance.`,\n \"Every mutable property also has an `onNotify<Prop>` handler prop called with the new value \" +\n \"when the property changes.\",\n \"Props inherited from ancestor elements are documented on their own pages.\",\n ].join(\" \");\n\n if (entries.length === 0) {\n return [\"## Props\", intro];\n }\n\n const sorted = sortStringsBy(entries, (item) => item.name);\n\n return [\"## Props\", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];\n};\n\nconst ownerSignalEntries = (\n context: ElementPageContext,\n owner: MemberOwner,\n selfType: string,\n seen: Set<string>,\n): SignalEntry[] => {\n const entries: SignalEntry[] = [];\n\n for (const signal of owner.klass.signals) {\n const name = signalHandlerName(signal.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n\n entries.push({\n name,\n signature: renderDocsSignalSignature(context.library, signal, selfType),\n doc: docMarkdown(signal.doc),\n origin: owner.origin,\n });\n }\n\n return entries;\n};\n\nconst signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries: SignalEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerSignalEntries(context, owner, selfType, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n return [\"## Signals\", ...originSignatureBlocks(entries)];\n};\n\nconst methodsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const entries = classMethodEntries(context.library, entry.namespace, entry.klass);\n const importPath = `@gtkx/gi/${namespaceDirectory(entry.namespace)}`;\n\n const intro =\n `Methods are called on the \\`${selfType}\\` instance, obtained with the \\`ref\\` prop or ` +\n `imported from \\`${importPath}\\`. Methods inherited from ancestors are documented on their own pages.`;\n\n return methodsSectionBlocks(entries, intro);\n};\n\nconst renderElementPage = (entry: GlibNamedClass, context: ElementPageContext): string => {\n const selfType = `${entry.namespace.name}.${entry.klass.name}`;\n\n return joinSections([\n frontmatter(entry),\n `# ${entry.glibName}`,\n docMarkdown(entry.klass.doc),\n importBlock(entry),\n ...hierarchySection(entry, context),\n ...propsSection(entry, context, selfType),\n ...signalsSection(entry, context, selfType),\n ...methodsSection(entry, context, selfType),\n ]);\n};\n\nexport { createElementPageContext, renderElementPage, type ElementPageContext };\n"]}
|
|
1
|
+
{"version":3,"file":"element-page.js","sourceRoot":"","sources":["../../src/docs/element-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { HandwrittenProp } from \"./handwritten-props.js\";\nimport { ancestorChain } from \"../gir/ancestry.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { type GirProperty, isConstructableProperty } from \"../gir/property.js\";\nimport { annotationSpec } from \"../store/gi/doc-spec.js\";\nimport { elementPropTypeFor } from \"../store/jsx/element-prop-imports.js\";\nimport {\n getGlibName,\n type GlibNamedClass,\n implementedInterfaces,\n newlyImplementedInterfaces,\n signalHandlerName,\n} from \"../store/jsx/intrinsic-elements.js\";\nimport { isOmittedProp } from \"../store/jsx/omitted-props.js\";\nimport { isObjectProp } from \"../store/jsx/props.js\";\nimport { handwrittenPropsFor } from \"./handwritten-props.js\";\nimport {\n annotationNotes,\n classMethodEntries,\n docMarkdown,\n firstSentence,\n implementsLine,\n joinSections,\n type MetaDocEntry,\n methodsSectionBlocks,\n originSignatureBlocks,\n type OriginSignatureEntry,\n propertyMetaLine,\n renderDocsSignalSignature,\n renderDocsType,\n signalTags,\n sortedMetaBlocks,\n} from \"./render.js\";\n\n/** Shared state an element's reference page renders from. */\ntype ElementPageContext = {\n /** Parsed GIR the element, its ancestors, and the interfaces it implements are read from. */\n library: Library;\n /** Resolves a GLib type name to the URL of its page, undefined when it has none. */\n linkFor: (glibName: string) => string | undefined;\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n glibName: string | undefined;\n};\n\nconst frontmatter = (entry: GlibNamedClass): string => {\n const sentence = firstSentence(entry.klass.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;\n\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst importBlock = (entry: GlibNamedClass): string =>\n `\\`\\`\\`tsx\\nimport { ${entry.glibName} } from \"@gtkx/jsx/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst glibLabel = (context: ElementPageContext, glibName: string): string => {\n const link = context.linkFor(glibName);\n\n return link === undefined ? `\\`${glibName}\\`` : `[${glibName}](${link})`;\n};\n\nconst hierarchySection = (entry: GlibNamedClass, context: ElementPageContext): string[] => {\n const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).toReversed();\n\n if (ancestors.length === 0) {\n return [];\n }\n\n const parts = ancestors.map((ancestor) => {\n const glib = getGlibName(ancestor.klass);\n\n return glib === undefined ? `\\`${ancestor.namespaceName}.${ancestor.klass.name}\\`` : glibLabel(context, glib);\n });\n\n parts.push(`**${entry.glibName}**`);\n const lines = [\"## Hierarchy\", parts.join(\" → \")];\n\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, context.library)\n .map((iface) => getGlibName(iface.klass))\n .filter((name): name is string => name !== undefined);\n\n lines.push(...implementsLine(interfaces));\n\n return lines;\n};\n\nconst memberOwners = (entry: GlibNamedClass, context: ElementPageContext): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined, glibName: entry.glibName },\n ...newlyImplementedInterfaces(\n entry.klass,\n entry.namespace,\n context.library,\n (glibName) => glibName !== undefined && elementPropTypeFor(glibName) !== undefined,\n ).map((iface) => {\n const glibName = getGlibName(iface.klass);\n\n return { klass: iface.klass, namespace: iface.namespace, origin: glibName, glibName };\n }),\n];\n\nconst propertyEntry = (\n context: ElementPageContext,\n owner: MemberOwner,\n property: GirProperty,\n jsName: string,\n): MetaDocEntry => {\n const isObject = isObjectProp(context.library, property);\n const baseType = renderDocsType(context.library, property.type, false);\n const type = isObject ? `${baseType} | ReactElement` : baseType;\n\n const accessNotes = isConstructableProperty(property)\n ? []\n : [`read-only, observe with \\`onNotify${upperFirst(jsName)}\\``];\n\n return {\n name: jsName,\n meta: propertyMetaLine({ type, property, accessNotes, origin: owner.origin }),\n doc: docMarkdown(property.doc),\n tags: annotationSpec(property.annotations),\n };\n};\n\nconst handwrittenPropMeta = (prop: HandwrittenProp, owner: MemberOwner): string =>\n [`\\`${prop.type}\\``, ...(owner.origin === undefined ? [] : [`from \\`${owner.origin}\\``])].join(\" · \");\n\nconst handwrittenPropEntries = (owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {\n const declared = owner.glibName === undefined ? undefined : elementPropTypeFor(owner.glibName);\n\n if (declared === undefined) {\n return [];\n }\n\n const entries: MetaDocEntry[] = [];\n\n for (const prop of handwrittenPropsFor(declared)) {\n if (seen.has(prop.name)) {\n continue;\n }\n\n seen.add(prop.name);\n entries.push({ name: prop.name, meta: handwrittenPropMeta(prop, owner), doc: prop.doc });\n }\n\n return entries;\n};\n\nconst propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {\n if (!property.introspectable) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName) || isOmittedProp(owner.glibName, jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n\n return jsName;\n};\n\nconst ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {\n const entries: MetaDocEntry[] = [...handwrittenPropEntries(owner, seen)];\n\n for (const property of owner.klass.properties) {\n const jsName = propJsName(property, owner, seen);\n\n if (jsName !== undefined) {\n entries.push(propertyEntry(context, owner, property, jsName));\n }\n }\n\n return entries;\n};\n\nconst propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): MetaDocEntry[] => {\n const entries: MetaDocEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerPropEntries(context, owner, seen));\n }\n\n return entries;\n};\n\nconst propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries = propertyEntries(entry, context, seen);\n\n const intro = [\n `\\`ref\\` receives the \\`${selfType}\\` instance.`,\n \"Every mutable property also has an `onNotify<Prop>` handler prop called with the new value \" +\n \"when the property changes.\",\n \"Props inherited from ancestor elements are documented on their own pages.\",\n ].join(\" \");\n\n if (entries.length === 0) {\n return [\"## Props\", intro];\n }\n\n return [\"## Props\", intro, ...sortedMetaBlocks(entries)];\n};\n\nconst ownerSignalEntries = (\n context: ElementPageContext,\n owner: MemberOwner,\n selfType: string,\n seen: Set<string>,\n): OriginSignatureEntry[] => {\n const entries: OriginSignatureEntry[] = [];\n\n for (const signal of owner.klass.signals) {\n const name = signalHandlerName(signal.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n\n entries.push({\n name,\n signature: renderDocsSignalSignature(context.library, signal, selfType),\n doc: docMarkdown(signal.doc),\n tags: signalTags(signal, true),\n origin: owner.origin,\n });\n }\n\n return entries;\n};\n\nconst signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries: OriginSignatureEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerSignalEntries(context, owner, selfType, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n return [\"## Signals\", ...originSignatureBlocks(entries)];\n};\n\nconst methodsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const entries = classMethodEntries(context.library, entry.namespace, entry.klass);\n const importPath = `@gtkx/gi/${namespaceDirectory(entry.namespace)}`;\n\n const intro =\n `Methods are called on the \\`${selfType}\\` instance, obtained with the \\`ref\\` prop or ` +\n `imported from \\`${importPath}\\`. Methods inherited from ancestors are documented on their own pages.`;\n\n return methodsSectionBlocks(entries, intro);\n};\n\nconst renderElementPage = (entry: GlibNamedClass, context: ElementPageContext): string => {\n const selfType = `${entry.namespace.name}.${entry.klass.name}`;\n\n return joinSections([\n frontmatter(entry),\n `# ${entry.glibName}`,\n docMarkdown(entry.klass.doc),\n ...annotationNotes(entry.klass.annotations),\n importBlock(entry),\n ...hierarchySection(entry, context),\n ...propsSection(entry, context, selfType),\n ...signalsSection(entry, context, selfType),\n ...methodsSection(entry, context, selfType),\n ]);\n};\n\nexport { renderElementPage, type ElementPageContext };\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ModuleExport } from "@gtkx/react/config";
|
|
2
|
+
type HandwrittenProp = {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
doc: string;
|
|
6
|
+
};
|
|
7
|
+
declare const handwrittenPropsFor: (ref: ModuleExport) => HandwrittenProp[];
|
|
8
|
+
export { handwrittenPropsFor, type HandwrittenProp };
|
|
9
|
+
//# sourceMappingURL=handwritten-props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handwritten-props.d.ts","sourceRoot":"","sources":["../../src/docs/handwritten-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAuLF,QAAA,MAAM,mBAAmB,GAAI,KAAK,YAAY,KAAG,eAAe,EAY/D,CAAC;AA0BF,OAAO,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,CAAC"}
|