@gtkx/codegen 1.0.0-rc.3 → 1.0.0-rc.4
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 +4 -5
- package/dist/analysis/descriptor-render.d.ts +1 -3
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +14 -37
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +6 -6
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +2 -2
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +5 -7
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +3 -5
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +77 -1
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +62 -0
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +4 -4
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +4 -4
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.js +6 -6
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +5 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +2 -2
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +2 -5
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +6 -8
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -11
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +0 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/field.d.ts +0 -1
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +0 -3
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +13 -0
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +12 -0
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +0 -4
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +1 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.js +1 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +7 -12
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -19
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +1 -1
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/pipeline.js +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +2 -2
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +6 -6
- package/dist/khronos/plan.js.map +1 -1
- package/dist/react/element-config.d.ts +17 -11
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +22 -15
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +35 -17
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -2
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.js +4 -4
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +0 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +1 -5
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +25 -23
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +1 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +5 -7
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -9
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +0 -4
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +13 -16
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +0 -8
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +0 -9
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +0 -2
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +0 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +2 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +0 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +0 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/jsx.js +6 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +7 -7
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +2 -4
- package/dist/store/jsx/omitted-props.d.ts.map +1 -1
- package/dist/store/jsx/omitted-props.js +2 -4
- package/dist/store/jsx/omitted-props.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +3 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +3 -2
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.js +2 -2
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +8 -8
- package/package.json +6 -10
- package/src/analysis/descriptor-render.ts +20 -45
- package/src/analysis/descriptor.ts +13 -13
- package/src/analysis/param-structure.ts +8 -10
- package/src/analysis/ts-type.ts +4 -6
- package/src/compile.ts +2 -1
- package/src/docs/api-reference.ts +127 -4
- package/src/docs/pipeline.ts +8 -8
- package/src/docs/render.ts +7 -7
- package/src/docs/symbol-page.ts +7 -2
- package/src/fingerprint.ts +8 -13
- package/src/gi.ts +4 -11
- package/src/gir/field.ts +0 -4
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +13 -0
- package/src/gir/parameter.ts +0 -4
- package/src/gir/size.ts +0 -3
- package/src/gir/type-id.ts +2 -4
- package/src/gir/type-ref.ts +1 -1
- package/src/index.ts +18 -16
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -26
- package/src/khronos/args.ts +1 -1
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +8 -8
- package/src/react/element-config.ts +22 -19
- package/src/runner.ts +57 -39
- package/src/store/compile-store.ts +3 -4
- package/src/store/gi/callables.ts +5 -5
- package/src/store/gi/constant.ts +0 -2
- package/src/store/gi/function.ts +1 -5
- package/src/store/gi/method.ts +30 -28
- package/src/store/gi/property-accessor.ts +6 -8
- package/src/store/gi/record-field-accessor.ts +4 -10
- package/src/store/gi/record-layout.ts +0 -4
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/signal.ts +17 -17
- package/src/store/gi/value-marshalable.ts +0 -9
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +0 -6
- package/src/store/jsx/element-prop-imports.ts +7 -4
- package/src/store/jsx/element-prop-types.ts +0 -1
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/jsx.ts +7 -7
- package/src/store/jsx/metadata.ts +8 -8
- package/src/store/jsx/omitted-props.ts +2 -4
- package/src/store/jsx/pipeline.ts +5 -3
- package/src/store/jsx/props.ts +2 -2
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { computeFieldSlots, layoutOfPrimitive, } from "../../gir/size.js";
|
|
2
2
|
const POINTER_LAYOUT = { size: 8, align: 8 };
|
|
3
3
|
const recordLayoutCache = new Map();
|
|
4
|
-
// GIR carries no alignment attribute, and a type whose alignment exceeds its widest member cannot be
|
|
5
|
-
// derived from the field list: Graphene models `graphene_simd4f_t` as four `gfloat`, which computes
|
|
6
|
-
// to align 4 while the real type is a 16-byte SIMD vector. Keying the override on `c:type` keeps it
|
|
7
|
-
// to the handful of types where the XML genuinely cannot express the ABI.
|
|
8
4
|
const ALIGNMENT_OVERRIDES = new Map([
|
|
9
5
|
["graphene_simd4f_t", { size: 16, align: 16 }],
|
|
10
6
|
["graphene_simd4x4f_t", { size: 64, align: 16 }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\n// GIR carries no alignment attribute, and a type whose alignment exceeds its widest member cannot be\n// derived from the field list: Graphene models `graphene_simd4f_t` as four `gfloat`, which computes\n// to align 4 while the real type is a 16-byte SIMD vector. Keying the override on `c:type` keeps it\n// to the handful of types where the XML genuinely cannot express the ABI.\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
|
|
1
|
+
{"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
|
|
@@ -2,7 +2,7 @@ import type { TypeId } from "../../gir/type-id.js";
|
|
|
2
2
|
import type { ModuleContext } from "../../writer/context.js";
|
|
3
3
|
type WrapReturnOptions = {
|
|
4
4
|
ref: TypeId | undefined;
|
|
5
|
-
|
|
5
|
+
isNullable: boolean;
|
|
6
6
|
valueExpression: string;
|
|
7
7
|
};
|
|
8
8
|
declare const wrapReturnValue: (context: ModuleContext, options: WrapReturnOptions) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"return-wrap.d.ts","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,KAAK,iBAAiB,GAAG;IACrB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"return-wrap.d.ts","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,KAAK,iBAAiB,GAAG;IACrB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CAC3B,CAAC;AAIF,QAAA,MAAM,eAAe,GAAI,SAAS,aAAa,EAAE,SAAS,iBAAiB,KAAG,MAsC7E,CAAC;AA+CF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
|
2
2
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
3
3
|
const BIGINT_CATEGORIES = new Set(["gtype", "bigint64", "biguint64"]);
|
|
4
4
|
const wrapReturnValue = (context, options) => {
|
|
5
|
-
const { ref,
|
|
5
|
+
const { ref, isNullable, valueExpression } = options;
|
|
6
6
|
if (ref === undefined) {
|
|
7
7
|
return valueExpression;
|
|
8
8
|
}
|
|
@@ -12,7 +12,7 @@ const wrapReturnValue = (context, options) => {
|
|
|
12
12
|
}
|
|
13
13
|
switch (type.kind) {
|
|
14
14
|
case "primitive": {
|
|
15
|
-
return wrapPrimitive(type.category,
|
|
15
|
+
return wrapPrimitive(type.category, isNullable, valueExpression);
|
|
16
16
|
}
|
|
17
17
|
case "varargs": {
|
|
18
18
|
return `(${valueExpression} as unknown[])`;
|
|
@@ -24,7 +24,7 @@ const wrapReturnValue = (context, options) => {
|
|
|
24
24
|
return `(${valueExpression} as number)`;
|
|
25
25
|
}
|
|
26
26
|
case "alias": {
|
|
27
|
-
return wrapAlias(context, type.value.target,
|
|
27
|
+
return wrapAlias(context, type.value.target, isNullable, valueExpression);
|
|
28
28
|
}
|
|
29
29
|
case "carray":
|
|
30
30
|
case "class":
|
|
@@ -41,7 +41,7 @@ const wrapCallback = (context, ref, valueExpression) => context.library.nameFor(
|
|
|
41
41
|
: `(${valueExpression} as ${renderTsType(context, ref, false)})`;
|
|
42
42
|
const wrapAlias = (context, target, isNullable, valueExpression) => target === undefined
|
|
43
43
|
? valueExpression
|
|
44
|
-
: wrapReturnValue(context, { ref: target,
|
|
44
|
+
: wrapReturnValue(context, { ref: target, isNullable, valueExpression });
|
|
45
45
|
const wrapValue = (context, ref, valueExpression) => {
|
|
46
46
|
context.addRuntimeImport("fromNative");
|
|
47
47
|
const descriptor = context.hoistDescriptor(renderDescriptor(context, ref, "none"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"return-wrap.js","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAQzD,MAAM,iBAAiB,GAA2B,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAE9F,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,OAA0B,EAAU,EAAE;IACnF,MAAM,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"return-wrap.js","sourceRoot":"","sources":["../../../src/store/gi/return-wrap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\n\ntype WrapReturnOptions = {\n ref: TypeId | undefined;\n isNullable: boolean;\n valueExpression: string;\n};\n\nconst BIGINT_CATEGORIES: Set<PrimitiveCategory> = new Set([\"gtype\", \"bigint64\", \"biguint64\"]);\n\nconst wrapReturnValue = (context: ModuleContext, options: WrapReturnOptions): string => {\n const { ref, isNullable, valueExpression } = options;\n\n if (ref === undefined) {\n return valueExpression;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return wrapValue(context, ref, valueExpression);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return wrapPrimitive(type.category, isNullable, valueExpression);\n }\n case \"varargs\": {\n return `(${valueExpression} as unknown[])`;\n }\n case \"callback\": {\n return wrapCallback(context, ref, valueExpression);\n }\n case \"enum\": {\n return `(${valueExpression} as number)`;\n }\n case \"alias\": {\n return wrapAlias(context, type.value.target, isNullable, valueExpression);\n }\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return wrapValue(context, ref, valueExpression);\n }\n }\n};\n\nconst wrapCallback = (context: ModuleContext, ref: TypeId, valueExpression: string): string =>\n context.library.nameFor(ref) === undefined\n ? `(${valueExpression} as unknown[])`\n : `(${valueExpression} as ${renderTsType(context, ref, false)})`;\n\nconst wrapAlias = (\n context: ModuleContext,\n target: TypeId | undefined,\n isNullable: boolean,\n valueExpression: string,\n): string =>\n target === undefined\n ? valueExpression\n : wrapReturnValue(context, { ref: target, isNullable, valueExpression });\n\nconst wrapValue = (context: ModuleContext, ref: TypeId, valueExpression: string): string => {\n context.addRuntimeImport(\"fromNative\");\n const descriptor = context.hoistDescriptor(renderDescriptor(context, ref, \"none\"));\n\n return `(fromNative(${descriptor}, ${valueExpression}) as ${renderTsType(context, ref, false)})`;\n};\n\nconst wrapStringPrimitive = (isNullable: boolean, valueExpression: string): string =>\n `(${valueExpression} as ${isNullable ? \"string | null\" : \"string\"})`;\n\nconst wrapPrimitive = (category: PrimitiveCategory, isNullable: boolean, valueExpression: string): string => {\n if (category === \"void\") {\n return valueExpression;\n }\n\n if (category === \"string\") {\n return wrapStringPrimitive(isNullable, valueExpression);\n }\n\n if (category === \"boolean\") {\n return `Boolean(${valueExpression})`;\n }\n\n if (BIGINT_CATEGORIES.has(category)) {\n return `(${valueExpression} as bigint)`;\n }\n\n return `(${valueExpression} as number)`;\n};\n\nexport { wrapReturnValue };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA4C7D,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA4C7D,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,MAAM,EAsC5E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAC1B,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,4BAA4B,OAAO,KACpC,MAAM,EAmBR,CAAC;AAiVF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
|
package/dist/store/gi/signal.js
CHANGED
|
@@ -28,7 +28,7 @@ const renderSignalMembers = (context, klass) => {
|
|
|
28
28
|
const emitCases = signals.map((signal) => renderEmitCase(context, signal));
|
|
29
29
|
const connectDefault = isRootObject
|
|
30
30
|
? "default:\n throw new globalThis.Error(\"Unknown signal '\" + signal + \"'\");"
|
|
31
|
-
: "default:\n return super.connect(signal, handler,
|
|
31
|
+
: "default:\n return super.connect(signal, handler, isAfter);";
|
|
32
32
|
const emitDefault = isRootObject
|
|
33
33
|
? "default:\n throw new globalThis.Error(\"Unknown signal '\" + sigName + \"'\");"
|
|
34
34
|
: "default:\n return super.emit(sigName, ...args);";
|
|
@@ -37,12 +37,12 @@ const renderSignalMembers = (context, klass) => {
|
|
|
37
37
|
const emitBody = indent([...emitCases, emitDefault].join("\n"), 1);
|
|
38
38
|
const emitSwitch = `switch (getSignalBaseName(sigName)) {\n${emitBody}\n}`;
|
|
39
39
|
return [
|
|
40
|
-
renderBlock(`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE},
|
|
40
|
+
renderBlock(`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number`, connectSwitch),
|
|
41
41
|
renderBlock("emit(sigName: string, ...args: unknown[]): unknown", emitSwitch),
|
|
42
42
|
];
|
|
43
43
|
};
|
|
44
44
|
const renderSignalDeclarations = (context, klass, className, isParentlessObjectSubclass) => {
|
|
45
|
-
const base = { context, klass, className,
|
|
45
|
+
const base = { context, klass, className, isParentlessObjectSubclass };
|
|
46
46
|
const declarations = [
|
|
47
47
|
renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),
|
|
48
48
|
renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),
|
|
@@ -57,8 +57,8 @@ const renderSignalDeclarations = (context, klass, className, isParentlessObjectS
|
|
|
57
57
|
return declarations;
|
|
58
58
|
};
|
|
59
59
|
const renderSignalMap = (spec) => {
|
|
60
|
-
const { context, klass, className,
|
|
61
|
-
const extendsRefs = signalMapParentRefs(context, klass,
|
|
60
|
+
const { context, klass, className, isParentlessObjectSubclass, suffix, renderEntry } = spec;
|
|
61
|
+
const extendsRefs = signalMapParentRefs(context, klass, isParentlessObjectSubclass, suffix);
|
|
62
62
|
const extendsClause = extendsRefs.length === 0 ? "" : ` extends ${extendsRefs.join(", ")}`;
|
|
63
63
|
const signalEntries = collectClassSignals(context, klass).map((signal) => {
|
|
64
64
|
const entry = `${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`;
|
|
@@ -102,8 +102,8 @@ const renderSignalConnectInterface = (className, isRootObject) => {
|
|
|
102
102
|
const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;
|
|
103
103
|
const lines = [
|
|
104
104
|
`__signals__?: ${map};`,
|
|
105
|
-
`connect<K extends keyof ${map}>(signal: K, handler: ${map}[K],
|
|
106
|
-
`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE},
|
|
105
|
+
`connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], isAfter?: boolean): number;`,
|
|
106
|
+
`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number;`,
|
|
107
107
|
`emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K]["args"]): ${emitMap}[K]["result"];`,
|
|
108
108
|
"emit(sigName: string, ...args: unknown[]): unknown;",
|
|
109
109
|
];
|
|
@@ -113,7 +113,7 @@ const renderSignalConnectInterface = (className, isRootObject) => {
|
|
|
113
113
|
lines.push(`${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`, `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`);
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
|
-
chainable(["on", "once", "addEventListener"], ",
|
|
116
|
+
chainable(["on", "once", "addEventListener"], ", isAfter?: boolean");
|
|
117
117
|
chainable(["off", "removeEventListener"], "");
|
|
118
118
|
}
|
|
119
119
|
return renderBracedOrEmpty(`export interface ${className}`, lines.join("\n"));
|
|
@@ -126,8 +126,8 @@ const renderResultType = (context, signal, shouldIncludeCallerAllocated, isOptOu
|
|
|
126
126
|
library: context.library,
|
|
127
127
|
signal,
|
|
128
128
|
renderType: (ref, nullable) => renderTsType(context, ref, nullable),
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
shouldIncludeCallerAllocated,
|
|
130
|
+
isOptOut,
|
|
131
131
|
});
|
|
132
132
|
const renderSignalEmitEntry = (context, signal) => {
|
|
133
133
|
const args = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable), isCallerAllocatedOut);
|
|
@@ -137,7 +137,7 @@ const renderSignalEmitEntry = (context, signal) => {
|
|
|
137
137
|
const nonVarargParameters = (signal) => signal.parameters.filter((parameter) => !parameter.isVarargs);
|
|
138
138
|
const renderConnectCase = (context, signal) => {
|
|
139
139
|
const callback = renderCallback(context, signal);
|
|
140
|
-
const body = `return connectSignal(this, signal, { callback: ${callback}, handler,
|
|
140
|
+
const body = `return connectSignal(this, signal, { callback: ${callback}, handler, isAfter: isAfter ?? false });`;
|
|
141
141
|
return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);
|
|
142
142
|
};
|
|
143
143
|
const renderEmitArgLiteral = (options) => {
|
|
@@ -154,13 +154,13 @@ const renderEmitArgLiteral = (options) => {
|
|
|
154
154
|
if (isCallerAllocatedOut(parameter)) {
|
|
155
155
|
const value = renderCallerOutAllocation(context, parameter);
|
|
156
156
|
return {
|
|
157
|
-
literal: `{ type: ${descriptor}, direction: "out",
|
|
157
|
+
literal: `{ type: ${descriptor}, direction: "out", isCallerAllocated: true, value: ${value} }`,
|
|
158
158
|
nextArgIndex: argIndex,
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
161
|
if (isRecordInout(context, parameter)) {
|
|
162
162
|
return {
|
|
163
|
-
literal: `{ type: ${descriptor}, direction: "inout",
|
|
163
|
+
literal: `{ type: ${descriptor}, direction: "inout", isCallerAllocated: true, ` +
|
|
164
164
|
`value: args[${String(argIndex)}] }`,
|
|
165
165
|
nextArgIndex: argIndex + 1,
|
|
166
166
|
};
|
|
@@ -200,9 +200,6 @@ const renderCallerOutAllocation = (context, parameter) => {
|
|
|
200
200
|
};
|
|
201
201
|
const renderCallback = (context, signal) => {
|
|
202
202
|
const params = nonVarargParameters(signal);
|
|
203
|
-
// The emitted argument list prepends the instance the signal was raised on, so every index a
|
|
204
|
-
// parameter descriptor carries (an array's `sizeParamIndex`, above all) sits one slot further
|
|
205
|
-
// right than the position GIR assigned it.
|
|
206
203
|
const callbackParamDescriptors = params.map((parameter) => renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }));
|
|
207
204
|
const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);
|
|
208
205
|
const returnDescriptor = isVoid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirCallable, GirParameter } from \"../../gir/parameter.js\";\nimport type { GirProperty } from \"../../gir/property.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n isCellInout,\n renderDescriptor,\n renderParamDescriptor,\n shouldOmitPrimaryReturn,\n} from \"../../analysis/descriptor-render.js\";\nimport { tCallback, tObject, tVoid } from \"../../analysis/descriptor.js\";\nimport {\n collectInterfaceProperties,\n forEachAncestor,\n resolveImplementedInterface,\n resolvePrerequisiteReference,\n} from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { isCallerAllocatedOut, isOutParameter } from \"../../gir/parameter.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { isRecordCallerOut, isRecordInout } from \"./param-marshal.js\";\n\ntype SignalMapSpec = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n parentlessExtendsObject: boolean;\n suffix: string;\n renderEntry: (context: ModuleContext, signal: GirCallable) => string;\n};\n\ntype EmitArgOptions = {\n context: ModuleContext;\n parameter: GirParameter;\n descriptor: string;\n argIndex: number;\n};\n\ntype NamedMember = { name: string };\n\nconst SIGNAL_HANDLER_TYPE = \"(...args: any[]) => any\";\nconst SIGNALS_SUFFIX = \"Signals\";\nconst SIGNAL_EMIT_SUFFIX = \"SignalEmit\";\n\nconst renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {\n if (klass.glibGetType === undefined) {\n return [];\n }\n\n const signals = collectClassSignals(context, klass);\n\n if (signals.length === 0) {\n return [];\n }\n\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n context.addRuntimeImport(\"connectSignal\");\n context.addRuntimeImport(\"getSignalBaseName\");\n context.addRuntimeImport(\"t\");\n const connectCases = signals.map((signal) => renderConnectCase(context, signal));\n const emitCases = signals.map((signal) => renderEmitCase(context, signal));\n\n const connectDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + signal + \\\"'\\\");\"\n : \"default:\\n return super.connect(signal, handler, after);\";\n\n const emitDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + sigName + \\\"'\\\");\"\n : \"default:\\n return super.emit(sigName, ...args);\";\n\n const connectBody = indent([...connectCases, connectDefault].join(\"\\n\"), 1);\n const connectSwitch = `switch (getSignalBaseName(signal)) {\\n${connectBody}\\n}`;\n const emitBody = indent([...emitCases, emitDefault].join(\"\\n\"), 1);\n const emitSwitch = `switch (getSignalBaseName(sigName)) {\\n${emitBody}\\n}`;\n\n return [\n renderBlock(`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, after?: boolean): number`, connectSwitch),\n renderBlock(\"emit(sigName: string, ...args: unknown[]): unknown\", emitSwitch),\n ];\n};\n\nconst renderSignalDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n isParentlessObjectSubclass: boolean,\n): string[] => {\n const base = { context, klass, className, parentlessExtendsObject: isParentlessObjectSubclass };\n\n const declarations = [\n renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),\n renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),\n ];\n\n if (\n klass.glibGetType !== undefined &&\n (collectClassSignals(context, klass).length > 0 ||\n collectNotifyDetails(context, klass).length > 0 ||\n klass.implements.length > 0)\n ) {\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n declarations.push(renderSignalConnectInterface(className, isRootObject));\n }\n\n return declarations;\n};\n\nconst renderSignalMap = (spec: SignalMapSpec): string => {\n const { context, klass, className, parentlessExtendsObject, suffix, renderEntry } = spec;\n const extendsRefs = signalMapParentRefs(context, klass, parentlessExtendsObject, suffix);\n const extendsClause = extendsRefs.length === 0 ? \"\" : ` extends ${extendsRefs.join(\", \")}`;\n\n const signalEntries = collectClassSignals(context, klass).map((signal) => {\n const entry = `${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`;\n\n return suffix === SIGNALS_SUFFIX ? `${renderJsDoc(signal.doc)}${entry}` : entry;\n });\n\n const entries = [...signalEntries, ...renderNotifyDetailEntries(context, klass, suffix)];\n\n return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join(\"\\n\"));\n};\n\nconst renderNotifyDetailEntries = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {\n const notifyValue = `${gobjectObjectMapRef(context, suffix)}[\"notify\"]`;\n\n return collectNotifyDetails(context, klass).map((name) => {\n const detailedSignal = `notify::${name}`;\n\n return `${sourceStringLiteral(detailedSignal)}: ${notifyValue};`;\n });\n};\n\nconst signalMapParentRefs = (\n context: ModuleContext,\n klass: GirClass,\n isParentlessObjectSubclass: boolean,\n suffix: string,\n): string[] => {\n const parentRef = parentCompanionRef(context, klass, suffix);\n\n if (parentRef !== undefined) {\n return [parentRef];\n }\n\n if (!isParentlessObjectSubclass) {\n return [];\n }\n\n const prerequisiteRefs = klass.prerequisites\n .map((name) => resolvePrerequisiteReference(context, name))\n .filter((entry): entry is string => entry !== undefined)\n .map((entry) => `${entry}${suffix}`);\n\n if (prerequisiteRefs.length > 0) {\n return prerequisiteRefs;\n }\n\n return [gobjectObjectMapRef(context, suffix)];\n};\n\nconst gobjectObjectMapRef = (context: ModuleContext, suffix: string): string => {\n if (context.namespace.name === \"GObject\") {\n return `Object${suffix}`;\n }\n\n return `${context.addCrossNamespaceImport(\"GObject\")}.Object${suffix}`;\n};\n\nconst renderSignalConnectInterface = (className: string, isRootObject: boolean): string => {\n const map = `${className}${SIGNALS_SUFFIX}`;\n const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;\n\n const lines = [\n `__signals__?: ${map};`,\n `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], after?: boolean): number;`,\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, after?: boolean): number;`,\n `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K][\"args\"]): ${emitMap}[K][\"result\"];`,\n \"emit(sigName: string, ...args: unknown[]): unknown;\",\n ];\n\n if (!isRootObject) {\n const chainable = (methods: string[], trailing: string): void => {\n for (const method of methods) {\n lines.push(\n `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`,\n `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`,\n );\n }\n };\n\n chainable([\"on\", \"once\", \"addEventListener\"], \", after?: boolean\");\n chainable([\"off\", \"removeEventListener\"], \"\");\n }\n\n return renderBracedOrEmpty(`export interface ${className}`, lines.join(\"\\n\"));\n};\n\nconst renderSignalHandlerType = (context: ModuleContext, signal: GirCallable): string => {\n const params = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable));\n\n return `(${params.join(\", \")}) => ${renderResultType(context, signal, false, true)}`;\n};\n\nconst renderResultType = (\n context: ModuleContext,\n signal: GirCallable,\n shouldIncludeCallerAllocated: boolean,\n isOptOut: boolean,\n): string =>\n renderHandlerResultType({\n library: context.library,\n signal,\n renderType: (ref, nullable) => renderTsType(context, ref, nullable),\n includeCallerAllocated: shouldIncludeCallerAllocated,\n optOut: isOptOut,\n });\n\nconst renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {\n const args = renderHandlerParameters(\n signal.parameters,\n (ref, nullable) => renderTsType(context, ref, nullable),\n isCallerAllocatedOut,\n );\n\n const result = renderResultType(context, signal, true, false);\n\n return `{ args: [${args.join(\", \")}]; result: ${result} }`;\n};\n\nconst nonVarargParameters = (signal: GirCallable): GirParameter[] =>\n signal.parameters.filter((parameter) => !parameter.isVarargs);\n\nconst renderConnectCase = (context: ModuleContext, signal: GirCallable): string => {\n const callback = renderCallback(context, signal);\n const body = `return connectSignal(this, signal, { callback: ${callback}, handler, after: after ?? false });`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderEmitArgLiteral = (options: EmitArgOptions): { literal: string; nextArgIndex: number } => {\n const { context, parameter, descriptor, argIndex } = options;\n\n if (isOutParameter(parameter)) {\n return { literal: `{ type: ${descriptor}, direction: \"out\" }`, nextArgIndex: argIndex };\n }\n\n if (isCellInout(context.library, parameter)) {\n return {\n literal: `{ type: ${descriptor}, direction: \"inout\", value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n if (isCallerAllocatedOut(parameter)) {\n const value = renderCallerOutAllocation(context, parameter);\n\n return {\n literal: `{ type: ${descriptor}, direction: \"out\", callerAllocated: true, value: ${value} }`,\n nextArgIndex: argIndex,\n };\n }\n\n if (isRecordInout(context, parameter)) {\n return {\n literal:\n `{ type: ${descriptor}, direction: \"inout\", callerAllocated: true, ` +\n `value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n return { literal: `{ type: ${descriptor}, value: args[${String(argIndex)}] }`, nextArgIndex: argIndex + 1 };\n};\n\nconst renderEmitCase = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n if (params.some((parameter) => isCallerAllocatedOut(parameter) && !isRecordCallerOut(context, parameter))) {\n return renderUnsupportedEmitCase(signal);\n }\n\n context.addRuntimeImport(\"emitSignal\");\n let argIndex = 0;\n\n const argLiterals = params.map((parameter) => {\n const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership);\n const rendered = renderEmitArgLiteral({ context, parameter, descriptor, argIndex });\n argIndex = rendered.nextArgIndex;\n\n return rendered.literal;\n });\n\n const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);\n\n const returnArg = isVoid\n ? \"\"\n : `, ${renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership)}`;\n\n const body = `return emitSignal(this, sigName, [${argLiterals.join(\", \")}]${returnArg});`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderUnsupportedEmitCase = (signal: GirCallable): string => {\n const message = `emit() cannot allocate the caller-allocated out-parameter of '${signal.name}'`;\n\n return renderBlock(\n `case ${sourceStringLiteral(signal.name)}:`,\n `throw new globalThis.Error(${sourceStringLiteral(message)});`,\n );\n};\n\nconst renderCallerOutAllocation = (context: ModuleContext, parameter: GirParameter): string => {\n const name = parameter.type === undefined ? undefined : context.library.nameFor(parameter.type);\n\n if (name === undefined) {\n throw new Error(\"renderCallerOutAllocation: expected a named caller-allocated out-parameter\");\n }\n\n return `new ${context.qualify(name.namespaceName, name.typeName)}()`;\n};\n\nconst renderCallback = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n // The emitted argument list prepends the instance the signal was raised on, so every index a\n // parameter descriptor carries (an array's `sizeParamIndex`, above all) sits one slot further\n // right than the position GIR assigned it.\n const callbackParamDescriptors = params.map((parameter) =>\n renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }),\n );\n\n const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);\n\n const returnDescriptor = isVoid\n ? tVoid\n : renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership);\n\n const callbackArgs = [tObject(\"borrowed\"), ...callbackParamDescriptors, tVoid];\n\n return tCallback(\n callbackArgs,\n returnDescriptor,\n `{ hasDestroy: true, userDataIndex: ${String(params.length + 1)} }`,\n );\n};\n\nconst forEachInterfaceSignal = (\n context: ModuleContext,\n klass: GirClass,\n consider: (signal: GirCallable) => void,\n): void => {\n for (const implementName of klass.implements) {\n const iface = resolveImplementedInterface(context, implementName);\n\n if (iface === undefined) {\n continue;\n }\n\n for (const signal of iface.klass.signals) {\n consider(signal);\n }\n }\n};\n\nconst collectClassSignals = (context: ModuleContext, klass: GirClass): GirCallable[] => {\n const inheritedNames = collectInheritedSignalNames(context, klass);\n const seen: Set<string> = new Set();\n const result: GirCallable[] = [];\n\n const consider = (signal: GirCallable): void => {\n const name = camelCase(signal.name);\n\n if (!signal.introspectable || inheritedNames.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(signal);\n };\n\n for (const signal of klass.signals) {\n consider(signal);\n }\n\n forEachInterfaceSignal(context, klass, consider);\n\n return result;\n};\n\nconst addMemberNames = (target: Set<string>, source: GirClass, select: (source: GirClass) => NamedMember[]): void => {\n for (const member of select(source)) {\n target.add(camelCase(member.name));\n }\n};\n\nconst collectInheritedMemberNames = (\n context: ModuleContext,\n klass: GirClass,\n select: (source: GirClass) => NamedMember[],\n): Set<string> => {\n const names: Set<string> = new Set();\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n addMemberNames(names, ancestor.klass, select);\n\n for (const iface of interfaces) {\n addMemberNames(names, iface.klass, select);\n }\n });\n\n return names;\n};\n\nconst collectInheritedSignalNames = (context: ModuleContext, klass: GirClass): Set<string> =>\n collectInheritedMemberNames(context, klass, (source) => source.signals);\n\nconst collectNotifyDetails = (context: ModuleContext, klass: GirClass): string[] => {\n const inherited = collectInheritedMemberNames(context, klass, (source) => source.properties);\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n const consider = (property: GirProperty): void => {\n const name = camelCase(property.name);\n\n if (inherited.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(property.name);\n };\n\n for (const property of klass.properties) {\n consider(property);\n }\n\n for (const { property } of collectInterfaceProperties(context, klass)) {\n consider(property);\n }\n\n return result;\n};\n\nexport { renderSignalMembers, renderSignalDeclarations };\n"]}
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/store/gi/signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK7D,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,GAC1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACH,0BAA0B,EAC1B,eAAe,EACf,2BAA2B,EAC3B,4BAA4B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAoBtE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AACtD,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAExC,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAY,EAAE;IAC9E,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;IACrF,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC1C,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAC9C,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3E,MAAM,cAAc,GAAG,YAAY;QAC/B,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,+DAA+D,CAAC;IAEtE,MAAM,WAAW,GAAG,YAAY;QAC5B,CAAC,CAAC,mFAAmF;QACrF,CAAC,CAAC,oDAAoD,CAAC;IAE3D,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,yCAAyC,WAAW,KAAK,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,0CAA0C,QAAQ,KAAK,CAAC;IAE3E,OAAO;QACH,WAAW,CACP,oCAAoC,mBAAmB,8BAA8B,EACrF,aAAa,CAChB;QACD,WAAW,CAAC,oDAAoD,EAAE,UAAU,CAAC;KAChF,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,OAAsB,EACtB,KAAe,EACf,SAAiB,EACjB,0BAAmC,EAC3B,EAAE;IACV,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;IAEvE,MAAM,YAAY,GAAG;QACjB,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;QAC1F,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;KAC/F,CAAC;IAEF,IACI,KAAK,CAAC,WAAW,KAAK,SAAS;QAC/B,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;YAC3C,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;YAC/C,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAClC,CAAC;QACC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;QACrF,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAU,EAAE;IACpD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC5F,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAC5F,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAE3F,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACrE,MAAM,KAAK,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;QAEtF,OAAO,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzF,OAAO,mBAAmB,CAAC,oBAAoB,SAAS,GAAG,MAAM,GAAG,aAAa,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAE,MAAc,EAAY,EAAE;IACpG,MAAM,WAAW,GAAG,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC;IAExE,OAAO,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACrD,MAAM,cAAc,GAAG,WAAW,IAAI,EAAE,CAAC;QAEzC,OAAO,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,WAAW,GAAG,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,KAAe,EACf,0BAAmC,EACnC,MAAc,EACN,EAAE;IACV,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE7D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa;SACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1D,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SACvD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,MAAc,EAAU,EAAE;IAC3E,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,SAAS,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,UAAU,MAAM,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,SAAiB,EAAE,YAAqB,EAAU,EAAE;IACtF,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,cAAc,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,SAAS,GAAG,kBAAkB,EAAE,CAAC;IAEpD,MAAM,KAAK,GAAG;QACV,iBAAiB,GAAG,GAAG;QACvB,2BAA2B,GAAG,yBAAyB,GAAG,kCAAkC;QAC5F,oCAAoC,mBAAmB,+BAA+B;QACtF,wBAAwB,OAAO,0BAA0B,OAAO,iBAAiB,OAAO,gBAAgB;QACxG,qDAAqD;KACxD,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,CAAC,OAAiB,EAAE,QAAgB,EAAQ,EAAE;YAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CACN,GAAG,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,MAAM,QAAQ,UAAU,EACpF,GAAG,MAAM,6BAA6B,mBAAmB,GAAG,QAAQ,UAAU,CACjF,CAAC;YACN,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAC;QACrE,SAAS,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,mBAAmB,CAAC,oBAAoB,SAAS,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAsB,EAAE,MAAmB,EAAU,EAAE;IACpF,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnH,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,MAAmB,EACnB,4BAAqC,EACrC,QAAiB,EACX,EAAE,CACR,uBAAuB,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,MAAM;IACN,UAAU,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC;IACnE,4BAA4B;IAC5B,QAAQ;CACX,CAAC,CAAC;AAEP,MAAM,qBAAqB,GAAG,CAAC,OAAsB,EAAE,MAAmB,EAAU,EAAE;IAClF,MAAM,IAAI,GAAG,uBAAuB,CAChC,MAAM,CAAC,UAAU,EACjB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,EACvD,oBAAoB,CACvB,CAAC;IAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE9D,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,MAAM,IAAI,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAmB,EAAkB,EAAE,CAChE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAElE,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,MAAmB,EAAU,EAAE;IAC9E,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,kDAAkD,QAAQ,0CAA0C,CAAC;IAElH,OAAO,WAAW,CAAC,QAAQ,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAuB,EAA6C,EAAE;IAChG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7D,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,sBAAsB,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO;YACH,OAAO,EAAE,WAAW,UAAU,qCAAqC,MAAM,CAAC,QAAQ,CAAC,KAAK;YACxF,YAAY,EAAE,QAAQ,GAAG,CAAC;SAC7B,CAAC;IACN,CAAC;IAED,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE5D,OAAO;YACH,OAAO,EAAE,WAAW,UAAU,uDAAuD,KAAK,IAAI;YAC9F,YAAY,EAAE,QAAQ;SACzB,CAAC;IACN,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO;YACH,OAAO,EACH,WAAW,UAAU,iDAAiD;gBACtE,eAAe,MAAM,CAAC,QAAQ,CAAC,KAAK;YACxC,YAAY,EAAE,QAAQ,GAAG,CAAC;SAC7B,CAAC;IACN,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,UAAU,iBAAiB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC;AAChH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,MAAmB,EAAU,EAAE;IAC3E,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACxG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC;QAEjC,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE5E,MAAM,SAAS,GAAG,MAAM;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAEtG,MAAM,IAAI,GAAG,qCAAqC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;IAE1F,OAAO,WAAW,CAAC,QAAQ,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,MAAmB,EAAU,EAAE;IAC9D,MAAM,OAAO,GAAG,iEAAiE,MAAM,CAAC,IAAI,GAAG,CAAC;IAEhG,OAAO,WAAW,CACd,QAAQ,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAC3C,8BAA8B,mBAAmB,CAAC,OAAO,CAAC,IAAI,CACjE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,OAAsB,EAAE,SAAuB,EAAU,EAAE;IAC1F,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhG,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAClG,CAAC;IAED,OAAO,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAE,MAAmB,EAAU,EAAE;IAC3E,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CACnF,CAAC;IAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE5E,MAAM,gBAAgB,GAAG,MAAM;QAC3B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE/F,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAE/E,OAAO,SAAS,CACZ,YAAY,EACZ,gBAAgB,EAChB,sCAAsC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CACtE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,OAAsB,EACtB,KAAe,EACf,QAAuC,EACnC,EAAE;IACN,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAElE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAiB,EAAE;IACnF,MAAM,cAAc,GAAG,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnE,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,CAAC,MAAmB,EAAQ,EAAE;QAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,OAAO;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACjC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAmB,EAAE,MAAgB,EAAE,MAA2C,EAAQ,EAAE;IAChH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAChC,OAAsB,EACtB,KAAe,EACf,MAA2C,EAChC,EAAE;IACb,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;IAErC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;QACrD,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE9C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC7B,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAe,EAAE,CACzF,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAE5E,MAAM,oBAAoB,GAAG,CAAC,OAAsB,EAAE,KAAe,EAAY,EAAE;IAC/E,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,CAAC,QAAqB,EAAQ,EAAE;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACpE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC","sourcesContent":["import { camelCase, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirCallable, GirParameter } from \"../../gir/parameter.js\";\nimport type { GirProperty } from \"../../gir/property.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n isCellInout,\n renderDescriptor,\n renderParamDescriptor,\n shouldOmitPrimaryReturn,\n} from \"../../analysis/descriptor-render.js\";\nimport { tCallback, tObject, tVoid } from \"../../analysis/descriptor.js\";\nimport {\n collectInterfaceProperties,\n forEachAncestor,\n resolveImplementedInterface,\n resolvePrerequisiteReference,\n} from \"../../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { isCallerAllocatedOut, isOutParameter } from \"../../gir/parameter.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { isRecordCallerOut, isRecordInout } from \"./param-marshal.js\";\n\ntype SignalMapSpec = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n isParentlessObjectSubclass: boolean;\n suffix: string;\n renderEntry: (context: ModuleContext, signal: GirCallable) => string;\n};\n\ntype EmitArgOptions = {\n context: ModuleContext;\n parameter: GirParameter;\n descriptor: string;\n argIndex: number;\n};\n\ntype NamedMember = { name: string };\n\nconst SIGNAL_HANDLER_TYPE = \"(...args: any[]) => any\";\nconst SIGNALS_SUFFIX = \"Signals\";\nconst SIGNAL_EMIT_SUFFIX = \"SignalEmit\";\n\nconst renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {\n if (klass.glibGetType === undefined) {\n return [];\n }\n\n const signals = collectClassSignals(context, klass);\n\n if (signals.length === 0) {\n return [];\n }\n\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n context.addRuntimeImport(\"connectSignal\");\n context.addRuntimeImport(\"getSignalBaseName\");\n context.addRuntimeImport(\"t\");\n const connectCases = signals.map((signal) => renderConnectCase(context, signal));\n const emitCases = signals.map((signal) => renderEmitCase(context, signal));\n\n const connectDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + signal + \\\"'\\\");\"\n : \"default:\\n return super.connect(signal, handler, isAfter);\";\n\n const emitDefault = isRootObject\n ? \"default:\\n throw new globalThis.Error(\\\"Unknown signal '\\\" + sigName + \\\"'\\\");\"\n : \"default:\\n return super.emit(sigName, ...args);\";\n\n const connectBody = indent([...connectCases, connectDefault].join(\"\\n\"), 1);\n const connectSwitch = `switch (getSignalBaseName(signal)) {\\n${connectBody}\\n}`;\n const emitBody = indent([...emitCases, emitDefault].join(\"\\n\"), 1);\n const emitSwitch = `switch (getSignalBaseName(sigName)) {\\n${emitBody}\\n}`;\n\n return [\n renderBlock(\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number`,\n connectSwitch,\n ),\n renderBlock(\"emit(sigName: string, ...args: unknown[]): unknown\", emitSwitch),\n ];\n};\n\nconst renderSignalDeclarations = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n isParentlessObjectSubclass: boolean,\n): string[] => {\n const base = { context, klass, className, isParentlessObjectSubclass };\n\n const declarations = [\n renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),\n renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),\n ];\n\n if (\n klass.glibGetType !== undefined &&\n (collectClassSignals(context, klass).length > 0 ||\n collectNotifyDetails(context, klass).length > 0 ||\n klass.implements.length > 0)\n ) {\n const isRootObject = context.namespace.name === \"GObject\" && klass.name === \"Object\";\n declarations.push(renderSignalConnectInterface(className, isRootObject));\n }\n\n return declarations;\n};\n\nconst renderSignalMap = (spec: SignalMapSpec): string => {\n const { context, klass, className, isParentlessObjectSubclass, suffix, renderEntry } = spec;\n const extendsRefs = signalMapParentRefs(context, klass, isParentlessObjectSubclass, suffix);\n const extendsClause = extendsRefs.length === 0 ? \"\" : ` extends ${extendsRefs.join(\", \")}`;\n\n const signalEntries = collectClassSignals(context, klass).map((signal) => {\n const entry = `${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`;\n\n return suffix === SIGNALS_SUFFIX ? `${renderJsDoc(signal.doc)}${entry}` : entry;\n });\n\n const entries = [...signalEntries, ...renderNotifyDetailEntries(context, klass, suffix)];\n\n return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join(\"\\n\"));\n};\n\nconst renderNotifyDetailEntries = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {\n const notifyValue = `${gobjectObjectMapRef(context, suffix)}[\"notify\"]`;\n\n return collectNotifyDetails(context, klass).map((name) => {\n const detailedSignal = `notify::${name}`;\n\n return `${sourceStringLiteral(detailedSignal)}: ${notifyValue};`;\n });\n};\n\nconst signalMapParentRefs = (\n context: ModuleContext,\n klass: GirClass,\n isParentlessObjectSubclass: boolean,\n suffix: string,\n): string[] => {\n const parentRef = parentCompanionRef(context, klass, suffix);\n\n if (parentRef !== undefined) {\n return [parentRef];\n }\n\n if (!isParentlessObjectSubclass) {\n return [];\n }\n\n const prerequisiteRefs = klass.prerequisites\n .map((name) => resolvePrerequisiteReference(context, name))\n .filter((entry): entry is string => entry !== undefined)\n .map((entry) => `${entry}${suffix}`);\n\n if (prerequisiteRefs.length > 0) {\n return prerequisiteRefs;\n }\n\n return [gobjectObjectMapRef(context, suffix)];\n};\n\nconst gobjectObjectMapRef = (context: ModuleContext, suffix: string): string => {\n if (context.namespace.name === \"GObject\") {\n return `Object${suffix}`;\n }\n\n return `${context.addCrossNamespaceImport(\"GObject\")}.Object${suffix}`;\n};\n\nconst renderSignalConnectInterface = (className: string, isRootObject: boolean): string => {\n const map = `${className}${SIGNALS_SUFFIX}`;\n const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;\n\n const lines = [\n `__signals__?: ${map};`,\n `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], isAfter?: boolean): number;`,\n `connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, isAfter?: boolean): number;`,\n `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K][\"args\"]): ${emitMap}[K][\"result\"];`,\n \"emit(sigName: string, ...args: unknown[]): unknown;\",\n ];\n\n if (!isRootObject) {\n const chainable = (methods: string[], trailing: string): void => {\n for (const method of methods) {\n lines.push(\n `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`,\n `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`,\n );\n }\n };\n\n chainable([\"on\", \"once\", \"addEventListener\"], \", isAfter?: boolean\");\n chainable([\"off\", \"removeEventListener\"], \"\");\n }\n\n return renderBracedOrEmpty(`export interface ${className}`, lines.join(\"\\n\"));\n};\n\nconst renderSignalHandlerType = (context: ModuleContext, signal: GirCallable): string => {\n const params = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable));\n\n return `(${params.join(\", \")}) => ${renderResultType(context, signal, false, true)}`;\n};\n\nconst renderResultType = (\n context: ModuleContext,\n signal: GirCallable,\n shouldIncludeCallerAllocated: boolean,\n isOptOut: boolean,\n): string =>\n renderHandlerResultType({\n library: context.library,\n signal,\n renderType: (ref, nullable) => renderTsType(context, ref, nullable),\n shouldIncludeCallerAllocated,\n isOptOut,\n });\n\nconst renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {\n const args = renderHandlerParameters(\n signal.parameters,\n (ref, nullable) => renderTsType(context, ref, nullable),\n isCallerAllocatedOut,\n );\n\n const result = renderResultType(context, signal, true, false);\n\n return `{ args: [${args.join(\", \")}]; result: ${result} }`;\n};\n\nconst nonVarargParameters = (signal: GirCallable): GirParameter[] =>\n signal.parameters.filter((parameter) => !parameter.isVarargs);\n\nconst renderConnectCase = (context: ModuleContext, signal: GirCallable): string => {\n const callback = renderCallback(context, signal);\n const body = `return connectSignal(this, signal, { callback: ${callback}, handler, isAfter: isAfter ?? false });`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderEmitArgLiteral = (options: EmitArgOptions): { literal: string; nextArgIndex: number } => {\n const { context, parameter, descriptor, argIndex } = options;\n\n if (isOutParameter(parameter)) {\n return { literal: `{ type: ${descriptor}, direction: \"out\" }`, nextArgIndex: argIndex };\n }\n\n if (isCellInout(context.library, parameter)) {\n return {\n literal: `{ type: ${descriptor}, direction: \"inout\", value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n if (isCallerAllocatedOut(parameter)) {\n const value = renderCallerOutAllocation(context, parameter);\n\n return {\n literal: `{ type: ${descriptor}, direction: \"out\", isCallerAllocated: true, value: ${value} }`,\n nextArgIndex: argIndex,\n };\n }\n\n if (isRecordInout(context, parameter)) {\n return {\n literal:\n `{ type: ${descriptor}, direction: \"inout\", isCallerAllocated: true, ` +\n `value: args[${String(argIndex)}] }`,\n nextArgIndex: argIndex + 1,\n };\n }\n\n return { literal: `{ type: ${descriptor}, value: args[${String(argIndex)}] }`, nextArgIndex: argIndex + 1 };\n};\n\nconst renderEmitCase = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n if (params.some((parameter) => isCallerAllocatedOut(parameter) && !isRecordCallerOut(context, parameter))) {\n return renderUnsupportedEmitCase(signal);\n }\n\n context.addRuntimeImport(\"emitSignal\");\n let argIndex = 0;\n\n const argLiterals = params.map((parameter) => {\n const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership);\n const rendered = renderEmitArgLiteral({ context, parameter, descriptor, argIndex });\n argIndex = rendered.nextArgIndex;\n\n return rendered.literal;\n });\n\n const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);\n\n const returnArg = isVoid\n ? \"\"\n : `, ${renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership)}`;\n\n const body = `return emitSignal(this, sigName, [${argLiterals.join(\", \")}]${returnArg});`;\n\n return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);\n};\n\nconst renderUnsupportedEmitCase = (signal: GirCallable): string => {\n const message = `emit() cannot allocate the caller-allocated out-parameter of '${signal.name}'`;\n\n return renderBlock(\n `case ${sourceStringLiteral(signal.name)}:`,\n `throw new globalThis.Error(${sourceStringLiteral(message)});`,\n );\n};\n\nconst renderCallerOutAllocation = (context: ModuleContext, parameter: GirParameter): string => {\n const name = parameter.type === undefined ? undefined : context.library.nameFor(parameter.type);\n\n if (name === undefined) {\n throw new Error(\"renderCallerOutAllocation: expected a named caller-allocated out-parameter\");\n }\n\n return `new ${context.qualify(name.namespaceName, name.typeName)}()`;\n};\n\nconst renderCallback = (context: ModuleContext, signal: GirCallable): string => {\n const params = nonVarargParameters(signal);\n\n const callbackParamDescriptors = params.map((parameter) =>\n renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }),\n );\n\n const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);\n\n const returnDescriptor = isVoid\n ? tVoid\n : renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership);\n\n const callbackArgs = [tObject(\"borrowed\"), ...callbackParamDescriptors, tVoid];\n\n return tCallback(\n callbackArgs,\n returnDescriptor,\n `{ hasDestroy: true, userDataIndex: ${String(params.length + 1)} }`,\n );\n};\n\nconst forEachInterfaceSignal = (\n context: ModuleContext,\n klass: GirClass,\n consider: (signal: GirCallable) => void,\n): void => {\n for (const implementName of klass.implements) {\n const iface = resolveImplementedInterface(context, implementName);\n\n if (iface === undefined) {\n continue;\n }\n\n for (const signal of iface.klass.signals) {\n consider(signal);\n }\n }\n};\n\nconst collectClassSignals = (context: ModuleContext, klass: GirClass): GirCallable[] => {\n const inheritedNames = collectInheritedSignalNames(context, klass);\n const seen: Set<string> = new Set();\n const result: GirCallable[] = [];\n\n const consider = (signal: GirCallable): void => {\n const name = camelCase(signal.name);\n\n if (!signal.introspectable || inheritedNames.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(signal);\n };\n\n for (const signal of klass.signals) {\n consider(signal);\n }\n\n forEachInterfaceSignal(context, klass, consider);\n\n return result;\n};\n\nconst addMemberNames = (target: Set<string>, source: GirClass, select: (source: GirClass) => NamedMember[]): void => {\n for (const member of select(source)) {\n target.add(camelCase(member.name));\n }\n};\n\nconst collectInheritedMemberNames = (\n context: ModuleContext,\n klass: GirClass,\n select: (source: GirClass) => NamedMember[],\n): Set<string> => {\n const names: Set<string> = new Set();\n\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n addMemberNames(names, ancestor.klass, select);\n\n for (const iface of interfaces) {\n addMemberNames(names, iface.klass, select);\n }\n });\n\n return names;\n};\n\nconst collectInheritedSignalNames = (context: ModuleContext, klass: GirClass): Set<string> =>\n collectInheritedMemberNames(context, klass, (source) => source.signals);\n\nconst collectNotifyDetails = (context: ModuleContext, klass: GirClass): string[] => {\n const inherited = collectInheritedMemberNames(context, klass, (source) => source.properties);\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n const consider = (property: GirProperty): void => {\n const name = camelCase(property.name);\n\n if (inherited.has(name) || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n result.push(property.name);\n };\n\n for (const property of klass.properties) {\n consider(property);\n }\n\n for (const { property } of collectInterfaceProperties(context, klass)) {\n consider(property);\n }\n\n return result;\n};\n\nexport { renderSignalMembers, renderSignalDeclarations };\n"]}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { GirRecord } from "../../gir/record.js";
|
|
2
2
|
import type { ModuleContext } from "../../writer/context.js";
|
|
3
3
|
declare const hasOwnCopySemantics: (record: GirRecord) => boolean;
|
|
4
|
-
/**
|
|
5
|
-
* Whether a record can be copied by value. A plain struct is duplicated with a byte-wise `g_memdup2`,
|
|
6
|
-
* which shallow-copies whatever the bytes hold, so only a record whose every field is transitively a
|
|
7
|
-
* scalar can be owned, allocated or written into an inline slot. A pointer, a string, a function
|
|
8
|
-
* pointer or an opaque record makes it borrow-only. Records that carry their own copy/free pair are
|
|
9
|
-
* duplicated through that instead and never reach the byte-wise path.
|
|
10
|
-
*/
|
|
11
4
|
declare const isValueMarshalable: (context: ModuleContext, namespaceName: string, record: GirRecord) => boolean;
|
|
12
|
-
/** Whether a record can be allocated and populated from JavaScript. */
|
|
13
5
|
declare const isConstructibleRecord: (context: ModuleContext, namespaceName: string, record: GirRecord) => boolean;
|
|
14
6
|
export { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };
|
|
15
7
|
//# sourceMappingURL=value-marshalable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-marshalable.d.ts","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"value-marshalable.d.ts","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQ7D,QAAA,MAAM,mBAAmB,GAAI,QAAQ,SAAS,KAAG,OAEqE,CAAC;AAiEvH,QAAA,MAAM,kBAAkB,GAAI,SAAS,aAAa,EAAE,eAAe,MAAM,EAAE,QAAQ,SAAS,KAAG,OACb,CAAC;AAEnF,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,EAAE,eAAe,MAAM,EAAE,QAAQ,SAAS,KAAG,OACb,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/** Primitive categories that are a pointer at the C level, so copying the bytes aliases the pointee. */
|
|
2
1
|
const POINTER_CATEGORIES = new Set(["string", "pointer"]);
|
|
3
2
|
const recordKey = (namespaceName, record) => `${namespaceName}.${record.name}`;
|
|
4
3
|
const hasOwnCopySemantics = (record) => record.glibGetType !== undefined ||
|
|
@@ -52,15 +51,7 @@ function isValueSafeRecord(scope, namespaceName, record) {
|
|
|
52
51
|
scope.seen.delete(key);
|
|
53
52
|
return isSafe;
|
|
54
53
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Whether a record can be copied by value. A plain struct is duplicated with a byte-wise `g_memdup2`,
|
|
57
|
-
* which shallow-copies whatever the bytes hold, so only a record whose every field is transitively a
|
|
58
|
-
* scalar can be owned, allocated or written into an inline slot. A pointer, a string, a function
|
|
59
|
-
* pointer or an opaque record makes it borrow-only. Records that carry their own copy/free pair are
|
|
60
|
-
* duplicated through that instead and never reach the byte-wise path.
|
|
61
|
-
*/
|
|
62
54
|
const isValueMarshalable = (context, namespaceName, record) => isValueSafeRecord({ context, seen: new Set() }, namespaceName, record);
|
|
63
|
-
/** Whether a record can be allocated and populated from JavaScript. */
|
|
64
55
|
const isConstructibleRecord = (context, namespaceName, record) => hasOwnCopySemantics(record) || isValueMarshalable(context, namespaceName, record);
|
|
65
56
|
export { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };
|
|
66
57
|
//# sourceMappingURL=value-marshalable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-marshalable.js","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"AASA,
|
|
1
|
+
{"version":3,"file":"value-marshalable.js","sourceRoot":"","sources":["../../../src/store/gi/value-marshalable.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\n\ntype Scope = { context: ModuleContext; seen: Set<string> };\n\nconst POINTER_CATEGORIES: Set<PrimitiveCategory> = new Set<PrimitiveCategory>([\"string\", \"pointer\"]);\n\nconst recordKey = (namespaceName: string, record: GirRecord): string => `${namespaceName}.${record.name}`;\n\nconst hasOwnCopySemantics = (record: GirRecord): boolean =>\n record.glibGetType !== undefined ||\n ((record.glibRefFunc ?? record.copyFunc) !== undefined && (record.glibUnrefFunc ?? record.freeFunc) !== undefined);\n\nconst isValueSafeArray = (scope: Scope, type: Extract<GirType, { kind: \"carray\" }>): boolean =>\n type.fixedSize !== undefined && isValueSafeRef(scope, type.element, type.elementCType);\n\nconst isValueSafeAlias = (scope: Scope, type: Extract<GirType, { kind: \"alias\" }>): boolean =>\n isValueSafeRef(scope, type.value.target, type.value.targetCType);\n\nfunction isValueSafeType(scope: Scope, type: GirType): boolean {\n switch (type.kind) {\n case \"primitive\": {\n return !POINTER_CATEGORIES.has(type.category);\n }\n case \"enum\": {\n return true;\n }\n case \"record\": {\n return isValueSafeRecord(scope, type.namespace.name, type.value);\n }\n case \"carray\": {\n return isValueSafeArray(scope, type);\n }\n case \"alias\": {\n return isValueSafeAlias(scope, type);\n }\n case \"callback\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"varargs\": {\n return false;\n }\n }\n}\n\nfunction isValueSafeRef(scope: Scope, ref: TypeId | undefined, cType: string | undefined): boolean {\n if (ref === undefined || cType?.endsWith(\"*\") === true) {\n return false;\n }\n\n const type = scope.context.library.typeFor(ref);\n\n return type === undefined ? false : isValueSafeType(scope, type);\n}\n\nconst isValueSafeField = (scope: Scope, field: GirField): boolean =>\n field.inlineMembers === undefined\n ? isValueSafeRef(scope, field.type, field.cType)\n : field.inlineMembers.every((member) => isValueSafeField(scope, member));\n\nfunction isValueSafeRecord(scope: Scope, namespaceName: string, record: GirRecord): boolean {\n const key = recordKey(namespaceName, record);\n\n if (scope.seen.has(key) || record.fields.length === 0) {\n return false;\n }\n\n scope.seen.add(key);\n const isSafe = record.fields.every((field) => isValueSafeField(scope, field));\n scope.seen.delete(key);\n\n return isSafe;\n}\n\nconst isValueMarshalable = (context: ModuleContext, namespaceName: string, record: GirRecord): boolean =>\n isValueSafeRecord({ context, seen: new Set<string>() }, namespaceName, record);\n\nconst isConstructibleRecord = (context: ModuleContext, namespaceName: string, record: GirRecord): boolean =>\n hasOwnCopySemantics(record) || isValueMarshalable(context, namespaceName, record);\n\nexport { hasOwnCopySemantics, isConstructibleRecord, isValueMarshalable };\n"]}
|
package/dist/store/gi-store.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { type GiFingerprint } from "../fingerprint.js";
|
|
2
2
|
import { type StoreOptions } from "./store-fs.js";
|
|
3
|
-
type GiStoreOptions = StoreOptions;
|
|
4
3
|
type GiNamespaceInput = {
|
|
5
4
|
directory: string;
|
|
6
5
|
rawSource: string;
|
|
7
6
|
};
|
|
8
|
-
declare const writeGiStore: (options:
|
|
9
|
-
export { writeGiStore, type
|
|
7
|
+
declare const writeGiStore: (options: StoreOptions, namespaces: GiNamespaceInput[], fingerprint: GiFingerprint) => void;
|
|
8
|
+
export { writeGiStore, type GiNamespaceInput };
|
|
10
9
|
//# sourceMappingURL=gi-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gi-store.d.ts","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAiB,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE5F,KAAK,
|
|
1
|
+
{"version":3,"file":"gi-store.d.ts","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAiB,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE5F,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AA2DF,QAAA,MAAM,YAAY,GACd,SAAS,YAAY,EACrB,YAAY,gBAAgB,EAAE,EAC9B,aAAa,aAAa,KAC3B,IAeF,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAsB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport { buildManifest, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n};\n\ntype CollectedFile = {\n fileName: string;\n source: string;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): string[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir).filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\");\n};\n\nconst barrelSource = (directory: string): string => {\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return `export * from \"./${directory}.js\";\\n`;\n }\n\n return readFileSync(overrideIndex, \"utf8\");\n};\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n): { collected: CollectedFile[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: CollectedFile[] = [];\n\n for (const { directory, rawSource } of namespaces) {\n collected.push({\n fileName: `${directory}/${directory}.ts`,\n source: rawSource,\n });\n\n for (const file of overrideFiles(directory)) {\n collected.push({\n fileName: `${directory}/overrides/${file.replace(/\\.ejs$/, \"\")}`,\n source: readFileSync(join(OVERRIDES_ROOT, directory, file), \"utf8\"),\n });\n }\n\n collected.push({\n fileName: `${directory}/index.ts`,\n source: barrelSource(directory),\n });\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n fingerprint: GiFingerprint,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/runtime\": \"*\" },\n }),\n rawFiles: [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\\n` }],\n });\n};\n\nexport { writeGiStore, type GiNamespaceInput };\n"]}
|
|
@@ -3,12 +3,10 @@ import type { GirNamespace } from "../../gir/namespace.js";
|
|
|
3
3
|
import type { ImportsBuilder } from "../../writer/imports.js";
|
|
4
4
|
import type { LazyElementSpec } from "./element-prop-types.js";
|
|
5
5
|
import { type GlibNamedClass } from "./intrinsic-elements.js";
|
|
6
|
-
/** A component that wraps a generated element, keyed by GLib type name (built-in or user-provided). */
|
|
7
6
|
type ElementComponent = {
|
|
8
7
|
module: string;
|
|
9
8
|
export: string;
|
|
10
9
|
};
|
|
11
|
-
/** Component wrappers keyed by GLib type name; the framework's built-ins merged with the project's own. */
|
|
12
10
|
type ElementComponentOverrides = Record<string, ElementComponent>;
|
|
13
11
|
declare const generateElementComponentsSection: (targetNamespace: GirNamespace, library: Library, options: {
|
|
14
12
|
imports: ImportsBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,
|
|
1
|
+
{"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAgBlE,QAAA,MAAM,gCAAgC,GAClC,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS;IACL,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,yBAAyB,CAAC;CACzC,KACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAiB9C,CAAC;AA8FF,OAAO,EAAE,gCAAgC,EAAE,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,CAAC"}
|
|
@@ -28,9 +28,6 @@ const appendCandidateExport = (collector, candidate, options) => {
|
|
|
28
28
|
collector.exportLines.push(line);
|
|
29
29
|
collector.exportedNames.add(candidate.glibName);
|
|
30
30
|
};
|
|
31
|
-
// An abstract GType cannot be instantiated: `g_object_new` on one is a fatal GObject error rather
|
|
32
|
-
// than a NULL return. Its props interface and metadata still have to be emitted, since every
|
|
33
|
-
// concrete subclass extends them, so only the constructible component export is withheld.
|
|
34
31
|
const collectCandidateExports = (collector, options) => {
|
|
35
32
|
for (const candidate of options.intrinsicElements) {
|
|
36
33
|
if (candidate.klass.isAbstract) {
|
|
@@ -63,7 +60,6 @@ const renderCandidateExport = (candidate, library, imports, components) => {
|
|
|
63
60
|
}
|
|
64
61
|
return `${renderJsDoc(klass.doc)}${renderElementComponentExport(glibName, component)}`;
|
|
65
62
|
};
|
|
66
|
-
/** The component for the nearest ancestry match, most-derived first; user overrides win on their exact type. */
|
|
67
63
|
const resolveElementComponent = (ancestry, components) => {
|
|
68
64
|
for (const name of ancestry) {
|
|
69
65
|
const found = components[name];
|