💥 fix(scripts/utils): getChildren() method not working, add pickObjectKeys() methods

the old code that didn't work was really bad, and `pickObjectKeys()` is the inverse of `omitObjectKeys()`, that returns an object with the keys listed inside the array parameter
This commit is contained in:
retrozinndev
2025-07-25 22:06:12 -03:00
parent 627ed101e0
commit 03b1b64c5c
+30 -18
View File
@@ -35,7 +35,10 @@ export function getPlayerIconFromBusName(busName: string): string {
}
export function escapeUnintendedMarkup(input: string): string {
return input.replace(/(?<!<[^>]*)[<>&"]/g, (s) => {
return input.replace(/<[^>]*>|[<>&"]/g, (s) => {
if(s.startsWith('<') && s.endsWith('>'))
return s;
switch(s) {
case "<": return "&lt;";
case ">": return "&gt;";
@@ -43,32 +46,25 @@ export function escapeUnintendedMarkup(input: string): string {
case "\"": return "&quot;";
}
return `\\${s}`;
return s;
});
}
export function getChildren(widget: Gtk.Widget): Array<Gtk.Widget> {
const firstChild = widget.get_first_child();
if(!firstChild)
return [];
const firstChild = widget.get_first_child(),
children: Array<Gtk.Widget> = [];
if(!firstChild) return [];
const children: Array<Gtk.Widget> = [ firstChild ];
let child: Gtk.Widget = firstChild.get_next_sibling()!;
if(!child)
return children;
do {
child = (child ?? children[0]).get_next_sibling()!;
if(!child) return children;
children.unshift(child);
} while(child != null);
let currentChild = firstChild.get_next_sibling();
while(currentChild != null) {
children.push(currentChild);
currentChild = currentChild.get_next_sibling();
}
return children;
}
export function omitObjectKeys<ObjT = object>(obj: ObjT, keys: keyof ObjT|Array<keyof ObjT>): ObjT {
export function omitObjectKeys<ObjT = object>(obj: ObjT, keys: keyof ObjT|Array<keyof ObjT>): object {
const finalObject = { ...obj };
for(const objKey of Object.keys(finalObject as object)) {
@@ -77,6 +73,7 @@ export function omitObjectKeys<ObjT = object>(obj: ObjT, keys: keyof ObjT|Array<
delete finalObject[keys as keyof typeof finalObject];
break;
}
continue;
}
@@ -88,6 +85,21 @@ export function omitObjectKeys<ObjT = object>(obj: ObjT, keys: keyof ObjT|Array<
}
}
return finalObject as object;
}
export function pickObjectKeys<ObjT = object>(obj: ObjT, keys: Array<keyof ObjT>): object {
const finalObject = {} as Record<keyof ObjT, any>;
for(const key of keys) {
for(const objKey of Object.keys(obj as object)) {
if(key === objKey) {
finalObject[key as keyof ObjT] = obj[objKey as keyof ObjT];
break;
}
}
}
return finalObject;
}