@gtkx/gir 0.10.2 → 0.10.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/dist/types.d.ts +19 -2
- package/dist/types.js +76 -7
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -281,7 +281,7 @@ export declare const registerEnumsFromNamespace: (typeMapper: TypeMapper, namesp
|
|
|
281
281
|
/**
|
|
282
282
|
* The kind of a registered type.
|
|
283
283
|
*/
|
|
284
|
-
export type TypeKind = "class" | "interface" | "enum" | "record" | "callback";
|
|
284
|
+
export type TypeKind = "class" | "interface" | "enum" | "flags" | "record" | "callback";
|
|
285
285
|
/**
|
|
286
286
|
* A type registered in the type registry.
|
|
287
287
|
*
|
|
@@ -349,6 +349,13 @@ export declare class TypeRegistry {
|
|
|
349
349
|
* @param name - The enum name
|
|
350
350
|
*/
|
|
351
351
|
registerEnum(namespace: string, name: string): void;
|
|
352
|
+
/**
|
|
353
|
+
* Registers a flags (bitfield) type.
|
|
354
|
+
*
|
|
355
|
+
* @param namespace - The GIR namespace
|
|
356
|
+
* @param name - The flags name
|
|
357
|
+
*/
|
|
358
|
+
registerFlags(namespace: string, name: string): void;
|
|
352
359
|
/**
|
|
353
360
|
* Registers a record (boxed) type.
|
|
354
361
|
*
|
|
@@ -450,6 +457,8 @@ export type MappedType = {
|
|
|
450
457
|
export declare class TypeMapper {
|
|
451
458
|
private enumNames;
|
|
452
459
|
private enumTransforms;
|
|
460
|
+
private flagsNames;
|
|
461
|
+
private flagsTransforms;
|
|
453
462
|
private recordNames;
|
|
454
463
|
private recordTransforms;
|
|
455
464
|
private recordGlibTypes;
|
|
@@ -468,6 +477,13 @@ export declare class TypeMapper {
|
|
|
468
477
|
* @param transformedName - Optional transformed TypeScript name
|
|
469
478
|
*/
|
|
470
479
|
registerEnum(originalName: string, transformedName?: string): void;
|
|
480
|
+
/**
|
|
481
|
+
* Registers a flags (bitfield) type for type mapping.
|
|
482
|
+
*
|
|
483
|
+
* @param originalName - The GIR flags name
|
|
484
|
+
* @param transformedName - Optional transformed TypeScript name
|
|
485
|
+
*/
|
|
486
|
+
registerFlags(originalName: string, transformedName?: string): void;
|
|
471
487
|
/**
|
|
472
488
|
* Registers a record for type mapping.
|
|
473
489
|
*
|
|
@@ -499,9 +515,10 @@ export declare class TypeMapper {
|
|
|
499
515
|
*
|
|
500
516
|
* @param girType - The GIR type to map
|
|
501
517
|
* @param isReturn - Whether this is a return type (affects ownership)
|
|
518
|
+
* @param parentTransferOwnership - Transfer ownership from parent (used for array elements)
|
|
502
519
|
* @returns The mapped type with TypeScript and FFI descriptors
|
|
503
520
|
*/
|
|
504
|
-
mapType(girType: GirType, isReturn?: boolean): MappedType;
|
|
521
|
+
mapType(girType: GirType, isReturn?: boolean, parentTransferOwnership?: string): MappedType;
|
|
505
522
|
isCallback(typeName: string): boolean;
|
|
506
523
|
/**
|
|
507
524
|
* Maps a function parameter to TypeScript and FFI representations.
|
package/dist/types.js
CHANGED
|
@@ -33,7 +33,7 @@ export const registerEnumsFromNamespace = (typeMapper, namespace) => {
|
|
|
33
33
|
typeMapper.registerEnum(enumeration.name, toPascalCase(enumeration.name));
|
|
34
34
|
}
|
|
35
35
|
for (const bitfield of namespace.bitfields) {
|
|
36
|
-
typeMapper.
|
|
36
|
+
typeMapper.registerFlags(bitfield.name, toPascalCase(bitfield.name));
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
/**
|
|
@@ -95,6 +95,21 @@ export class TypeRegistry {
|
|
|
95
95
|
transformedName,
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Registers a flags (bitfield) type.
|
|
100
|
+
*
|
|
101
|
+
* @param namespace - The GIR namespace
|
|
102
|
+
* @param name - The flags name
|
|
103
|
+
*/
|
|
104
|
+
registerFlags(namespace, name) {
|
|
105
|
+
const transformedName = toPascalCase(name);
|
|
106
|
+
this.types.set(`${namespace}.${name}`, {
|
|
107
|
+
kind: "flags",
|
|
108
|
+
name,
|
|
109
|
+
namespace,
|
|
110
|
+
transformedName,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
98
113
|
/**
|
|
99
114
|
* Registers a record (boxed) type.
|
|
100
115
|
*
|
|
@@ -197,7 +212,7 @@ export class TypeRegistry {
|
|
|
197
212
|
registry.registerEnum(ns.name, enumeration.name);
|
|
198
213
|
}
|
|
199
214
|
for (const bitfield of ns.bitfields) {
|
|
200
|
-
registry.
|
|
215
|
+
registry.registerFlags(ns.name, bitfield.name);
|
|
201
216
|
}
|
|
202
217
|
for (const record of ns.records) {
|
|
203
218
|
if (record.disguised)
|
|
@@ -425,6 +440,8 @@ const BASIC_TYPE_MAP = new Map([
|
|
|
425
440
|
export class TypeMapper {
|
|
426
441
|
enumNames = new Set();
|
|
427
442
|
enumTransforms = new Map();
|
|
443
|
+
flagsNames = new Set();
|
|
444
|
+
flagsTransforms = new Map();
|
|
428
445
|
recordNames = new Set();
|
|
429
446
|
recordTransforms = new Map();
|
|
430
447
|
recordGlibTypes = new Map();
|
|
@@ -448,6 +465,18 @@ export class TypeMapper {
|
|
|
448
465
|
this.enumTransforms.set(originalName, transformedName);
|
|
449
466
|
}
|
|
450
467
|
}
|
|
468
|
+
/**
|
|
469
|
+
* Registers a flags (bitfield) type for type mapping.
|
|
470
|
+
*
|
|
471
|
+
* @param originalName - The GIR flags name
|
|
472
|
+
* @param transformedName - Optional transformed TypeScript name
|
|
473
|
+
*/
|
|
474
|
+
registerFlags(originalName, transformedName) {
|
|
475
|
+
this.flagsNames.add(originalName);
|
|
476
|
+
if (transformedName) {
|
|
477
|
+
this.flagsTransforms.set(originalName, transformedName);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
451
480
|
/**
|
|
452
481
|
* Registers a record for type mapping.
|
|
453
482
|
*
|
|
@@ -512,9 +541,10 @@ export class TypeMapper {
|
|
|
512
541
|
*
|
|
513
542
|
* @param girType - The GIR type to map
|
|
514
543
|
* @param isReturn - Whether this is a return type (affects ownership)
|
|
544
|
+
* @param parentTransferOwnership - Transfer ownership from parent (used for array elements)
|
|
515
545
|
* @returns The mapped type with TypeScript and FFI descriptors
|
|
516
546
|
*/
|
|
517
|
-
mapType(girType, isReturn = false) {
|
|
547
|
+
mapType(girType, isReturn = false, parentTransferOwnership) {
|
|
518
548
|
if (girType.isArray || girType.name === "array") {
|
|
519
549
|
const listType = girType.cType?.includes("GSList")
|
|
520
550
|
? "gslist"
|
|
@@ -522,7 +552,8 @@ export class TypeMapper {
|
|
|
522
552
|
? "glist"
|
|
523
553
|
: undefined;
|
|
524
554
|
if (girType.elementType) {
|
|
525
|
-
const
|
|
555
|
+
const elementTransferOwnership = girType.transferOwnership ?? parentTransferOwnership;
|
|
556
|
+
const elementType = this.mapType(girType.elementType, isReturn, elementTransferOwnership);
|
|
526
557
|
return {
|
|
527
558
|
ts: `${elementType.ts}[]`,
|
|
528
559
|
ffi: listType
|
|
@@ -538,7 +569,8 @@ export class TypeMapper {
|
|
|
538
569
|
};
|
|
539
570
|
}
|
|
540
571
|
if (STRING_TYPES.has(girType.name)) {
|
|
541
|
-
const
|
|
572
|
+
const effectiveTransferOwnership = girType.transferOwnership ?? parentTransferOwnership;
|
|
573
|
+
const borrowed = effectiveTransferOwnership === "none";
|
|
542
574
|
return {
|
|
543
575
|
ts: "string",
|
|
544
576
|
ffi: { type: "string", borrowed },
|
|
@@ -576,7 +608,7 @@ export class TypeMapper {
|
|
|
576
608
|
}
|
|
577
609
|
this.onSameNamespaceClassUsed?.(registered.transformedName, registered.name);
|
|
578
610
|
}
|
|
579
|
-
else if (registered.kind === "enum") {
|
|
611
|
+
else if (registered.kind === "enum" || registered.kind === "flags") {
|
|
580
612
|
this.onEnumUsed?.(registered.transformedName);
|
|
581
613
|
}
|
|
582
614
|
else if (registered.kind === "record") {
|
|
@@ -589,6 +621,13 @@ export class TypeMapper {
|
|
|
589
621
|
externalType,
|
|
590
622
|
};
|
|
591
623
|
}
|
|
624
|
+
if (registered.kind === "flags") {
|
|
625
|
+
return {
|
|
626
|
+
ts: qualifiedName,
|
|
627
|
+
ffi: { type: "int", size: 32, unsigned: true },
|
|
628
|
+
externalType,
|
|
629
|
+
};
|
|
630
|
+
}
|
|
592
631
|
if (registered.kind === "record") {
|
|
593
632
|
if (registered.name === "Variant" && registered.namespace === "GLib") {
|
|
594
633
|
return {
|
|
@@ -651,6 +690,14 @@ export class TypeMapper {
|
|
|
651
690
|
ffi: { type: "int", size: 32, unsigned: false },
|
|
652
691
|
};
|
|
653
692
|
}
|
|
693
|
+
if (this.flagsNames.has(girType.name)) {
|
|
694
|
+
const transformedName = this.flagsTransforms.get(girType.name) ?? girType.name;
|
|
695
|
+
this.onEnumUsed?.(transformedName);
|
|
696
|
+
return {
|
|
697
|
+
ts: transformedName,
|
|
698
|
+
ffi: { type: "int", size: 32, unsigned: true },
|
|
699
|
+
};
|
|
700
|
+
}
|
|
654
701
|
if (this.recordNames.has(girType.name)) {
|
|
655
702
|
const transformedName = this.recordTransforms.get(girType.name) ?? girType.name;
|
|
656
703
|
const glibTypeName = this.recordGlibTypes.get(girType.name) ?? transformedName;
|
|
@@ -671,6 +718,14 @@ export class TypeMapper {
|
|
|
671
718
|
ffi: { type: "int", size: 32, unsigned: false },
|
|
672
719
|
};
|
|
673
720
|
}
|
|
721
|
+
if (this.flagsNames.has(typeName)) {
|
|
722
|
+
const transformedName = this.flagsTransforms.get(typeName) ?? typeName;
|
|
723
|
+
this.onEnumUsed?.(transformedName);
|
|
724
|
+
return {
|
|
725
|
+
ts: transformedName,
|
|
726
|
+
ffi: { type: "int", size: 32, unsigned: true },
|
|
727
|
+
};
|
|
728
|
+
}
|
|
674
729
|
if (this.recordNames.has(typeName)) {
|
|
675
730
|
const transformedName = this.recordTransforms.get(typeName) ?? typeName;
|
|
676
731
|
const glibTypeName = this.recordGlibTypes.get(typeName) ?? transformedName;
|
|
@@ -705,6 +760,13 @@ export class TypeMapper {
|
|
|
705
760
|
externalType: isExternal ? externalType : undefined,
|
|
706
761
|
};
|
|
707
762
|
}
|
|
763
|
+
if (registered.kind === "flags") {
|
|
764
|
+
return {
|
|
765
|
+
ts: qualifiedName,
|
|
766
|
+
ffi: { type: "int", size: 32, unsigned: true },
|
|
767
|
+
externalType: isExternal ? externalType : undefined,
|
|
768
|
+
};
|
|
769
|
+
}
|
|
708
770
|
if (registered.kind === "record") {
|
|
709
771
|
if (registered.name === "Variant" && registered.namespace === "GLib") {
|
|
710
772
|
return {
|
|
@@ -794,6 +856,13 @@ export class TypeMapper {
|
|
|
794
856
|
externalType,
|
|
795
857
|
};
|
|
796
858
|
}
|
|
859
|
+
if (registered.kind === "flags") {
|
|
860
|
+
return {
|
|
861
|
+
ts: qualifiedName,
|
|
862
|
+
ffi: { type: "int", size: 32, unsigned: true },
|
|
863
|
+
externalType,
|
|
864
|
+
};
|
|
865
|
+
}
|
|
797
866
|
if (registered.kind === "record") {
|
|
798
867
|
if (registered.isPlainStruct) {
|
|
799
868
|
return {
|
|
@@ -991,7 +1060,7 @@ export class TypeMapper {
|
|
|
991
1060
|
ffi: { type: "callback" },
|
|
992
1061
|
};
|
|
993
1062
|
}
|
|
994
|
-
const mapped = this.mapType(param.type);
|
|
1063
|
+
const mapped = this.mapType(param.type, false, param.transferOwnership);
|
|
995
1064
|
const isObjectType = mapped.ffi.type === "gobject" || mapped.ffi.type === "boxed";
|
|
996
1065
|
const isTransferFull = param.transferOwnership === "full";
|
|
997
1066
|
const isTransferNone = param.transferOwnership === "none" || param.transferOwnership === undefined;
|