@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/dist/writer/gtk-doc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { camelCase } from "@gtkx/utils";
|
|
2
2
|
const CONSTANT_MAP = { TRUE: "true", FALSE: "false", NULL: "null" };
|
|
3
|
-
const CALLABLE_LINK_KINDS = new Set(["method", "func", "ctor", "vfunc"]);
|
|
3
|
+
const CALLABLE_LINK_KINDS = new Set(["method", "func", "ctor", "vfunc", "id"]);
|
|
4
4
|
const SENTINEL = String.fromCodePoint(0xE0_00);
|
|
5
5
|
const CODE_BLOCK_OPEN = "|[";
|
|
6
6
|
const CODE_BLOCK_CLOSE = "]|";
|
|
@@ -8,10 +8,23 @@ const CODE_LANGUAGE_PATTERN = /^\s*<!--\s*language="([^"]*)"\s*-->/;
|
|
|
8
8
|
const FENCED_BLOCK_PATTERN = /```[\s\S]*?```/g;
|
|
9
9
|
const INLINE_CODE_PATTERN = /`[^`\n]*`/g;
|
|
10
10
|
const LINK_PATTERN = /\[(\w+)@([\w.:%#-]+)\]/g;
|
|
11
|
-
const CONSTANT_PATTERN = /(
|
|
12
|
-
const
|
|
11
|
+
const CONSTANT_PATTERN = /(?<![\w\\])%(\w+)/g;
|
|
12
|
+
const ESCAPED_CONSTANT_PATTERN = /\\%/g;
|
|
13
|
+
const TYPE_REF_PATTERN = /(?<!\w)#(\w+)(::[\w-]+|:[\w-]+)?/g;
|
|
13
14
|
const PARAM_REF_PATTERN = /(?<!\w)@(\w+)/g;
|
|
14
15
|
const FUNCTION_REF_PATTERN = /\b([a-z_][a-z0-9_]*)\(\)/g;
|
|
16
|
+
const HTML_COMMENT_PATTERN = /<!--[\s\S]*?-->/g;
|
|
17
|
+
const DOCBOOK_TAG_PATTERN = /<\/?(?:itemizedlist|listitem|para|literal|link|informalexample|programlisting)[\s>]/;
|
|
18
|
+
const DOCBOOK_LISTING_OPEN = "<programlisting>";
|
|
19
|
+
const DOCBOOK_LISTING_CLOSE = "</programlisting>";
|
|
20
|
+
const DOCBOOK_EXAMPLE_PATTERN = /<\/?informalexample>\s*/g;
|
|
21
|
+
const DOCBOOK_ITEM_OPEN_PATTERN = /<listitem>\s*(?:<para>\s*)?/g;
|
|
22
|
+
const DOCBOOK_ITEM_CLOSE_PATTERN = /(?:<\/para>\s*)?<\/listitem>\s*/g;
|
|
23
|
+
const DOCBOOK_LINK_PATTERN = /<link\s+linkend="[^"]*">([\s\S]*?)<\/link>/g;
|
|
24
|
+
const DOCBOOK_LITERAL_PATTERN = /<literal>([\s\S]*?)<\/literal>/g;
|
|
25
|
+
const DOCBOOK_LIST_PATTERN = /<\/?itemizedlist>\s*/g;
|
|
26
|
+
const DOCBOOK_PARA_PATTERN = /<\/?para>\s*/g;
|
|
27
|
+
const BLANK_LINE_RUN_PATTERN = /\n{3,}/g;
|
|
15
28
|
const renderLink = (kind, target) => {
|
|
16
29
|
const segments = target.split(/::|[.:]/);
|
|
17
30
|
const lastIndex = segments.length - 1;
|
|
@@ -21,6 +34,13 @@ const renderLink = (kind, target) => {
|
|
|
21
34
|
const symbol = segments.join(".");
|
|
22
35
|
return `\`${symbol}${CALLABLE_LINK_KINDS.has(kind) ? "()" : ""}\``;
|
|
23
36
|
};
|
|
37
|
+
const renderTypeRef = (name, member) => {
|
|
38
|
+
if (member === undefined) {
|
|
39
|
+
return `\`${name}\``;
|
|
40
|
+
}
|
|
41
|
+
return renderLink(member.startsWith("::") ? "signal" : "property", `${name}${member}`);
|
|
42
|
+
};
|
|
43
|
+
const renderParamRef = (name, identifiers) => `\`${identifiers?.get(name) ?? name}\``;
|
|
24
44
|
const trimTrailingNewlines = (value) => {
|
|
25
45
|
let end = value.length;
|
|
26
46
|
while (end > 0 && value[end - 1] === "\n") {
|
|
@@ -35,39 +55,68 @@ const renderCodeFence = (body) => {
|
|
|
35
55
|
const code = trimTrailingNewlines(rest.trimStart());
|
|
36
56
|
return `\`\`\`${fence}\n${code}\n\`\`\``;
|
|
37
57
|
};
|
|
38
|
-
const
|
|
58
|
+
const renderListing = (code) => `\n\`\`\`\n${code.trim()}\n\`\`\`\n`;
|
|
59
|
+
const replaceDocBookTags = (text) => replaceDelimited(text, [DOCBOOK_LISTING_OPEN, DOCBOOK_LISTING_CLOSE], renderListing)
|
|
60
|
+
.replaceAll(DOCBOOK_EXAMPLE_PATTERN, "\n")
|
|
61
|
+
.replaceAll(DOCBOOK_ITEM_OPEN_PATTERN, "\n- ")
|
|
62
|
+
.replaceAll(DOCBOOK_ITEM_CLOSE_PATTERN, "\n")
|
|
63
|
+
.replaceAll(DOCBOOK_LINK_PATTERN, (_match, label) => label)
|
|
64
|
+
.replaceAll(DOCBOOK_LITERAL_PATTERN, (_match, literal) => `\`${literal}\``)
|
|
65
|
+
.replaceAll(DOCBOOK_LIST_PATTERN, "\n\n")
|
|
66
|
+
.replaceAll(DOCBOOK_PARA_PATTERN, "\n\n");
|
|
67
|
+
const docBookToMarkdown = (text) => {
|
|
68
|
+
if (!DOCBOOK_TAG_PATTERN.test(text)) {
|
|
69
|
+
return text;
|
|
70
|
+
}
|
|
71
|
+
return replaceDocBookTags(text).replaceAll(BLANK_LINE_RUN_PATTERN, "\n\n").trim();
|
|
72
|
+
};
|
|
73
|
+
const replaceDelimited = (raw, bounds, render) => {
|
|
74
|
+
const [open, close] = bounds;
|
|
39
75
|
let result = "";
|
|
40
76
|
let cursor = 0;
|
|
41
77
|
while (cursor < raw.length) {
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
78
|
+
const start = raw.indexOf(open, cursor);
|
|
79
|
+
if (start === -1) {
|
|
44
80
|
break;
|
|
45
81
|
}
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
82
|
+
const end = raw.indexOf(close, start + open.length);
|
|
83
|
+
if (end === -1) {
|
|
48
84
|
break;
|
|
49
85
|
}
|
|
50
|
-
result += raw.slice(cursor,
|
|
51
|
-
result +=
|
|
52
|
-
cursor =
|
|
86
|
+
result += raw.slice(cursor, start);
|
|
87
|
+
result += render(raw.slice(start + open.length, end));
|
|
88
|
+
cursor = end + close.length;
|
|
53
89
|
}
|
|
54
90
|
return result + raw.slice(cursor);
|
|
55
91
|
};
|
|
56
|
-
const
|
|
92
|
+
const protectCodeBlocks = (raw, protect) => replaceDelimited(raw, [CODE_BLOCK_OPEN, CODE_BLOCK_CLOSE], (body) => protect(renderCodeFence(body)));
|
|
93
|
+
const stripHtmlComments = (text) => {
|
|
94
|
+
let current = text;
|
|
95
|
+
let previous = "";
|
|
96
|
+
while (current !== previous) {
|
|
97
|
+
previous = current;
|
|
98
|
+
current = current.replaceAll(HTML_COMMENT_PATTERN, "");
|
|
99
|
+
}
|
|
100
|
+
return current;
|
|
101
|
+
};
|
|
102
|
+
// eslint-disable-next-line gtkx/no-library-prefix
|
|
103
|
+
const gtkDocToMarkdown = (raw, identifiers) => {
|
|
57
104
|
const stash = [];
|
|
58
105
|
const protect = (value) => {
|
|
59
106
|
const token = `${SENTINEL}${String(stash.length)}${SENTINEL}`;
|
|
60
107
|
stash.push(value);
|
|
61
108
|
return token;
|
|
62
109
|
};
|
|
63
|
-
let text = protectCodeBlocks(raw, protect);
|
|
110
|
+
let text = protectCodeBlocks(docBookToMarkdown(raw), protect);
|
|
64
111
|
text = text.replaceAll(FENCED_BLOCK_PATTERN, (block) => protect(block));
|
|
65
112
|
text = text.replaceAll(INLINE_CODE_PATTERN, (span) => protect(span));
|
|
66
113
|
text = text.replaceAll(LINK_PATTERN, (_match, kind, target) => protect(renderLink(kind, target)));
|
|
67
114
|
text = text.replaceAll(CONSTANT_PATTERN, (_match, name) => protect(`\`${CONSTANT_MAP[name] ?? name}\``));
|
|
68
|
-
text = text.replaceAll(
|
|
69
|
-
text = text.replaceAll(
|
|
115
|
+
text = text.replaceAll(ESCAPED_CONSTANT_PATTERN, "%");
|
|
116
|
+
text = text.replaceAll(TYPE_REF_PATTERN, (_match, name, member) => protect(renderTypeRef(name, member)));
|
|
117
|
+
text = text.replaceAll(PARAM_REF_PATTERN, (_match, name) => protect(renderParamRef(name, identifiers)));
|
|
70
118
|
text = text.replaceAll(FUNCTION_REF_PATTERN, (_match, name) => protect(`\`${name}()\``));
|
|
119
|
+
text = stripHtmlComments(text);
|
|
71
120
|
for (let index = stash.length - 1; index >= 0; index -= 1) {
|
|
72
121
|
const value = stash[index] ?? "";
|
|
73
122
|
text = text.replaceAll(`${SENTINEL}${String(index)}${SENTINEL}`, () => value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtk-doc.js","sourceRoot":"","sources":["../../src/writer/gtk-doc.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase } from \"@gtkx/utils\";\n\nconst CONSTANT_MAP: Record<string, string> = { TRUE: \"true\", FALSE: \"false\", NULL: \"null\" };\nconst CALLABLE_LINK_KINDS: Set<string> = new Set([\"method\", \"func\", \"ctor\", \"vfunc\"]);\nconst SENTINEL = String.fromCodePoint(0xE0_00);\nconst CODE_BLOCK_OPEN = \"|[\";\nconst CODE_BLOCK_CLOSE = \"]|\";\nconst CODE_LANGUAGE_PATTERN = /^\\s*<!--\\s*language=\"([^\"]*)\"\\s*-->/;\nconst FENCED_BLOCK_PATTERN = /```[\\s\\S]*?```/g;\nconst INLINE_CODE_PATTERN = /`[^`\\n]*`/g;\nconst LINK_PATTERN = /\\[(\\w+)@([\\w.:%#-]+)\\]/g;\nconst CONSTANT_PATTERN = /(?<!\\w)%(\\w+)/g;\nconst TYPE_REF_PATTERN = /(?<!\\w)#(\\w+)/g;\nconst PARAM_REF_PATTERN = /(?<!\\w)@(\\w+)/g;\nconst FUNCTION_REF_PATTERN = /\\b([a-z_][a-z0-9_]*)\\(\\)/g;\n\nconst renderLink = (kind: string, target: string): string => {\n const segments = target.split(/::|[.:]/);\n const lastIndex = segments.length - 1;\n\n if (kind === \"property\" || CALLABLE_LINK_KINDS.has(kind)) {\n segments[lastIndex] = camelCase(segments[lastIndex] ?? \"\");\n }\n\n const symbol = segments.join(\".\");\n\n return `\\`${symbol}${CALLABLE_LINK_KINDS.has(kind) ? \"()\" : \"\"}\\``;\n};\n\nconst trimTrailingNewlines = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value[end - 1] === \"\\n\") {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n\nconst renderCodeFence = (body: string): string => {\n const languageMatch = CODE_LANGUAGE_PATTERN.exec(body);\n const fence = (languageMatch?.[1] ?? \"\").trim().toLowerCase();\n const rest = languageMatch === null ? body : body.slice(languageMatch[0].length);\n const code = trimTrailingNewlines(rest.trimStart());\n\n return `\\`\\`\\`${fence}\\n${code}\\n\\`\\`\\``;\n};\n\nconst protectCodeBlocks = (raw: string, protect: (value: string) => string): string => {\n let result = \"\";\n let cursor = 0;\n\n while (cursor < raw.length) {\n const open = raw.indexOf(CODE_BLOCK_OPEN, cursor);\n\n if (open === -1) {\n break;\n }\n\n const close = raw.indexOf(CODE_BLOCK_CLOSE, open + CODE_BLOCK_OPEN.length);\n\n if (close === -1) {\n break;\n }\n\n result += raw.slice(cursor, open);\n result += protect(renderCodeFence(raw.slice(open + CODE_BLOCK_OPEN.length, close)));\n cursor = close + CODE_BLOCK_CLOSE.length;\n }\n\n return result + raw.slice(cursor);\n};\n\nconst gtkDocToMarkdown = (raw: string): string => {\n const stash: string[] = [];\n\n const protect = (value: string): string => {\n const token = `${SENTINEL}${String(stash.length)}${SENTINEL}`;\n stash.push(value);\n\n return token;\n };\n\n let text = protectCodeBlocks(raw, protect);\n text = text.replaceAll(FENCED_BLOCK_PATTERN, (block) => protect(block));\n text = text.replaceAll(INLINE_CODE_PATTERN, (span) => protect(span));\n text = text.replaceAll(LINK_PATTERN, (_match, kind: string, target: string) => protect(renderLink(kind, target)));\n text = text.replaceAll(CONSTANT_PATTERN, (_match, name: string) => protect(`\\`${CONSTANT_MAP[name] ?? name}\\``));\n text = text.replaceAll(TYPE_REF_PATTERN, (_match, name: string) => protect(`\\`${name}\\``));\n text = text.replaceAll(PARAM_REF_PATTERN, (_match, name: string) => protect(`\\`${name}\\``));\n text = text.replaceAll(FUNCTION_REF_PATTERN, (_match, name: string) => protect(`\\`${name}()\\``));\n\n for (let index = stash.length - 1; index >= 0; index -= 1) {\n const value = stash[index] ?? \"\";\n text = text.replaceAll(`${SENTINEL}${String(index)}${SENTINEL}`, () => value);\n }\n\n return text;\n};\n\nexport { gtkDocToMarkdown };\n"]}
|
|
1
|
+
{"version":3,"file":"gtk-doc.js","sourceRoot":"","sources":["../../src/writer/gtk-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,YAAY,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5F,MAAM,mBAAmB,GAAgB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5F,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AACpE,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAC/C,MAAM,mBAAmB,GAAG,YAAY,CAAC;AACzC,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAC9C,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAC7D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AACzD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,mBAAmB,GAAG,qFAAqF,CAAC;AAClH,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AACjE,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,oBAAoB,GAAG,6CAA6C,CAAC;AAC3E,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AAClE,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AACrD,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC7C,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAEzC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAc,EAAU,EAAE;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtC,IAAI,IAAI,KAAK,UAAU,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,KAAK,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,MAA0B,EAAU,EAAE;IACvE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,KAAK,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,WAA4C,EAAU,EAAE,CAC1F,KAAK,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;AAE5C,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAEvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,GAAG,IAAI,CAAC,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpD,OAAO,SAAS,KAAK,KAAK,IAAI,UAAU,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;AAErF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAU,EAAE,CAChD,gBAAgB,CAAC,IAAI,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,aAAa,CAAC;KAC/E,UAAU,CAAC,uBAAuB,EAAE,IAAI,CAAC;KACzC,UAAU,CAAC,yBAAyB,EAAE,MAAM,CAAC;KAC7C,UAAU,CAAC,0BAA0B,EAAE,IAAI,CAAC;KAC5C,UAAU,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC;KAClE,UAAU,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC;KAClF,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC;KACxC,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,MAAwB,EAAE,MAAgC,EAAU,EAAE;IACzG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;IAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAExC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM;QACV,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACb,MAAM;QACV,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,OAAkC,EAAU,EAAE,CAClF,gBAAgB,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEzG,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC/C,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1B,QAAQ,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,kDAAkD;AAClD,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,WAAiC,EAAU,EAAE;IAChF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,CAAC,KAAa,EAAU,EAAE;QACtC,MAAM,KAAK,GAAG,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElB,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAI,IAAI,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClH,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;IACjH,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAEtD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,MAA0B,EAAE,EAAE,CAC1F,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CACvC,CAAC;IAEF,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChH,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;IACjG,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE/B,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { camelCase } from \"@gtkx/utils\";\n\nconst CONSTANT_MAP: Record<string, string> = { TRUE: \"true\", FALSE: \"false\", NULL: \"null\" };\nconst CALLABLE_LINK_KINDS: Set<string> = new Set([\"method\", \"func\", \"ctor\", \"vfunc\", \"id\"]);\nconst SENTINEL = String.fromCodePoint(0xE0_00);\nconst CODE_BLOCK_OPEN = \"|[\";\nconst CODE_BLOCK_CLOSE = \"]|\";\nconst CODE_LANGUAGE_PATTERN = /^\\s*<!--\\s*language=\"([^\"]*)\"\\s*-->/;\nconst FENCED_BLOCK_PATTERN = /```[\\s\\S]*?```/g;\nconst INLINE_CODE_PATTERN = /`[^`\\n]*`/g;\nconst LINK_PATTERN = /\\[(\\w+)@([\\w.:%#-]+)\\]/g;\nconst CONSTANT_PATTERN = /(?<![\\w\\\\])%(\\w+)/g;\nconst ESCAPED_CONSTANT_PATTERN = /\\\\%/g;\nconst TYPE_REF_PATTERN = /(?<!\\w)#(\\w+)(::[\\w-]+|:[\\w-]+)?/g;\nconst PARAM_REF_PATTERN = /(?<!\\w)@(\\w+)/g;\nconst FUNCTION_REF_PATTERN = /\\b([a-z_][a-z0-9_]*)\\(\\)/g;\nconst HTML_COMMENT_PATTERN = /<!--[\\s\\S]*?-->/g;\nconst DOCBOOK_TAG_PATTERN = /<\\/?(?:itemizedlist|listitem|para|literal|link|informalexample|programlisting)[\\s>]/;\nconst DOCBOOK_LISTING_OPEN = \"<programlisting>\";\nconst DOCBOOK_LISTING_CLOSE = \"</programlisting>\";\nconst DOCBOOK_EXAMPLE_PATTERN = /<\\/?informalexample>\\s*/g;\nconst DOCBOOK_ITEM_OPEN_PATTERN = /<listitem>\\s*(?:<para>\\s*)?/g;\nconst DOCBOOK_ITEM_CLOSE_PATTERN = /(?:<\\/para>\\s*)?<\\/listitem>\\s*/g;\nconst DOCBOOK_LINK_PATTERN = /<link\\s+linkend=\"[^\"]*\">([\\s\\S]*?)<\\/link>/g;\nconst DOCBOOK_LITERAL_PATTERN = /<literal>([\\s\\S]*?)<\\/literal>/g;\nconst DOCBOOK_LIST_PATTERN = /<\\/?itemizedlist>\\s*/g;\nconst DOCBOOK_PARA_PATTERN = /<\\/?para>\\s*/g;\nconst BLANK_LINE_RUN_PATTERN = /\\n{3,}/g;\n\nconst renderLink = (kind: string, target: string): string => {\n const segments = target.split(/::|[.:]/);\n const lastIndex = segments.length - 1;\n\n if (kind === \"property\" || CALLABLE_LINK_KINDS.has(kind)) {\n segments[lastIndex] = camelCase(segments[lastIndex] ?? \"\");\n }\n\n const symbol = segments.join(\".\");\n\n return `\\`${symbol}${CALLABLE_LINK_KINDS.has(kind) ? \"()\" : \"\"}\\``;\n};\n\nconst renderTypeRef = (name: string, member: string | undefined): string => {\n if (member === undefined) {\n return `\\`${name}\\``;\n }\n\n return renderLink(member.startsWith(\"::\") ? \"signal\" : \"property\", `${name}${member}`);\n};\n\nconst renderParamRef = (name: string, identifiers: Map<string, string> | undefined): string =>\n `\\`${identifiers?.get(name) ?? name}\\``;\n\nconst trimTrailingNewlines = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value[end - 1] === \"\\n\") {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n\nconst renderCodeFence = (body: string): string => {\n const languageMatch = CODE_LANGUAGE_PATTERN.exec(body);\n const fence = (languageMatch?.[1] ?? \"\").trim().toLowerCase();\n const rest = languageMatch === null ? body : body.slice(languageMatch[0].length);\n const code = trimTrailingNewlines(rest.trimStart());\n\n return `\\`\\`\\`${fence}\\n${code}\\n\\`\\`\\``;\n};\n\nconst renderListing = (code: string): string => `\\n\\`\\`\\`\\n${code.trim()}\\n\\`\\`\\`\\n`;\n\nconst replaceDocBookTags = (text: string): string =>\n replaceDelimited(text, [DOCBOOK_LISTING_OPEN, DOCBOOK_LISTING_CLOSE], renderListing)\n .replaceAll(DOCBOOK_EXAMPLE_PATTERN, \"\\n\")\n .replaceAll(DOCBOOK_ITEM_OPEN_PATTERN, \"\\n- \")\n .replaceAll(DOCBOOK_ITEM_CLOSE_PATTERN, \"\\n\")\n .replaceAll(DOCBOOK_LINK_PATTERN, (_match, label: string) => label)\n .replaceAll(DOCBOOK_LITERAL_PATTERN, (_match, literal: string) => `\\`${literal}\\``)\n .replaceAll(DOCBOOK_LIST_PATTERN, \"\\n\\n\")\n .replaceAll(DOCBOOK_PARA_PATTERN, \"\\n\\n\");\n\nconst docBookToMarkdown = (text: string): string => {\n if (!DOCBOOK_TAG_PATTERN.test(text)) {\n return text;\n }\n\n return replaceDocBookTags(text).replaceAll(BLANK_LINE_RUN_PATTERN, \"\\n\\n\").trim();\n};\n\nconst replaceDelimited = (raw: string, bounds: [string, string], render: (body: string) => string): string => {\n const [open, close] = bounds;\n let result = \"\";\n let cursor = 0;\n\n while (cursor < raw.length) {\n const start = raw.indexOf(open, cursor);\n\n if (start === -1) {\n break;\n }\n\n const end = raw.indexOf(close, start + open.length);\n\n if (end === -1) {\n break;\n }\n\n result += raw.slice(cursor, start);\n result += render(raw.slice(start + open.length, end));\n cursor = end + close.length;\n }\n\n return result + raw.slice(cursor);\n};\n\nconst protectCodeBlocks = (raw: string, protect: (value: string) => string): string =>\n replaceDelimited(raw, [CODE_BLOCK_OPEN, CODE_BLOCK_CLOSE], (body) => protect(renderCodeFence(body)));\n\nconst stripHtmlComments = (text: string): string => {\n let current = text;\n let previous = \"\";\n\n while (current !== previous) {\n previous = current;\n current = current.replaceAll(HTML_COMMENT_PATTERN, \"\");\n }\n\n return current;\n};\n\n// eslint-disable-next-line gtkx/no-library-prefix\nconst gtkDocToMarkdown = (raw: string, identifiers?: Map<string, string>): string => {\n const stash: string[] = [];\n\n const protect = (value: string): string => {\n const token = `${SENTINEL}${String(stash.length)}${SENTINEL}`;\n stash.push(value);\n\n return token;\n };\n\n let text = protectCodeBlocks(docBookToMarkdown(raw), protect);\n text = text.replaceAll(FENCED_BLOCK_PATTERN, (block) => protect(block));\n text = text.replaceAll(INLINE_CODE_PATTERN, (span) => protect(span));\n text = text.replaceAll(LINK_PATTERN, (_match, kind: string, target: string) => protect(renderLink(kind, target)));\n text = text.replaceAll(CONSTANT_PATTERN, (_match, name: string) => protect(`\\`${CONSTANT_MAP[name] ?? name}\\``));\n text = text.replaceAll(ESCAPED_CONSTANT_PATTERN, \"%\");\n\n text = text.replaceAll(TYPE_REF_PATTERN, (_match, name: string, member: string | undefined) =>\n protect(renderTypeRef(name, member)),\n );\n\n text = text.replaceAll(PARAM_REF_PATTERN, (_match, name: string) => protect(renderParamRef(name, identifiers)));\n text = text.replaceAll(FUNCTION_REF_PATTERN, (_match, name: string) => protect(`\\`${name}()\\``));\n text = stripHtmlComments(text);\n\n for (let index = stash.length - 1; index >= 0; index -= 1) {\n const value = stash[index] ?? \"\";\n text = text.replaceAll(`${SENTINEL}${String(index)}${SENTINEL}`, () => value);\n }\n\n return text;\n};\n\nexport { gtkDocToMarkdown };\n"]}
|
package/dist/writer/module.d.ts
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
import { ImportsBuilder } from "./imports.js";
|
|
2
|
+
type Declaration = {
|
|
3
|
+
name: string;
|
|
4
|
+
code: string;
|
|
5
|
+
owner?: string | undefined;
|
|
6
|
+
};
|
|
2
7
|
declare class ModuleBuilder {
|
|
3
8
|
private bindings;
|
|
4
9
|
private bindingNames;
|
|
5
10
|
private hoistedDescriptors;
|
|
11
|
+
private claimedSpaces;
|
|
6
12
|
private declarations;
|
|
13
|
+
private declaredNames;
|
|
14
|
+
private declaredTypes;
|
|
7
15
|
private registrations;
|
|
16
|
+
private requiredNames;
|
|
8
17
|
imports: ImportsBuilder;
|
|
18
|
+
private claimSpace;
|
|
19
|
+
private claimExportedName;
|
|
20
|
+
private claimTypeName;
|
|
21
|
+
private verifyRegistrations;
|
|
9
22
|
appendBinding(code: string, name?: string): void;
|
|
10
23
|
hoistDescriptor(expression: string): string;
|
|
11
|
-
appendDeclaration(
|
|
12
|
-
|
|
24
|
+
appendDeclaration(declaration: Declaration): void;
|
|
25
|
+
hasExports(): boolean;
|
|
26
|
+
appendRegistration(code: string, requires?: string[]): void;
|
|
13
27
|
toSource(): string;
|
|
14
28
|
}
|
|
15
|
-
export { ModuleBuilder };
|
|
29
|
+
export { type Declaration, ModuleBuilder };
|
|
16
30
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/writer/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,cAAM,aAAa;IACf,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAgB;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/writer/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,WAAW,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AA6BF,cAAM,aAAa;IACf,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAA0B;IACxC,OAAO,EAAE,cAAc,CAAwB;IAEtD,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;IAa3B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAYhD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAc3C,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAOjD,UAAU,IAAI,OAAO;IAIrB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,IAAI;IAQ/D,QAAQ,IAAI,MAAM;CAuBrB;AAED,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/writer/module.js
CHANGED
|
@@ -1,11 +1,70 @@
|
|
|
1
1
|
import { ImportsBuilder } from "./imports.js";
|
|
2
|
+
const EXPORTED_DECLARATION = /^export (?:abstract )?(class|const|enum|function|interface|type) ([A-Za-z_$][\w$]*)/mu;
|
|
3
|
+
const SPACES_BY_KEYWORD = new Map([
|
|
4
|
+
["class", ["value", "type"]],
|
|
5
|
+
["const", ["value"]],
|
|
6
|
+
["enum", ["value", "type"]],
|
|
7
|
+
["function", ["value"]],
|
|
8
|
+
["interface", []],
|
|
9
|
+
["type", ["type"]],
|
|
10
|
+
]);
|
|
11
|
+
const getExportedDeclaration = (code) => {
|
|
12
|
+
const match = EXPORTED_DECLARATION.exec(code);
|
|
13
|
+
const spaces = SPACES_BY_KEYWORD.get(match?.[1] ?? "");
|
|
14
|
+
const name = match?.[2];
|
|
15
|
+
return spaces === undefined || name === undefined ? undefined : { name, spaces };
|
|
16
|
+
};
|
|
17
|
+
const exportedNameText = (exported) => exported === undefined ? "no name at all" : `'${exported.name}'`;
|
|
2
18
|
class ModuleBuilder {
|
|
3
19
|
bindings = [];
|
|
4
20
|
bindingNames = new Set();
|
|
5
21
|
hoistedDescriptors = new Map();
|
|
22
|
+
claimedSpaces = new Set();
|
|
6
23
|
declarations = [];
|
|
24
|
+
declaredNames = new Set();
|
|
25
|
+
declaredTypes = new Map();
|
|
7
26
|
registrations = [];
|
|
27
|
+
requiredNames = new Set();
|
|
8
28
|
imports = new ImportsBuilder();
|
|
29
|
+
claimSpace(name, space) {
|
|
30
|
+
const key = `${space} ${name}`;
|
|
31
|
+
if (this.claimedSpaces.has(key)) {
|
|
32
|
+
throw new Error(`The generated module declares '${name}' twice in its ${space} space. ` +
|
|
33
|
+
"A module may declare each exported name once per declaration space.");
|
|
34
|
+
}
|
|
35
|
+
this.claimedSpaces.add(key);
|
|
36
|
+
}
|
|
37
|
+
claimExportedName(declaration) {
|
|
38
|
+
const exported = getExportedDeclaration(declaration.code);
|
|
39
|
+
const spaces = exported?.name === declaration.name ? exported.spaces : undefined;
|
|
40
|
+
if (spaces === undefined) {
|
|
41
|
+
throw new Error(`The declaration recorded as '${declaration.name}' exports ${exportedNameText(exported)}. ` +
|
|
42
|
+
"A declaration may only be recorded under the name its own code exports.");
|
|
43
|
+
}
|
|
44
|
+
for (const space of spaces) {
|
|
45
|
+
this.claimSpace(declaration.name, space);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
claimTypeName(declaration) {
|
|
49
|
+
const { name, owner } = declaration;
|
|
50
|
+
if (owner === undefined) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const previous = this.declaredTypes.get(name);
|
|
54
|
+
if (previous !== undefined && previous !== owner) {
|
|
55
|
+
throw new Error(`The generated type '${name}' is declared for both ${previous} and ${owner}. ` +
|
|
56
|
+
"Rename one of them, or drop the namespace from the configuration.");
|
|
57
|
+
}
|
|
58
|
+
this.declaredTypes.set(name, owner);
|
|
59
|
+
}
|
|
60
|
+
verifyRegistrations() {
|
|
61
|
+
const missing = [...this.requiredNames].filter((name) => !this.declaredNames.has(name));
|
|
62
|
+
if (missing.length === 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`The generated module registers ${missing.join(", ")}, which it never declares. ` +
|
|
66
|
+
"A registration may only name a symbol whose declaration the same module emits.");
|
|
67
|
+
}
|
|
9
68
|
appendBinding(code, name) {
|
|
10
69
|
if (name !== undefined) {
|
|
11
70
|
if (this.bindingNames.has(name)) {
|
|
@@ -25,13 +84,23 @@ class ModuleBuilder {
|
|
|
25
84
|
this.appendBinding(`const ${name} = ${expression};`, name);
|
|
26
85
|
return name;
|
|
27
86
|
}
|
|
28
|
-
appendDeclaration(
|
|
29
|
-
this.
|
|
87
|
+
appendDeclaration(declaration) {
|
|
88
|
+
this.claimExportedName(declaration);
|
|
89
|
+
this.claimTypeName(declaration);
|
|
90
|
+
this.declaredNames.add(declaration.name);
|
|
91
|
+
this.declarations.push(declaration.code);
|
|
92
|
+
}
|
|
93
|
+
hasExports() {
|
|
94
|
+
return this.declaredNames.size > 0;
|
|
30
95
|
}
|
|
31
|
-
appendRegistration(code) {
|
|
96
|
+
appendRegistration(code, requires = []) {
|
|
97
|
+
for (const name of requires) {
|
|
98
|
+
this.requiredNames.add(name);
|
|
99
|
+
}
|
|
32
100
|
this.registrations.push(code);
|
|
33
101
|
}
|
|
34
102
|
toSource() {
|
|
103
|
+
this.verifyRegistrations();
|
|
35
104
|
const sections = [];
|
|
36
105
|
const importsBlock = this.imports.toSource();
|
|
37
106
|
if (importsBlock.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/writer/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,aAAa;IACP,QAAQ,GAAa,EAAE,CAAC;IACxB,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;IACtC,kBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACpD,YAAY,GAAa,EAAE,CAAC;IAC5B,aAAa,GAAa,EAAE,CAAC;IAC9B,OAAO,GAAmB,IAAI,cAAc,EAAE,CAAC;IAEtD,aAAa,CAAC,IAAY,EAAE,IAAa;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO;YACX,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,UAAkB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE7C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACxC,CAAC;CACJ;AAED,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { ImportsBuilder } from \"./imports.js\";\n\nclass ModuleBuilder {\n private bindings: string[] = [];\n private bindingNames: Set<string> = new Set();\n private hoistedDescriptors: Map<string, string> = new Map();\n private declarations: string[] = [];\n private registrations: string[] = [];\n public imports: ImportsBuilder = new ImportsBuilder();\n\n appendBinding(code: string, name?: string): void {\n if (name !== undefined) {\n if (this.bindingNames.has(name)) {\n return;\n }\n\n this.bindingNames.add(name);\n }\n\n this.bindings.push(code);\n }\n\n hoistDescriptor(expression: string): string {\n const existing = this.hoistedDescriptors.get(expression);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const name = `_desc${String(this.hoistedDescriptors.size)}`;\n this.hoistedDescriptors.set(expression, name);\n this.appendBinding(`const ${name} = ${expression};`, name);\n\n return name;\n }\n\n appendDeclaration(code: string): void {\n this.declarations.push(code);\n }\n\n appendRegistration(code: string): void {\n this.registrations.push(code);\n }\n\n toSource(): string {\n const sections: string[] = [];\n const importsBlock = this.imports.toSource();\n\n if (importsBlock.length > 0) {\n sections.push(importsBlock.trimEnd());\n }\n\n if (this.declarations.length > 0) {\n sections.push(this.declarations.join(\"\\n\\n\"));\n }\n\n if (this.bindings.length > 0) {\n sections.push(this.bindings.join(\"\\n\\n\"));\n }\n\n if (this.registrations.length > 0) {\n sections.push(this.registrations.join(\"\\n\\n\"));\n }\n\n return `${sections.join(\"\\n\\n\")}\\n`;\n }\n}\n\nexport { ModuleBuilder };\n"]}
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/writer/module.ts"],"names":[],"mappings":"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","sourcesContent":["import { ImportsBuilder } from \"./imports.js\";\n\ntype Declaration = {\n name: string;\n code: string;\n owner?: string | undefined;\n};\n\ntype ExportedDeclaration = {\n name: string;\n spaces: string[];\n};\n\nconst EXPORTED_DECLARATION = /^export (?:abstract )?(class|const|enum|function|interface|type) ([A-Za-z_$][\\w$]*)/mu;\n\nconst SPACES_BY_KEYWORD: Map<string, string[]> = new Map([\n [\"class\", [\"value\", \"type\"]],\n [\"const\", [\"value\"]],\n [\"enum\", [\"value\", \"type\"]],\n [\"function\", [\"value\"]],\n [\"interface\", []],\n [\"type\", [\"type\"]],\n]);\n\nconst getExportedDeclaration = (code: string): ExportedDeclaration | undefined => {\n const match = EXPORTED_DECLARATION.exec(code);\n const spaces = SPACES_BY_KEYWORD.get(match?.[1] ?? \"\");\n const name = match?.[2];\n\n return spaces === undefined || name === undefined ? undefined : { name, spaces };\n};\n\nconst exportedNameText = (exported: ExportedDeclaration | undefined): string =>\n exported === undefined ? \"no name at all\" : `'${exported.name}'`;\n\nclass ModuleBuilder {\n private bindings: string[] = [];\n private bindingNames: Set<string> = new Set();\n private hoistedDescriptors: Map<string, string> = new Map();\n private claimedSpaces: Set<string> = new Set();\n private declarations: string[] = [];\n private declaredNames: Set<string> = new Set();\n private declaredTypes: Map<string, string> = new Map();\n private registrations: string[] = [];\n private requiredNames: Set<string> = new Set();\n public imports: ImportsBuilder = new ImportsBuilder();\n\n private claimSpace(name: string, space: string): void {\n const key = `${space} ${name}`;\n\n if (this.claimedSpaces.has(key)) {\n throw new Error(\n `The generated module declares '${name}' twice in its ${space} space. ` +\n \"A module may declare each exported name once per declaration space.\",\n );\n }\n\n this.claimedSpaces.add(key);\n }\n\n private claimExportedName(declaration: Declaration): void {\n const exported = getExportedDeclaration(declaration.code);\n const spaces = exported?.name === declaration.name ? exported.spaces : undefined;\n\n if (spaces === undefined) {\n throw new Error(\n `The declaration recorded as '${declaration.name}' exports ${exportedNameText(exported)}. ` +\n \"A declaration may only be recorded under the name its own code exports.\",\n );\n }\n\n for (const space of spaces) {\n this.claimSpace(declaration.name, space);\n }\n }\n\n private claimTypeName(declaration: Declaration): void {\n const { name, owner } = declaration;\n\n if (owner === undefined) {\n return;\n }\n\n const previous = this.declaredTypes.get(name);\n\n if (previous !== undefined && previous !== owner) {\n throw new Error(\n `The generated type '${name}' is declared for both ${previous} and ${owner}. ` +\n \"Rename one of them, or drop the namespace from the configuration.\",\n );\n }\n\n this.declaredTypes.set(name, owner);\n }\n\n private verifyRegistrations(): void {\n const missing = [...this.requiredNames].filter((name) => !this.declaredNames.has(name));\n\n if (missing.length === 0) {\n return;\n }\n\n throw new Error(\n `The generated module registers ${missing.join(\", \")}, which it never declares. ` +\n \"A registration may only name a symbol whose declaration the same module emits.\",\n );\n }\n\n appendBinding(code: string, name?: string): void {\n if (name !== undefined) {\n if (this.bindingNames.has(name)) {\n return;\n }\n\n this.bindingNames.add(name);\n }\n\n this.bindings.push(code);\n }\n\n hoistDescriptor(expression: string): string {\n const existing = this.hoistedDescriptors.get(expression);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const name = `_desc${String(this.hoistedDescriptors.size)}`;\n this.hoistedDescriptors.set(expression, name);\n this.appendBinding(`const ${name} = ${expression};`, name);\n\n return name;\n }\n\n appendDeclaration(declaration: Declaration): void {\n this.claimExportedName(declaration);\n this.claimTypeName(declaration);\n this.declaredNames.add(declaration.name);\n this.declarations.push(declaration.code);\n }\n\n hasExports(): boolean {\n return this.declaredNames.size > 0;\n }\n\n appendRegistration(code: string, requires: string[] = []): void {\n for (const name of requires) {\n this.requiredNames.add(name);\n }\n\n this.registrations.push(code);\n }\n\n toSource(): string {\n this.verifyRegistrations();\n const sections: string[] = [];\n const importsBlock = this.imports.toSource();\n\n if (importsBlock.length > 0) {\n sections.push(importsBlock.trimEnd());\n }\n\n if (this.declarations.length > 0) {\n sections.push(this.declarations.join(\"\\n\\n\"));\n }\n\n if (this.bindings.length > 0) {\n sections.push(this.bindings.join(\"\\n\\n\"));\n }\n\n if (this.registrations.length > 0) {\n sections.push(this.registrations.join(\"\\n\\n\"));\n }\n\n return `${sections.join(\"\\n\\n\")}\\n`;\n }\n}\n\nexport { type Declaration, ModuleBuilder };\n"]}
|
package/dist/xml.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type X2jOptions, XMLParser } from "fast-xml-parser";
|
|
2
|
+
type XmlFileInput = {
|
|
3
|
+
parser: XMLParser;
|
|
4
|
+
label: string;
|
|
5
|
+
path: string;
|
|
6
|
+
};
|
|
2
7
|
declare const createXmlParser: (options: Partial<X2jOptions>) => XMLParser;
|
|
3
|
-
|
|
8
|
+
declare const parseXmlFile: (input: XmlFileInput) => unknown;
|
|
9
|
+
export { createXmlParser, parseXmlFile };
|
|
4
10
|
//# sourceMappingURL=xml.d.ts.map
|
package/dist/xml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI7D,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,OAAO,CAAC,UAAU,CAAC,KAAG,SAOlD,CAAC;AA0CP,QAAA,MAAM,YAAY,GAAI,OAAO,YAAY,KAAG,OAS3C,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/xml.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { errorMessage, isRecord } from "@gtkx/utils";
|
|
1
2
|
import { XMLParser } from "fast-xml-parser";
|
|
3
|
+
import { SyntaxValidator } from "fast-xml-validator";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
2
5
|
const createXmlParser = (options) => new XMLParser({
|
|
3
6
|
ignoreAttributes: false,
|
|
4
7
|
attributeNamePrefix: "@_",
|
|
@@ -6,5 +9,44 @@ const createXmlParser = (options) => new XMLParser({
|
|
|
6
9
|
parseTagValue: false,
|
|
7
10
|
...options,
|
|
8
11
|
});
|
|
9
|
-
|
|
12
|
+
const xmlFileError = (input, action, error) => new Error(`Cannot ${action} the ${input.label} at ${input.path}: ${errorMessage(error)}`, { cause: error });
|
|
13
|
+
const readXmlFile = (input) => {
|
|
14
|
+
try {
|
|
15
|
+
return readFileSync(input.path, "utf8");
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
throw xmlFileError(input, "read", error);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const isLocated = (line, col) => typeof line === "number" && typeof col === "number" && (line > 1 || col > 1);
|
|
22
|
+
const positionSuffix = (error) => {
|
|
23
|
+
if (!isRecord(error)) {
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
const { line, col } = error;
|
|
27
|
+
if (!isLocated(line, col)) {
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
return ` (line ${String(line)}, column ${String(col)})`;
|
|
31
|
+
};
|
|
32
|
+
const assertWellFormed = (input, xml) => {
|
|
33
|
+
try {
|
|
34
|
+
SyntaxValidator.validate(xml);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(`The ${input.label} at ${input.path} is not well-formed XML: ` +
|
|
38
|
+
`${errorMessage(error)}${positionSuffix(error)}`, { cause: error });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const parseXmlFile = (input) => {
|
|
42
|
+
const xml = readXmlFile(input);
|
|
43
|
+
assertWellFormed(input, xml);
|
|
44
|
+
try {
|
|
45
|
+
return input.parser.parse(xml);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw xmlFileError(input, "parse", error);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
export { createXmlParser, parseXmlFile };
|
|
10
52
|
//# sourceMappingURL=xml.js.map
|
package/dist/xml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAmB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQvC,MAAM,eAAe,GAAG,CAAC,OAA4B,EAAa,EAAE,CAChE,IAAI,SAAS,CAAC;IACV,gBAAgB,EAAE,KAAK;IACvB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,KAAK;IACpB,GAAG,OAAO;CACb,CAAC,CAAC;AAEP,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,MAAc,EAAE,KAAc,EAAS,EAAE,CAChF,IAAI,KAAK,CAAC,UAAU,MAAM,QAAQ,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhH,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAU,EAAE;IAChD,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,GAAY,EAAW,EAAE,CACvD,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAEjF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAU,EAAE;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE5B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,GAAW,EAAQ,EAAE;IAChE,IAAI,CAAC;QACD,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,2BAA2B;YAC9D,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,EAChD,EAAE,KAAK,EAAE,KAAK,EAAE,CACnB,CAAC;IACN,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAW,EAAE;IAClD,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import { errorMessage, isRecord } from \"@gtkx/utils\";\nimport { type X2jOptions, XMLParser } from \"fast-xml-parser\";\nimport { SyntaxValidator } from \"fast-xml-validator\";\nimport { readFileSync } from \"node:fs\";\n\ntype XmlFileInput = {\n parser: XMLParser;\n label: string;\n path: string;\n};\n\nconst createXmlParser = (options: Partial<X2jOptions>): XMLParser =>\n new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@_\",\n parseAttributeValue: false,\n parseTagValue: false,\n ...options,\n });\n\nconst xmlFileError = (input: XmlFileInput, action: string, error: unknown): Error =>\n new Error(`Cannot ${action} the ${input.label} at ${input.path}: ${errorMessage(error)}`, { cause: error });\n\nconst readXmlFile = (input: XmlFileInput): string => {\n try {\n return readFileSync(input.path, \"utf8\");\n } catch (error) {\n throw xmlFileError(input, \"read\", error);\n }\n};\n\nconst isLocated = (line: unknown, col: unknown): boolean =>\n typeof line === \"number\" && typeof col === \"number\" && (line > 1 || col > 1);\n\nconst positionSuffix = (error: unknown): string => {\n if (!isRecord(error)) {\n return \"\";\n }\n\n const { line, col } = error;\n\n if (!isLocated(line, col)) {\n return \"\";\n }\n\n return ` (line ${String(line)}, column ${String(col)})`;\n};\n\nconst assertWellFormed = (input: XmlFileInput, xml: string): void => {\n try {\n SyntaxValidator.validate(xml);\n } catch (error) {\n throw new Error(\n `The ${input.label} at ${input.path} is not well-formed XML: ` +\n `${errorMessage(error)}${positionSuffix(error)}`,\n { cause: error },\n );\n }\n};\n\nconst parseXmlFile = (input: XmlFileInput): unknown => {\n const xml = readXmlFile(input);\n assertWellFormed(input, xml);\n\n try {\n return input.parser.parse(xml);\n } catch (error) {\n throw xmlFileError(input, \"parse\", error);\n }\n};\n\nexport { createXmlParser, parseXmlFile };\n"]}
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
import { RGBA as GeneratedRGBA } from "../gdk.js";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Parses a CSS color string into a new `RGBA`.
|
|
5
|
+
*
|
|
6
|
+
* @param value a CSS color string, such as `#rgb`, `rgb(r,g,b)`, or a named color
|
|
7
|
+
* @returns the parsed color
|
|
8
|
+
*/
|
|
3
9
|
const create = (value: string): GeneratedRGBA => {
|
|
4
10
|
const rgba = new GeneratedRGBA();
|
|
5
11
|
rgba.parse(value);
|
|
6
12
|
return rgba;
|
|
7
13
|
};
|
|
8
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Represents a color, in a way that is compatible with cairo's notion of color.
|
|
17
|
+
*
|
|
18
|
+
* `GdkRGBA` is a convenient way to pass colors around. It's based on
|
|
19
|
+
* cairo's way to deal with colors and mirrors its behavior. All values
|
|
20
|
+
* are in the range from 0.0 to 1.0 inclusive. So the color
|
|
21
|
+
* (0.0, 0.0, 0.0, 0.0) represents transparent black and
|
|
22
|
+
* (1.0, 1.0, 1.0, 1.0) is opaque white. Other values will
|
|
23
|
+
* be clamped to this range when drawing.
|
|
24
|
+
*/
|
|
9
25
|
export const RGBA: typeof GeneratedRGBA & { create: typeof create } = Object.assign(GeneratedRGBA, { create });
|
|
10
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Represents a color, in a way that is compatible with cairo's notion of color.
|
|
29
|
+
*
|
|
30
|
+
* `GdkRGBA` is a convenient way to pass colors around. It's based on
|
|
31
|
+
* cairo's way to deal with colors and mirrors its behavior. All values
|
|
32
|
+
* are in the range from 0.0 to 1.0 inclusive. So the color
|
|
33
|
+
* (0.0, 0.0, 0.0, 0.0) represents transparent black and
|
|
34
|
+
* (1.0, 1.0, 1.0, 1.0) is opaque white. Other values will
|
|
35
|
+
* be clamped to this range when drawing.
|
|
36
|
+
*/
|
|
11
37
|
export type RGBA = GeneratedRGBA;
|
|
@@ -1,22 +1,67 @@
|
|
|
1
|
-
import { offSignal, onceSignal, onSignal } from "@gtkx/runtime";
|
|
2
|
-
import { Object as GObject,
|
|
1
|
+
import { disconnectSignal, offSignal, onceSignal, onSignal } from "@gtkx/runtime";
|
|
2
|
+
import { Object as GObject, type Type } from "../gobject.js";
|
|
3
3
|
|
|
4
4
|
type Listener = (...args: unknown[]) => unknown;
|
|
5
5
|
|
|
6
6
|
declare module "../gobject.js" {
|
|
7
7
|
interface Object {
|
|
8
|
+
/** GType the instance's class is registered under, carried on the prototype. */
|
|
8
9
|
__type__: Type;
|
|
9
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Disconnects the handler `connect` returned the given id for.
|
|
13
|
+
*
|
|
14
|
+
* @param handlerId Id of the handler to disconnect.
|
|
15
|
+
*/
|
|
10
16
|
disconnect(handlerId: number): void;
|
|
11
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Connects a handler that runs on every emission of `sigName`, remembering it so `off` can
|
|
20
|
+
* take the same callback back off again.
|
|
21
|
+
*
|
|
22
|
+
* @param sigName Signal to connect to.
|
|
23
|
+
* @param callback Handler invoked on each emission.
|
|
24
|
+
* @param isAfter Run the handler after the default handler rather than before it.
|
|
25
|
+
* @returns The same object, so calls chain.
|
|
26
|
+
*/
|
|
12
27
|
on(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
|
|
13
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Connects a handler that runs at most once and disconnects itself after the first emission.
|
|
31
|
+
*
|
|
32
|
+
* @param sigName Signal to connect to.
|
|
33
|
+
* @param callback Handler invoked on the first emission.
|
|
34
|
+
* @param isAfter Run the handler after the default handler rather than before it.
|
|
35
|
+
* @returns The same object, so calls chain.
|
|
36
|
+
*/
|
|
14
37
|
once(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
|
|
15
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Disconnects a handler previously connected with `on` or `once`, given the same callback.
|
|
41
|
+
*
|
|
42
|
+
* @param sigName Signal the handler was connected to.
|
|
43
|
+
* @param callback The handler that was connected.
|
|
44
|
+
* @returns The same object, so calls chain.
|
|
45
|
+
*/
|
|
16
46
|
off(sigName: string, callback: (...args: unknown[]) => unknown): Object;
|
|
17
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Alias of `on`, for callers who prefer the DOM spelling.
|
|
50
|
+
*
|
|
51
|
+
* @param sigName Signal to connect to.
|
|
52
|
+
* @param callback Handler invoked on each emission.
|
|
53
|
+
* @param isAfter Run the handler after the default handler rather than before it.
|
|
54
|
+
* @returns The same object, so calls chain.
|
|
55
|
+
*/
|
|
18
56
|
addEventListener(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
|
|
19
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Alias of `off`, for callers who prefer the DOM spelling.
|
|
60
|
+
*
|
|
61
|
+
* @param sigName Signal the handler was connected to.
|
|
62
|
+
* @param callback The handler that was connected.
|
|
63
|
+
* @returns The same object, so calls chain.
|
|
64
|
+
*/
|
|
20
65
|
removeEventListener(sigName: string, callback: (...args: unknown[]) => unknown): Object;
|
|
21
66
|
}
|
|
22
67
|
}
|
|
@@ -26,7 +71,7 @@ type GObjectWithConnect = GObject & {
|
|
|
26
71
|
};
|
|
27
72
|
|
|
28
73
|
GObject.prototype.disconnect = function disconnect(handlerId: number): void {
|
|
29
|
-
|
|
74
|
+
disconnectSignal(this, handlerId);
|
|
30
75
|
};
|
|
31
76
|
|
|
32
77
|
function onImpl(this: GObjectWithConnect, sigName: string, callback: Listener, isAfter?: boolean): GObject {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { getBoxedValue, getHandle, setBoxedValue } from "@gtkx/runtime";
|
|
2
2
|
import { type Type, Value } from "../gobject.js";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Allocates a `Value`, initializes it to `gtype`, and hands it to `populate` to fill in.
|
|
6
|
+
*
|
|
7
|
+
* @param gtype GType the value holds.
|
|
8
|
+
* @param populate Called with the initialized value to write the contents.
|
|
9
|
+
* @returns The populated value.
|
|
10
|
+
*/
|
|
4
11
|
export const buildValue = (gtype: Type, populate: (value: Value) => void): Value => {
|
|
5
12
|
const value = new Value();
|
|
6
13
|
value.init(gtype);
|