@gtkx/codegen 1.0.0-rc.4 → 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 +5 -5
- package/dist/analysis/descriptor-render.d.ts +8 -1
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +37 -24
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +1 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- 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 +11 -4
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +40 -14
- package/dist/analysis/param-structure.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.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -2
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +7 -14
- 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.js +2 -2
- 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 +84 -22
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +17 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +128 -43
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +1 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.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 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -8
- 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/libraries.d.ts +1 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +0 -1
- 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 -3
- 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.map +1 -1
- package/dist/gir/type-id.d.ts +35 -0
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -0
- 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 +1 -0
- 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/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +28 -6
- 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 +58 -27
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +3 -3
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +2 -2
- 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 +2 -2
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +1 -7
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- 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 +12 -12
- 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 -2
- 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 +27 -12
- 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 +69 -26
- 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 +3 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +6 -5
- 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 +3 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -2
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.js +1 -1
- 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/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 +14 -15
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -2
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -1
- 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/jsx/element-components.d.ts +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- 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 +7 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +2 -2
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +1 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- 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 +14 -6
- package/dist/store/jsx/props.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 +48 -3
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +4 -4
- package/src/analysis/descriptor-render.ts +47 -28
- package/src/analysis/descriptor.ts +0 -3
- 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 +83 -23
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +1 -1
- package/src/docs/api-reference.ts +36 -25
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +2 -2
- package/src/docs/render.ts +146 -32
- package/src/docs/symbol-page.ts +224 -79
- package/src/fingerprint.ts +0 -1
- 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 -9
- package/src/gir/function.ts +15 -0
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -3
- 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 -3
- package/src/gir/type-id.ts +49 -3
- package/src/gir/type-ref.ts +1 -0
- package/src/gir/type.ts +50 -6
- package/src/khronos/args.ts +36 -13
- 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 +94 -41
- package/src/khronos/plan.ts +4 -5
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +2 -2
- package/src/runner.ts +1 -8
- package/src/store/compile-store.ts +1 -1
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +18 -12
- 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 -4
- 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 +43 -21
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +98 -42
- 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 +9 -4
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +5 -3
- package/src/store/gi/record-layout.ts +1 -1
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +19 -20
- package/src/store/gi/value-marshalable.ts +1 -1
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/jsx/element-components.ts +8 -5
- package/src/store/jsx/element-prop-imports.ts +1 -3
- package/src/store/jsx/element-prop-types.ts +10 -1
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +8 -6
- package/src/store/jsx/metadata.ts +2 -2
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
package/src/docs/element-page.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
|
|
2
2
|
import type { GirClass } from "../gir/class.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
|
+
import type { HandwrittenProp } from "./handwritten-props.js";
|
|
4
5
|
import { ancestorChain } from "../gir/ancestry.js";
|
|
5
6
|
import { type GirNamespace, namespaceDirectory } from "../gir/namespace.js";
|
|
6
7
|
import { type GirProperty, isConstructableProperty } from "../gir/property.js";
|
|
8
|
+
import { annotationSpec } from "../store/gi/doc-spec.js";
|
|
7
9
|
import { elementPropTypeFor } from "../store/jsx/element-prop-imports.js";
|
|
8
|
-
import { buildGirIndex, type GirIndex } from "../store/jsx/gir-index.js";
|
|
9
10
|
import {
|
|
10
11
|
getGlibName,
|
|
11
12
|
type GlibNamedClass,
|
|
@@ -15,23 +16,30 @@ import {
|
|
|
15
16
|
} from "../store/jsx/intrinsic-elements.js";
|
|
16
17
|
import { isOmittedProp } from "../store/jsx/omitted-props.js";
|
|
17
18
|
import { isObjectProp } from "../store/jsx/props.js";
|
|
19
|
+
import { handwrittenPropsFor } from "./handwritten-props.js";
|
|
18
20
|
import {
|
|
21
|
+
annotationNotes,
|
|
19
22
|
classMethodEntries,
|
|
20
23
|
docMarkdown,
|
|
21
|
-
docsDefaultValue,
|
|
22
24
|
firstSentence,
|
|
23
25
|
implementsLine,
|
|
24
26
|
joinSections,
|
|
25
|
-
|
|
27
|
+
type MetaDocEntry,
|
|
26
28
|
methodsSectionBlocks,
|
|
27
29
|
originSignatureBlocks,
|
|
30
|
+
type OriginSignatureEntry,
|
|
31
|
+
propertyMetaLine,
|
|
28
32
|
renderDocsSignalSignature,
|
|
29
33
|
renderDocsType,
|
|
34
|
+
signalTags,
|
|
35
|
+
sortedMetaBlocks,
|
|
30
36
|
} from "./render.js";
|
|
31
37
|
|
|
38
|
+
/** Shared state an element's reference page renders from. */
|
|
32
39
|
type ElementPageContext = {
|
|
40
|
+
/** Parsed GIR the element, its ancestors, and the interfaces it implements are read from. */
|
|
33
41
|
library: Library;
|
|
34
|
-
|
|
42
|
+
/** Resolves a GLib type name to the URL of its page, undefined when it has none. */
|
|
35
43
|
linkFor: (glibName: string) => string | undefined;
|
|
36
44
|
};
|
|
37
45
|
|
|
@@ -42,24 +50,6 @@ type MemberOwner = {
|
|
|
42
50
|
glibName: string | undefined;
|
|
43
51
|
};
|
|
44
52
|
|
|
45
|
-
type PropEntry = {
|
|
46
|
-
name: string;
|
|
47
|
-
meta: string;
|
|
48
|
-
doc: string;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
type SignalEntry = {
|
|
52
|
-
name: string;
|
|
53
|
-
signature: string;
|
|
54
|
-
doc: string;
|
|
55
|
-
origin: string | undefined;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const createElementPageContext = (
|
|
59
|
-
library: Library,
|
|
60
|
-
linkFor: (glibName: string) => string | undefined,
|
|
61
|
-
): ElementPageContext => ({ library, girIndex: buildGirIndex(library), linkFor });
|
|
62
|
-
|
|
63
53
|
const frontmatter = (entry: GlibNamedClass): string => {
|
|
64
54
|
const sentence = firstSentence(entry.klass.doc);
|
|
65
55
|
const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;
|
|
@@ -120,29 +110,45 @@ const propertyEntry = (
|
|
|
120
110
|
owner: MemberOwner,
|
|
121
111
|
property: GirProperty,
|
|
122
112
|
jsName: string,
|
|
123
|
-
):
|
|
113
|
+
): MetaDocEntry => {
|
|
124
114
|
const isObject = isObjectProp(context.library, property);
|
|
125
115
|
const baseType = renderDocsType(context.library, property.type, false);
|
|
126
116
|
const type = isObject ? `${baseType} | ReactElement` : baseType;
|
|
127
|
-
const meta: string[] = [`\`${type}\``];
|
|
128
117
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
const accessNotes = isConstructableProperty(property)
|
|
119
|
+
? []
|
|
120
|
+
: [`read-only, observe with \`onNotify${upperFirst(jsName)}\``];
|
|
132
121
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
return {
|
|
123
|
+
name: jsName,
|
|
124
|
+
meta: propertyMetaLine({ type, property, accessNotes, origin: owner.origin }),
|
|
125
|
+
doc: docMarkdown(property.doc),
|
|
126
|
+
tags: annotationSpec(property.annotations),
|
|
127
|
+
};
|
|
128
|
+
};
|
|
136
129
|
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
const handwrittenPropMeta = (prop: HandwrittenProp, owner: MemberOwner): string =>
|
|
131
|
+
[`\`${prop.type}\``, ...(owner.origin === undefined ? [] : [`from \`${owner.origin}\``])].join(" · ");
|
|
132
|
+
|
|
133
|
+
const handwrittenPropEntries = (owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
|
|
134
|
+
const declared = owner.glibName === undefined ? undefined : elementPropTypeFor(owner.glibName);
|
|
135
|
+
|
|
136
|
+
if (declared === undefined) {
|
|
137
|
+
return [];
|
|
139
138
|
}
|
|
140
139
|
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
const entries: MetaDocEntry[] = [];
|
|
141
|
+
|
|
142
|
+
for (const prop of handwrittenPropsFor(declared)) {
|
|
143
|
+
if (seen.has(prop.name)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
seen.add(prop.name);
|
|
148
|
+
entries.push({ name: prop.name, meta: handwrittenPropMeta(prop, owner), doc: prop.doc });
|
|
143
149
|
}
|
|
144
150
|
|
|
145
|
-
return
|
|
151
|
+
return entries;
|
|
146
152
|
};
|
|
147
153
|
|
|
148
154
|
const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {
|
|
@@ -161,8 +167,8 @@ const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>
|
|
|
161
167
|
return jsName;
|
|
162
168
|
};
|
|
163
169
|
|
|
164
|
-
const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>):
|
|
165
|
-
const entries:
|
|
170
|
+
const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
|
|
171
|
+
const entries: MetaDocEntry[] = [...handwrittenPropEntries(owner, seen)];
|
|
166
172
|
|
|
167
173
|
for (const property of owner.klass.properties) {
|
|
168
174
|
const jsName = propJsName(property, owner, seen);
|
|
@@ -175,8 +181,8 @@ const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen:
|
|
|
175
181
|
return entries;
|
|
176
182
|
};
|
|
177
183
|
|
|
178
|
-
const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>):
|
|
179
|
-
const entries:
|
|
184
|
+
const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): MetaDocEntry[] => {
|
|
185
|
+
const entries: MetaDocEntry[] = [];
|
|
180
186
|
|
|
181
187
|
for (const owner of memberOwners(entry, context)) {
|
|
182
188
|
entries.push(...ownerPropEntries(context, owner, seen));
|
|
@@ -200,9 +206,7 @@ const propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfTy
|
|
|
200
206
|
return ["## Props", intro];
|
|
201
207
|
}
|
|
202
208
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return ["## Props", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];
|
|
209
|
+
return ["## Props", intro, ...sortedMetaBlocks(entries)];
|
|
206
210
|
};
|
|
207
211
|
|
|
208
212
|
const ownerSignalEntries = (
|
|
@@ -210,8 +214,8 @@ const ownerSignalEntries = (
|
|
|
210
214
|
owner: MemberOwner,
|
|
211
215
|
selfType: string,
|
|
212
216
|
seen: Set<string>,
|
|
213
|
-
):
|
|
214
|
-
const entries:
|
|
217
|
+
): OriginSignatureEntry[] => {
|
|
218
|
+
const entries: OriginSignatureEntry[] = [];
|
|
215
219
|
|
|
216
220
|
for (const signal of owner.klass.signals) {
|
|
217
221
|
const name = signalHandlerName(signal.name);
|
|
@@ -226,6 +230,7 @@ const ownerSignalEntries = (
|
|
|
226
230
|
name,
|
|
227
231
|
signature: renderDocsSignalSignature(context.library, signal, selfType),
|
|
228
232
|
doc: docMarkdown(signal.doc),
|
|
233
|
+
tags: signalTags(signal, true),
|
|
229
234
|
origin: owner.origin,
|
|
230
235
|
});
|
|
231
236
|
}
|
|
@@ -235,7 +240,7 @@ const ownerSignalEntries = (
|
|
|
235
240
|
|
|
236
241
|
const signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {
|
|
237
242
|
const seen: Set<string> = new Set();
|
|
238
|
-
const entries:
|
|
243
|
+
const entries: OriginSignatureEntry[] = [];
|
|
239
244
|
|
|
240
245
|
for (const owner of memberOwners(entry, context)) {
|
|
241
246
|
entries.push(...ownerSignalEntries(context, owner, selfType, seen));
|
|
@@ -266,6 +271,7 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
|
|
|
266
271
|
frontmatter(entry),
|
|
267
272
|
`# ${entry.glibName}`,
|
|
268
273
|
docMarkdown(entry.klass.doc),
|
|
274
|
+
...annotationNotes(entry.klass.annotations),
|
|
269
275
|
importBlock(entry),
|
|
270
276
|
...hierarchySection(entry, context),
|
|
271
277
|
...propsSection(entry, context, selfType),
|
|
@@ -274,4 +280,4 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
|
|
|
274
280
|
]);
|
|
275
281
|
};
|
|
276
282
|
|
|
277
|
-
export {
|
|
283
|
+
export { renderElementPage, type ElementPageContext };
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import type { ModuleExport } from "@gtkx/react/config";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
|
|
5
|
+
type HandwrittenProp = {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
doc: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type AliasSite = {
|
|
12
|
+
sourceFile: ts.SourceFile;
|
|
13
|
+
declaration: ts.TypeAliasDeclaration;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type NamedBinding = ts.ImportSpecifier | ts.ExportSpecifier;
|
|
17
|
+
|
|
18
|
+
const RESOLUTION_OPTIONS: ts.CompilerOptions = {
|
|
19
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
20
|
+
customConditions: ["source"],
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const CONTAINING_FILE = fileURLToPath(import.meta.url);
|
|
24
|
+
const WHITESPACE_RUN = /\s+/g;
|
|
25
|
+
const propsByRef: Map<string, HandwrittenProp[]> = new Map();
|
|
26
|
+
|
|
27
|
+
const moduleFileFor = (specifier: string, containingFile: string): string | undefined =>
|
|
28
|
+
ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;
|
|
29
|
+
|
|
30
|
+
const parseModule = (filePath: string): ts.SourceFile =>
|
|
31
|
+
ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? "", ts.ScriptTarget.Latest, true);
|
|
32
|
+
|
|
33
|
+
const specifierText = (node: ts.Expression | undefined): string | undefined =>
|
|
34
|
+
node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;
|
|
35
|
+
|
|
36
|
+
const boundName = (elements: readonly NamedBinding[], name: string): string | undefined => {
|
|
37
|
+
for (const element of elements) {
|
|
38
|
+
if (element.name.text === name) {
|
|
39
|
+
return (element.propertyName ?? element.name).text;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return undefined;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const findAliasInModule = (specifier: string, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {
|
|
47
|
+
const filePath = moduleFileFor(specifier, sourceFile.fileName);
|
|
48
|
+
|
|
49
|
+
return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const importedAlias = (
|
|
53
|
+
statement: ts.ImportDeclaration,
|
|
54
|
+
sourceFile: ts.SourceFile,
|
|
55
|
+
name: string,
|
|
56
|
+
): AliasSite | undefined => {
|
|
57
|
+
const bindings = statement.importClause?.namedBindings;
|
|
58
|
+
const specifier = specifierText(statement.moduleSpecifier);
|
|
59
|
+
|
|
60
|
+
if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const imported = boundName(bindings.elements, name);
|
|
65
|
+
|
|
66
|
+
return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const exportedAlias = (
|
|
70
|
+
statement: ts.ExportDeclaration,
|
|
71
|
+
sourceFile: ts.SourceFile,
|
|
72
|
+
name: string,
|
|
73
|
+
): AliasSite | undefined => {
|
|
74
|
+
const specifier = specifierText(statement.moduleSpecifier);
|
|
75
|
+
|
|
76
|
+
if (specifier === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const clause = statement.exportClause;
|
|
81
|
+
|
|
82
|
+
if (clause === undefined) {
|
|
83
|
+
return findAliasInModule(specifier, sourceFile, name);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;
|
|
87
|
+
|
|
88
|
+
return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const statementAlias = (statement: ts.Statement, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {
|
|
92
|
+
if (ts.isTypeAliasDeclaration(statement)) {
|
|
93
|
+
return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (ts.isImportDeclaration(statement)) {
|
|
97
|
+
return importedAlias(statement, sourceFile, name);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const propType = (type: ts.TypeNode, sourceFile: ts.SourceFile): string => {
|
|
104
|
+
const parts: readonly ts.TypeNode[] = ts.isUnionTypeNode(type) ? type.types : [type];
|
|
105
|
+
|
|
106
|
+
return parts
|
|
107
|
+
.filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)
|
|
108
|
+
.map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, " "))
|
|
109
|
+
.join(" | ");
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const propDoc = (member: ts.TypeElement): string => {
|
|
113
|
+
const comments = ts
|
|
114
|
+
.getJSDocCommentsAndTags(member)
|
|
115
|
+
.map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));
|
|
116
|
+
|
|
117
|
+
return comments.filter((text) => text !== undefined).join(" ").replaceAll(WHITESPACE_RUN, " ").trim();
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const propertyProp = (member: ts.PropertySignature, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
|
|
121
|
+
const { name, type } = member;
|
|
122
|
+
|
|
123
|
+
if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const indexProp = (member: ts.IndexSignatureDeclaration, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
|
|
131
|
+
const keyType = member.parameters[0]?.type;
|
|
132
|
+
|
|
133
|
+
if (keyType === undefined) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
name: keyType.getText(sourceFile).replaceAll("`", ""),
|
|
139
|
+
type: propType(member.type, sourceFile),
|
|
140
|
+
doc: propDoc(member),
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const memberProp = (member: ts.TypeElement, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
|
|
145
|
+
if (ts.isPropertySignature(member)) {
|
|
146
|
+
return propertyProp(member, sourceFile);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const literalProps = (type: ts.TypeLiteralNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {
|
|
153
|
+
const props: HandwrittenProp[] = [];
|
|
154
|
+
|
|
155
|
+
for (const member of type.members) {
|
|
156
|
+
const prop = memberProp(member, sourceFile);
|
|
157
|
+
|
|
158
|
+
if (prop !== undefined) {
|
|
159
|
+
props.push(prop);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return props;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const referenceProps = (type: ts.TypeReferenceNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {
|
|
167
|
+
if (!ts.isIdentifier(type.typeName)) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const site = findAlias(sourceFile, type.typeName.text);
|
|
172
|
+
|
|
173
|
+
return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const declaredProps = (ref: ModuleExport): HandwrittenProp[] => {
|
|
177
|
+
const filePath = moduleFileFor(ref.module, CONTAINING_FILE);
|
|
178
|
+
|
|
179
|
+
if (filePath === undefined) {
|
|
180
|
+
throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const site = findAlias(parseModule(filePath), ref.export);
|
|
184
|
+
|
|
185
|
+
if (site === undefined) {
|
|
186
|
+
throw new Error(`${ref.module} declares no type named ${ref.export}`);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return typeNodeProps(site.declaration.type, site.sourceFile);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const handwrittenPropsFor = (ref: ModuleExport): HandwrittenProp[] => {
|
|
193
|
+
const key = `${ref.module}#${ref.export}`;
|
|
194
|
+
const cached = propsByRef.get(key);
|
|
195
|
+
|
|
196
|
+
if (cached !== undefined) {
|
|
197
|
+
return cached;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const props = declaredProps(ref);
|
|
201
|
+
propsByRef.set(key, props);
|
|
202
|
+
|
|
203
|
+
return props;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
function findAlias(sourceFile: ts.SourceFile, name: string): AliasSite | undefined {
|
|
207
|
+
for (const statement of sourceFile.statements) {
|
|
208
|
+
const site = statementAlias(statement, sourceFile, name);
|
|
209
|
+
|
|
210
|
+
if (site !== undefined) {
|
|
211
|
+
return site;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function typeNodeProps(type: ts.TypeNode, sourceFile: ts.SourceFile): HandwrittenProp[] {
|
|
219
|
+
if (ts.isTypeLiteralNode(type)) {
|
|
220
|
+
return literalProps(type, sourceFile);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (ts.isIntersectionTypeNode(type)) {
|
|
224
|
+
return type.types.flatMap((part) => typeNodeProps(part, sourceFile));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { handwrittenPropsFor, type HandwrittenProp };
|
package/src/docs/pipeline.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { namespaceDirectory } from "../gir/namespace.js";
|
|
|
7
7
|
import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
8
8
|
import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
|
|
9
9
|
import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
10
|
-
import {
|
|
10
|
+
import { type ElementPageContext, renderElementPage } from "./element-page.js";
|
|
11
11
|
import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
|
|
12
12
|
|
|
13
13
|
type DocsElementLink = {
|
|
@@ -175,7 +175,7 @@ const generatePages = (options: DocsOptions, basePath: string, library: Library)
|
|
|
175
175
|
const intrinsicElements = collectIntrinsicElementClasses(library);
|
|
176
176
|
const byNamespace = groupElementsByNamespace(intrinsicElements);
|
|
177
177
|
const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
|
|
178
|
-
const pageContext =
|
|
178
|
+
const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
|
|
179
179
|
const pages: Page[] = [];
|
|
180
180
|
const namespaces: DocsNamespace[] = [];
|
|
181
181
|
const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
|