@gtkx/codegen 1.0.0-rc.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -9
- package/dist/analysis/descriptor-render.d.ts +9 -4
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +51 -61
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +7 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +1 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +25 -22
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +130 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +13 -6
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +44 -20
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +3 -5
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +79 -3
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +68 -13
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +32 -20
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.d.ts +4 -4
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +6 -6
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +25 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +90 -28
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +22 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +129 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -6
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +6 -8
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -11
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +0 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +2 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +11 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +22 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -4
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -11
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +13 -2
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +11 -0
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +34 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +38 -0
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -5
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +39 -0
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +7 -7
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -3
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +36 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +2 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +2 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +7 -12
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -19
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +29 -7
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +96 -26
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +3 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +59 -28
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +5 -5
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +8 -8
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +16 -10
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +22 -15
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +33 -21
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +2 -3
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +3 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +16 -16
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +2 -2
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +5 -3
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +3 -4
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -16
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +28 -17
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +130 -16
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +9 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +92 -47
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +4 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +5 -1
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +3 -2
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +2 -2
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +4 -2
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +10 -11
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +3 -1
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +4 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +6 -11
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +1 -5
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +3 -2
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +27 -31
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -10
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -10
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +16 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +214 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -3
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -8
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -4
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -2
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +13 -12
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +9 -9
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +2 -4
- package/dist/store/jsx/omitted-props.d.ts.map +1 -1
- package/dist/store/jsx/omitted-props.js +2 -4
- package/dist/store/jsx/omitted-props.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +4 -2
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +3 -2
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +16 -8
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +3 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +8 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +13 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +56 -11
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +7 -11
- package/src/analysis/descriptor-render.ts +67 -73
- package/src/analysis/descriptor.ts +13 -16
- package/src/analysis/inheritance.ts +35 -34
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +172 -0
- package/src/analysis/param-structure.ts +90 -32
- package/src/analysis/ts-type.ts +4 -6
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +3 -2
- package/src/docs/api-reference.ts +162 -28
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +10 -10
- package/src/docs/render.ts +153 -39
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +8 -14
- package/src/gi.ts +4 -11
- package/src/gir/ancestry.ts +15 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -13
- package/src/gir/function.ts +15 -0
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +23 -2
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -7
- package/src/gir/parse.ts +8 -2
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -6
- package/src/gir/type-id.ts +51 -7
- package/src/gir/type-ref.ts +2 -1
- package/src/gir/type.ts +50 -6
- package/src/index.ts +18 -16
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -26
- package/src/khronos/args.ts +37 -14
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +134 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +12 -13
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +21 -18
- package/src/runner.ts +51 -40
- package/src/store/compile-store.ts +4 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +23 -17
- package/src/store/gi/callback.ts +3 -2
- package/src/store/gi/class.ts +6 -3
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/constant.ts +3 -6
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +55 -20
- package/src/store/gi/function.ts +44 -26
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +126 -68
- package/src/store/gi/param-marshal.ts +15 -1
- package/src/store/gi/pipeline.ts +7 -2
- package/src/store/gi/properties.ts +3 -2
- package/src/store/gi/property-accessor.ts +14 -11
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +9 -13
- package/src/store/gi/record-layout.ts +1 -5
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +36 -37
- package/src/store/gi/value-marshalable.ts +1 -10
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +8 -11
- package/src/store/jsx/element-prop-imports.ts +6 -5
- package/src/store/jsx/element-prop-types.ts +10 -2
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +15 -13
- package/src/store/jsx/metadata.ts +10 -10
- package/src/store/jsx/omitted-props.ts +2 -4
- package/src/store/jsx/pipeline.ts +6 -4
- package/src/store/jsx/props.ts +22 -9
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
const RESOLUTION_OPTIONS = {
|
|
4
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
5
|
+
customConditions: ["source"],
|
|
6
|
+
};
|
|
7
|
+
const CONTAINING_FILE = fileURLToPath(import.meta.url);
|
|
8
|
+
const WHITESPACE_RUN = /\s+/g;
|
|
9
|
+
const propsByRef = new Map();
|
|
10
|
+
const moduleFileFor = (specifier, containingFile) => ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;
|
|
11
|
+
const parseModule = (filePath) => ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? "", ts.ScriptTarget.Latest, true);
|
|
12
|
+
const specifierText = (node) => node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;
|
|
13
|
+
const boundName = (elements, name) => {
|
|
14
|
+
for (const element of elements) {
|
|
15
|
+
if (element.name.text === name) {
|
|
16
|
+
return (element.propertyName ?? element.name).text;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
};
|
|
21
|
+
const findAliasInModule = (specifier, sourceFile, name) => {
|
|
22
|
+
const filePath = moduleFileFor(specifier, sourceFile.fileName);
|
|
23
|
+
return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);
|
|
24
|
+
};
|
|
25
|
+
const importedAlias = (statement, sourceFile, name) => {
|
|
26
|
+
const bindings = statement.importClause?.namedBindings;
|
|
27
|
+
const specifier = specifierText(statement.moduleSpecifier);
|
|
28
|
+
if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const imported = boundName(bindings.elements, name);
|
|
32
|
+
return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);
|
|
33
|
+
};
|
|
34
|
+
const exportedAlias = (statement, sourceFile, name) => {
|
|
35
|
+
const specifier = specifierText(statement.moduleSpecifier);
|
|
36
|
+
if (specifier === undefined) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const clause = statement.exportClause;
|
|
40
|
+
if (clause === undefined) {
|
|
41
|
+
return findAliasInModule(specifier, sourceFile, name);
|
|
42
|
+
}
|
|
43
|
+
const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;
|
|
44
|
+
return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);
|
|
45
|
+
};
|
|
46
|
+
const statementAlias = (statement, sourceFile, name) => {
|
|
47
|
+
if (ts.isTypeAliasDeclaration(statement)) {
|
|
48
|
+
return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;
|
|
49
|
+
}
|
|
50
|
+
if (ts.isImportDeclaration(statement)) {
|
|
51
|
+
return importedAlias(statement, sourceFile, name);
|
|
52
|
+
}
|
|
53
|
+
return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;
|
|
54
|
+
};
|
|
55
|
+
const propType = (type, sourceFile) => {
|
|
56
|
+
const parts = ts.isUnionTypeNode(type) ? type.types : [type];
|
|
57
|
+
return parts
|
|
58
|
+
.filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)
|
|
59
|
+
.map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, " "))
|
|
60
|
+
.join(" | ");
|
|
61
|
+
};
|
|
62
|
+
const propDoc = (member) => {
|
|
63
|
+
const comments = ts
|
|
64
|
+
.getJSDocCommentsAndTags(member)
|
|
65
|
+
.map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));
|
|
66
|
+
return comments.filter((text) => text !== undefined).join(" ").replaceAll(WHITESPACE_RUN, " ").trim();
|
|
67
|
+
};
|
|
68
|
+
const propertyProp = (member, sourceFile) => {
|
|
69
|
+
const { name, type } = member;
|
|
70
|
+
if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };
|
|
74
|
+
};
|
|
75
|
+
const indexProp = (member, sourceFile) => {
|
|
76
|
+
const keyType = member.parameters[0]?.type;
|
|
77
|
+
if (keyType === undefined) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
name: keyType.getText(sourceFile).replaceAll("`", ""),
|
|
82
|
+
type: propType(member.type, sourceFile),
|
|
83
|
+
doc: propDoc(member),
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
const memberProp = (member, sourceFile) => {
|
|
87
|
+
if (ts.isPropertySignature(member)) {
|
|
88
|
+
return propertyProp(member, sourceFile);
|
|
89
|
+
}
|
|
90
|
+
return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;
|
|
91
|
+
};
|
|
92
|
+
const literalProps = (type, sourceFile) => {
|
|
93
|
+
const props = [];
|
|
94
|
+
for (const member of type.members) {
|
|
95
|
+
const prop = memberProp(member, sourceFile);
|
|
96
|
+
if (prop !== undefined) {
|
|
97
|
+
props.push(prop);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return props;
|
|
101
|
+
};
|
|
102
|
+
const referenceProps = (type, sourceFile) => {
|
|
103
|
+
if (!ts.isIdentifier(type.typeName)) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const site = findAlias(sourceFile, type.typeName.text);
|
|
107
|
+
return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);
|
|
108
|
+
};
|
|
109
|
+
const declaredProps = (ref) => {
|
|
110
|
+
const filePath = moduleFileFor(ref.module, CONTAINING_FILE);
|
|
111
|
+
if (filePath === undefined) {
|
|
112
|
+
throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);
|
|
113
|
+
}
|
|
114
|
+
const site = findAlias(parseModule(filePath), ref.export);
|
|
115
|
+
if (site === undefined) {
|
|
116
|
+
throw new Error(`${ref.module} declares no type named ${ref.export}`);
|
|
117
|
+
}
|
|
118
|
+
return typeNodeProps(site.declaration.type, site.sourceFile);
|
|
119
|
+
};
|
|
120
|
+
const handwrittenPropsFor = (ref) => {
|
|
121
|
+
const key = `${ref.module}#${ref.export}`;
|
|
122
|
+
const cached = propsByRef.get(key);
|
|
123
|
+
if (cached !== undefined) {
|
|
124
|
+
return cached;
|
|
125
|
+
}
|
|
126
|
+
const props = declaredProps(ref);
|
|
127
|
+
propsByRef.set(key, props);
|
|
128
|
+
return props;
|
|
129
|
+
};
|
|
130
|
+
function findAlias(sourceFile, name) {
|
|
131
|
+
for (const statement of sourceFile.statements) {
|
|
132
|
+
const site = statementAlias(statement, sourceFile, name);
|
|
133
|
+
if (site !== undefined) {
|
|
134
|
+
return site;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
function typeNodeProps(type, sourceFile) {
|
|
140
|
+
if (ts.isTypeLiteralNode(type)) {
|
|
141
|
+
return literalProps(type, sourceFile);
|
|
142
|
+
}
|
|
143
|
+
if (ts.isIntersectionTypeNode(type)) {
|
|
144
|
+
return type.types.flatMap((part) => typeNodeProps(part, sourceFile));
|
|
145
|
+
}
|
|
146
|
+
return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];
|
|
147
|
+
}
|
|
148
|
+
export { handwrittenPropsFor };
|
|
149
|
+
//# sourceMappingURL=handwritten-props.js.map
|
|
@@ -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"]}
|
package/dist/docs/pipeline.d.ts
CHANGED
|
@@ -16,13 +16,13 @@ type DocsOptions = {
|
|
|
16
16
|
outDir: string;
|
|
17
17
|
basePath?: string;
|
|
18
18
|
props?: ElementProps;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
omittedProps?: OmittedProps;
|
|
20
|
+
isForced?: boolean;
|
|
21
21
|
};
|
|
22
22
|
type DocsResult = {
|
|
23
|
-
|
|
23
|
+
isRegenerated: boolean;
|
|
24
24
|
namespaces: DocsNamespace[];
|
|
25
25
|
};
|
|
26
26
|
declare const writeDocs: (options: DocsOptions) => DocsResult;
|
|
27
|
-
export { writeDocs
|
|
27
|
+
export { writeDocs };
|
|
28
28
|
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAMA,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,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAMA,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;AAcF,KAAK,UAAU,GAAG;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC/B,CAAC;AAuKF,QAAA,MAAM,SAAS,GAAI,SAAS,WAAW,KAAG,UAyBzC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/docs/pipeline.js
CHANGED
|
@@ -7,7 +7,7 @@ import { namespaceDirectory } from "../gir/namespace.js";
|
|
|
7
7
|
import { setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
8
8
|
import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
|
|
9
9
|
import { setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
10
|
-
import {
|
|
10
|
+
import { renderElementPage } from "./element-page.js";
|
|
11
11
|
import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
|
|
12
12
|
const MANIFEST_FILENAME = "manifest.json";
|
|
13
13
|
const namespaceIndexPage = (namespace, elements) => {
|
|
@@ -105,7 +105,7 @@ const generatePages = (options, basePath, library) => {
|
|
|
105
105
|
const intrinsicElements = collectIntrinsicElementClasses(library);
|
|
106
106
|
const byNamespace = groupElementsByNamespace(intrinsicElements);
|
|
107
107
|
const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
|
|
108
|
-
const pageContext =
|
|
108
|
+
const pageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
|
|
109
109
|
const pages = [];
|
|
110
110
|
const namespaces = [];
|
|
111
111
|
const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
|
|
@@ -119,14 +119,14 @@ const generatePages = (options, basePath, library) => {
|
|
|
119
119
|
return { pages, namespaces };
|
|
120
120
|
};
|
|
121
121
|
const cachedDocsResult = (options, manifestPath) => {
|
|
122
|
-
if (options.
|
|
122
|
+
if (options.isForced === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {
|
|
123
123
|
return undefined;
|
|
124
124
|
}
|
|
125
125
|
if (!existsSync(manifestPath)) {
|
|
126
126
|
return undefined;
|
|
127
127
|
}
|
|
128
128
|
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
129
|
-
return {
|
|
129
|
+
return { isRegenerated: false, namespaces: manifest.namespaces };
|
|
130
130
|
};
|
|
131
131
|
const writePages = (outDir, pages) => {
|
|
132
132
|
for (const page of pages) {
|
|
@@ -137,7 +137,7 @@ const writePages = (outDir, pages) => {
|
|
|
137
137
|
};
|
|
138
138
|
const writeDocs = (options) => {
|
|
139
139
|
setElementProps(options.props ?? {});
|
|
140
|
-
setOmittedProps(options.
|
|
140
|
+
setOmittedProps(options.omittedProps ?? {});
|
|
141
141
|
const basePath = options.basePath ?? "/reference";
|
|
142
142
|
const manifestPath = join(options.outDir, MANIFEST_FILENAME);
|
|
143
143
|
const cached = cachedDocsResult(options, manifestPath);
|
|
@@ -152,7 +152,7 @@ const writeDocs = (options) => {
|
|
|
152
152
|
const manifest = { namespaces };
|
|
153
153
|
writeFileSync(manifestPath, JSON.stringify(manifest));
|
|
154
154
|
writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)));
|
|
155
|
-
return {
|
|
155
|
+
return { isRegenerated: true, namespaces };
|
|
156
156
|
};
|
|
157
157
|
export { writeDocs };
|
|
158
158
|
//# sourceMappingURL=pipeline.js.map
|
|
@@ -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 omitProps?: OmittedProps;\n force?: 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 regenerated: 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.force === 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 { regenerated: 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.omitProps ?? {});\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 { regenerated: true, namespaces };\n};\n\nexport { writeDocs, type DocsElementLink, type DocsNamespace, type DocsOptions, type DocsResult };\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 { 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 { 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: 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: \"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"]}
|
package/dist/docs/render.d.ts
CHANGED
|
@@ -1,34 +1,54 @@
|
|
|
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[];
|
|
30
51
|
declare const classMethodEntries: (library: Library, namespace: GirNamespace, klass: GirClass) => SignatureEntry[];
|
|
31
52
|
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, };
|
|
53
|
+
export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, tagNotes, type MetaDocEntry, type SignatureEntry, type OriginSignatureEntry, };
|
|
34
54
|
//# 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":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAgC,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYrF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,KAAK,oBAAoB,GAAG,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE5E,KAAK,YAAY,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAgBF,QAAA,MAAM,cAAc,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,YAAY,OAAO,KAAG,MAIxF,CAAC;AAcF,QAAA,MAAM,yBAAyB,GAAI,SAAS,OAAO,EAAE,QAAQ,WAAW,EAAE,UAAU,MAAM,KAAG,MAI5F,CAAC;AAEF,QAAA,MAAM,2BAA2B,GAAI,SAAS,OAAO,EAAE,QAAQ,WAAW,KAAG,MACwC,CAAC;AA6BtH,QAAA,MAAM,WAAW,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAC6D,CAAC;AAY7G,QAAA,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAyC,CAAC;AAEvF,QAAA,MAAM,aAAa,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAWhD,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MAInB,CAAC;AAEvB,QAAA,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,KAAG,MAAM,EAQ/C,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,KAAG,MAC6B,CAAC;AAkCzE,QAAA,MAAM,QAAQ,GAAI,MAAM,SAAS,GAAG,SAAS,KAAG,MAAM,EAYrD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,aAAa,cAAc,KAAG,MAAM,EAQ5D,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,aAAa,cAAc,KAAG,MAAM,EAA2C,CAAC;AAEzG,QAAA,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,gBAAgB,OAAO,KAAG,SACkB,CAAC;AActF,QAAA,MAAM,gBAAgB,GAAI,SAAS,YAAY,EAAE,KAAG,MAAM,EACoB,CAAC;AAE/E,QAAA,MAAM,gBAAgB,GAAI,yCAAyC,mBAAmB,KAAG,MAkBxF,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,EAAE,KAAG,MAU1E,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,OAAO,cAAc,EAAE,eAAc,MAAM,EAAO,KAAG,MACoB,CAAC;AAEvG,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAItC,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,aACM,CAAC;AAEjF,QAAA,MAAM,qBAAqB,GAAI,SAAS,oBAAoB,EAAE,KAAG,MAAM,EAGlE,CAAC;AAEN,QAAA,MAAM,kBAAkB,GAAI,SAAS,OAAO,EAAE,WAAW,YAAY,EAAE,OAAO,QAAQ,KAAG,cAAc,EAStG,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,SAAS,cAAc,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,EAC2B,CAAC;AA0C3G,OAAO,EACH,cAAc,EACd,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC5B,CAAC"}
|
package/dist/docs/render.js
CHANGED
|
@@ -2,15 +2,18 @@ import { pascalCase, 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);
|
|
@@ -20,8 +23,8 @@ const renderDocsHandlerResultType = (library, signal) => renderHandlerResultType
|
|
|
20
23
|
library,
|
|
21
24
|
signal,
|
|
22
25
|
renderType: (ref, nullable) => renderDocsType(library, ref, nullable),
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
shouldIncludeCallerAllocated: false,
|
|
27
|
+
isOptOut: true,
|
|
25
28
|
});
|
|
26
29
|
const renderDocsHandlerParameters = (library, signal) => renderHandlerParameters(signal.parameters, (ref, nullable) => renderDocsType(library, ref, nullable));
|
|
27
30
|
const renderDocsSignalSignature = (library, signal, selfType) => {
|
|
@@ -30,25 +33,21 @@ 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
|
-
return { text: line,
|
|
38
|
+
return { text: line, isInFence: !isInFence };
|
|
40
39
|
}
|
|
41
40
|
if (isInFence) {
|
|
42
|
-
return { text: line,
|
|
41
|
+
return { text: line, isInFence };
|
|
43
42
|
}
|
|
44
|
-
return { text: HEADING_LINE.test(line) ? `#${line}` : line,
|
|
43
|
+
return { text: HEADING_LINE.test(line) ? `#${line}` : line, isInFence };
|
|
45
44
|
};
|
|
46
45
|
const demoteHeadings = (markdown) => {
|
|
47
46
|
let isInFence = false;
|
|
48
47
|
const lines = [];
|
|
49
48
|
for (const line of markdown.split("\n")) {
|
|
50
49
|
const result = demoteLine(line, isInFence);
|
|
51
|
-
isInFence = result.
|
|
50
|
+
isInFence = result.isInFence;
|
|
52
51
|
lines.push(result.text);
|
|
53
52
|
}
|
|
54
53
|
return lines.join("\n");
|
|
@@ -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,15 +159,13 @@ 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
|
-
item.origin === undefined ? "" : `From \`${item.origin}\`.`,
|
|
108
|
-
item.doc,
|
|
109
|
-
]));
|
|
168
|
+
const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item, item.origin === undefined ? [] : [`From \`${item.origin}\`.`]));
|
|
110
169
|
const classMethodEntries = (library, namespace, klass) => {
|
|
111
170
|
const realContext = new ModuleContext(namespace, library);
|
|
112
171
|
const signatureContext = docsSignatureContext(namespace, library);
|
|
@@ -114,9 +173,7 @@ const classMethodEntries = (library, namespace, klass) => {
|
|
|
114
173
|
const inherited = collectInheritedMethods(realContext, klass);
|
|
115
174
|
return instanceMethodEntries(signatureContext, klass, (method) => conflictRename(realContext, method, inherited, className));
|
|
116
175
|
};
|
|
117
|
-
const methodsSectionBlocks = (entries, intro) => entries.length === 0
|
|
118
|
-
? []
|
|
119
|
-
: ["## Methods", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];
|
|
176
|
+
const methodsSectionBlocks = (entries, intro) => entries.length === 0 ? [] : ["## Methods", intro, ...entries.map((item) => signatureEntryBlock(item))];
|
|
120
177
|
const instanceMethodEntries = (signatureContext, klass, rename) => {
|
|
121
178
|
const deduped = dedupeCallables(klass.methods);
|
|
122
179
|
const scope = instanceScope(pascalCase(klass.name), {
|
|
@@ -127,17 +184,22 @@ const instanceMethodEntries = (signatureContext, klass, rename) => {
|
|
|
127
184
|
const entries = [];
|
|
128
185
|
for (const method of deduped) {
|
|
129
186
|
const nameOverride = rename(method);
|
|
130
|
-
const rendered = renderInstanceMethodSignature(signatureContext,
|
|
187
|
+
const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);
|
|
131
188
|
if (rendered === undefined) {
|
|
132
189
|
continue;
|
|
133
190
|
}
|
|
134
191
|
entries.push({
|
|
135
192
|
name: nameOverride ?? methodExportName(method),
|
|
136
|
-
signature: rendered
|
|
193
|
+
signature: signatureText(rendered),
|
|
137
194
|
doc: docMarkdown(method.doc),
|
|
195
|
+
tags: instanceMemberSpec(signatureContext, method, scope),
|
|
138
196
|
});
|
|
139
197
|
}
|
|
140
198
|
return sortStringsBy(entries, (entry) => entry.name);
|
|
141
199
|
};
|
|
142
|
-
|
|
200
|
+
const signatureText = (rendered) => {
|
|
201
|
+
const start = rendered.startsWith("/**") ? rendered.indexOf("*/") + 2 : 0;
|
|
202
|
+
return rendered.slice(start).trim().replace(/;$/, "");
|
|
203
|
+
};
|
|
204
|
+
export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, tagNotes, };
|
|
143
205
|
//# sourceMappingURL=render.js.map
|