💥 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 { 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) { switch(s) {
case "<": return "&lt;"; case "<": return "&lt;";
case ">": return "&gt;"; case ">": return "&gt;";
@@ -43,32 +46,25 @@ export function escapeUnintendedMarkup(input: string): string {
case "\"": return "&quot;"; case "\"": return "&quot;";
} }
return `\\${s}`; return s;
}); });
} }
export function getChildren(widget: Gtk.Widget): Array<Gtk.Widget> { export function getChildren(widget: Gtk.Widget): Array<Gtk.Widget> {
const firstChild = widget.get_first_child(); const firstChild = widget.get_first_child(),
if(!firstChild) children: Array<Gtk.Widget> = [];
return []; if(!firstChild) return [];
const children: Array<Gtk.Widget> = [ firstChild ]; let currentChild = firstChild.get_next_sibling();
while(currentChild != null) {
let child: Gtk.Widget = firstChild.get_next_sibling()!; children.push(currentChild);
if(!child) currentChild = currentChild.get_next_sibling();
return children; }
do {
child = (child ?? children[0]).get_next_sibling()!;
if(!child) return children;
children.unshift(child);
} while(child != null);
return children; 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 }; const finalObject = { ...obj };
for(const objKey of Object.keys(finalObject as object)) { 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]; delete finalObject[keys as keyof typeof finalObject];
break; break;
} }
continue; 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; return finalObject;
} }