aimusic / ComfyUI /custom_nodes /koolook /web /widget_utils.js
vidfom's picture
Upload folder using huggingface_hub (part 8)
0c85e62 verified
Raw
History Blame Contribute Delete
1.16 kB
// SPDX-License-Identifier: GPL-3.0-or-later
//
// Shared frontend widget helpers for ComfyUI-Koolook nodes.
// Pysssss's presetText.js wraps every STRING widget's serializeValue with a
// callback chain that does `value.replace(...)`. If widget.value is undefined
// or null (widget-to-input conversion voiding the value, or a workflow saved
// before this widget existed), `.replace` throws and graphToPrompt aborts.
// Trap reads/writes via a property descriptor so widget.value is always a
// string regardless of caller.
export function bulletproofStringWidget(widget, fallback = "") {
if (!widget) return;
let stored;
const initial = widget.value;
if (typeof initial === "string") {
stored = initial;
} else if (initial == null) {
stored = fallback;
} else {
stored = String(initial);
}
Object.defineProperty(widget, "value", {
configurable: true,
enumerable: true,
get() { return stored; },
set(v) {
if (typeof v === "string") stored = v;
else if (v == null) stored = fallback;
else stored = String(v);
},
});
}