@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
package/src/khronos/render.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
|
|
2
|
+
import type { GlDocContext } from "./doc-context.js";
|
|
2
3
|
import type { CommandPlan, GlScalar, ReturnPlan } from "./plan.js";
|
|
4
|
+
import type { GlSymbolProvenance } from "./select.js";
|
|
3
5
|
import { tBind, tInlineStruct, tRef, tString, tUint8, tVoid } from "../analysis/descriptor.js";
|
|
4
|
-
import { type OutArg, planArgs,
|
|
5
|
-
import { commandJsDoc,
|
|
6
|
+
import { type InArg, type OutArg, planArgs, returnPlanTsType, scalarPrefixArgs, trackInto } from "./args.js";
|
|
7
|
+
import { commandJsDoc, derivedJsDoc, inParamDocLine } from "./jsdoc.js";
|
|
8
|
+
import { commandExportName } from "./notes.js";
|
|
6
9
|
|
|
7
10
|
type RenderedCommand = {
|
|
8
11
|
exportName: string;
|
|
@@ -10,6 +13,12 @@ type RenderedCommand = {
|
|
|
10
13
|
declaration: string;
|
|
11
14
|
};
|
|
12
15
|
|
|
16
|
+
type SingularContext = {
|
|
17
|
+
plan: CommandPlan & { isOk: true };
|
|
18
|
+
provenance: GlSymbolProvenance;
|
|
19
|
+
docs: GlDocContext;
|
|
20
|
+
};
|
|
21
|
+
|
|
13
22
|
type EmittedReturn = {
|
|
14
23
|
tsType: string;
|
|
15
24
|
descriptor: string;
|
|
@@ -34,9 +43,6 @@ const glBind = (name: string, argList: string, returnType: string): string =>
|
|
|
34
43
|
returnType,
|
|
35
44
|
});
|
|
36
45
|
|
|
37
|
-
const commandExportName = (name: string): string =>
|
|
38
|
-
toCamelIdentifier(name.startsWith("gl") ? lowerFirst(name.slice(2)) : name);
|
|
39
|
-
|
|
40
46
|
const singularize = (plural: string): string =>
|
|
41
47
|
plural.endsWith("ies") ? `${plural.slice(0, -3)}y` : plural.replace(/s$/, "");
|
|
42
48
|
|
|
@@ -48,32 +54,27 @@ const buildEmittedReturn = (
|
|
|
48
54
|
returnGroup: string | undefined,
|
|
49
55
|
usedTypes: Set<string>,
|
|
50
56
|
): EmittedReturn => {
|
|
51
|
-
const
|
|
57
|
+
const tsType = trackInto(usedTypes)(returnPlanTsType(plan, returnGroup));
|
|
58
|
+
const cast = (call: string): string => `${call} as ${tsType}`;
|
|
52
59
|
|
|
53
60
|
switch (plan.kind) {
|
|
54
61
|
case "void": {
|
|
55
|
-
return { tsType
|
|
62
|
+
return { tsType, descriptor: tVoid };
|
|
56
63
|
}
|
|
57
64
|
case "scalar": {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return { tsType: alias, descriptor: plan.scalar.descriptor, expr: (call) => `${call} as ${alias}` };
|
|
65
|
+
return { tsType, descriptor: plan.scalar.descriptor, expr: cast };
|
|
61
66
|
}
|
|
62
67
|
case "boolean": {
|
|
63
|
-
return { tsType
|
|
68
|
+
return { tsType, descriptor: tUint8, expr: (call) => `(${call} as number) !== 0` };
|
|
64
69
|
}
|
|
65
70
|
case "string": {
|
|
66
|
-
return { tsType
|
|
71
|
+
return { tsType, descriptor: tString("borrowed"), expr: cast };
|
|
67
72
|
}
|
|
68
73
|
case "sync": {
|
|
69
|
-
return { tsType
|
|
74
|
+
return { tsType, descriptor: tInlineStruct(), expr: cast };
|
|
70
75
|
}
|
|
71
76
|
case "opaque-pointer": {
|
|
72
|
-
return {
|
|
73
|
-
tsType: track("GLpointer"),
|
|
74
|
-
descriptor: tInlineStruct(),
|
|
75
|
-
expr: (call) => `${call} as GLpointer`,
|
|
76
|
-
};
|
|
77
|
+
return { tsType, descriptor: tInlineStruct(), expr: cast };
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
};
|
|
@@ -117,19 +118,20 @@ const returnStatements = (call: string, returned: EmittedReturn, outs: OutArg[])
|
|
|
117
118
|
};
|
|
118
119
|
|
|
119
120
|
const renderCommand = (
|
|
120
|
-
plan: CommandPlan & {
|
|
121
|
-
|
|
121
|
+
plan: CommandPlan & { isOk: true },
|
|
122
|
+
provenance: GlSymbolProvenance,
|
|
122
123
|
usedTypes: Set<string>,
|
|
124
|
+
docs: GlDocContext,
|
|
123
125
|
): RenderedCommand => {
|
|
124
126
|
const { command } = plan;
|
|
125
127
|
const exportName = commandExportName(command.name);
|
|
126
128
|
const { args, ins, outs } = planArgs(plan, usedTypes);
|
|
127
129
|
const returned = buildEmittedReturn(plan.returnPlan, command.returnGroup, usedTypes);
|
|
128
130
|
const signature = ins.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
|
|
129
|
-
const argNames = args.map((arg) => (arg.
|
|
131
|
+
const argNames = args.map((arg) => (arg.isOut ? arg.cellName : arg.name)).join(", ");
|
|
130
132
|
const descriptors = renderDescriptorList(args.map((arg) => arg.descriptor));
|
|
131
133
|
const tsReturn = returnTsType(returned, outs);
|
|
132
|
-
const jsDoc = commandJsDoc({
|
|
134
|
+
const jsDoc = commandJsDoc({ plan, provenance, ins, outs, docs });
|
|
133
135
|
const seeds = outs.map((out) => out.seed);
|
|
134
136
|
const bindExpression = glBind(command.name, descriptors, returned.descriptor);
|
|
135
137
|
const isInline = plan.params.some((paramPlan) => paramPlan.kind === "string-out");
|
|
@@ -150,15 +152,17 @@ const renderCommand = (
|
|
|
150
152
|
};
|
|
151
153
|
};
|
|
152
154
|
|
|
153
|
-
const singularCommandJsDoc = (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
const singularCommandJsDoc = (context: SingularContext, summary: string, body: string[]): string =>
|
|
156
|
+
derivedJsDoc({
|
|
157
|
+
command: context.plan.command,
|
|
158
|
+
provenance: context.provenance,
|
|
159
|
+
docs: context.docs,
|
|
160
|
+
summary,
|
|
161
|
+
body,
|
|
162
|
+
});
|
|
159
163
|
|
|
160
164
|
const genSingularScalars = (
|
|
161
|
-
plan: CommandPlan & {
|
|
165
|
+
plan: CommandPlan & { isOk: true },
|
|
162
166
|
): { countScalar: GlScalar; outScalar: GlScalar; lenParamName: string } | undefined => {
|
|
163
167
|
const countPlan = plan.params.at(-2);
|
|
164
168
|
|
|
@@ -175,7 +179,7 @@ const genSingularScalars = (
|
|
|
175
179
|
return { countScalar: countPlan.scalar, outScalar: outPlan.scalar, lenParamName: outPlan.lenParamName };
|
|
176
180
|
};
|
|
177
181
|
|
|
178
|
-
const genSingularObjectClass = (plan: CommandPlan & {
|
|
182
|
+
const genSingularObjectClass = (plan: CommandPlan & { isOk: true }, lenParamName: string): string | undefined => {
|
|
179
183
|
const countParam = plan.command.params[plan.params.length - 2];
|
|
180
184
|
const outParam = plan.command.params[plan.params.length - 1];
|
|
181
185
|
|
|
@@ -190,7 +194,7 @@ const genSingularObjectClass = (plan: CommandPlan & { ok: true }, lenParamName:
|
|
|
190
194
|
return outParam.objectClass;
|
|
191
195
|
};
|
|
192
196
|
|
|
193
|
-
const genSingularShape = (plan: CommandPlan & {
|
|
197
|
+
const genSingularShape = (plan: CommandPlan & { isOk: true }): GenSingularShape | undefined => {
|
|
194
198
|
const scalars = genSingularScalars(plan);
|
|
195
199
|
|
|
196
200
|
if (scalars === undefined) {
|
|
@@ -206,10 +210,25 @@ const genSingularShape = (plan: CommandPlan & { ok: true }): GenSingularShape |
|
|
|
206
210
|
return { countScalar: scalars.countScalar, outScalar: scalars.outScalar, objectClass };
|
|
207
211
|
};
|
|
208
212
|
|
|
213
|
+
const genSingularJsDoc = (context: SingularContext, prefix: InArg[], shape: GenSingularShape): string => {
|
|
214
|
+
const { command } = context.plan;
|
|
215
|
+
|
|
216
|
+
return singularCommandJsDoc(
|
|
217
|
+
context,
|
|
218
|
+
`Returns one ${shape.objectClass} object name via ` +
|
|
219
|
+
`\`${command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
|
|
220
|
+
[
|
|
221
|
+
...prefix.map((arg) => inParamDocLine(context.plan, arg, context.docs)),
|
|
222
|
+
` * @returns \`${shape.outScalar.tsAlias}\`, object class \`${shape.objectClass}\``,
|
|
223
|
+
],
|
|
224
|
+
);
|
|
225
|
+
};
|
|
226
|
+
|
|
209
227
|
const deriveGenSingular = (
|
|
210
|
-
plan: CommandPlan & {
|
|
211
|
-
|
|
228
|
+
plan: CommandPlan & { isOk: true },
|
|
229
|
+
provenance: GlSymbolProvenance,
|
|
212
230
|
usedTypes: Set<string>,
|
|
231
|
+
docs: GlDocContext,
|
|
213
232
|
): RenderedCommand | undefined => {
|
|
214
233
|
if (!GEN_FAMILY.test(plan.command.name)) {
|
|
215
234
|
return undefined;
|
|
@@ -227,21 +246,14 @@ const deriveGenSingular = (
|
|
|
227
246
|
return undefined;
|
|
228
247
|
}
|
|
229
248
|
|
|
230
|
-
const { countScalar, outScalar
|
|
249
|
+
const { countScalar, outScalar } = shape;
|
|
231
250
|
const exportName = singularize(commandExportName(plan.command.name));
|
|
232
251
|
const bindingName = `${plan.command.name}Single`;
|
|
233
252
|
const descriptors = [...prefix.map((arg) => arg.descriptor), countScalar.descriptor, tRef(outScalar.descriptor)];
|
|
234
253
|
usedTypes.add(outScalar.tsAlias);
|
|
235
254
|
const signature = prefix.map((arg) => `${arg.name}: ${arg.tsType}`).join(", ");
|
|
236
255
|
const callArgs = [...prefix.map((arg) => arg.name), "1", "out"].join(", ");
|
|
237
|
-
|
|
238
|
-
const jsDoc = singularCommandJsDoc(
|
|
239
|
-
plan,
|
|
240
|
-
feature,
|
|
241
|
-
`Returns one ${objectClass} object name via ` +
|
|
242
|
-
`\`${plan.command.name}(${prefix.length > 0 ? "..., " : ""}1, ...)\`.`,
|
|
243
|
-
[...prefix.map((arg) => inParamDocLine(plan.command, arg)), ` * @returns The new ${objectClass} object name`],
|
|
244
|
-
);
|
|
256
|
+
const jsDoc = genSingularJsDoc({ plan, provenance, docs }, prefix, shape);
|
|
245
257
|
|
|
246
258
|
const body = [" const out = { value: 0 };", ` ${bindingName}(${callArgs});`, " return out.value;"].join(
|
|
247
259
|
"\n",
|
|
@@ -256,7 +268,7 @@ const deriveGenSingular = (
|
|
|
256
268
|
};
|
|
257
269
|
};
|
|
258
270
|
|
|
259
|
-
const deleteSingularAlias = (plan: CommandPlan & {
|
|
271
|
+
const deleteSingularAlias = (plan: CommandPlan & { isOk: true }): string | undefined => {
|
|
260
272
|
if (plan.params.length !== 2) {
|
|
261
273
|
return undefined;
|
|
262
274
|
}
|
|
@@ -274,7 +286,7 @@ const deleteSingularAlias = (plan: CommandPlan & { ok: true }): string | undefin
|
|
|
274
286
|
return arrayPlan.scalar.tsAlias;
|
|
275
287
|
};
|
|
276
288
|
|
|
277
|
-
const deleteSingularObjectClass = (plan: CommandPlan & {
|
|
289
|
+
const deleteSingularObjectClass = (plan: CommandPlan & { isOk: true }): string | undefined => {
|
|
278
290
|
const [countParam, arrayParam] = plan.command.params;
|
|
279
291
|
|
|
280
292
|
if (countParam === undefined || arrayParam === undefined) {
|
|
@@ -289,9 +301,10 @@ const deleteSingularObjectClass = (plan: CommandPlan & { ok: true }): string | u
|
|
|
289
301
|
};
|
|
290
302
|
|
|
291
303
|
const deriveDeleteSingular = (
|
|
292
|
-
plan: CommandPlan & {
|
|
293
|
-
|
|
304
|
+
plan: CommandPlan & { isOk: true },
|
|
305
|
+
provenance: GlSymbolProvenance,
|
|
294
306
|
usedTypes: Set<string>,
|
|
307
|
+
docs: GlDocContext,
|
|
295
308
|
): RenderedCommand | undefined => {
|
|
296
309
|
if (!DELETE_FAMILY.test(plan.command.name)) {
|
|
297
310
|
return undefined;
|
|
@@ -313,10 +326,9 @@ const deriveDeleteSingular = (
|
|
|
313
326
|
const exportName = singularize(commandExportName(plan.command.name));
|
|
314
327
|
|
|
315
328
|
const jsDoc = singularCommandJsDoc(
|
|
316
|
-
plan,
|
|
317
|
-
feature,
|
|
329
|
+
{ plan, provenance, docs },
|
|
318
330
|
`Deletes one ${objectClass} object name via \`${plan.command.name}(1, ...)\`.`,
|
|
319
|
-
[` * @param name -
|
|
331
|
+
[` * @param name - \`${scalarAlias}\`, object class \`${objectClass}\``],
|
|
320
332
|
);
|
|
321
333
|
|
|
322
334
|
return {
|
package/src/khronos/select.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sortStringsBy } from "@gtkx/utils";
|
|
1
2
|
import type { GlEnum, GlFeature, GlInterfaceBlock, GlRegistry } from "./model.js";
|
|
2
3
|
|
|
3
4
|
type GlProfile = "core";
|
|
@@ -8,60 +9,94 @@ type GlSelection = {
|
|
|
8
9
|
profile: GlProfile;
|
|
9
10
|
};
|
|
10
11
|
|
|
12
|
+
type GlSymbolKind = "command" | "enum";
|
|
13
|
+
|
|
14
|
+
type GlRemoval = {
|
|
15
|
+
feature: string;
|
|
16
|
+
comment?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type GlSymbolProvenance = {
|
|
20
|
+
feature: string;
|
|
21
|
+
requireComment?: string;
|
|
22
|
+
removals: GlRemoval[];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
type GlRemovedSymbol = {
|
|
26
|
+
name: string;
|
|
27
|
+
kind: GlSymbolKind;
|
|
28
|
+
feature: string;
|
|
29
|
+
comment?: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
11
32
|
type GlSubset = {
|
|
12
|
-
commands: Map<string,
|
|
13
|
-
enums: Map<string,
|
|
33
|
+
commands: Map<string, GlSymbolProvenance>;
|
|
34
|
+
enums: Map<string, GlSymbolProvenance>;
|
|
35
|
+
removed: GlRemovedSymbol[];
|
|
14
36
|
};
|
|
15
37
|
|
|
16
|
-
|
|
17
|
-
|
|
38
|
+
type SelectionState = GlSubset & {
|
|
39
|
+
history: Map<string, GlRemoval[]>;
|
|
40
|
+
};
|
|
18
41
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
}
|
|
42
|
+
type MemberContext = {
|
|
43
|
+
feature: GlFeature;
|
|
44
|
+
block: GlInterfaceBlock;
|
|
45
|
+
kind: GlSymbolKind;
|
|
25
46
|
};
|
|
26
47
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
selection
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for (const block of feature.requires) {
|
|
34
|
-
if (!isBlockApplicable(block, selection)) {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
48
|
+
const isBlockApplicable = (block: GlInterfaceBlock, selection: GlSelection): boolean =>
|
|
49
|
+
(block.profile === undefined || block.profile === selection.profile) &&
|
|
50
|
+
(block.api === undefined || block.api === selection.api);
|
|
51
|
+
|
|
52
|
+
const targetFor = (state: SelectionState, kind: GlSymbolKind): Map<string, GlSymbolProvenance> =>
|
|
53
|
+
kind === "command" ? state.commands : state.enums;
|
|
37
54
|
|
|
38
|
-
|
|
39
|
-
|
|
55
|
+
const commentEntry = (comment: string | undefined): { comment?: string } =>
|
|
56
|
+
comment === undefined ? {} : { comment };
|
|
57
|
+
|
|
58
|
+
const requireMember = (state: SelectionState, name: string, context: MemberContext): void => {
|
|
59
|
+
const target = targetFor(state, context.kind);
|
|
60
|
+
|
|
61
|
+
if (target.has(name)) {
|
|
62
|
+
return;
|
|
40
63
|
}
|
|
64
|
+
|
|
65
|
+
const { block, feature } = context;
|
|
66
|
+
|
|
67
|
+
target.set(name, {
|
|
68
|
+
feature: feature.name,
|
|
69
|
+
...(block.comment !== undefined && { requireComment: block.comment }),
|
|
70
|
+
removals: [...(state.history.get(name) ?? [])],
|
|
71
|
+
});
|
|
41
72
|
};
|
|
42
73
|
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
74
|
+
const removeMember = (state: SelectionState, name: string, context: MemberContext): void => {
|
|
75
|
+
const { block, feature, kind } = context;
|
|
76
|
+
const removal: GlRemoval = { feature: feature.name, ...commentEntry(block.comment) };
|
|
77
|
+
targetFor(state, kind).delete(name);
|
|
78
|
+
state.history.set(name, [...(state.history.get(name) ?? []), removal]);
|
|
79
|
+
state.removed.push({ name, kind, ...removal });
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const applyMembers = (state: SelectionState, names: string[], context: MemberContext): void => {
|
|
83
|
+
const apply = context.block.kind === "require" ? requireMember : removeMember;
|
|
47
84
|
|
|
48
|
-
for (const name of
|
|
49
|
-
|
|
85
|
+
for (const name of names) {
|
|
86
|
+
apply(state, name, context);
|
|
50
87
|
}
|
|
51
88
|
};
|
|
52
89
|
|
|
53
|
-
const
|
|
54
|
-
feature:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
enums: Map<string, string>,
|
|
58
|
-
): void => {
|
|
59
|
-
for (const block of feature.removes) {
|
|
60
|
-
if (!isBlockApplicable(block, selection)) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
90
|
+
const applyBlock = (state: SelectionState, feature: GlFeature, block: GlInterfaceBlock): void => {
|
|
91
|
+
applyMembers(state, block.commands, { feature, block, kind: "command" });
|
|
92
|
+
applyMembers(state, block.enums, { feature, block, kind: "enum" });
|
|
93
|
+
};
|
|
63
94
|
|
|
64
|
-
|
|
95
|
+
const applyFeature = (state: SelectionState, feature: GlFeature, selection: GlSelection): void => {
|
|
96
|
+
for (const block of feature.blocks) {
|
|
97
|
+
if (isBlockApplicable(block, selection)) {
|
|
98
|
+
applyBlock(state, feature, block);
|
|
99
|
+
}
|
|
65
100
|
}
|
|
66
101
|
};
|
|
67
102
|
|
|
@@ -70,22 +105,28 @@ const selectSubset = (registry: GlRegistry, selection: GlSelection): GlSubset =>
|
|
|
70
105
|
.filter((feature) => feature.api === selection.api && feature.number <= selection.version)
|
|
71
106
|
.toSorted((a, b) => a.number - b.number);
|
|
72
107
|
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
108
|
+
const state: SelectionState = {
|
|
109
|
+
commands: new Map(),
|
|
110
|
+
enums: new Map(),
|
|
111
|
+
removed: [],
|
|
112
|
+
history: new Map(),
|
|
113
|
+
};
|
|
79
114
|
|
|
80
115
|
for (const feature of features) {
|
|
81
|
-
|
|
116
|
+
applyFeature(state, feature, selection);
|
|
82
117
|
}
|
|
83
118
|
|
|
84
|
-
return {
|
|
119
|
+
return {
|
|
120
|
+
commands: state.commands,
|
|
121
|
+
enums: state.enums,
|
|
122
|
+
removed: sortStringsBy(state.removed, (entry) => entry.name),
|
|
123
|
+
};
|
|
85
124
|
};
|
|
86
125
|
|
|
87
|
-
const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
|
|
88
|
-
const found = registry.enums.find(
|
|
126
|
+
const resolveEnum = (registry: GlRegistry, name: string, api: string): GlEnum => {
|
|
127
|
+
const found = registry.enums.find(
|
|
128
|
+
(candidate) => candidate.name === name && (candidate.api === undefined || candidate.api === api),
|
|
129
|
+
);
|
|
89
130
|
|
|
90
131
|
if (found === undefined) {
|
|
91
132
|
throw new Error(`Enum token ${name} has no definition in the registry`);
|
|
@@ -94,4 +135,4 @@ const resolveEnum = (registry: GlRegistry, name: string): GlEnum => {
|
|
|
94
135
|
return found;
|
|
95
136
|
};
|
|
96
137
|
|
|
97
|
-
export { selectSubset, resolveEnum, type GlSelection };
|
|
138
|
+
export { selectSubset, resolveEnum, type GlRemoval, type GlSelection, type GlSubset, type GlSymbolProvenance };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ModuleExport } from "@gtkx/react/
|
|
1
|
+
import type { ModuleExport } from "@gtkx/react/config";
|
|
2
2
|
import { readdirSync } from "node:fs";
|
|
3
3
|
import type { OmittedProps } from "../store/jsx/omitted-props.js";
|
|
4
4
|
|
|
@@ -96,5 +96,5 @@ const readBuiltinElements = async (reactSubexports: string[], giStoreDir: string
|
|
|
96
96
|
return result;
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
-
export type { ModuleExport } from "@gtkx/react/
|
|
99
|
+
export type { ModuleExport } from "@gtkx/react/config";
|
|
100
100
|
export { readBuiltinElements, type BuiltinElements };
|
package/src/runner.ts
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import type { ModuleExport } from "./react/element-config.js";
|
|
3
4
|
import type { OmittedProps } from "./store/jsx/omitted-props.js";
|
|
4
|
-
import type { StoreOptions } from "./store/store-fs.js";
|
|
5
5
|
import { checkModules } from "./compile.js";
|
|
6
6
|
import { isGiStoreFresh } from "./fingerprint.js";
|
|
7
7
|
import { runGiCodegen } from "./gi.js";
|
|
8
8
|
import { Library } from "./gir/library.js";
|
|
9
9
|
import { generateGlModules, type GlGenerationReport } from "./khronos/pipeline.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
type ModuleExport = {
|
|
13
|
-
/** Specifier the export is imported from. */
|
|
14
|
-
module: string;
|
|
15
|
-
/** Identifier the module exports it under. */
|
|
16
|
-
export: string;
|
|
17
|
-
};
|
|
10
|
+
import { sweepStagingDirs } from "./staging.js";
|
|
11
|
+
import { ensureStoreLink, type StoreOptions } from "./store/store-fs.js";
|
|
18
12
|
|
|
19
13
|
type GlCodegenOptions = {
|
|
20
14
|
registryPath: string;
|
|
@@ -71,6 +65,10 @@ type StoreResult = {
|
|
|
71
65
|
* store or the React element config changed, unless `options.isForced` is set. Pass the spread of
|
|
72
66
|
* `resolveStore(projectRoot)` for everything but `libraries` and `girPath`.
|
|
73
67
|
*
|
|
68
|
+
* Every store already on disk is linked at its `linkDir` before anything is generated, so a link an install
|
|
69
|
+
* pruned out of `node_modules` is restored without regenerating the store, and the gi store is reachable
|
|
70
|
+
* under its own specifier while the jsx store is type checked.
|
|
71
|
+
*
|
|
74
72
|
* @param options What to generate and where to write it.
|
|
75
73
|
* @returns A summary of what was regenerated and how long the run took.
|
|
76
74
|
* @throws If `girPath` is empty, which would otherwise generate nothing and report success.
|
|
@@ -174,6 +172,17 @@ const emitStoresWithConfig = async (config: {
|
|
|
174
172
|
return emitJsxStore({ options, jsx, gi, loadLibrary, isGiRegenerated, namespaces });
|
|
175
173
|
};
|
|
176
174
|
|
|
175
|
+
const prepareStores = (stores: (StoreOptions | undefined)[]): void => {
|
|
176
|
+
for (const store of stores) {
|
|
177
|
+
if (store === undefined) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
sweepStagingDirs(store.storeDir);
|
|
182
|
+
ensureStoreLink(store);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
177
186
|
const emitStores = async (options: CodegenRunnerOptions): Promise<StoreResult> => {
|
|
178
187
|
const { gi, jsx, libraries, girPath } = options;
|
|
179
188
|
|
|
@@ -181,6 +190,8 @@ const emitStores = async (options: CodegenRunnerOptions): Promise<StoreResult> =
|
|
|
181
190
|
throw new Error("codegen needs at least one GIR search path; pass the result of resolveGirPath");
|
|
182
191
|
}
|
|
183
192
|
|
|
193
|
+
prepareStores([gi, jsx]);
|
|
194
|
+
|
|
184
195
|
return emitStoresWithConfig({ options, gi, jsx, libraries, girPath });
|
|
185
196
|
};
|
|
186
197
|
|
package/src/staging.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { mkdirSync, mkdtempSync, readdirSync, rmSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
|
|
4
|
+
const STAGING_SUFFIX = ".tmp-";
|
|
5
|
+
const OWNER_PATTERN = /^(?<pid>\d+)-/;
|
|
6
|
+
|
|
7
|
+
const errorCode = (error: unknown): string | undefined =>
|
|
8
|
+
error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : undefined;
|
|
9
|
+
|
|
10
|
+
const isOwnerRunning = (pid: number): boolean => {
|
|
11
|
+
if (!Number.isSafeInteger(pid) || pid <= 0) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
process.kill(pid, 0);
|
|
17
|
+
|
|
18
|
+
return true;
|
|
19
|
+
} catch (error) {
|
|
20
|
+
return errorCode(error) === "EPERM";
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const isStranded = (entry: string, prefix: string): boolean => {
|
|
25
|
+
if (!entry.startsWith(prefix)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const owner = OWNER_PATTERN.exec(entry.slice(prefix.length))?.groups?.pid;
|
|
30
|
+
|
|
31
|
+
return owner === undefined || !isOwnerRunning(Number(owner));
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const readEntries = (parentDir: string): string[] => {
|
|
35
|
+
try {
|
|
36
|
+
return readdirSync(parentDir);
|
|
37
|
+
} catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const removeStrandedDir = (path: string): void => {
|
|
43
|
+
try {
|
|
44
|
+
rmSync(path, { recursive: true, force: true });
|
|
45
|
+
} catch {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const sweepStrandedDirs = (parentDir: string, prefix: string): void => {
|
|
51
|
+
for (const entry of readEntries(parentDir)) {
|
|
52
|
+
if (isStranded(entry, prefix)) {
|
|
53
|
+
removeStrandedDir(join(parentDir, entry));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const sweepStagingDirs = (target: string): void => {
|
|
59
|
+
sweepStrandedDirs(dirname(target), `${basename(target)}${STAGING_SUFFIX}`);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const createStagingDir = (target: string): string => {
|
|
63
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
64
|
+
sweepStagingDirs(target);
|
|
65
|
+
|
|
66
|
+
return mkdtempSync(`${target}${STAGING_SUFFIX}${String(process.pid)}-`);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export { createStagingDir, sweepStagingDirs, sweepStrandedDirs };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { compileProject, type SourceModule } from "../compile.js";
|
|
3
|
+
import { compileProject, type ProjectFile, type SourceModule } from "../compile.js";
|
|
4
4
|
|
|
5
5
|
type CompileStoreParams = {
|
|
6
6
|
storeDir: string;
|
|
@@ -29,16 +29,18 @@ const writeEnvReference = (storeDir: string): (() => void) => {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const compileStore = (params: CompileStoreParams): void => {
|
|
32
|
-
const fileNames = params.files.map((file) => file.fileName);
|
|
33
|
-
|
|
34
32
|
const removeEnvReference = params.requiresEnvReference === true
|
|
35
33
|
? writeEnvReference(params.storeDir)
|
|
36
34
|
: (): void => undefined;
|
|
37
35
|
|
|
36
|
+
const files: ProjectFile[] = params.requiresEnvReference === true
|
|
37
|
+
? [{ fileName: ENV_REFERENCE_FILE }, ...params.files]
|
|
38
|
+
: params.files;
|
|
39
|
+
|
|
38
40
|
try {
|
|
39
41
|
compileProject({
|
|
40
42
|
projectDir: params.storeDir,
|
|
41
|
-
|
|
43
|
+
files,
|
|
42
44
|
compilerOptions: EMIT_OPTIONS,
|
|
43
45
|
label: `the generated ${params.packageName} store`,
|
|
44
46
|
});
|
|
@@ -51,4 +53,4 @@ const compileStore = (params: CompileStoreParams): void => {
|
|
|
51
53
|
}
|
|
52
54
|
};
|
|
53
55
|
|
|
54
|
-
export { compileStore
|
|
56
|
+
export { compileStore };
|