@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
package/src/khronos/modules.ts
CHANGED
|
@@ -1,50 +1,132 @@
|
|
|
1
1
|
import { sortStrings, sortStringsBy } from "@gtkx/utils";
|
|
2
|
-
import type {
|
|
2
|
+
import type { GlDocContext } from "./doc-context.js";
|
|
3
|
+
import type { GlEnum, GlType } from "./model.js";
|
|
3
4
|
import type { RenderedCommand } from "./render.js";
|
|
5
|
+
import type { GlSymbolProvenance } from "./select.js";
|
|
4
6
|
import { ModuleBuilder } from "../writer/module.js";
|
|
7
|
+
import { asSentence, backtick, backtickList, provenanceLines } from "./notes.js";
|
|
5
8
|
import { GL_SCALARS } from "./plan.js";
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
type EnumRow = {
|
|
11
|
+
token: GlEnum;
|
|
12
|
+
exportName: string;
|
|
13
|
+
literal: string;
|
|
14
|
+
provenance: GlSymbolProvenance;
|
|
15
|
+
};
|
|
8
16
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
17
|
+
const LIB_CONSTANT =
|
|
18
|
+
"/** The shared library the generated OpenGL bindings are loaded from. */\n" +
|
|
19
|
+
"export const LIB = \"libGL.so.1\";";
|
|
12
20
|
|
|
21
|
+
const SYNC_SUMMARY = "An opaque `GLsync` fence handle";
|
|
13
22
|
const TS_PRIMITIVES: Set<string> = new Set(["boolean", "string", "void", "number"]);
|
|
14
23
|
|
|
15
|
-
const
|
|
24
|
+
const attributionLine = (line: string): string => (line.length === 0 ? " *" : ` * ${line}`);
|
|
16
25
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
const attributionLines = (registryComment: string | undefined): string[] =>
|
|
27
|
+
registryComment === undefined
|
|
28
|
+
? []
|
|
29
|
+
: [" *", ...registryComment.split("\n").map((line) => attributionLine(line))];
|
|
30
|
+
|
|
31
|
+
const generatedHeader = (docs: GlDocContext): string =>
|
|
32
|
+
[
|
|
33
|
+
"/**",
|
|
34
|
+
" * GENERATED FILE: do not edit.",
|
|
35
|
+
" *",
|
|
36
|
+
" * Derived from the Khronos OpenGL registry (gl.xml).",
|
|
37
|
+
...attributionLines(docs.registryComment),
|
|
38
|
+
" */",
|
|
39
|
+
].join("\n");
|
|
40
|
+
|
|
41
|
+
const groupsLine = (groups: string[]): string[] => (groups.length === 0 ? [] : [` * Groups: ${backtickList(groups)}.`]);
|
|
21
42
|
|
|
22
|
-
|
|
23
|
-
|
|
43
|
+
const rangePhrase = (vendor: string | undefined): string =>
|
|
44
|
+
vendor === undefined ? "Registry enumerant block" : `Allocated from the ${backtick(vendor)} enumerant range`;
|
|
24
45
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
);
|
|
46
|
+
const rangeLine = ({ vendor, blockComment }: GlEnum): string[] => {
|
|
47
|
+
if (vendor === undefined && blockComment === undefined) {
|
|
48
|
+
return [];
|
|
29
49
|
}
|
|
30
50
|
|
|
31
|
-
|
|
51
|
+
const phrase = rangePhrase(vendor);
|
|
52
|
+
const text = blockComment === undefined ? phrase : `${phrase}: ${blockComment}`;
|
|
53
|
+
|
|
54
|
+
return [` * ${asSentence(text)}`];
|
|
32
55
|
};
|
|
33
56
|
|
|
34
|
-
const
|
|
57
|
+
const tokenNoteLines = (token: GlEnum): string[] => [
|
|
58
|
+
...groupsLine(token.groups),
|
|
59
|
+
...(token.comment === undefined ? [] : [` * Token note: ${asSentence(token.comment)}`]),
|
|
60
|
+
...(token.alias === undefined ? [] : [` * Also known as ${backtick(token.alias)}.`]),
|
|
61
|
+
...(token.valueType === undefined ? [] : [` * Tagged ${backtick(token.valueType)} in the registry.`]),
|
|
62
|
+
...rangeLine(token),
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const enumJsDoc = ({ token, provenance }: EnumRow, docs: GlDocContext): string =>
|
|
66
|
+
[
|
|
67
|
+
"/**",
|
|
68
|
+
` * ${backtick(token.name)}.`,
|
|
69
|
+
" *",
|
|
70
|
+
...provenanceLines(provenance, docs.extensionEnums.get(token.name) ?? []),
|
|
71
|
+
...tokenNoteLines(token),
|
|
72
|
+
" */",
|
|
73
|
+
].join("\n");
|
|
74
|
+
|
|
75
|
+
const renderEnumsModule = (tokens: EnumRow[], docs: GlDocContext): string => {
|
|
35
76
|
const builder = new ModuleBuilder();
|
|
36
|
-
builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
|
|
37
|
-
builder.imports.addNamed("@gtkx/native", "Handle", true);
|
|
38
77
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
78
|
+
for (const row of tokens) {
|
|
79
|
+
builder.appendDeclaration(`${enumJsDoc(row, docs)}\nexport const ${row.exportName} = ${row.literal};`);
|
|
80
|
+
}
|
|
42
81
|
|
|
43
|
-
builder.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
82
|
+
return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const scalarSentences = (alias: string, type: GlType): string[] => [
|
|
86
|
+
`The C ${backtick(alias)} scalar: ${backtick(type.declaration)}.`,
|
|
87
|
+
...(type.requires === undefined ? [] : [`Requires the ${backtick(type.requires)} header.`]),
|
|
88
|
+
...(type.comment === undefined ? [] : [`Registry note: ${asSentence(type.comment)}`]),
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
const scalarJsDoc = (alias: string, docs: GlDocContext): string => {
|
|
92
|
+
const type = docs.types.get(alias);
|
|
93
|
+
|
|
94
|
+
if (type === undefined) {
|
|
95
|
+
return `/** The C ${backtick(alias)} scalar. */`;
|
|
96
|
+
}
|
|
47
97
|
|
|
98
|
+
return `/** ${scalarSentences(alias, type).join(" ")} */`;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const syncJsDoc = (docs: GlDocContext): string => {
|
|
102
|
+
const type = docs.types.get("GLsync");
|
|
103
|
+
|
|
104
|
+
if (type === undefined) {
|
|
105
|
+
return `/** ${SYNC_SUMMARY}. */`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return `/** ${SYNC_SUMMARY}: ${backtick(type.declaration)}. */`;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const groupSummary = (group: string, isBitmask: boolean): string =>
|
|
112
|
+
isBitmask
|
|
113
|
+
? `Registry enum group ${backtick(group)}, declared as a bitmask: members are combined with \`|\`.`
|
|
114
|
+
: `Registry enum group ${backtick(group)}.`;
|
|
115
|
+
|
|
116
|
+
const memberLines = (members: string[]): string[] =>
|
|
117
|
+
members.length === 0 ? [] : [" *", ` * Members: ${backtickList(members)}.`];
|
|
118
|
+
|
|
119
|
+
const groupAliasJsDoc = (group: string, base: string, docs: GlDocContext): string =>
|
|
120
|
+
[
|
|
121
|
+
"/**",
|
|
122
|
+
` * ${groupSummary(group, docs.bitmaskGroups.has(group))}`,
|
|
123
|
+
" *",
|
|
124
|
+
` * Open and documentation-only; any ${backtick(base)} value is accepted.`,
|
|
125
|
+
...memberLines(docs.groupMembers.get(group) ?? []),
|
|
126
|
+
" */",
|
|
127
|
+
].join("\n");
|
|
128
|
+
|
|
129
|
+
const appendScalarAliases = (builder: ModuleBuilder, docs: GlDocContext): void => {
|
|
48
130
|
const seen: Set<string> = new Set();
|
|
49
131
|
|
|
50
132
|
for (const scalar of GL_SCALARS.values()) {
|
|
@@ -53,22 +135,33 @@ const renderTypesModule = (groupAliases: Map<string, string>): string => {
|
|
|
53
135
|
}
|
|
54
136
|
|
|
55
137
|
seen.add(scalar.tsAlias);
|
|
56
|
-
|
|
57
|
-
builder.appendDeclaration(
|
|
58
|
-
`/** The C \`${scalar.tsAlias}\` scalar. */\nexport type ${scalar.tsAlias} = number;`,
|
|
59
|
-
);
|
|
138
|
+
builder.appendDeclaration(`${scalarJsDoc(scalar.tsAlias, docs)}\nexport type ${scalar.tsAlias} = number;`);
|
|
60
139
|
}
|
|
140
|
+
};
|
|
61
141
|
|
|
62
|
-
|
|
142
|
+
const appendGroupAliases = (builder: ModuleBuilder, groupAliases: Map<string, string>, docs: GlDocContext): void => {
|
|
143
|
+
const sorted = sortStringsBy(groupAliases.entries(), ([key]) => key);
|
|
63
144
|
|
|
64
|
-
for (const [group, base] of
|
|
65
|
-
builder.appendDeclaration(
|
|
66
|
-
`/** Registry enum group \`${group}\`; open and documentation-only, ` +
|
|
67
|
-
`any \`${base}\` value is accepted. */\nexport type ${group} = ${base};`,
|
|
68
|
-
);
|
|
145
|
+
for (const [group, base] of sorted) {
|
|
146
|
+
builder.appendDeclaration(`${groupAliasJsDoc(group, base, docs)}\nexport type ${group} = ${base};`);
|
|
69
147
|
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const renderTypesModule = (groupAliases: Map<string, string>, docs: GlDocContext): string => {
|
|
151
|
+
const builder = new ModuleBuilder();
|
|
152
|
+
builder.imports.addNamed("@gtkx/native", "ExternalObject", true);
|
|
153
|
+
builder.imports.addNamed("@gtkx/native", "Handle", true);
|
|
154
|
+
builder.appendDeclaration(`${syncJsDoc(docs)}\nexport type GLsync = ExternalObject<Handle>;`);
|
|
155
|
+
|
|
156
|
+
builder.appendDeclaration(
|
|
157
|
+
"/** An opaque native pointer handle (e.g. a `glMapBufferRange` mapping). */\n" +
|
|
158
|
+
"export type GLpointer = ExternalObject<Handle>;",
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
appendScalarAliases(builder, docs);
|
|
162
|
+
appendGroupAliases(builder, groupAliases, docs);
|
|
70
163
|
|
|
71
|
-
return `${
|
|
164
|
+
return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
|
|
72
165
|
};
|
|
73
166
|
|
|
74
167
|
const appendTypeImports = (builder: ModuleBuilder, usedTypes: Set<string>): void => {
|
|
@@ -99,6 +192,7 @@ const renderCommandsModule = (
|
|
|
99
192
|
rendered: RenderedCommand[],
|
|
100
193
|
singulars: RenderedCommand[],
|
|
101
194
|
usedTypes: Set<string>,
|
|
195
|
+
docs: GlDocContext,
|
|
102
196
|
): string => {
|
|
103
197
|
const builder = new ModuleBuilder();
|
|
104
198
|
builder.imports.addNamed("@gtkx/runtime", "t");
|
|
@@ -109,7 +203,7 @@ const renderCommandsModule = (
|
|
|
109
203
|
appendCommandDeclarations(builder, rendered);
|
|
110
204
|
appendCommandDeclarations(builder, singulars);
|
|
111
205
|
|
|
112
|
-
return `${
|
|
206
|
+
return `${generatedHeader(docs)}\n\n${builder.toSource()}`;
|
|
113
207
|
};
|
|
114
208
|
|
|
115
|
-
export { renderEnumsModule, renderTypesModule, renderCommandsModule };
|
|
209
|
+
export { renderEnumsModule, renderTypesModule, renderCommandsModule, type EnumRow };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { lowerFirst, toCamelIdentifier } from "@gtkx/utils";
|
|
2
|
+
import type { GlExtensionAttribution } from "./extensions.js";
|
|
3
|
+
import type { GlRemoval, GlSymbolProvenance } from "./select.js";
|
|
4
|
+
|
|
5
|
+
type MetadataNotesOptions = {
|
|
6
|
+
type: string;
|
|
7
|
+
group?: string;
|
|
8
|
+
len?: string;
|
|
9
|
+
objectClass?: string;
|
|
10
|
+
kinds: string[];
|
|
11
|
+
note?: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const commandExportName = (name: string): string =>
|
|
15
|
+
toCamelIdentifier(name.startsWith("gl") ? lowerFirst(name.slice(2)) : name);
|
|
16
|
+
|
|
17
|
+
const backtick = (text: string): string => `\`${text}\``;
|
|
18
|
+
const backtickList = (values: string[]): string => values.map((value) => backtick(value)).join(", ");
|
|
19
|
+
const asSentence = (text: string): string => (text.endsWith(".") ? text : `${text}.`);
|
|
20
|
+
|
|
21
|
+
const removalPhrase = (removal: GlRemoval): string =>
|
|
22
|
+
removal.comment === undefined
|
|
23
|
+
? backtick(removal.feature)
|
|
24
|
+
: `${backtick(removal.feature)} (${removal.comment})`;
|
|
25
|
+
|
|
26
|
+
const removalLine = (provenance: GlSymbolProvenance): string => {
|
|
27
|
+
const phrases = provenance.removals.map((removal) => removalPhrase(removal)).join(", ");
|
|
28
|
+
|
|
29
|
+
return ` * Removed from the core profile by ${phrases}, then restored by ${backtick(provenance.feature)}.`;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const extensionLine = (extensions: GlExtensionAttribution[]): string => {
|
|
33
|
+
const names = backtickList(extensions.map((extension) => extension.name));
|
|
34
|
+
|
|
35
|
+
return ` * Also provided by the ${names} extension${extensions.length === 1 ? "" : "s"}.`;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const extensionNoteLines = (extensions: GlExtensionAttribution[]): string[] =>
|
|
39
|
+
extensions.flatMap((extension) =>
|
|
40
|
+
extension.notes.map((note) => ` * ${backtick(extension.name)} note: ${asSentence(note)}`));
|
|
41
|
+
|
|
42
|
+
const extensionLines = (extensions: GlExtensionAttribution[]): string[] =>
|
|
43
|
+
extensions.length === 0 ? [] : [extensionLine(extensions), ...extensionNoteLines(extensions)];
|
|
44
|
+
|
|
45
|
+
const provenanceLines = (provenance: GlSymbolProvenance, extensions: GlExtensionAttribution[]): string[] => [
|
|
46
|
+
` * Provided by ${backtick(provenance.feature)}.`,
|
|
47
|
+
...(provenance.removals.length > 0 ? [removalLine(provenance)] : []),
|
|
48
|
+
...(provenance.requireComment === undefined ? [] : [` * Registry note: ${provenance.requireComment}`]),
|
|
49
|
+
...extensionLines(extensions),
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const metadataNotes = ({ type, group, len, objectClass, kinds, note }: MetadataNotesOptions): string =>
|
|
53
|
+
[
|
|
54
|
+
backtick(type),
|
|
55
|
+
...(group === undefined ? [] : [`group ${backtick(group)}`]),
|
|
56
|
+
...(len === undefined ? [] : [`length ${backtick(len)}`]),
|
|
57
|
+
...(objectClass === undefined ? [] : [`object class ${backtick(objectClass)}`]),
|
|
58
|
+
...kinds.map((kind) => `kind ${backtick(kind)}`),
|
|
59
|
+
...(note === undefined ? [] : [note]),
|
|
60
|
+
].join(", ");
|
|
61
|
+
|
|
62
|
+
const kindDescriptions = (kinds: string[], table: Map<string, string>): string =>
|
|
63
|
+
kinds.flatMap((kind) => table.get(kind) ?? []).join(" ");
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
asSentence,
|
|
67
|
+
backtick,
|
|
68
|
+
backtickList,
|
|
69
|
+
commandExportName,
|
|
70
|
+
kindDescriptions,
|
|
71
|
+
metadataNotes,
|
|
72
|
+
type MetadataNotesOptions,
|
|
73
|
+
provenanceLines,
|
|
74
|
+
};
|
|
@@ -6,7 +6,7 @@ type ParamPair = {
|
|
|
6
6
|
param: GlParam | undefined;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
-
const paramPairAt = (plan: CommandPlan & {
|
|
9
|
+
const paramPairAt = (plan: CommandPlan & { isOk: true }, index: number): ParamPair => ({
|
|
10
10
|
paramPlan: plan.params[index],
|
|
11
11
|
param: plan.command.params[index],
|
|
12
12
|
});
|
package/src/khronos/pipeline.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { sanitizeIdentifier, sortStrings, sortStringsBy } from "@gtkx/utils";
|
|
2
|
+
import { buildDocContext, type GlDocContext } from "./doc-context.js";
|
|
3
|
+
import { buildExtensionIndex } from "./extensions.js";
|
|
2
4
|
import { type GlEnum, loadGlRegistry } from "./model.js";
|
|
3
|
-
import { renderCommandsModule, renderEnumsModule, renderTypesModule } from "./modules.js";
|
|
5
|
+
import { type EnumRow, renderCommandsModule, renderEnumsModule, renderTypesModule } from "./modules.js";
|
|
4
6
|
import { paramPairAt } from "./param-pair.js";
|
|
5
7
|
import {
|
|
6
8
|
type CommandPlan,
|
|
@@ -11,7 +13,7 @@ import {
|
|
|
11
13
|
planCommand,
|
|
12
14
|
} from "./plan.js";
|
|
13
15
|
import { deriveDeleteSingular, deriveGenSingular, renderCommand, type RenderedCommand } from "./render.js";
|
|
14
|
-
import { type GlSelection, resolveEnum, selectSubset } from "./select.js";
|
|
16
|
+
import { type GlSelection, type GlSubset, type GlSymbolProvenance, resolveEnum, selectSubset } from "./select.js";
|
|
15
17
|
|
|
16
18
|
type GlExclusion = {
|
|
17
19
|
command: string;
|
|
@@ -24,6 +26,8 @@ type GlGenerationReport = {
|
|
|
24
26
|
emittedCommands: number;
|
|
25
27
|
derivedSingulars: number;
|
|
26
28
|
exclusions: GlExclusion[];
|
|
29
|
+
enumExclusions: string[];
|
|
30
|
+
coreRemovals: GlSubset["removed"];
|
|
27
31
|
};
|
|
28
32
|
|
|
29
33
|
type GlGenerationResult = {
|
|
@@ -31,26 +35,29 @@ type GlGenerationResult = {
|
|
|
31
35
|
report: GlGenerationReport;
|
|
32
36
|
};
|
|
33
37
|
|
|
34
|
-
type GroupBearingParamPlan = Extract<ParamPlan, { kind: "scalar" | "array-in" | "ref-out" }>;
|
|
38
|
+
type GroupBearingParamPlan = Extract<ParamPlan, { kind: "scalar" | "array-in" | "ref-out" | "ref-array-out" }>;
|
|
35
39
|
|
|
36
40
|
type GlGenerationOptions = {
|
|
37
41
|
registryPath: string;
|
|
38
42
|
overrideExports: Set<string>;
|
|
39
43
|
};
|
|
40
44
|
|
|
41
|
-
type OkPlan = CommandPlan & {
|
|
45
|
+
type OkPlan = CommandPlan & { isOk: true };
|
|
42
46
|
|
|
43
47
|
type PlannedSelection = {
|
|
44
48
|
okPlans: OkPlan[];
|
|
45
|
-
planFeatures: Map<string,
|
|
49
|
+
planFeatures: Map<string, GlSymbolProvenance>;
|
|
46
50
|
exclusions: GlExclusion[];
|
|
47
51
|
};
|
|
48
52
|
|
|
49
|
-
type
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
type EnumSelection = {
|
|
54
|
+
rows: EnumRow[];
|
|
55
|
+
enumExclusions: string[];
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
type RenderedCommands = {
|
|
59
|
+
rendered: RenderedCommand[];
|
|
60
|
+
singulars: RenderedCommand[];
|
|
54
61
|
};
|
|
55
62
|
|
|
56
63
|
const BYTE_OFFSET_PARAMS: Set<string> = new Set([
|
|
@@ -103,7 +110,14 @@ const PLAN_POLICY: GlPlanPolicy = {
|
|
|
103
110
|
};
|
|
104
111
|
|
|
105
112
|
const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
|
|
106
|
-
|
|
113
|
+
|
|
114
|
+
const GROUP_BEARING_PARAM_KINDS: Set<ParamPlan["kind"]> = new Set([
|
|
115
|
+
"scalar",
|
|
116
|
+
"array-in",
|
|
117
|
+
"ref-out",
|
|
118
|
+
"ref-array-out",
|
|
119
|
+
]);
|
|
120
|
+
|
|
107
121
|
const GL_SELECTION: GlSelection = { api: "gl", version: 4.6, profile: "core" };
|
|
108
122
|
|
|
109
123
|
const enumExportName = (name: string): string =>
|
|
@@ -204,7 +218,7 @@ const planSelectedCommand = (registry: ReturnType<typeof loadGlRegistry>, name:
|
|
|
204
218
|
|
|
205
219
|
const plan = planCommand(command, PLAN_POLICY);
|
|
206
220
|
|
|
207
|
-
if (!plan.
|
|
221
|
+
if (!plan.isOk) {
|
|
208
222
|
return { command: name, reason: plan.reason };
|
|
209
223
|
}
|
|
210
224
|
|
|
@@ -213,19 +227,19 @@ const planSelectedCommand = (registry: ReturnType<typeof loadGlRegistry>, name:
|
|
|
213
227
|
|
|
214
228
|
const planSelectedCommands = (
|
|
215
229
|
registry: ReturnType<typeof loadGlRegistry>,
|
|
216
|
-
commandNames: Map<string,
|
|
230
|
+
commandNames: Map<string, GlSymbolProvenance>,
|
|
217
231
|
): PlannedSelection => {
|
|
218
232
|
const exclusions: GlExclusion[] = [];
|
|
219
233
|
const okPlans: OkPlan[] = [];
|
|
220
|
-
const planFeatures: Map<string,
|
|
234
|
+
const planFeatures: Map<string, GlSymbolProvenance> = new Map();
|
|
221
235
|
const sortedCommands = sortStringsBy(commandNames.entries(), ([key]) => key);
|
|
222
236
|
|
|
223
|
-
for (const [name,
|
|
237
|
+
for (const [name, provenance] of sortedCommands) {
|
|
224
238
|
const result = planSelectedCommand(registry, name);
|
|
225
239
|
|
|
226
|
-
if ("
|
|
240
|
+
if ("isOk" in result) {
|
|
227
241
|
okPlans.push(result);
|
|
228
|
-
planFeatures.set(name,
|
|
242
|
+
planFeatures.set(name, provenance);
|
|
229
243
|
} else {
|
|
230
244
|
exclusions.push(result);
|
|
231
245
|
}
|
|
@@ -234,22 +248,62 @@ const planSelectedCommands = (
|
|
|
234
248
|
return { okPlans, planFeatures, exclusions };
|
|
235
249
|
};
|
|
236
250
|
|
|
237
|
-
const buildEnumRows = (
|
|
238
|
-
|
|
251
|
+
const buildEnumRows = (
|
|
252
|
+
registry: ReturnType<typeof loadGlRegistry>,
|
|
253
|
+
enumNames: Map<string, GlSymbolProvenance>,
|
|
254
|
+
selection: GlSelection,
|
|
255
|
+
): EnumSelection => {
|
|
256
|
+
const rows: EnumRow[] = [];
|
|
257
|
+
const enumExclusions: string[] = [];
|
|
239
258
|
const sortedEnums = sortStringsBy(enumNames.entries(), ([key]) => key);
|
|
240
259
|
|
|
241
|
-
for (const [name,
|
|
242
|
-
const token = resolveEnum(registry, name);
|
|
260
|
+
for (const [name, provenance] of sortedEnums) {
|
|
261
|
+
const token = resolveEnum(registry, name, selection.api);
|
|
243
262
|
const literal = enumLiteral(token);
|
|
244
263
|
|
|
245
264
|
if (literal === undefined) {
|
|
246
|
-
|
|
265
|
+
enumExclusions.push(name);
|
|
266
|
+
} else {
|
|
267
|
+
rows.push({ token, exportName: enumExportName(name), literal, provenance });
|
|
247
268
|
}
|
|
269
|
+
}
|
|
248
270
|
|
|
249
|
-
|
|
271
|
+
return { rows, enumExclusions };
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
const provenanceFor = (planFeatures: Map<string, GlSymbolProvenance>, name: string): GlSymbolProvenance => {
|
|
275
|
+
const found = planFeatures.get(name);
|
|
276
|
+
|
|
277
|
+
if (found === undefined) {
|
|
278
|
+
throw new Error(`Command ${name} was planned without a selection provenance`);
|
|
250
279
|
}
|
|
251
280
|
|
|
252
|
-
return
|
|
281
|
+
return found;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const renderCommands = (
|
|
285
|
+
plans: OkPlan[],
|
|
286
|
+
planFeatures: Map<string, GlSymbolProvenance>,
|
|
287
|
+
usedTypes: Set<string>,
|
|
288
|
+
docs: GlDocContext,
|
|
289
|
+
): RenderedCommands => {
|
|
290
|
+
const rendered: RenderedCommand[] = [];
|
|
291
|
+
const singulars: RenderedCommand[] = [];
|
|
292
|
+
|
|
293
|
+
for (const plan of plans) {
|
|
294
|
+
const provenance = provenanceFor(planFeatures, plan.command.name);
|
|
295
|
+
rendered.push(renderCommand(plan, provenance, usedTypes, docs));
|
|
296
|
+
|
|
297
|
+
const singular =
|
|
298
|
+
deriveGenSingular(plan, provenance, usedTypes, docs) ??
|
|
299
|
+
deriveDeleteSingular(plan, provenance, usedTypes, docs);
|
|
300
|
+
|
|
301
|
+
if (singular !== undefined) {
|
|
302
|
+
singulars.push(singular);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return { rendered, singulars };
|
|
253
307
|
};
|
|
254
308
|
|
|
255
309
|
const claimExportName = (exportNames: Map<string, string>, name: string, owner: string): void => {
|
|
@@ -299,27 +353,24 @@ const generateGlModules = (options: GlGenerationOptions): GlGenerationResult =>
|
|
|
299
353
|
const registry = loadGlRegistry(options.registryPath);
|
|
300
354
|
const subset = selectSubset(registry, selection);
|
|
301
355
|
const { okPlans, planFeatures, exclusions } = planSelectedCommands(registry, subset.commands);
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
const singulars: RenderedCommand[] = [];
|
|
356
|
+
const { rows, enumExclusions } = buildEnumRows(registry, subset.enums, selection);
|
|
357
|
+
const groupAliases = collectGroupAliases(okPlans);
|
|
305
358
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
singulars.push(singular);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
359
|
+
const docs = buildDocContext({
|
|
360
|
+
registry,
|
|
361
|
+
extensions: buildExtensionIndex(registry, selection),
|
|
362
|
+
plans: okPlans,
|
|
363
|
+
enumRows: rows,
|
|
364
|
+
});
|
|
315
365
|
|
|
316
|
-
const
|
|
317
|
-
|
|
366
|
+
const usedTypes: Set<string> = new Set();
|
|
367
|
+
const { rendered, singulars } = renderCommands(okPlans, planFeatures, usedTypes, docs);
|
|
368
|
+
assertExportNamesDisjoint(rendered, singulars, rows, options.overrideExports);
|
|
318
369
|
|
|
319
370
|
const files: Map<string, string> = new Map([
|
|
320
|
-
["types.ts", renderTypesModule(
|
|
321
|
-
["enums.ts", renderEnumsModule(
|
|
322
|
-
["commands.ts", renderCommandsModule(rendered, singulars, usedTypes)],
|
|
371
|
+
["types.ts", renderTypesModule(groupAliases, docs)],
|
|
372
|
+
["enums.ts", renderEnumsModule(rows, docs)],
|
|
373
|
+
["commands.ts", renderCommandsModule(rendered, singulars, usedTypes, docs)],
|
|
323
374
|
]);
|
|
324
375
|
|
|
325
376
|
return {
|
|
@@ -330,6 +381,8 @@ const generateGlModules = (options: GlGenerationOptions): GlGenerationResult =>
|
|
|
330
381
|
emittedCommands: rendered.length,
|
|
331
382
|
derivedSingulars: singulars.length,
|
|
332
383
|
exclusions,
|
|
384
|
+
enumExclusions,
|
|
385
|
+
coreRemovals: subset.removed,
|
|
333
386
|
},
|
|
334
387
|
};
|
|
335
388
|
};
|
package/src/khronos/plan.ts
CHANGED
|
@@ -51,12 +51,12 @@ type GlPlanPolicy = {
|
|
|
51
51
|
|
|
52
52
|
type CommandPlan =
|
|
53
53
|
| {
|
|
54
|
-
|
|
54
|
+
isOk: true;
|
|
55
55
|
command: GlCommand;
|
|
56
56
|
params: ParamPlan[];
|
|
57
57
|
returnPlan: ReturnPlan;
|
|
58
58
|
} |
|
|
59
|
-
{
|
|
59
|
+
{ isOk: false; command: GlCommand; reason: GlExclusionReason };
|
|
60
60
|
|
|
61
61
|
type ParamOutcome = { plan: ParamPlan } | { reason: GlExclusionReason };
|
|
62
62
|
|
|
@@ -317,13 +317,13 @@ const planCommand = (command: GlCommand, policy: GlPlanPolicy): CommandPlan => {
|
|
|
317
317
|
const outcome = planParam(command, param, policy);
|
|
318
318
|
|
|
319
319
|
if ("reason" in outcome) {
|
|
320
|
-
return {
|
|
320
|
+
return { isOk: false, command, reason: outcome.reason };
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
params.push(outcome.plan);
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
-
return {
|
|
326
|
+
return { isOk: true, command, params, returnPlan: planReturn(command) };
|
|
327
327
|
};
|
|
328
328
|
|
|
329
329
|
export {
|
|
@@ -331,7 +331,6 @@ export {
|
|
|
331
331
|
parseCType,
|
|
332
332
|
planCommand,
|
|
333
333
|
type GlScalar,
|
|
334
|
-
type ParsedCType,
|
|
335
334
|
type ParamPlan,
|
|
336
335
|
type ReturnPlan,
|
|
337
336
|
type GlExclusionReason,
|