@gtkx/codegen 1.0.0-rc.4 → 1.1.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 +13 -9
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +80 -50
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +16 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +15 -3
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -3
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +103 -58
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +23 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +144 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- 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 +129 -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 +42 -16
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +10 -17
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-key.d.ts +5 -0
- package/dist/analysis/type-key.d.ts.map +1 -0
- package/dist/analysis/type-key.js +9 -0
- package/dist/analysis/type-key.js.map +1 -0
- 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 +12 -3
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +73 -24
- 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 +17 -23
- 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 +36 -22
- 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.map +1 -1
- package/dist/docs/pipeline.js +87 -20
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +26 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +88 -25
- 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 +132 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +12 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +44 -28
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +1 -0
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +8 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +19 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +21 -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/cursor-overrides.d.ts +8 -0
- package/dist/gir/cursor-overrides.d.ts.map +1 -0
- package/dist/gir/cursor-overrides.js +6 -0
- package/dist/gir/cursor-overrides.js.map +1 -0
- package/dist/gir/emittable.d.ts +7 -0
- package/dist/gir/emittable.d.ts.map +1 -0
- package/dist/gir/emittable.js +3 -0
- package/dist/gir/emittable.js.map +1 -0
- 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 +28 -2
- 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 +35 -1
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +43 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +8 -7
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +52 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +8 -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 +9 -9
- 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/guards.d.ts +16 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +11 -0
- package/dist/guards.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +11 -0
- package/dist/json.js.map +1 -0
- 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 +112 -27
- 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/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +3 -4
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +4 -2
- 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 -9
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +3 -3
- 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 +6 -8
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +16 -0
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts +5 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +57 -0
- package/dist/staging.js.map +1 -0
- 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 +4 -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 +9 -2
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +35 -40
- 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 +10 -6
- 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 +63 -40
- 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/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +6 -6
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +12 -3
- 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 +52 -19
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +1 -3
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +50 -29
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +4 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +155 -26
- 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 +11 -2
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +80 -45
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +6 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +54 -5
- 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 +23 -11
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts +2 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +7 -4
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +12 -5
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +98 -46
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +8 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +34 -11
- 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 +8 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +9 -2
- 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 +21 -9
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +4 -4
- 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 +2 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +42 -37
- 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 +3 -2
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +19 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +257 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +15 -20
- package/dist/store/gi-store.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/generated-elements.d.ts +2 -1
- package/dist/store/jsx/generated-elements.d.ts.map +1 -1
- package/dist/store/jsx/generated-elements.js +13 -7
- package/dist/store/jsx/generated-elements.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 +10 -9
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +5 -3
- 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/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 +14 -3
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +98 -15
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +9 -6
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +59 -25
- package/dist/store/store-fs.js.map +1 -1
- package/dist/store/store-links.d.ts +3 -0
- package/dist/store/store-links.d.ts.map +1 -0
- package/dist/store/store-links.js +39 -0
- package/dist/store/store-links.js.map +1 -0
- package/dist/writer/comparison-context.d.ts +4 -0
- package/dist/writer/comparison-context.d.ts.map +1 -0
- package/dist/writer/comparison-context.js +13 -0
- package/dist/writer/comparison-context.js.map +1 -0
- package/dist/writer/context.d.ts +3 -2
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -3
- 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 +17 -3
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +72 -3
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +7 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +43 -1
- package/dist/xml.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 +15 -4
- package/src/analysis/descriptor-render.ts +130 -66
- package/src/analysis/descriptor.ts +35 -11
- package/src/analysis/inheritance.ts +166 -75
- package/src/analysis/interface-conflicts.ts +237 -0
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +169 -0
- package/src/analysis/param-structure.ts +85 -25
- package/src/analysis/ts-type.ts +13 -17
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +110 -26
- package/src/docs/api-reference.ts +46 -34
- package/src/docs/element-page.ts +58 -49
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +131 -21
- package/src/docs/render.ts +153 -35
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +86 -32
- package/src/gi.ts +1 -0
- package/src/gir/ancestry.ts +31 -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/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -9
- package/src/gir/function.ts +60 -9
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +52 -3
- package/src/gir/namespace.ts +49 -7
- package/src/gir/parameter.ts +62 -3
- package/src/gir/parse.ts +13 -9
- 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/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- 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 +150 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +4 -6
- 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 +20 -9
- package/src/staging.ts +69 -0
- package/src/store/compile-store.ts +7 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +58 -44
- package/src/store/gi/callback.ts +10 -9
- package/src/store/gi/class.ts +83 -49
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +14 -5
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +75 -26
- package/src/store/gi/function.ts +72 -44
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +244 -37
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +124 -69
- package/src/store/gi/param-marshal.ts +91 -6
- package/src/store/gi/pipeline.ts +28 -13
- package/src/store/gi/properties.ts +10 -5
- package/src/store/gi/property-accessor.ts +163 -75
- package/src/store/gi/record-constructor.ts +56 -19
- package/src/store/gi/record-field-accessor.ts +13 -4
- package/src/store/gi/record-layout.ts +12 -2
- package/src/store/gi/record.ts +24 -10
- package/src/store/gi/registration.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +54 -57
- package/src/store/gi/value-marshalable.ts +4 -2
- package/src/store/gi/vtable.ts +439 -61
- package/src/store/gi-store.ts +26 -31
- 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/generated-elements.ts +17 -8
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +11 -9
- package/src/store/jsx/metadata.ts +6 -3
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/store/jsx-store.ts +3 -3
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +87 -34
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +14 -4
- 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 +114 -4
- package/src/xml.ts +61 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handwritten-props.js","sourceRoot":"","sources":["../../src/docs/handwritten-props.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModuleExport } from \"@gtkx/react/config\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\n\ntype HandwrittenProp = {\n name: string;\n type: string;\n doc: string;\n};\n\ntype AliasSite = {\n sourceFile: ts.SourceFile;\n declaration: ts.TypeAliasDeclaration;\n};\n\ntype NamedBinding = ts.ImportSpecifier | ts.ExportSpecifier;\n\nconst RESOLUTION_OPTIONS: ts.CompilerOptions = {\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n customConditions: [\"source\"],\n};\n\nconst CONTAINING_FILE = fileURLToPath(import.meta.url);\nconst WHITESPACE_RUN = /\\s+/g;\nconst propsByRef: Map<string, HandwrittenProp[]> = new Map();\n\nconst moduleFileFor = (specifier: string, containingFile: string): string | undefined =>\n ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;\n\nconst parseModule = (filePath: string): ts.SourceFile =>\n ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? \"\", ts.ScriptTarget.Latest, true);\n\nconst specifierText = (node: ts.Expression | undefined): string | undefined =>\n node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;\n\nconst boundName = (elements: readonly NamedBinding[], name: string): string | undefined => {\n for (const element of elements) {\n if (element.name.text === name) {\n return (element.propertyName ?? element.name).text;\n }\n }\n\n return undefined;\n};\n\nconst findAliasInModule = (specifier: string, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {\n const filePath = moduleFileFor(specifier, sourceFile.fileName);\n\n return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);\n};\n\nconst importedAlias = (\n statement: ts.ImportDeclaration,\n sourceFile: ts.SourceFile,\n name: string,\n): AliasSite | undefined => {\n const bindings = statement.importClause?.namedBindings;\n const specifier = specifierText(statement.moduleSpecifier);\n\n if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {\n return undefined;\n }\n\n const imported = boundName(bindings.elements, name);\n\n return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);\n};\n\nconst exportedAlias = (\n statement: ts.ExportDeclaration,\n sourceFile: ts.SourceFile,\n name: string,\n): AliasSite | undefined => {\n const specifier = specifierText(statement.moduleSpecifier);\n\n if (specifier === undefined) {\n return undefined;\n }\n\n const clause = statement.exportClause;\n\n if (clause === undefined) {\n return findAliasInModule(specifier, sourceFile, name);\n }\n\n const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;\n\n return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);\n};\n\nconst statementAlias = (statement: ts.Statement, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {\n if (ts.isTypeAliasDeclaration(statement)) {\n return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;\n }\n\n if (ts.isImportDeclaration(statement)) {\n return importedAlias(statement, sourceFile, name);\n }\n\n return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;\n};\n\nconst propType = (type: ts.TypeNode, sourceFile: ts.SourceFile): string => {\n const parts: readonly ts.TypeNode[] = ts.isUnionTypeNode(type) ? type.types : [type];\n\n return parts\n .filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)\n .map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, \" \"))\n .join(\" | \");\n};\n\nconst propDoc = (member: ts.TypeElement): string => {\n const comments = ts\n .getJSDocCommentsAndTags(member)\n .map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));\n\n return comments.filter((text) => text !== undefined).join(\" \").replaceAll(WHITESPACE_RUN, \" \").trim();\n};\n\nconst propertyProp = (member: ts.PropertySignature, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n const { name, type } = member;\n\n if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {\n return undefined;\n }\n\n return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };\n};\n\nconst indexProp = (member: ts.IndexSignatureDeclaration, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n const keyType = member.parameters[0]?.type;\n\n if (keyType === undefined) {\n return undefined;\n }\n\n return {\n name: keyType.getText(sourceFile).replaceAll(\"`\", \"\"),\n type: propType(member.type, sourceFile),\n doc: propDoc(member),\n };\n};\n\nconst memberProp = (member: ts.TypeElement, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n if (ts.isPropertySignature(member)) {\n return propertyProp(member, sourceFile);\n }\n\n return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;\n};\n\nconst literalProps = (type: ts.TypeLiteralNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {\n const props: HandwrittenProp[] = [];\n\n for (const member of type.members) {\n const prop = memberProp(member, sourceFile);\n\n if (prop !== undefined) {\n props.push(prop);\n }\n }\n\n return props;\n};\n\nconst referenceProps = (type: ts.TypeReferenceNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {\n if (!ts.isIdentifier(type.typeName)) {\n return [];\n }\n\n const site = findAlias(sourceFile, type.typeName.text);\n\n return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);\n};\n\nconst declaredProps = (ref: ModuleExport): HandwrittenProp[] => {\n const filePath = moduleFileFor(ref.module, CONTAINING_FILE);\n\n if (filePath === undefined) {\n throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);\n }\n\n const site = findAlias(parseModule(filePath), ref.export);\n\n if (site === undefined) {\n throw new Error(`${ref.module} declares no type named ${ref.export}`);\n }\n\n return typeNodeProps(site.declaration.type, site.sourceFile);\n};\n\nconst handwrittenPropsFor = (ref: ModuleExport): HandwrittenProp[] => {\n const key = `${ref.module}#${ref.export}`;\n const cached = propsByRef.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const props = declaredProps(ref);\n propsByRef.set(key, props);\n\n return props;\n};\n\nfunction findAlias(sourceFile: ts.SourceFile, name: string): AliasSite | undefined {\n for (const statement of sourceFile.statements) {\n const site = statementAlias(statement, sourceFile, name);\n\n if (site !== undefined) {\n return site;\n }\n }\n\n return undefined;\n}\n\nfunction typeNodeProps(type: ts.TypeNode, sourceFile: ts.SourceFile): HandwrittenProp[] {\n if (ts.isTypeLiteralNode(type)) {\n return literalProps(type, sourceFile);\n }\n\n if (ts.isIntersectionTypeNode(type)) {\n return type.types.flatMap((part) => typeNodeProps(part, sourceFile));\n }\n\n return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];\n}\n\nexport { handwrittenPropsFor, type HandwrittenProp };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,sCAAsC,CAAC;AAE1F,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,+BAA+B,CAAC;AAInF,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAeF,KAAK,UAAU,GAAG;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC/B,CAAC;AA2QF,QAAA,MAAM,SAAS,GAAI,SAAS,WAAW,KAAG,UA2BzC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/docs/pipeline.js
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { sortStringsBy } from "@gtkx/utils";
|
|
2
|
-
import {
|
|
2
|
+
import { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import { computeDocsFingerprint, FINGERPRINT_FILENAME, isDocsOutputFresh, } from "../fingerprint.js";
|
|
5
5
|
import { Library } from "../gir/library.js";
|
|
6
6
|
import { namespaceDirectory } from "../gir/namespace.js";
|
|
7
|
+
import { arrayGuard, hasFields, isString } from "../guards.js";
|
|
8
|
+
import { readJsonFile } from "../json.js";
|
|
7
9
|
import { setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
8
10
|
import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
|
|
9
11
|
import { setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
10
|
-
import {
|
|
12
|
+
import { renderElementPage } from "./element-page.js";
|
|
11
13
|
import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
|
|
12
14
|
const MANIFEST_FILENAME = "manifest.json";
|
|
15
|
+
const MANIFEST_GENERATOR = "gtkx-docs";
|
|
16
|
+
const ROOT_INDEX_FILENAME = "index.md";
|
|
17
|
+
const DEFAULT_BASE_PATH = "/reference";
|
|
13
18
|
const namespaceIndexPage = (namespace, elements) => {
|
|
14
19
|
const rows = elements.map((entry, index) => {
|
|
15
20
|
const link = namespace.elements[index]?.link ?? "";
|
|
@@ -85,9 +90,22 @@ const buildElementLinks = (elements, basePath) => {
|
|
|
85
90
|
}
|
|
86
91
|
return linkByGlibName;
|
|
87
92
|
};
|
|
93
|
+
const isEntryInsideOutDir = (value) => value.length > 0 && value !== "." && value !== ".." && !value.includes("/") && !value.includes("\\");
|
|
94
|
+
const isChildEntry = (value) => isString(value) && isEntryInsideOutDir(value);
|
|
95
|
+
const ownedEntry = (entry, source) => {
|
|
96
|
+
if (isEntryInsideOutDir(entry)) {
|
|
97
|
+
return entry;
|
|
98
|
+
}
|
|
99
|
+
throw new Error(`Refusing to generate documentation outside the output directory: ${source} maps to \`${entry}\`, ` +
|
|
100
|
+
"which is not an entry inside it. The GIR that declares it is malformed.");
|
|
101
|
+
};
|
|
102
|
+
const elementPagePath = (directory, entry) => {
|
|
103
|
+
const slug = ownedEntry(elementSlug(entry.klass.name), `the element ${entry.glibName}`);
|
|
104
|
+
return `${directory}/${slug}.md`;
|
|
105
|
+
};
|
|
88
106
|
const namespacePages = (input) => {
|
|
89
107
|
const { name, elements, basePath, linkByGlibName, pageContext } = input;
|
|
90
|
-
const directory = name
|
|
108
|
+
const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);
|
|
91
109
|
const docs = {
|
|
92
110
|
name,
|
|
93
111
|
directory,
|
|
@@ -95,7 +113,7 @@ const namespacePages = (input) => {
|
|
|
95
113
|
elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? "" })),
|
|
96
114
|
};
|
|
97
115
|
const pages = elements.map((entry) => ({
|
|
98
|
-
path:
|
|
116
|
+
path: elementPagePath(directory, entry),
|
|
99
117
|
content: renderElementPage(entry, pageContext),
|
|
100
118
|
}));
|
|
101
119
|
pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });
|
|
@@ -105,7 +123,7 @@ const generatePages = (options, basePath, library) => {
|
|
|
105
123
|
const intrinsicElements = collectIntrinsicElementClasses(library);
|
|
106
124
|
const byNamespace = groupElementsByNamespace(intrinsicElements);
|
|
107
125
|
const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
|
|
108
|
-
const pageContext =
|
|
126
|
+
const pageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
|
|
109
127
|
const pages = [];
|
|
110
128
|
const namespaces = [];
|
|
111
129
|
const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
|
|
@@ -115,17 +133,59 @@ const generatePages = (options, basePath, library) => {
|
|
|
115
133
|
pages.push(...result.pages);
|
|
116
134
|
namespaces.push(result.docs);
|
|
117
135
|
}
|
|
118
|
-
pages.push({ path:
|
|
136
|
+
pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries) });
|
|
119
137
|
return { pages, namespaces };
|
|
120
138
|
};
|
|
121
|
-
const
|
|
122
|
-
|
|
139
|
+
const isGeneratorTag = (value) => value === MANIFEST_GENERATOR;
|
|
140
|
+
const isDocsElementLink = (value) => hasFields(value, { text: isString, link: isString });
|
|
141
|
+
const isDocsNamespace = (value) => hasFields(value, {
|
|
142
|
+
name: isString,
|
|
143
|
+
directory: isChildEntry,
|
|
144
|
+
link: isString,
|
|
145
|
+
elements: arrayGuard(isDocsElementLink),
|
|
146
|
+
});
|
|
147
|
+
const isDocsManifest = (value) => hasFields(value, { generator: isGeneratorTag, namespaces: arrayGuard(isDocsNamespace) });
|
|
148
|
+
const readDocsManifest = (manifestPath) => {
|
|
149
|
+
const parsed = readJsonFile(manifestPath);
|
|
150
|
+
return isDocsManifest(parsed) ? parsed : undefined;
|
|
151
|
+
};
|
|
152
|
+
const outDirRefusal = (outDir, reason) => new Error(`Refusing to generate documentation into ${outDir}: ${reason}. Point the output directory at an ` +
|
|
153
|
+
"empty directory or at one gtkx generated, or remove it yourself first.");
|
|
154
|
+
const assertOwnedOutDir = (options, manifest) => {
|
|
155
|
+
const stats = statSync(options.outDir, { throwIfNoEntry: false });
|
|
156
|
+
if (stats === undefined) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!stats.isDirectory()) {
|
|
160
|
+
throw outDirRefusal(options.outDir, "it already exists and is not a directory");
|
|
161
|
+
}
|
|
162
|
+
if (manifest !== undefined || readdirSync(options.outDir).length === 0) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
throw outDirRefusal(options.outDir, `it is not empty and holds no ${MANIFEST_FILENAME} written by \`gtkx docs\`, ` +
|
|
166
|
+
"so its contents are not gtkx's to replace");
|
|
167
|
+
};
|
|
168
|
+
const clearOutDir = (options, manifest) => {
|
|
169
|
+
if (manifest === undefined) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const entries = [
|
|
173
|
+
...manifest.namespaces.map((namespace) => namespace.directory),
|
|
174
|
+
ROOT_INDEX_FILENAME,
|
|
175
|
+
MANIFEST_FILENAME,
|
|
176
|
+
FINGERPRINT_FILENAME,
|
|
177
|
+
];
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
rmSync(join(options.outDir, entry), { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const cachedDocsResult = (options, manifest, input) => {
|
|
183
|
+
if (manifest === undefined || options.isForced === true) {
|
|
123
184
|
return undefined;
|
|
124
185
|
}
|
|
125
|
-
if (!
|
|
186
|
+
if (!isDocsOutputFresh(options.outDir, options.libraries, options.girPath, input)) {
|
|
126
187
|
return undefined;
|
|
127
188
|
}
|
|
128
|
-
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
129
189
|
return { isRegenerated: false, namespaces: manifest.namespaces };
|
|
130
190
|
};
|
|
131
191
|
const writePages = (outDir, pages) => {
|
|
@@ -135,23 +195,30 @@ const writePages = (outDir, pages) => {
|
|
|
135
195
|
writeFileSync(target, page.content);
|
|
136
196
|
}
|
|
137
197
|
};
|
|
198
|
+
const docsFingerprintInput = (options) => ({
|
|
199
|
+
basePath: options.basePath ?? DEFAULT_BASE_PATH,
|
|
200
|
+
props: options.props ?? {},
|
|
201
|
+
omittedProps: options.omittedProps ?? {},
|
|
202
|
+
});
|
|
138
203
|
const writeDocs = (options) => {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
204
|
+
const input = docsFingerprintInput(options);
|
|
205
|
+
setElementProps(input.props);
|
|
206
|
+
setOmittedProps(input.omittedProps);
|
|
142
207
|
const manifestPath = join(options.outDir, MANIFEST_FILENAME);
|
|
143
|
-
const
|
|
208
|
+
const previous = readDocsManifest(manifestPath);
|
|
209
|
+
const cached = cachedDocsResult(options, previous, input);
|
|
144
210
|
if (cached !== undefined) {
|
|
145
211
|
return cached;
|
|
146
212
|
}
|
|
213
|
+
assertOwnedOutDir(options, previous);
|
|
147
214
|
const library = Library.load(options.libraries, options.girPath);
|
|
148
|
-
const { pages, namespaces } = generatePages(options, basePath, library);
|
|
149
|
-
|
|
215
|
+
const { pages, namespaces } = generatePages(options, input.basePath, library);
|
|
216
|
+
clearOutDir(options, previous);
|
|
150
217
|
mkdirSync(options.outDir, { recursive: true });
|
|
151
|
-
|
|
152
|
-
const manifest = { namespaces };
|
|
218
|
+
const manifest = { generator: MANIFEST_GENERATOR, namespaces };
|
|
153
219
|
writeFileSync(manifestPath, JSON.stringify(manifest));
|
|
154
|
-
|
|
220
|
+
writePages(options.outDir, pages);
|
|
221
|
+
writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(computeDocsFingerprint(library.girFiles, options.libraries, options.girPath, input)));
|
|
155
222
|
return { isRegenerated: true, namespaces };
|
|
156
223
|
};
|
|
157
224
|
export { writeDocs };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { computeGiFingerprint, FINGERPRINT_FILENAME, isGiStoreFresh } from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.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 { createElementPageContext, type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n props?: ElementProps;\n omittedProps?: OmittedProps;\n isForced?: boolean;\n};\n\ntype DocsManifest = {\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n isRegenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description =\n `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +\n `the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkByGlibName, pageContext } = input;\n const directory = name.toLowerCase();\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: `${directory}/${elementSlug(entry.klass.name)}.md`,\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (options: DocsOptions, basePath: string, library: Library): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath);\n const pageContext = createElementPageContext(library, (glibName: string) => linkByGlibName.get(glibName));\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: \"index.md\", content: rootIndexPage(namespaces, options.libraries) });\n\n return { pages, namespaces };\n};\n\nconst cachedDocsResult = (options: DocsOptions, manifestPath: string): DocsResult | undefined => {\n if (options.isForced === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {\n return undefined;\n }\n\n if (!existsSync(manifestPath)) {\n return undefined;\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as DocsManifest;\n\n return { isRegenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n setElementProps(options.props ?? {});\n setOmittedProps(options.omittedProps ?? {});\n const basePath = options.basePath ?? \"/reference\";\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const cached = cachedDocsResult(options, manifestPath);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const library = Library.load(options.libraries, options.girPath);\n const { pages, namespaces } = generatePages(options, basePath, library);\n rmSync(options.outDir, { recursive: true, force: true });\n mkdirSync(options.outDir, { recursive: true });\n writePages(options.outDir, pages);\n const manifest: DocsManifest = { namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n\n writeFileSync(\n join(options.outDir, FINGERPRINT_FILENAME),\n JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)),\n );\n\n return { isRegenerated: true, namespaces };\n};\n\nexport { writeDocs };\n"]}
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport {\n computeDocsFingerprint,\n type DocsFingerprintInput,\n FINGERPRINT_FILENAME,\n isDocsOutputFresh,\n} from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.js\";\nimport { arrayGuard, hasFields, isString } from \"../guards.js\";\nimport { readJsonFile } from \"../json.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 { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n props?: ElementProps;\n omittedProps?: OmittedProps;\n isForced?: boolean;\n};\n\ntype DocsManifest = {\n generator: string;\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n isRegenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\nconst MANIFEST_GENERATOR = \"gtkx-docs\";\nconst ROOT_INDEX_FILENAME = \"index.md\";\nconst DEFAULT_BASE_PATH = \"/reference\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description =\n `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +\n `the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst isEntryInsideOutDir = (value: string): boolean =>\n value.length > 0 && value !== \".\" && value !== \"..\" && !value.includes(\"/\") && !value.includes(\"\\\\\");\n\nconst isChildEntry = (value: unknown): value is string => isString(value) && isEntryInsideOutDir(value);\n\nconst ownedEntry = (entry: string, source: string): string => {\n if (isEntryInsideOutDir(entry)) {\n return entry;\n }\n\n throw new Error(\n `Refusing to generate documentation outside the output directory: ${source} maps to \\`${entry}\\`, ` +\n \"which is not an entry inside it. The GIR that declares it is malformed.\",\n );\n};\n\nconst elementPagePath = (directory: string, entry: GlibNamedClass): string => {\n const slug = ownedEntry(elementSlug(entry.klass.name), `the element ${entry.glibName}`);\n\n return `${directory}/${slug}.md`;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkByGlibName, pageContext } = input;\n const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: elementPagePath(directory, entry),\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (options: DocsOptions, basePath: string, library: Library): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath);\n const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries) });\n\n return { pages, namespaces };\n};\n\nconst isGeneratorTag = (value: unknown): value is string => value === MANIFEST_GENERATOR;\n\nconst isDocsElementLink = (value: unknown): value is DocsElementLink =>\n hasFields<DocsElementLink>(value, { text: isString, link: isString });\n\nconst isDocsNamespace = (value: unknown): value is DocsNamespace =>\n hasFields<DocsNamespace>(value, {\n name: isString,\n directory: isChildEntry,\n link: isString,\n elements: arrayGuard(isDocsElementLink),\n });\n\nconst isDocsManifest = (value: unknown): value is DocsManifest =>\n hasFields<DocsManifest>(value, { generator: isGeneratorTag, namespaces: arrayGuard(isDocsNamespace) });\n\nconst readDocsManifest = (manifestPath: string): DocsManifest | undefined => {\n const parsed = readJsonFile(manifestPath);\n\n return isDocsManifest(parsed) ? parsed : undefined;\n};\n\nconst outDirRefusal = (outDir: string, reason: string): Error =>\n new Error(\n `Refusing to generate documentation into ${outDir}: ${reason}. Point the output directory at an ` +\n \"empty directory or at one gtkx generated, or remove it yourself first.\",\n );\n\nconst assertOwnedOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n const stats = statSync(options.outDir, { throwIfNoEntry: false });\n\n if (stats === undefined) {\n return;\n }\n\n if (!stats.isDirectory()) {\n throw outDirRefusal(options.outDir, \"it already exists and is not a directory\");\n }\n\n if (manifest !== undefined || readdirSync(options.outDir).length === 0) {\n return;\n }\n\n throw outDirRefusal(\n options.outDir,\n `it is not empty and holds no ${MANIFEST_FILENAME} written by \\`gtkx docs\\`, ` +\n \"so its contents are not gtkx's to replace\",\n );\n};\n\nconst clearOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {\n if (manifest === undefined) {\n return;\n }\n\n const entries = [\n ...manifest.namespaces.map((namespace) => namespace.directory),\n ROOT_INDEX_FILENAME,\n MANIFEST_FILENAME,\n FINGERPRINT_FILENAME,\n ];\n\n for (const entry of entries) {\n rmSync(join(options.outDir, entry), { recursive: true, force: true });\n }\n};\n\nconst cachedDocsResult = (\n options: DocsOptions,\n manifest: DocsManifest | undefined,\n input: DocsFingerprintInput,\n): DocsResult | undefined => {\n if (manifest === undefined || options.isForced === true) {\n return undefined;\n }\n\n if (!isDocsOutputFresh(options.outDir, options.libraries, options.girPath, input)) {\n return undefined;\n }\n\n return { isRegenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst docsFingerprintInput = (options: DocsOptions): DocsFingerprintInput => ({\n basePath: options.basePath ?? DEFAULT_BASE_PATH,\n props: options.props ?? {},\n omittedProps: options.omittedProps ?? {},\n});\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n const input = docsFingerprintInput(options);\n setElementProps(input.props);\n setOmittedProps(input.omittedProps);\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const previous = readDocsManifest(manifestPath);\n const cached = cachedDocsResult(options, previous, input);\n\n if (cached !== undefined) {\n return cached;\n }\n\n assertOwnedOutDir(options, previous);\n const library = Library.load(options.libraries, options.girPath);\n const { pages, namespaces } = generatePages(options, input.basePath, library);\n clearOutDir(options, previous);\n mkdirSync(options.outDir, { recursive: true });\n const manifest: DocsManifest = { generator: MANIFEST_GENERATOR, namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n writePages(options.outDir, pages);\n\n writeFileSync(\n join(options.outDir, FINGERPRINT_FILENAME),\n JSON.stringify(computeDocsFingerprint(library.girFiles, options.libraries, options.girPath, input)),\n );\n\n return { isRegenerated: true, namespaces };\n};\n\nexport { writeDocs };\n"]}
|
package/dist/docs/render.d.ts
CHANGED
|
@@ -1,34 +1,55 @@
|
|
|
1
|
+
import type { GirAnnotations } from "../gir/annotations.js";
|
|
1
2
|
import type { GirClass } from "../gir/class.js";
|
|
2
|
-
import type { GirFunction } from "../gir/function.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
4
|
import type { GirNamespace } from "../gir/namespace.js";
|
|
5
5
|
import type { GirCallable } from "../gir/parameter.js";
|
|
6
|
+
import type { GirProperty } from "../gir/property.js";
|
|
6
7
|
import type { TypeId } from "../gir/type-id.js";
|
|
8
|
+
import type { JsDocSpec } from "../writer/doc-tags.js";
|
|
7
9
|
import { ModuleContext } from "../writer/context.js";
|
|
8
10
|
type SignatureEntry = {
|
|
9
11
|
name: string;
|
|
10
12
|
signature: string;
|
|
11
13
|
doc: string;
|
|
14
|
+
tags?: JsDocSpec | undefined;
|
|
12
15
|
};
|
|
13
16
|
type OriginSignatureEntry = SignatureEntry & {
|
|
14
17
|
origin: string | undefined;
|
|
15
18
|
};
|
|
19
|
+
type MetaDocEntry = {
|
|
20
|
+
name: string;
|
|
21
|
+
meta: string;
|
|
22
|
+
doc: string;
|
|
23
|
+
tags?: JsDocSpec | undefined;
|
|
24
|
+
};
|
|
25
|
+
type PropertyMetaOptions = {
|
|
26
|
+
type: string;
|
|
27
|
+
property: GirProperty;
|
|
28
|
+
accessNotes: string[];
|
|
29
|
+
origin: string | undefined;
|
|
30
|
+
};
|
|
16
31
|
declare const renderDocsType: (library: Library, ref: TypeId | undefined, isNullable: boolean) => string;
|
|
17
32
|
declare const renderDocsSignalSignature: (library: Library, signal: GirCallable, selfType: string) => string;
|
|
18
33
|
declare const renderDocsSignalHandlerType: (library: Library, signal: GirCallable) => string;
|
|
19
|
-
declare const docsDefaultValue: (value: string) => string;
|
|
20
34
|
declare const docMarkdown: (doc: string | undefined) => string;
|
|
35
|
+
declare const plainText: (doc: string | undefined) => string;
|
|
21
36
|
declare const firstSentence: (doc: string | undefined) => string;
|
|
22
37
|
declare const elementSlug: (className: string) => string;
|
|
23
38
|
declare const implementsLine: (names: string[]) => string[];
|
|
24
39
|
declare const joinSections: (sections: string[]) => string;
|
|
25
|
-
declare const
|
|
40
|
+
declare const tagNotes: (spec: JsDocSpec | undefined) => string[];
|
|
41
|
+
declare const deprecationMeta: (annotations: GirAnnotations) => string[];
|
|
42
|
+
declare const annotationNotes: (annotations: GirAnnotations) => string[];
|
|
43
|
+
declare const signalTags: (signal: GirCallable, isSelfIncluded: boolean) => JsDocSpec;
|
|
44
|
+
declare const sortedMetaBlocks: (entries: MetaDocEntry[]) => string[];
|
|
45
|
+
declare const propertyMetaLine: ({ type, property, accessNotes, origin }: PropertyMetaOptions) => string;
|
|
26
46
|
declare const signatureBlock: (name: string, signature: string, notes: string[]) => string;
|
|
47
|
+
declare const signatureEntryBlock: (entry: SignatureEntry, leadingNotes?: string[]) => string;
|
|
27
48
|
declare const namespaceOrder: (name: string) => string;
|
|
28
49
|
declare const docsSignatureContext: (namespace: GirNamespace, library: Library) => ModuleContext;
|
|
29
50
|
declare const originSignatureBlocks: (entries: OriginSignatureEntry[]) => string[];
|
|
51
|
+
declare const qualifiedClassName: (namespaceName: string, className: string) => string;
|
|
30
52
|
declare const classMethodEntries: (library: Library, namespace: GirNamespace, klass: GirClass) => SignatureEntry[];
|
|
31
53
|
declare const methodsSectionBlocks: (entries: SignatureEntry[], intro: string) => string[];
|
|
32
|
-
|
|
33
|
-
export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, docsDefaultValue, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, metaBlock, signatureBlock, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, instanceMethodEntries, type SignatureEntry, type OriginSignatureEntry, };
|
|
54
|
+
export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, qualifiedClassName, tagNotes, type MetaDocEntry, type SignatureEntry, type OriginSignatureEntry, };
|
|
34
55
|
//# sourceMappingURL=render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/render.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sanitizeTypeIdentifier, sortStringsBy } from "@gtkx/utils";
|
|
2
2
|
import { collectInheritedMethods, conflictRename } from "../analysis/inheritance.js";
|
|
3
3
|
import { renderHandlerParameters, renderHandlerResultType } from "../analysis/param-structure.js";
|
|
4
4
|
import { recordTypeTarget, renderBaseType } from "../analysis/ts-type.js";
|
|
5
|
-
import { dedupeCallables, instanceScope, renderInstanceMethodSignature } from "../store/gi/callables.js";
|
|
5
|
+
import { dedupeCallables, instanceMemberSpec, instanceScope, renderInstanceMethodSignature, } from "../store/gi/callables.js";
|
|
6
|
+
import { annotationSpec, handlerSpec, selfHandlerSpec } from "../store/gi/doc-spec.js";
|
|
6
7
|
import { methodExportName } from "../store/gi/method.js";
|
|
7
8
|
import { ModuleContext } from "../writer/context.js";
|
|
9
|
+
import { stripDocMedia } from "../writer/doc-tags.js";
|
|
8
10
|
import { gtkDocToMarkdown } from "../writer/gtk-doc.js";
|
|
9
11
|
const DOCS_DEFAULT_VALUES = { TRUE: "true", FALSE: "false", NULL: "null" };
|
|
10
12
|
const FENCE_LINE = /^\s*(```|~~~)/;
|
|
11
13
|
const HEADING_LINE = /^#{1,5}\s/;
|
|
12
14
|
const LEADING_NAMESPACES = ["Gtk", "Adw"];
|
|
13
15
|
const DOCS_SIGNATURE_NAMESPACE = "$docs";
|
|
16
|
+
const WHITESPACE_RUN = /\s+/g;
|
|
14
17
|
const docsTarget = (library) => recordTypeTarget(library, (name) => `${name.namespaceName}.${name.typeName}`, () => "GObject.Type");
|
|
15
18
|
const renderDocsType = (library, ref, isNullable) => {
|
|
16
19
|
const base = renderBaseType(library, docsTarget(library), ref);
|
|
@@ -30,10 +33,6 @@ const renderDocsSignalSignature = (library, signal, selfType) => {
|
|
|
30
33
|
};
|
|
31
34
|
const renderDocsSignalHandlerType = (library, signal) => `(${renderDocsHandlerParameters(library, signal).join(", ")}) => ${renderDocsHandlerResultType(library, signal)}`;
|
|
32
35
|
const docsDefaultValue = (value) => DOCS_DEFAULT_VALUES[value] ?? value;
|
|
33
|
-
const stripDocMedia = (markdown) => markdown
|
|
34
|
-
.replaceAll(/<picture[\s\S]*?<\/picture>/g, "")
|
|
35
|
-
.replaceAll(/<video[\s\S]*?(?:<\/video>|\/>)/g, "")
|
|
36
|
-
.replaceAll(/<img[^>]*>/g, "");
|
|
37
36
|
const demoteLine = (line, isInFence) => {
|
|
38
37
|
if (FENCE_LINE.test(line)) {
|
|
39
38
|
return { text: line, isInFence: !isInFence };
|
|
@@ -58,11 +57,13 @@ const stripMarkdown = (markdown) => markdown
|
|
|
58
57
|
.replaceAll(/```[\s\S]*?```/g, " ")
|
|
59
58
|
.replaceAll(/`([^`]*)`/g, "$1")
|
|
60
59
|
.replaceAll(/\[([^[\]]*)\]\([^)]*\)/g, "$1")
|
|
61
|
-
.replaceAll(/[
|
|
62
|
-
.replaceAll(
|
|
60
|
+
.replaceAll(/[*#>]/g, "")
|
|
61
|
+
.replaceAll(WHITESPACE_RUN, " ")
|
|
63
62
|
.trim();
|
|
63
|
+
const inlineMarkdown = (doc) => docMarkdown(doc).replaceAll(WHITESPACE_RUN, " ").trim();
|
|
64
|
+
const plainText = (doc) => stripMarkdown(docMarkdown(doc));
|
|
64
65
|
const firstSentence = (doc) => {
|
|
65
|
-
const text =
|
|
66
|
+
const text = plainText(doc);
|
|
66
67
|
if (text.length === 0) {
|
|
67
68
|
return "";
|
|
68
69
|
}
|
|
@@ -82,13 +83,73 @@ const implementsLine = (names) => {
|
|
|
82
83
|
return [`Implements ${quotedNames}.`];
|
|
83
84
|
};
|
|
84
85
|
const joinSections = (sections) => `${sections.filter((section) => section.length > 0).join("\n\n")}\n`;
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
const paramNotes = (params) => {
|
|
87
|
+
const entries = (params ?? [])
|
|
88
|
+
.map((param) => ({ name: param.name, text: inlineMarkdown(param.doc) }))
|
|
89
|
+
.filter((entry) => entry.text.length > 0);
|
|
90
|
+
if (entries.length === 0) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
const bullets = entries.map((entry) => `- \`${entry.name}\`: ${entry.text}`);
|
|
94
|
+
return [["**Parameters**", "", ...bullets].join("\n")];
|
|
95
|
+
};
|
|
96
|
+
const labelledNote = (label, text) => (text.length === 0 ? [] : [`${label} ${text}`]);
|
|
97
|
+
const deprecationNote = (deprecation) => {
|
|
98
|
+
if (deprecation === undefined) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
const since = deprecation.since;
|
|
102
|
+
const heading = since === undefined ? "**Deprecated.**" : `**Deprecated since ${since}.**`;
|
|
103
|
+
const text = inlineMarkdown(deprecation.doc);
|
|
104
|
+
const body = text.length === 0 ? heading : `${heading} ${text}`;
|
|
105
|
+
return [`> ${body}`];
|
|
106
|
+
};
|
|
107
|
+
const sinceNote = (since) => since === undefined || since.length === 0 ? [] : [`_Available since ${since}._`];
|
|
108
|
+
const tagNotes = (spec) => {
|
|
109
|
+
if (spec === undefined) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
return [
|
|
113
|
+
...paramNotes(spec.params),
|
|
114
|
+
...labelledNote("**Returns**", docMarkdown(spec.returns)),
|
|
115
|
+
...labelledNote("**Throws**", inlineMarkdown(spec.throws)),
|
|
116
|
+
...deprecationNote(spec.deprecated),
|
|
117
|
+
...sinceNote(spec.since),
|
|
118
|
+
];
|
|
119
|
+
};
|
|
120
|
+
const deprecationMeta = (annotations) => {
|
|
121
|
+
if (!annotations.isDeprecated) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const since = annotations.deprecatedSince;
|
|
125
|
+
return [since === undefined ? "deprecated" : `deprecated since ${since}`];
|
|
126
|
+
};
|
|
127
|
+
const annotationNotes = (annotations) => tagNotes(annotationSpec(annotations));
|
|
128
|
+
const signalTags = (signal, isSelfIncluded) => isSelfIncluded ? selfHandlerSpec(signal) : handlerSpec(signal, signal.parameters);
|
|
129
|
+
const metaBlock = (entry) => {
|
|
130
|
+
const lines = [`### \`${entry.name}\``, "", entry.meta];
|
|
131
|
+
for (const note of [entry.doc, ...tagNotes(entry.tags)]) {
|
|
132
|
+
if (note.length > 0) {
|
|
133
|
+
lines.push("", note);
|
|
134
|
+
}
|
|
89
135
|
}
|
|
90
136
|
return lines.join("\n");
|
|
91
137
|
};
|
|
138
|
+
const sortedMetaBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item));
|
|
139
|
+
const propertyMetaLine = ({ type, property, accessNotes, origin }) => {
|
|
140
|
+
const meta = [`\`${type}\``];
|
|
141
|
+
if (property.defaultValue !== undefined) {
|
|
142
|
+
meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
|
|
143
|
+
}
|
|
144
|
+
if (property.constructOnly) {
|
|
145
|
+
meta.push("construct-only");
|
|
146
|
+
}
|
|
147
|
+
meta.push(...accessNotes, ...deprecationMeta(property.annotations));
|
|
148
|
+
if (origin !== undefined) {
|
|
149
|
+
meta.push(`from \`${origin}\``);
|
|
150
|
+
}
|
|
151
|
+
return meta.join(" · ");
|
|
152
|
+
};
|
|
92
153
|
const signatureBlock = (name, signature, notes) => {
|
|
93
154
|
const lines = [`### \`${name}\``, "", `\`\`\`ts\n${signature}\n\`\`\``];
|
|
94
155
|
for (const note of notes) {
|
|
@@ -98,28 +159,25 @@ const signatureBlock = (name, signature, notes) => {
|
|
|
98
159
|
}
|
|
99
160
|
return lines.join("\n");
|
|
100
161
|
};
|
|
162
|
+
const signatureEntryBlock = (entry, leadingNotes = []) => signatureBlock(entry.name, entry.signature, [...leadingNotes, entry.doc, ...tagNotes(entry.tags)]);
|
|
101
163
|
const namespaceOrder = (name) => {
|
|
102
164
|
const index = LEADING_NAMESPACES.indexOf(name);
|
|
103
165
|
return index === -1 ? `1${name}` : `0${String(index)}`;
|
|
104
166
|
};
|
|
105
167
|
const docsSignatureContext = (namespace, library) => new ModuleContext({ ...namespace, name: DOCS_SIGNATURE_NAMESPACE }, library);
|
|
106
|
-
const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) =>
|
|
107
|
-
|
|
108
|
-
item.doc,
|
|
109
|
-
]));
|
|
168
|
+
const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item, item.origin === undefined ? [] : [`From \`${item.origin}\`.`]));
|
|
169
|
+
const qualifiedClassName = (namespaceName, className) => `${namespaceName}.${sanitizeTypeIdentifier(className)}`;
|
|
110
170
|
const classMethodEntries = (library, namespace, klass) => {
|
|
111
171
|
const realContext = new ModuleContext(namespace, library);
|
|
112
172
|
const signatureContext = docsSignatureContext(namespace, library);
|
|
113
|
-
const className =
|
|
173
|
+
const className = sanitizeTypeIdentifier(klass.name);
|
|
114
174
|
const inherited = collectInheritedMethods(realContext, klass);
|
|
115
175
|
return instanceMethodEntries(signatureContext, klass, (method) => conflictRename(realContext, method, inherited, className));
|
|
116
176
|
};
|
|
117
|
-
const methodsSectionBlocks = (entries, intro) => entries.length === 0
|
|
118
|
-
? []
|
|
119
|
-
: ["## Methods", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];
|
|
177
|
+
const methodsSectionBlocks = (entries, intro) => entries.length === 0 ? [] : ["## Methods", intro, ...entries.map((item) => signatureEntryBlock(item))];
|
|
120
178
|
const instanceMethodEntries = (signatureContext, klass, rename) => {
|
|
121
179
|
const deduped = dedupeCallables(klass.methods);
|
|
122
|
-
const scope = instanceScope(
|
|
180
|
+
const scope = instanceScope(sanitizeTypeIdentifier(klass.name), {
|
|
123
181
|
constructors: dedupeCallables(klass.constructors),
|
|
124
182
|
functions: dedupeCallables(klass.functions),
|
|
125
183
|
methods: deduped,
|
|
@@ -127,17 +185,22 @@ const instanceMethodEntries = (signatureContext, klass, rename) => {
|
|
|
127
185
|
const entries = [];
|
|
128
186
|
for (const method of deduped) {
|
|
129
187
|
const nameOverride = rename(method);
|
|
130
|
-
const rendered = renderInstanceMethodSignature(signatureContext,
|
|
188
|
+
const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);
|
|
131
189
|
if (rendered === undefined) {
|
|
132
190
|
continue;
|
|
133
191
|
}
|
|
134
192
|
entries.push({
|
|
135
193
|
name: nameOverride ?? methodExportName(method),
|
|
136
|
-
signature: rendered
|
|
194
|
+
signature: signatureText(rendered),
|
|
137
195
|
doc: docMarkdown(method.doc),
|
|
196
|
+
tags: instanceMemberSpec(signatureContext, method, scope),
|
|
138
197
|
});
|
|
139
198
|
}
|
|
140
199
|
return sortStringsBy(entries, (entry) => entry.name);
|
|
141
200
|
};
|
|
142
|
-
|
|
201
|
+
const signatureText = (rendered) => {
|
|
202
|
+
const start = rendered.startsWith("/**") ? rendered.indexOf("*/") + 2 : 0;
|
|
203
|
+
return rendered.slice(start).trim().replace(/;$/, "");
|
|
204
|
+
};
|
|
205
|
+
export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, qualifiedClassName, tagNotes, };
|
|
143
206
|
//# sourceMappingURL=render.js.map
|