@gtkx/codegen 1.0.0-rc.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/analysis/descriptor-render.d.ts +8 -1
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +37 -24
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +1 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +1 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +25 -22
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +130 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +11 -4
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +40 -14
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -2
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +7 -14
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +32 -20
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.js +2 -2
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +25 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +84 -22
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +17 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +128 -43
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +1 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/gir/ancestry.d.ts +2 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +11 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +22 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -8
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/libraries.d.ts +1 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +0 -1
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +34 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +38 -0
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -5
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +39 -0
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +7 -3
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -3
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +35 -0
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -0
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +1 -0
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +28 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +96 -26
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +3 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +58 -27
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +3 -3
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +2 -2
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +2 -2
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +1 -7
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +3 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +12 -12
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +2 -2
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +5 -3
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +3 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -16
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +27 -12
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +130 -16
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +9 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +69 -26
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +4 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +5 -1
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +3 -2
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +2 -2
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +3 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +6 -5
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +3 -1
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -2
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.js +1 -1
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +3 -2
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +14 -15
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -2
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -1
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +16 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +214 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +7 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +2 -2
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +1 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +14 -6
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +3 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +8 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +13 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +48 -3
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +4 -4
- package/src/analysis/descriptor-render.ts +47 -28
- package/src/analysis/descriptor.ts +0 -3
- package/src/analysis/inheritance.ts +35 -34
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +172 -0
- package/src/analysis/param-structure.ts +83 -23
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +1 -1
- package/src/docs/api-reference.ts +36 -25
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +2 -2
- package/src/docs/render.ts +146 -32
- package/src/docs/symbol-page.ts +224 -79
- package/src/fingerprint.ts +0 -1
- package/src/gir/ancestry.ts +15 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -9
- package/src/gir/function.ts +15 -0
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -3
- package/src/gir/parse.ts +8 -2
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -3
- package/src/gir/type-id.ts +49 -3
- package/src/gir/type-ref.ts +1 -0
- package/src/gir/type.ts +50 -6
- package/src/khronos/args.ts +36 -13
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +134 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/pipeline.ts +94 -41
- package/src/khronos/plan.ts +4 -5
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +2 -2
- package/src/runner.ts +1 -8
- package/src/store/compile-store.ts +1 -1
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +18 -12
- package/src/store/gi/callback.ts +3 -2
- package/src/store/gi/class.ts +6 -3
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/constant.ts +3 -4
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +55 -20
- package/src/store/gi/function.ts +43 -21
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +98 -42
- package/src/store/gi/param-marshal.ts +15 -1
- package/src/store/gi/pipeline.ts +7 -2
- package/src/store/gi/properties.ts +3 -2
- package/src/store/gi/property-accessor.ts +9 -4
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +5 -3
- package/src/store/gi/record-layout.ts +1 -1
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +19 -20
- package/src/store/gi/value-marshalable.ts +1 -1
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/jsx/element-components.ts +8 -5
- package/src/store/jsx/element-prop-imports.ts +1 -3
- package/src/store/jsx/element-prop-types.ts +10 -1
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +8 -6
- package/src/store/jsx/metadata.ts +2 -2
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { camelCase, lowerFirst, pascalCase, toCamelIdentifier } from "@gtkx/utils";
|
|
2
|
-
import { ancestorChain,
|
|
2
|
+
import { ancestorChain, resolveInterfaces } from "../gir/ancestry.js";
|
|
3
3
|
import { methodExportName } from "../store/gi/method.js";
|
|
4
4
|
import { resolveAccessorType } from "../store/gi/property-accessor.js";
|
|
5
|
+
import { vfuncMemberNames } from "../store/gi/vtable.js";
|
|
5
6
|
import { inputParameters } from "./param-structure.js";
|
|
6
7
|
import { renderTsType } from "./ts-type.js";
|
|
7
8
|
const RESERVED_SIGNAL_MEMBERS = new Set([
|
|
@@ -14,17 +15,7 @@ const RESERVED_SIGNAL_MEMBERS = new Set([
|
|
|
14
15
|
"addEventListener",
|
|
15
16
|
"removeEventListener",
|
|
16
17
|
]);
|
|
17
|
-
const
|
|
18
|
-
const resolveDirectInterfaces = (context, klass, defaultNamespace) => {
|
|
19
|
-
const interfaces = [];
|
|
20
|
-
for (const implementName of klass.implements) {
|
|
21
|
-
const iface = resolveImplementedInterface(context, implementName, defaultNamespace);
|
|
22
|
-
if (iface !== undefined) {
|
|
23
|
-
interfaces.push(iface);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return interfaces;
|
|
27
|
-
};
|
|
18
|
+
const resolveDirectInterfaces = (context, klass, defaultNamespace) => resolveInterfaces(context.library, defaultNamespace, klass.implements);
|
|
28
19
|
const resolvePrerequisiteReference = (context, name) => {
|
|
29
20
|
const resolved = context.library.resolveType(context.namespace.name, name);
|
|
30
21
|
if (resolved === undefined) {
|
|
@@ -123,17 +114,29 @@ const mergeOmissionName = (context, method, ancestors) => {
|
|
|
123
114
|
const arity = inputParameters(context.library, method).length;
|
|
124
115
|
return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;
|
|
125
116
|
};
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (name !== undefined) {
|
|
132
|
-
omissions.push(name);
|
|
117
|
+
const classChainVfuncNames = (context, klass) => {
|
|
118
|
+
const names = new Set(vfuncMemberNames(context, context.namespace.name, klass));
|
|
119
|
+
forEachAncestor(context, klass, (ancestor) => {
|
|
120
|
+
for (const name of vfuncMemberNames(context, ancestor.namespaceName, ancestor.klass)) {
|
|
121
|
+
names.add(name);
|
|
133
122
|
}
|
|
134
|
-
}
|
|
135
|
-
return
|
|
123
|
+
});
|
|
124
|
+
return names;
|
|
136
125
|
};
|
|
126
|
+
const methodMergeOmissions = (context, klass, iface) => {
|
|
127
|
+
const ancestors = ancestorClassMethodSignatures(context, klass);
|
|
128
|
+
return iface.methods
|
|
129
|
+
.map((method) => mergeOmissionName(context, method, ancestors))
|
|
130
|
+
.filter((name) => name !== undefined);
|
|
131
|
+
};
|
|
132
|
+
const vfuncMergeOmissions = (context, klass, iface) => {
|
|
133
|
+
const claimed = classChainVfuncNames(context, klass);
|
|
134
|
+
return vfuncMemberNames(context, iface.namespaceName, iface.klass).filter((name) => claimed.has(name));
|
|
135
|
+
};
|
|
136
|
+
const collectInterfaceMergeOmissions = (context, klass, iface) => [
|
|
137
|
+
...methodMergeOmissions(context, klass, iface.klass),
|
|
138
|
+
...vfuncMergeOmissions(context, klass, iface),
|
|
139
|
+
];
|
|
137
140
|
const collectInheritedPropertyTypes = (context, klass) => {
|
|
138
141
|
const types = new Map();
|
|
139
142
|
const record = (owner, property) => {
|
|
@@ -244,5 +247,5 @@ const enumIdentity = (context, ref) => {
|
|
|
244
247
|
}
|
|
245
248
|
return `${resolved.namespace.name}.${resolved.value.name}`;
|
|
246
249
|
};
|
|
247
|
-
export {
|
|
250
|
+
export { resolvePrerequisiteReference, forEachAncestor, collectInterfaceProperties, collectInterfaceMergeOmissions, collectInheritedPropertyTypes, collectInheritedMethods, conflictRename, reservedSignalMemberRename, };
|
|
248
251
|
//# sourceMappingURL=inheritance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../../src/analysis/inheritance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOnF,OAAO,EAAE,aAAa,EAAyB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAyB5C,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACpC,SAAS;IACT,YAAY;IACZ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,KAAK;IACL,kBAAkB;IAClB,qBAAqB;CACxB,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,CAChC,OAAwB,EACxB,IAAY,EACZ,mBAA2B,OAAO,CAAC,SAAS,CAAC,IAAI,EACrB,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE7F,MAAM,uBAAuB,GAAG,CAC5B,OAAwB,EACxB,KAAe,EACf,gBAAwB,EACN,EAAE;IACpB,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAEpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,OAAsB,EAAE,IAAY,EAAsB,EAAE;IAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAwB,EACxB,KAAe,EACf,KAA2E,EAC3E,aAA8C,GAAG,EAAE,CAAC,KAAK,EACrD,EAAE;IACN,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnF,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACb,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM;QACV,CAAC;QAED,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9F,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,UAA8B,EAC9B,KAAuD,EACnD,EAAE;IACN,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,OAAsB,EACtB,KAAe,EACf,KAAuD,EACnD,EAAE;IACN,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;QACrD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC/C,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAe,EAAE;IACtF,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEpC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3G,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAuB,EAAE,IAAiB,EAAmB,EAAE;IAClG,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAmB,EAAE;IAC5F,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,OAAsB,EACtB,KAAe,EACf,UAAwC,EACpC,EAAE;IACN,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,SAAS;QACb,CAAC;QAED,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;YACvF,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM;SACzD,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAgC,EAAE;IAC5G,MAAM,UAAU,GAAiC,IAAI,GAAG,EAAE,CAAC;IAE3D,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;QACzC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,OAAsB,EACtB,MAAmB,EACnB,SAAuC,EACrB,EAAE;IACpB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC;IAE9D,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACnC,OAAsB,EACtB,KAAe,EACf,KAAiD,EACzC,EAAE;IACV,MAAM,SAAS,GAAG,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAE3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAuB,EAAE;IACnG,MAAM,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE7C,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,QAAqB,EAAQ,EAAE;QAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAErE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC,CAAC;IAEF,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAoB,EAAE;IAC1F,MAAM,WAAW,GAAqB;QAClC,WAAW,EAAE,IAAI,GAAG,EAAkB;QACtC,WAAW,EAAE,IAAI,GAAG,EAA2B;KAClD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;QACrD,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEvD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC7B,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,OAAsB,EACtB,QAAoD,EACpD,WAA6B,EACzB,EAAE;IACN,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,SAAS;QACb,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;QACzE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvG,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,SAA2B,EAAE,IAAY,EAA8B,EAAE;IAC7F,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAExD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAK1B,EAAW,EAAE;IACV,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACxE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAElG,OAAO,CACH,eAAe,KAAK,SAAS;QAC7B,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC;QAC5D,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM;YACjD,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAClE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,OAAsB,EACtB,QAAqB,EACrB,SAA2B,EAC3B,SAAiB,EACC,EAAE;IACpB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAEvE,OAAO,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,SAAiB,EAAE,UAAkB,EAAU,EAAE,CAC5E,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAExD,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAE,QAAqB,EAAsB,EAAE,CAChG,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;IACjD,CAAC,CAAC,SAAS,CAAC;AAEpB,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,MAA0B,EAC1B,YAAgC,EACzB,EAAE;IACT,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE1D,OAAO,OAAO,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,KAAK,aAAa,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,OAAsB,EAAE,GAAgB,EAAE,SAA0B,EAAW,EAAE;IAC/G,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAEjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,IACI,QAAQ,KAAK,SAAS;YACtB,cAAc,KAAK,SAAS;YAC5B,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAClF,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAE,GAAuB,EAAsB,EAAE;IACzF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,cAAc,EACd,0BAA0B,GAG7B,CAAC","sourcesContent":["import { camelCase, lowerFirst, pascalCase, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { ancestorChain, type ResolvedAncestor, resolveInterface } from \"../gir/ancestry.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { resolveAccessorType } from \"../store/gi/property-accessor.js\";\nimport { inputParameters } from \"./param-structure.js\";\nimport { renderTsType } from \"./ts-type.js\";\n\ntype AncestryContext = {\n library: Library;\n namespace: { name: string };\n};\n\ntype OwnedProperty = { owner: GirClass; property: GirProperty };\ntype MethodSignature = { returnType: string; arity: number };\n\ntype InheritedMethod = {\n method: GirFunction;\n namespaceName: string;\n};\n\ntype InheritedMethods = {\n returnTypes: Map<string, string>;\n definitions: Map<string, InheritedMethod>;\n};\n\ntype InheritedMatch = {\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n};\n\nconst RESERVED_SIGNAL_MEMBERS = new Set([\n \"connect\",\n \"disconnect\",\n \"emit\",\n \"on\",\n \"once\",\n \"off\",\n \"addEventListener\",\n \"removeEventListener\",\n]);\n\nconst resolveImplementedInterface = (\n context: AncestryContext,\n name: string,\n defaultNamespace: string = context.namespace.name,\n): ResolvedAncestor | undefined => resolveInterface(context.library, defaultNamespace, name);\n\nconst resolveDirectInterfaces = (\n context: AncestryContext,\n klass: GirClass,\n defaultNamespace: string,\n): ResolvedAncestor[] => {\n const interfaces: ResolvedAncestor[] = [];\n\n for (const implementName of klass.implements) {\n const iface = resolveImplementedInterface(context, implementName, defaultNamespace);\n\n if (iface !== undefined) {\n interfaces.push(iface);\n }\n }\n\n return interfaces;\n};\n\nconst resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {\n const resolved = context.library.resolveType(context.namespace.name, name);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n if (resolved.kind !== \"interface\" && resolved.kind !== \"class\") {\n return undefined;\n }\n\n return context.qualify(resolved.namespace.name, pascalCase(resolved.value.name));\n};\n\nconst forEachAncestor = (\n context: AncestryContext,\n klass: GirClass,\n visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void,\n shouldStop: (ancestor: GirClass) => boolean = () => false,\n): void => {\n let isFirst = true;\n\n for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {\n if (isFirst) {\n isFirst = false;\n continue;\n }\n\n if (shouldStop(ancestor.klass)) {\n break;\n }\n\n visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));\n }\n};\n\nconst visitInterfaceProperties = (\n interfaces: ResolvedAncestor[],\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n for (const iface of interfaces) {\n for (const property of iface.klass.properties) {\n visit(iface.klass, property);\n }\n }\n};\n\nconst forEachInheritedProperty = (\n context: ModuleContext,\n klass: GirClass,\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n for (const property of ancestor.klass.properties) {\n visit(ancestor.klass, property);\n }\n\n visitInterfaceProperties(interfaces, visit);\n });\n};\n\nconst collectSeenPropertyNames = (context: ModuleContext, klass: GirClass): Set<string> => {\n const seen: Set<string> = new Set();\n\n for (const property of klass.properties) {\n seen.add(toCamelIdentifier(property.name));\n }\n\n forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));\n\n return seen;\n};\n\nconst collectNewInterfaceProperties = (iface: ResolvedAncestor, seen: Set<string>): OwnedProperty[] => {\n const result: OwnedProperty[] = [];\n\n for (const property of iface.klass.properties) {\n const name = toCamelIdentifier(property.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n result.push({ owner: iface.klass, property });\n }\n\n return result;\n};\n\nconst collectInterfaceProperties = (context: ModuleContext, klass: GirClass): OwnedProperty[] => {\n const seen = collectSeenPropertyNames(context, klass);\n const result: OwnedProperty[] = [];\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n result.push(...collectNewInterfaceProperties(iface, seen));\n }\n\n return result;\n};\n\nconst recordAncestorSignatures = (\n context: ModuleContext,\n klass: GirClass,\n signatures: Map<string, MethodSignature>,\n): void => {\n for (const method of klass.methods) {\n const name = camelCase(method.name);\n\n if (!method.introspectable || signatures.has(name)) {\n continue;\n }\n\n signatures.set(name, {\n returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),\n arity: inputParameters(context.library, method).length,\n });\n }\n};\n\nconst ancestorClassMethodSignatures = (context: ModuleContext, klass: GirClass): Map<string, MethodSignature> => {\n const signatures: Map<string, MethodSignature> = new Map();\n\n forEachAncestor(context, klass, (ancestor) => {\n recordAncestorSignatures(context, ancestor.klass, signatures);\n });\n\n return signatures;\n};\n\nconst mergeOmissionName = (\n context: ModuleContext,\n method: GirFunction,\n ancestors: Map<string, MethodSignature>,\n): string | undefined => {\n if (!method.introspectable) {\n return undefined;\n }\n\n const name = camelCase(method.name);\n const ancestor = ancestors.get(name);\n\n if (ancestor === undefined) {\n return undefined;\n }\n\n const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);\n const arity = inputParameters(context.library, method).length;\n\n return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;\n};\n\nconst collectInterfaceMergeOmissions = (\n context: ModuleContext,\n klass: GirClass,\n iface: { klass: GirClass; namespaceName: string },\n): string[] => {\n const ancestors = ancestorClassMethodSignatures(context, klass);\n const omissions: string[] = [];\n\n for (const method of iface.klass.methods) {\n const name = mergeOmissionName(context, method, ancestors);\n\n if (name !== undefined) {\n omissions.push(name);\n }\n }\n\n return omissions;\n};\n\nconst collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {\n const types: Map<string, string> = new Map();\n\n const record = (owner: GirClass, property: GirProperty): void => {\n const jsName = toCamelIdentifier(property.name);\n\n if (types.has(jsName)) {\n return;\n }\n\n const tsType = resolveAccessorType(context, property, owner.methods);\n\n if (tsType !== undefined) {\n types.set(jsName, tsType);\n }\n };\n\n forEachInheritedProperty(context, klass, record);\n\n return types;\n};\n\nconst collectInheritedMethods = (context: ModuleContext, klass: GirClass): InheritedMethods => {\n const accumulator: InheritedMethods = {\n returnTypes: new Map<string, string>(),\n definitions: new Map<string, InheritedMethod>(),\n };\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n absorbInheritedMethods(context, ancestor, accumulator);\n\n for (const iface of interfaces) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n });\n\n return accumulator;\n};\n\nconst absorbInheritedMethods = (\n context: ModuleContext,\n resolved: { klass: GirClass; namespaceName: string },\n accumulator: InheritedMethods,\n): void => {\n const { returnTypes, definitions } = accumulator;\n\n for (const method of resolved.klass.methods) {\n if (!method.introspectable) {\n continue;\n }\n\n const name = camelCase(method.name);\n\n if (returnTypes.has(name)) {\n continue;\n }\n\n definitions.set(name, { method, namespaceName: resolved.namespaceName });\n returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));\n }\n};\n\nconst inheritedMatch = (inherited: InheritedMethods, name: string): InheritedMatch | undefined => {\n const inheritedReturn = inherited.returnTypes.get(name);\n const inheritedMethod = inherited.definitions.get(name);\n\n if (inheritedReturn === undefined || inheritedMethod === undefined) {\n return undefined;\n }\n\n return { inheritedReturn, inheritedMethod };\n};\n\nconst hasMethodConflict = (options: {\n context: ModuleContext;\n callable: GirFunction;\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n}): boolean => {\n const { context, callable, inheritedReturn, inheritedMethod } = options;\n const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);\n\n return (\n inheritedReturn !== ownReturn ||\n hasParameterEnumConflict(context, callable, inheritedMethod) ||\n inputParameters(context.library, callable).length !==\n inputParameters(context.library, inheritedMethod.method).length\n );\n};\n\nconst conflictRename = (\n context: ModuleContext,\n callable: GirFunction,\n inherited: InheritedMethods,\n className: string,\n): string | undefined => {\n if (!callable.introspectable) {\n return undefined;\n }\n\n const name = methodExportName(callable);\n\n if (RESERVED_SIGNAL_MEMBERS.has(name)) {\n return conflictingMethodName(className, callable.name);\n }\n\n const match = inheritedMatch(inherited, name);\n\n if (match === undefined) {\n return undefined;\n }\n\n const hasConflict = hasMethodConflict({ context, callable, ...match });\n\n return hasConflict ? conflictingMethodName(className, callable.name) : undefined;\n};\n\nconst conflictingMethodName = (className: string, methodName: string): string =>\n `${lowerFirst(className)}${pascalCase(methodName)}`;\n\nconst reservedSignalMemberRename = (className: string, callable: GirFunction): string | undefined =>\n RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))\n ? conflictingMethodName(className, callable.name)\n : undefined;\n\nconst hasEnumConflict = (\n context: ModuleContext,\n ownRef: TypeId | undefined,\n inheritedRef: TypeId | undefined,\n): boolean => {\n const ownEnum = enumIdentity(context, ownRef);\n const inheritedEnum = enumIdentity(context, inheritedRef);\n\n return ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum;\n};\n\nconst hasParameterEnumConflict = (context: ModuleContext, own: GirFunction, inherited: InheritedMethod): boolean => {\n const ownParams = inputParameters(context.library, own);\n const inheritedParams = inputParameters(context.library, inherited.method);\n const count = Math.min(ownParams.length, inheritedParams.length);\n\n for (let index = 0; index < count; index += 1) {\n const ownParam = ownParams[index];\n const inheritedParam = inheritedParams[index];\n\n if (\n ownParam !== undefined &&\n inheritedParam !== undefined &&\n hasEnumConflict(context, ownParam.parameter.type, inheritedParam.parameter.type)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = context.library.typeFor(ref);\n\n if (resolved?.kind !== \"enum\") {\n return undefined;\n }\n\n return `${resolved.namespace.name}.${resolved.value.name}`;\n};\n\nexport {\n resolveImplementedInterface,\n resolvePrerequisiteReference,\n forEachAncestor,\n collectInterfaceProperties,\n collectInterfaceMergeOmissions,\n collectInheritedPropertyTypes,\n collectInheritedMethods,\n conflictRename,\n reservedSignalMemberRename,\n type OwnedProperty,\n type InheritedMethods,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../../src/analysis/inheritance.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, lowerFirst, pascalCase, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { ancestorChain, type ResolvedAncestor, resolveInterfaces } from \"../gir/ancestry.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { resolveAccessorType } from \"../store/gi/property-accessor.js\";\nimport { vfuncMemberNames } from \"../store/gi/vtable.js\";\nimport { inputParameters } from \"./param-structure.js\";\nimport { renderTsType } from \"./ts-type.js\";\n\ntype AncestryContext = {\n library: Library;\n namespace: { name: string };\n};\n\ntype OwnedProperty = { owner: GirClass; property: GirProperty };\ntype MethodSignature = { returnType: string; arity: number };\n\ntype InheritedMethod = {\n method: GirFunction;\n namespaceName: string;\n};\n\ntype InheritedMethods = {\n returnTypes: Map<string, string>;\n definitions: Map<string, InheritedMethod>;\n};\n\ntype InheritedMatch = {\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n};\n\nconst RESERVED_SIGNAL_MEMBERS = new Set([\n \"connect\",\n \"disconnect\",\n \"emit\",\n \"on\",\n \"once\",\n \"off\",\n \"addEventListener\",\n \"removeEventListener\",\n]);\n\nconst resolveDirectInterfaces = (\n context: AncestryContext,\n klass: GirClass,\n defaultNamespace: string,\n): ResolvedAncestor[] => resolveInterfaces(context.library, defaultNamespace, klass.implements);\n\nconst resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {\n const resolved = context.library.resolveType(context.namespace.name, name);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n if (resolved.kind !== \"interface\" && resolved.kind !== \"class\") {\n return undefined;\n }\n\n return context.qualify(resolved.namespace.name, pascalCase(resolved.value.name));\n};\n\nconst forEachAncestor = (\n context: AncestryContext,\n klass: GirClass,\n visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void,\n shouldStop: (ancestor: GirClass) => boolean = () => false,\n): void => {\n let isFirst = true;\n\n for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {\n if (isFirst) {\n isFirst = false;\n continue;\n }\n\n if (shouldStop(ancestor.klass)) {\n break;\n }\n\n visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));\n }\n};\n\nconst visitInterfaceProperties = (\n interfaces: ResolvedAncestor[],\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n for (const iface of interfaces) {\n for (const property of iface.klass.properties) {\n visit(iface.klass, property);\n }\n }\n};\n\nconst forEachInheritedProperty = (\n context: ModuleContext,\n klass: GirClass,\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n for (const property of ancestor.klass.properties) {\n visit(ancestor.klass, property);\n }\n\n visitInterfaceProperties(interfaces, visit);\n });\n};\n\nconst collectSeenPropertyNames = (context: ModuleContext, klass: GirClass): Set<string> => {\n const seen: Set<string> = new Set();\n\n for (const property of klass.properties) {\n seen.add(toCamelIdentifier(property.name));\n }\n\n forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));\n\n return seen;\n};\n\nconst collectNewInterfaceProperties = (iface: ResolvedAncestor, seen: Set<string>): OwnedProperty[] => {\n const result: OwnedProperty[] = [];\n\n for (const property of iface.klass.properties) {\n const name = toCamelIdentifier(property.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n result.push({ owner: iface.klass, property });\n }\n\n return result;\n};\n\nconst collectInterfaceProperties = (context: ModuleContext, klass: GirClass): OwnedProperty[] => {\n const seen = collectSeenPropertyNames(context, klass);\n const result: OwnedProperty[] = [];\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n result.push(...collectNewInterfaceProperties(iface, seen));\n }\n\n return result;\n};\n\nconst recordAncestorSignatures = (\n context: ModuleContext,\n klass: GirClass,\n signatures: Map<string, MethodSignature>,\n): void => {\n for (const method of klass.methods) {\n const name = camelCase(method.name);\n\n if (!method.introspectable || signatures.has(name)) {\n continue;\n }\n\n signatures.set(name, {\n returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),\n arity: inputParameters(context.library, method).length,\n });\n }\n};\n\nconst ancestorClassMethodSignatures = (context: ModuleContext, klass: GirClass): Map<string, MethodSignature> => {\n const signatures: Map<string, MethodSignature> = new Map();\n\n forEachAncestor(context, klass, (ancestor) => {\n recordAncestorSignatures(context, ancestor.klass, signatures);\n });\n\n return signatures;\n};\n\nconst mergeOmissionName = (\n context: ModuleContext,\n method: GirFunction,\n ancestors: Map<string, MethodSignature>,\n): string | undefined => {\n if (!method.introspectable) {\n return undefined;\n }\n\n const name = camelCase(method.name);\n const ancestor = ancestors.get(name);\n\n if (ancestor === undefined) {\n return undefined;\n }\n\n const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);\n const arity = inputParameters(context.library, method).length;\n\n return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;\n};\n\nconst classChainVfuncNames = (context: ModuleContext, klass: GirClass): Set<string> => {\n const names: Set<string> = new Set(vfuncMemberNames(context, context.namespace.name, klass));\n\n forEachAncestor(context, klass, (ancestor) => {\n for (const name of vfuncMemberNames(context, ancestor.namespaceName, ancestor.klass)) {\n names.add(name);\n }\n });\n\n return names;\n};\n\nconst methodMergeOmissions = (context: ModuleContext, klass: GirClass, iface: GirClass): string[] => {\n const ancestors = ancestorClassMethodSignatures(context, klass);\n\n return iface.methods\n .map((method) => mergeOmissionName(context, method, ancestors))\n .filter((name): name is string => name !== undefined);\n};\n\nconst vfuncMergeOmissions = (\n context: ModuleContext,\n klass: GirClass,\n iface: { klass: GirClass; namespaceName: string },\n): string[] => {\n const claimed = classChainVfuncNames(context, klass);\n\n return vfuncMemberNames(context, iface.namespaceName, iface.klass).filter((name) => claimed.has(name));\n};\n\nconst collectInterfaceMergeOmissions = (\n context: ModuleContext,\n klass: GirClass,\n iface: { klass: GirClass; namespaceName: string },\n): string[] => [\n ...methodMergeOmissions(context, klass, iface.klass),\n ...vfuncMergeOmissions(context, klass, iface),\n];\n\nconst collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {\n const types: Map<string, string> = new Map();\n\n const record = (owner: GirClass, property: GirProperty): void => {\n const jsName = toCamelIdentifier(property.name);\n\n if (types.has(jsName)) {\n return;\n }\n\n const tsType = resolveAccessorType(context, property, owner.methods);\n\n if (tsType !== undefined) {\n types.set(jsName, tsType);\n }\n };\n\n forEachInheritedProperty(context, klass, record);\n\n return types;\n};\n\nconst collectInheritedMethods = (context: ModuleContext, klass: GirClass): InheritedMethods => {\n const accumulator: InheritedMethods = {\n returnTypes: new Map<string, string>(),\n definitions: new Map<string, InheritedMethod>(),\n };\n\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n absorbInheritedMethods(context, ancestor, accumulator);\n\n for (const iface of interfaces) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n });\n\n return accumulator;\n};\n\nconst absorbInheritedMethods = (\n context: ModuleContext,\n resolved: { klass: GirClass; namespaceName: string },\n accumulator: InheritedMethods,\n): void => {\n const { returnTypes, definitions } = accumulator;\n\n for (const method of resolved.klass.methods) {\n if (!method.introspectable) {\n continue;\n }\n\n const name = camelCase(method.name);\n\n if (returnTypes.has(name)) {\n continue;\n }\n\n definitions.set(name, { method, namespaceName: resolved.namespaceName });\n returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));\n }\n};\n\nconst inheritedMatch = (inherited: InheritedMethods, name: string): InheritedMatch | undefined => {\n const inheritedReturn = inherited.returnTypes.get(name);\n const inheritedMethod = inherited.definitions.get(name);\n\n if (inheritedReturn === undefined || inheritedMethod === undefined) {\n return undefined;\n }\n\n return { inheritedReturn, inheritedMethod };\n};\n\nconst hasMethodConflict = (options: {\n context: ModuleContext;\n callable: GirFunction;\n inheritedReturn: string;\n inheritedMethod: InheritedMethod;\n}): boolean => {\n const { context, callable, inheritedReturn, inheritedMethod } = options;\n const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);\n\n return (\n inheritedReturn !== ownReturn ||\n hasParameterEnumConflict(context, callable, inheritedMethod) ||\n inputParameters(context.library, callable).length !==\n inputParameters(context.library, inheritedMethod.method).length\n );\n};\n\nconst conflictRename = (\n context: ModuleContext,\n callable: GirFunction,\n inherited: InheritedMethods,\n className: string,\n): string | undefined => {\n if (!callable.introspectable) {\n return undefined;\n }\n\n const name = methodExportName(callable);\n\n if (RESERVED_SIGNAL_MEMBERS.has(name)) {\n return conflictingMethodName(className, callable.name);\n }\n\n const match = inheritedMatch(inherited, name);\n\n if (match === undefined) {\n return undefined;\n }\n\n const hasConflict = hasMethodConflict({ context, callable, ...match });\n\n return hasConflict ? conflictingMethodName(className, callable.name) : undefined;\n};\n\nconst conflictingMethodName = (className: string, methodName: string): string =>\n `${lowerFirst(className)}${pascalCase(methodName)}`;\n\nconst reservedSignalMemberRename = (className: string, callable: GirFunction): string | undefined =>\n RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))\n ? conflictingMethodName(className, callable.name)\n : undefined;\n\nconst hasEnumConflict = (\n context: ModuleContext,\n ownRef: TypeId | undefined,\n inheritedRef: TypeId | undefined,\n): boolean => {\n const ownEnum = enumIdentity(context, ownRef);\n const inheritedEnum = enumIdentity(context, inheritedRef);\n\n return ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum;\n};\n\nconst hasParameterEnumConflict = (context: ModuleContext, own: GirFunction, inherited: InheritedMethod): boolean => {\n const ownParams = inputParameters(context.library, own);\n const inheritedParams = inputParameters(context.library, inherited.method);\n const count = Math.min(ownParams.length, inheritedParams.length);\n\n for (let index = 0; index < count; index += 1) {\n const ownParam = ownParams[index];\n const inheritedParam = inheritedParams[index];\n\n if (\n ownParam !== undefined &&\n inheritedParam !== undefined &&\n hasEnumConflict(context, ownParam.parameter.type, inheritedParam.parameter.type)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = context.library.typeFor(ref);\n\n if (resolved?.kind !== \"enum\") {\n return undefined;\n }\n\n return `${resolved.namespace.name}.${resolved.value.name}`;\n};\n\nexport {\n resolvePrerequisiteReference,\n forEachAncestor,\n collectInterfaceProperties,\n collectInterfaceMergeOmissions,\n collectInheritedPropertyTypes,\n collectInheritedMethods,\n conflictRename,\n reservedSignalMemberRename,\n type InheritedMethods,\n};\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Library } from "../gir/library.js";
|
|
2
|
+
import type { GirCallable, GirParameter } from "../gir/parameter.js";
|
|
3
|
+
declare const nulTerminatedByteParams: (library: Library, callable: GirCallable) => GirParameter[];
|
|
4
|
+
export { nulTerminatedByteParams };
|
|
5
|
+
//# sourceMappingURL=nul-terminated-bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nul-terminated-bytes.d.ts","sourceRoot":"","sources":["../../src/analysis/nul-terminated-bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAwBrE,QAAA,MAAM,uBAAuB,GAAI,SAAS,OAAO,EAAE,UAAU,WAAW,KAAG,YAAY,EAGlF,CAAC;AAEN,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isOutParameter } from "../gir/parameter.js";
|
|
2
|
+
import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
3
|
+
const BYTE_CATEGORIES = new Set(["int8", "uint8"]);
|
|
4
|
+
const CHAR_POINTER = /char\s*\*/;
|
|
5
|
+
const isByteElement = (library, element) => {
|
|
6
|
+
const category = primitiveCategoryFor(library, element);
|
|
7
|
+
return category !== undefined && BYTE_CATEGORIES.has(category);
|
|
8
|
+
};
|
|
9
|
+
const isNulTerminatedBytes = (library, ref) => {
|
|
10
|
+
const type = carrayFor(library, ref);
|
|
11
|
+
if (type?.arrayCType === undefined || !CHAR_POINTER.test(type.arrayCType)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return isUnboundedArray(type) && isByteElement(library, type.element);
|
|
15
|
+
};
|
|
16
|
+
const nulTerminatedByteParams = (library, callable) => callable.parameters.filter((parameter) => !isOutParameter(parameter) && isNulTerminatedBytes(library, parameter.type));
|
|
17
|
+
export { nulTerminatedByteParams };
|
|
18
|
+
//# sourceMappingURL=nul-terminated-bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nul-terminated-bytes.js","sourceRoot":"","sources":["../../src/analysis/nul-terminated-bytes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,OAAe,EAAW,EAAE;IACjE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE;IAChF,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAErC,IAAI,IAAI,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,QAAqB,EAAkB,EAAE,CACxF,QAAQ,CAAC,UAAU,CAAC,MAAM,CACtB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAC7F,CAAC;AAEN,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { GirCallable, GirParameter } from \"../gir/parameter.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { isOutParameter } from \"../gir/parameter.js\";\nimport { carrayFor, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\nconst BYTE_CATEGORIES: Set<string> = new Set([\"int8\", \"uint8\"]);\nconst CHAR_POINTER = /char\\s*\\*/;\n\nconst isByteElement = (library: Library, element: TypeId): boolean => {\n const category = primitiveCategoryFor(library, element);\n\n return category !== undefined && BYTE_CATEGORIES.has(category);\n};\n\nconst isNulTerminatedBytes = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type?.arrayCType === undefined || !CHAR_POINTER.test(type.arrayCType)) {\n return false;\n }\n\n return isUnboundedArray(type) && isByteElement(library, type.element);\n};\n\nconst nulTerminatedByteParams = (library: Library, callable: GirCallable): GirParameter[] =>\n callable.parameters.filter(\n (parameter) => !isOutParameter(parameter) && isNulTerminatedBytes(library, parameter.type),\n );\n\nexport { nulTerminatedByteParams };\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { GirCallable } from "../gir/parameter.js";
|
|
2
|
+
import type { ModuleContext } from "../writer/context.js";
|
|
3
|
+
declare const hasUnmarshalableParam: (context: ModuleContext, callable: GirCallable) => boolean;
|
|
4
|
+
export { hasUnmarshalableParam };
|
|
5
|
+
//# sourceMappingURL=param-capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-capability.d.ts","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqK1D,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,EAAE,UAAU,WAAW,KAAG,OACU,CAAC;AAE1F,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { isCallerAllocatedOut, isInoutParameter } from "../gir/parameter.js";
|
|
2
|
+
import { constructibleName } from "../store/gi/method.js";
|
|
3
|
+
import { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from "../store/gi/param-marshal.js";
|
|
4
|
+
import { isScalarRef, recordInlineSize } from "./descriptor-render.js";
|
|
5
|
+
const POINTER_DEPTH = 1;
|
|
6
|
+
const isPointerType = (context, type) => {
|
|
7
|
+
switch (type.kind) {
|
|
8
|
+
case "primitive": {
|
|
9
|
+
return type.category === "string";
|
|
10
|
+
}
|
|
11
|
+
case "record": {
|
|
12
|
+
return recordInlineSize(context, type.value) === undefined;
|
|
13
|
+
}
|
|
14
|
+
case "class":
|
|
15
|
+
case "interface":
|
|
16
|
+
case "carray":
|
|
17
|
+
case "list":
|
|
18
|
+
case "hashtable": {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
case "alias":
|
|
22
|
+
case "callback":
|
|
23
|
+
case "enum":
|
|
24
|
+
case "varargs": {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const isPointerElement = (context, element) => {
|
|
30
|
+
if (isScalarRef(context.library, element)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const type = underlyingType(context, element);
|
|
34
|
+
return type !== undefined && isPointerType(context, type);
|
|
35
|
+
};
|
|
36
|
+
const carrayIndirection = (context, type) => POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);
|
|
37
|
+
const typeIndirection = (context, type) => {
|
|
38
|
+
switch (type.kind) {
|
|
39
|
+
case "primitive": {
|
|
40
|
+
return type.category === "string" ? POINTER_DEPTH : undefined;
|
|
41
|
+
}
|
|
42
|
+
case "callback":
|
|
43
|
+
case "class":
|
|
44
|
+
case "hashtable":
|
|
45
|
+
case "interface":
|
|
46
|
+
case "list":
|
|
47
|
+
case "record": {
|
|
48
|
+
return POINTER_DEPTH;
|
|
49
|
+
}
|
|
50
|
+
case "carray": {
|
|
51
|
+
return carrayIndirection(context, type);
|
|
52
|
+
}
|
|
53
|
+
case "alias":
|
|
54
|
+
case "enum":
|
|
55
|
+
case "varargs": {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const baseIndirection = (context, ref) => {
|
|
61
|
+
if (isScalarRef(context.library, ref)) {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
const type = ref === undefined ? undefined : underlyingType(context, ref);
|
|
65
|
+
return type === undefined ? undefined : typeIndirection(context, type);
|
|
66
|
+
};
|
|
67
|
+
const declaredIndirection = (parameter) => {
|
|
68
|
+
const cType = parameter.cType;
|
|
69
|
+
if (cType === undefined) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
return cType.split("*").length - 1;
|
|
73
|
+
};
|
|
74
|
+
const marshalledIndirection = (context, parameter) => {
|
|
75
|
+
const base = baseIndirection(context, parameter.type);
|
|
76
|
+
if (base === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {
|
|
80
|
+
return base;
|
|
81
|
+
}
|
|
82
|
+
if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {
|
|
83
|
+
return base;
|
|
84
|
+
}
|
|
85
|
+
return base + POINTER_DEPTH;
|
|
86
|
+
};
|
|
87
|
+
const hasCallerSuppliedLength = (context, parameter) => {
|
|
88
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
89
|
+
return type?.kind === "carray" && type.lengthParameterIndex !== undefined;
|
|
90
|
+
};
|
|
91
|
+
const isUnbuildableCallerOut = (context, parameter) => constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);
|
|
92
|
+
const isUnmarshalableCallerOut = (context, parameter) => {
|
|
93
|
+
if (hasCallerSuppliedLength(context, parameter)) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return isUnbuildableCallerOut(context, parameter) && !parameter.optional;
|
|
97
|
+
};
|
|
98
|
+
const hasIndirectionMismatch = (context, parameter) => {
|
|
99
|
+
const declared = declaredIndirection(parameter);
|
|
100
|
+
const marshalled = marshalledIndirection(context, parameter);
|
|
101
|
+
if (declared === undefined || marshalled === undefined) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return declared !== marshalled;
|
|
105
|
+
};
|
|
106
|
+
const isTypeErasedCallback = (context, parameter) => {
|
|
107
|
+
if (parameter.closureIndex === undefined) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
111
|
+
return type?.kind === "callback" && type.value.parameters.length === 0;
|
|
112
|
+
};
|
|
113
|
+
const isUnmarshalableCallParam = (context, parameter) => {
|
|
114
|
+
if (parameter.isVarargs) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (isTypeErasedCallback(context, parameter)) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
if (parameter.direction === "in") {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (isCallerAllocatedOut(parameter)) {
|
|
124
|
+
return isUnmarshalableCallerOut(context, parameter);
|
|
125
|
+
}
|
|
126
|
+
return hasIndirectionMismatch(context, parameter);
|
|
127
|
+
};
|
|
128
|
+
const hasUnmarshalableParam = (context, callable) => callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));
|
|
129
|
+
export { hasUnmarshalableParam };
|
|
130
|
+
//# sourceMappingURL=param-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-capability.js","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirCallable, GirParameter } from \"../gir/parameter.js\";\nimport type { CArrayType, TypeId } from \"../gir/type-id.js\";\nimport type { GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { isCallerAllocatedOut, isInoutParameter } from \"../gir/parameter.js\";\nimport { constructibleName } from \"../store/gi/method.js\";\nimport { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from \"../store/gi/param-marshal.js\";\nimport { isScalarRef, recordInlineSize } from \"./descriptor-render.js\";\n\nconst POINTER_DEPTH = 1;\n\nconst isPointerType = (context: ModuleContext, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\";\n }\n case \"record\": {\n return recordInlineSize(context, type.value) === undefined;\n }\n case \"class\":\n case \"interface\":\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return true;\n }\n case \"alias\":\n case \"callback\":\n case \"enum\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isPointerElement = (context: ModuleContext, element: TypeId): boolean => {\n if (isScalarRef(context.library, element)) {\n return false;\n }\n\n const type = underlyingType(context, element);\n\n return type !== undefined && isPointerType(context, type);\n};\n\nconst carrayIndirection = (context: ModuleContext, type: CArrayType): number =>\n POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);\n\nconst typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\" ? POINTER_DEPTH : undefined;\n }\n case \"callback\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return POINTER_DEPTH;\n }\n case \"carray\": {\n return carrayIndirection(context, type);\n }\n case \"alias\":\n case \"enum\":\n case \"varargs\": {\n return undefined;\n }\n }\n};\n\nconst baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {\n if (isScalarRef(context.library, ref)) {\n return 0;\n }\n\n const type = ref === undefined ? undefined : underlyingType(context, ref);\n\n return type === undefined ? undefined : typeIndirection(context, type);\n};\n\nconst declaredIndirection = (parameter: GirParameter): number | undefined => {\n const cType = parameter.cType;\n\n if (cType === undefined) {\n return undefined;\n }\n\n return cType.split(\"*\").length - 1;\n};\n\nconst marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {\n const base = baseIndirection(context, parameter.type);\n\n if (base === undefined) {\n return undefined;\n }\n\n if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {\n return base;\n }\n\n if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {\n return base;\n }\n\n return base + POINTER_DEPTH;\n};\n\nconst hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"carray\" && type.lengthParameterIndex !== undefined;\n};\n\nconst isUnbuildableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);\n\nconst isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (hasCallerSuppliedLength(context, parameter)) {\n return true;\n }\n\n return isUnbuildableCallerOut(context, parameter) && !parameter.optional;\n};\n\nconst hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {\n const declared = declaredIndirection(parameter);\n const marshalled = marshalledIndirection(context, parameter);\n\n if (declared === undefined || marshalled === undefined) {\n return false;\n }\n\n return declared !== marshalled;\n};\n\nconst isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.closureIndex === undefined) {\n return false;\n }\n\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"callback\" && type.value.parameters.length === 0;\n};\n\nconst isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isTypeErasedCallback(context, parameter)) {\n return true;\n }\n\n if (parameter.direction === \"in\") {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return isUnmarshalableCallerOut(context, parameter);\n }\n\n return hasIndirectionMismatch(context, parameter);\n};\n\nconst hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>\n callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));\n\nexport { hasUnmarshalableParam };\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { GirFunction } from "../gir/function.js";
|
|
2
2
|
import type { Library } from "../gir/library.js";
|
|
3
3
|
import type { TypeId } from "../gir/type-id.js";
|
|
4
|
+
import type { JsDocParam } from "../writer/doc-tags.js";
|
|
4
5
|
import { type GirCallable, type GirParameter } from "../gir/parameter.js";
|
|
5
6
|
type InputParameter = {
|
|
6
7
|
parameter: GirParameter;
|
|
@@ -12,16 +13,22 @@ type HandlerResultOptions = {
|
|
|
12
13
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
|
|
13
14
|
shouldIncludeCallerAllocated: boolean;
|
|
14
15
|
isOptOut: boolean;
|
|
16
|
+
shouldExcludeOut?: (parameter: GirParameter) => boolean;
|
|
15
17
|
};
|
|
16
18
|
declare const inputParameters: (library: Library, fn: GirFunction) => InputParameter[];
|
|
17
19
|
declare const closureAndDestroyIndices: (fn: GirFunction) => Set<number>;
|
|
18
20
|
declare const emittedArgIndices: (fn: GirFunction, instanceOffset: number) => Map<number, number>;
|
|
19
|
-
declare const arrayLengthSources: (library: Library, fn:
|
|
20
|
-
declare const
|
|
21
|
-
declare const
|
|
21
|
+
declare const arrayLengthSources: (library: Library, fn: GirCallable) => Map<number, number>;
|
|
22
|
+
declare const foldedLengthIndices: (library: Library, fn: GirCallable) => Set<number>;
|
|
23
|
+
declare const foldedLengthParameters: (library: Library, fn: GirCallable) => Set<GirParameter>;
|
|
22
24
|
declare const parameterIdentifier: (parameter: GirParameter, index: number) => string;
|
|
25
|
+
declare const handlerParameters: (parameters: GirParameter[], shouldExclude?: (parameter: GirParameter) => boolean) => GirParameter[];
|
|
26
|
+
declare const documentedParameters: (library: Library, fn: GirFunction, shouldSkip?: (parameter: GirParameter) => boolean, renames?: Map<string, string>) => JsDocParam[];
|
|
27
|
+
declare const documentedHandlerParameters: (parameters: GirParameter[]) => JsDocParam[];
|
|
28
|
+
declare const handlerRenames: (parameters: GirParameter[]) => Map<string, string>;
|
|
29
|
+
declare const renamesWithInstance: (parameters: GirParameter[], instance: GirParameter | undefined) => Map<string, string>;
|
|
23
30
|
declare const renderHandlerParameters: (parameters: GirParameter[], renderType: (ref: TypeId | undefined, isNullable: boolean) => string, shouldExclude?: (parameter: GirParameter) => boolean) => string[];
|
|
24
31
|
declare const foldOutParamShape: (primary: string | undefined, outTypes: string[]) => string;
|
|
25
32
|
declare const renderHandlerResultType: (options: HandlerResultOptions) => string;
|
|
26
|
-
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources,
|
|
33
|
+
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources, foldedLengthIndices, foldedLengthParameters, parameterIdentifier, documentedParameters, documentedHandlerParameters, handlerRenames, renamesWithInstance, handlerParameters, renderHandlerParameters, foldOutParamShape, renderHandlerResultType, type InputParameter, };
|
|
27
34
|
//# sourceMappingURL=param-structure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-structure.d.ts","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAwC,MAAM,qBAAqB,CAAC;AAGhH,KAAK,cAAc,GAAG;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,KAAK,MAAM,CAAC;IACrE,4BAA4B,EAAE,OAAO,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"param-structure.d.ts","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,15 +74,6 @@ const arrayLengthSources = (library, fn) => {
|
|
|
74
74
|
}
|
|
75
75
|
return map;
|
|
76
76
|
};
|
|
77
|
-
const hasCallerAllocatedArrayLength = (library, fn) => {
|
|
78
|
-
for (const arrayIndex of arrayLengthSources(library, fn).values()) {
|
|
79
|
-
const array = fn.parameters[arrayIndex];
|
|
80
|
-
if (array !== undefined && isCallerAllocatedOut(array)) {
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
};
|
|
86
77
|
const returnArrayLengthIndices = (library, fn) => {
|
|
87
78
|
const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);
|
|
88
79
|
if (returnType?.kind !== "carray") {
|
|
@@ -101,15 +92,48 @@ const foldedLengthIndices = (library, fn) => {
|
|
|
101
92
|
}
|
|
102
93
|
return indices;
|
|
103
94
|
};
|
|
95
|
+
const foldedLengthParameters = (library, fn) => {
|
|
96
|
+
const folded = new Set();
|
|
97
|
+
for (const index of foldedLengthIndices(library, fn)) {
|
|
98
|
+
const parameter = fn.parameters[index];
|
|
99
|
+
if (parameter !== undefined) {
|
|
100
|
+
folded.add(parameter);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return folded;
|
|
104
|
+
};
|
|
104
105
|
const parameterIdentifier = (parameter, index) => {
|
|
105
106
|
if (parameter.name.length === 0) {
|
|
106
107
|
return `arg${String(index)}`;
|
|
107
108
|
}
|
|
108
109
|
return toCamelIdentifier(parameter.name);
|
|
109
110
|
};
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
.
|
|
111
|
+
const handlerParameters = (parameters, shouldExclude = () => false) => parameters.filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter));
|
|
112
|
+
const documentedParameters = (library, fn, shouldSkip = () => false, renames) => inputParameters(library, fn)
|
|
113
|
+
.filter(({ parameter }) => !shouldSkip(parameter))
|
|
114
|
+
.map(({ parameter, index }) => ({
|
|
115
|
+
name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),
|
|
116
|
+
doc: parameter.doc ?? "",
|
|
117
|
+
}))
|
|
118
|
+
.filter((entry) => entry.doc.length > 0);
|
|
119
|
+
const documentedHandlerParameters = (parameters) => handlerParameters(parameters)
|
|
120
|
+
.map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? "" }))
|
|
121
|
+
.filter((entry) => entry.doc.length > 0);
|
|
122
|
+
const handlerRenames = (parameters) => {
|
|
123
|
+
const renames = new Map();
|
|
124
|
+
for (const [index, parameter] of parameters.entries()) {
|
|
125
|
+
renames.set(parameter.name, parameterIdentifier(parameter, index));
|
|
126
|
+
}
|
|
127
|
+
return renames;
|
|
128
|
+
};
|
|
129
|
+
const renamesWithInstance = (parameters, instance) => {
|
|
130
|
+
const renames = handlerRenames(parameters);
|
|
131
|
+
if (instance !== undefined && instance.name.length > 0) {
|
|
132
|
+
renames.set(instance.name, "this");
|
|
133
|
+
}
|
|
134
|
+
return renames;
|
|
135
|
+
};
|
|
136
|
+
const renderHandlerParameters = (parameters, renderType, shouldExclude = () => false) => handlerParameters(parameters, shouldExclude).map((parameter, index) => `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`);
|
|
113
137
|
const foldOutParamShape = (primary, outTypes) => {
|
|
114
138
|
if (primary !== undefined) {
|
|
115
139
|
return `[${primary}, ${outTypes.join(", ")}]`;
|
|
@@ -141,16 +165,18 @@ const scalarResultType = (primary, isOptOut) => {
|
|
|
141
165
|
};
|
|
142
166
|
const renderHandlerResultType = (options) => {
|
|
143
167
|
const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;
|
|
168
|
+
const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);
|
|
144
169
|
const primary = shouldOmitPrimaryReturn(library, signal.returnValue)
|
|
145
170
|
? undefined
|
|
146
171
|
: renderType(signal.returnValue.type, signal.returnValue.nullable);
|
|
147
172
|
const outTypes = signal.parameters
|
|
148
|
-
.filter((parameter) => isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated })
|
|
173
|
+
.filter((parameter) => isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&
|
|
174
|
+
!shouldExcludeOut(parameter))
|
|
149
175
|
.map((parameter) => renderType(parameter.type, parameter.nullable));
|
|
150
176
|
if (outTypes.length === 0) {
|
|
151
177
|
return scalarResultType(primary, isOptOut);
|
|
152
178
|
}
|
|
153
179
|
return foldOutParamShape(primary, outTypes);
|
|
154
180
|
};
|
|
155
|
-
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources,
|
|
181
|
+
export { emittedArgIndices, inputParameters, closureAndDestroyIndices, arrayLengthSources, foldedLengthIndices, foldedLengthParameters, parameterIdentifier, documentedParameters, documentedHandlerParameters, handlerRenames, renamesWithInstance, handlerParameters, renderHandlerParameters, foldOutParamShape, renderHandlerResultType, };
|
|
156
182
|
//# sourceMappingURL=param-structure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport { isCellInout, shouldOmitPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirCallable;\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string;\n shouldIncludeCallerAllocated: boolean;\n isOptOut: boolean;\n};\n\nconst isInputParameter = (options: {\n parameter: GirParameter;\n index: number;\n lengthIndices: Set<number>;\n closureIndices: Set<number>;\n}): boolean => {\n const { parameter, index, lengthIndices, closureIndices } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n if (lengthIndices.has(index)) {\n return false;\n }\n\n return !closureIndices.has(index);\n};\n\nconst inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {\n result.push({ parameter, index });\n }\n }\n\n return result;\n};\n\nconst closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set();\n\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) {\n indices.add(parameter.closureIndex);\n }\n\n if (parameter.destroyIndex !== undefined) {\n indices.add(parameter.destroyIndex);\n }\n }\n\n return indices;\n};\n\nconst emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {\n const closureIndices = closureAndDestroyIndices(fn);\n const map: Map<number, number> = new Map();\n let emitted = instanceOffset;\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (parameter.isVarargs || closureIndices.has(index)) {\n continue;\n }\n\n map.set(index, emitted);\n emitted += 1;\n }\n\n return map;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n\n return new Set(map.keys());\n};\n\nconst carrayLengthIndex = (library: Library, ref: TypeId | undefined): number | undefined => {\n const type = ref === undefined ? undefined : library.typeFor(ref);\n\n if (type?.kind !== \"carray\") {\n return undefined;\n }\n\n return type.lengthParameterIndex;\n};\n\nconst arrayLengthSources = (library: Library, fn: GirFunction): Map<number, number> => {\n const map: Map<number, number> = new Map();\n\n for (const [index, parameter] of fn.parameters.entries()) {\n const lengthIndex = carrayLengthIndex(library, parameter.type);\n\n if (lengthIndex !== undefined) {\n map.set(lengthIndex, index);\n }\n }\n\n return map;\n};\n\nconst hasCallerAllocatedArrayLength = (library: Library, fn: GirFunction): boolean => {\n for (const arrayIndex of arrayLengthSources(library, fn).values()) {\n const array = fn.parameters[arrayIndex];\n\n if (array !== undefined && isCallerAllocatedOut(array)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);\n\n if (returnType?.kind !== \"carray\") {\n return new Set();\n }\n\n const lengthIndex = returnType.lengthParameterIndex;\n\n if (lengthIndex === undefined) {\n return new Set();\n }\n\n return new Set([lengthIndex]);\n};\n\nconst foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());\n\n for (const index of returnArrayLengthIndices(library, fn)) {\n indices.add(index);\n }\n\n return indices;\n};\n\nconst parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) {\n return `arg${String(index)}`;\n }\n\n return toCamelIdentifier(parameter.name);\n};\n\nconst renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string,\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n parameters\n .filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter))\n .map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nconst foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) {\n return `[${primary}, ${outTypes.join(\", \")}]`;\n }\n\n const [single, ...rest] = outTypes;\n\n if (single !== undefined && rest.length === 0) {\n return single;\n }\n\n return `[${outTypes.join(\", \")}]`;\n};\n\nconst isHandlerOutParameter = (options: {\n library: Library;\n parameter: GirParameter;\n shouldIncludeCallerAllocated: boolean;\n}): boolean => {\n const { library, parameter, shouldIncludeCallerAllocated } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return true;\n }\n\n if (isCellInout(library, parameter)) {\n return true;\n }\n\n return shouldIncludeCallerAllocated && isCallerAllocatedOut(parameter);\n};\n\nconst scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {\n if (primary === undefined) {\n return \"void\";\n }\n\n return isOptOut ? `${primary} | undefined` : primary;\n};\n\nconst renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;\n\n const primary = shouldOmitPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n\n const outTypes = signal.parameters\n .filter((parameter) => isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }))\n .map((parameter) => renderType(parameter.type, parameter.nullable));\n\n if (outTypes.length === 0) {\n return scalarResultType(primary, isOptOut);\n }\n\n return foldOutParamShape(primary, outTypes);\n};\n\nexport {\n emittedArgIndices,\n inputParameters,\n closureAndDestroyIndices,\n arrayLengthSources,\n hasCallerAllocatedArrayLength,\n foldedLengthIndices,\n parameterIdentifier,\n renderHandlerParameters,\n foldOutParamShape,\n renderHandlerResultType,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { JsDocParam } from \"../writer/doc-tags.js\";\nimport { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport { isCellInout, shouldOmitPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirCallable;\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string;\n shouldIncludeCallerAllocated: boolean;\n isOptOut: boolean;\n shouldExcludeOut?: (parameter: GirParameter) => boolean;\n};\n\nconst isInputParameter = (options: {\n parameter: GirParameter;\n index: number;\n lengthIndices: Set<number>;\n closureIndices: Set<number>;\n}): boolean => {\n const { parameter, index, lengthIndices, closureIndices } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n if (lengthIndices.has(index)) {\n return false;\n }\n\n return !closureIndices.has(index);\n};\n\nconst inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {\n result.push({ parameter, index });\n }\n }\n\n return result;\n};\n\nconst closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set();\n\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) {\n indices.add(parameter.closureIndex);\n }\n\n if (parameter.destroyIndex !== undefined) {\n indices.add(parameter.destroyIndex);\n }\n }\n\n return indices;\n};\n\nconst emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {\n const closureIndices = closureAndDestroyIndices(fn);\n const map: Map<number, number> = new Map();\n let emitted = instanceOffset;\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (parameter.isVarargs || closureIndices.has(index)) {\n continue;\n }\n\n map.set(index, emitted);\n emitted += 1;\n }\n\n return map;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n\n return new Set(map.keys());\n};\n\nconst carrayLengthIndex = (library: Library, ref: TypeId | undefined): number | undefined => {\n const type = ref === undefined ? undefined : library.typeFor(ref);\n\n if (type?.kind !== \"carray\") {\n return undefined;\n }\n\n return type.lengthParameterIndex;\n};\n\nconst arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {\n const map: Map<number, number> = new Map();\n\n for (const [index, parameter] of fn.parameters.entries()) {\n const lengthIndex = carrayLengthIndex(library, parameter.type);\n\n if (lengthIndex !== undefined) {\n map.set(lengthIndex, index);\n }\n }\n\n return map;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);\n\n if (returnType?.kind !== \"carray\") {\n return new Set();\n }\n\n const lengthIndex = returnType.lengthParameterIndex;\n\n if (lengthIndex === undefined) {\n return new Set();\n }\n\n return new Set([lengthIndex]);\n};\n\nconst foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());\n\n for (const index of returnArrayLengthIndices(library, fn)) {\n indices.add(index);\n }\n\n return indices;\n};\n\nconst foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {\n const folded: Set<GirParameter> = new Set();\n\n for (const index of foldedLengthIndices(library, fn)) {\n const parameter = fn.parameters[index];\n\n if (parameter !== undefined) {\n folded.add(parameter);\n }\n }\n\n return folded;\n};\n\nconst parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) {\n return `arg${String(index)}`;\n }\n\n return toCamelIdentifier(parameter.name);\n};\n\nconst handlerParameters = (\n parameters: GirParameter[],\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): GirParameter[] =>\n parameters.filter(\n (parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),\n );\n\nconst documentedParameters = (\n library: Library,\n fn: GirFunction,\n shouldSkip: (parameter: GirParameter) => boolean = () => false,\n renames?: Map<string, string>,\n): JsDocParam[] =>\n inputParameters(library, fn)\n .filter(({ parameter }) => !shouldSkip(parameter))\n .map(({ parameter, index }) => ({\n name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),\n doc: parameter.doc ?? \"\",\n }))\n .filter((entry) => entry.doc.length > 0);\n\nconst documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>\n handlerParameters(parameters)\n .map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? \"\" }))\n .filter((entry) => entry.doc.length > 0);\n\nconst handlerRenames = (parameters: GirParameter[]): Map<string, string> => {\n const renames: Map<string, string> = new Map();\n\n for (const [index, parameter] of parameters.entries()) {\n renames.set(parameter.name, parameterIdentifier(parameter, index));\n }\n\n return renames;\n};\n\nconst renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {\n const renames = handlerRenames(parameters);\n\n if (instance !== undefined && instance.name.length > 0) {\n renames.set(instance.name, \"this\");\n }\n\n return renames;\n};\n\nconst renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string,\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n handlerParameters(parameters, shouldExclude).map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nconst foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) {\n return `[${primary}, ${outTypes.join(\", \")}]`;\n }\n\n const [single, ...rest] = outTypes;\n\n if (single !== undefined && rest.length === 0) {\n return single;\n }\n\n return `[${outTypes.join(\", \")}]`;\n};\n\nconst isHandlerOutParameter = (options: {\n library: Library;\n parameter: GirParameter;\n shouldIncludeCallerAllocated: boolean;\n}): boolean => {\n const { library, parameter, shouldIncludeCallerAllocated } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return true;\n }\n\n if (isCellInout(library, parameter)) {\n return true;\n }\n\n return shouldIncludeCallerAllocated && isCallerAllocatedOut(parameter);\n};\n\nconst scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {\n if (primary === undefined) {\n return \"void\";\n }\n\n return isOptOut ? `${primary} | undefined` : primary;\n};\n\nconst renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;\n const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);\n\n const primary = shouldOmitPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n\n const outTypes = signal.parameters\n .filter(\n (parameter) =>\n isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&\n !shouldExcludeOut(parameter),\n )\n .map((parameter) => renderType(parameter.type, parameter.nullable));\n\n if (outTypes.length === 0) {\n return scalarResultType(primary, isOptOut);\n }\n\n return foldOutParamShape(primary, outTypes);\n};\n\nexport {\n emittedArgIndices,\n inputParameters,\n closureAndDestroyIndices,\n arrayLengthSources,\n foldedLengthIndices,\n foldedLengthParameters,\n parameterIdentifier,\n documentedParameters,\n documentedHandlerParameters,\n handlerRenames,\n renamesWithInstance,\n handlerParameters,\n renderHandlerParameters,\n foldOutParamShape,\n renderHandlerResultType,\n type InputParameter,\n};\n"]}
|