multimodalart's picture
Squashing commit
4450790 verified
import { app } from "../../scripts/app.js";
import { IoDirection, addConnectionLayoutSupport, followConnectionUntilType } from "./utils.js";
import { RgthreeBaseServerNode } from "./base_node.js";
import { NodeTypesString } from "./constants.js";
import { removeUnusedInputsFromEnd } from "./utils_inputs_outputs.js";
import { debounce } from "../../rgthree/common/shared_utils.js";
class RgthreeAnySwitch extends RgthreeBaseServerNode {
constructor(title = RgthreeAnySwitch.title) {
super(title);
this.stabilizeBound = this.stabilize.bind(this);
this.nodeType = null;
this.addAnyInput(5);
}
onConnectionsChange(type, slotIndex, isConnected, linkInfo, ioSlot) {
var _a;
(_a = super.onConnectionsChange) === null || _a === void 0 ? void 0 : _a.call(this, type, slotIndex, isConnected, linkInfo, ioSlot);
this.scheduleStabilize();
}
onConnectionsChainChange() {
this.scheduleStabilize();
}
scheduleStabilize(ms = 64) {
return debounce(this.stabilizeBound, ms);
}
addAnyInput(num = 1) {
for (let i = 0; i < num; i++) {
this.addInput(`any_${String(this.inputs.length + 1).padStart(2, "0")}`, (this.nodeType || "*"));
}
}
stabilize() {
removeUnusedInputsFromEnd(this, 4);
this.addAnyInput();
let connectedType = followConnectionUntilType(this, IoDirection.INPUT, undefined, true);
if (!connectedType) {
connectedType = followConnectionUntilType(this, IoDirection.OUTPUT, undefined, true);
}
this.nodeType = (connectedType === null || connectedType === void 0 ? void 0 : connectedType.type) || "*";
for (const input of this.inputs) {
input.type = this.nodeType;
}
for (const output of this.outputs) {
output.type = this.nodeType;
output.label =
output.type === "RGTHREE_CONTEXT"
? "CONTEXT"
: Array.isArray(this.nodeType) || this.nodeType.includes(",")
? (connectedType === null || connectedType === void 0 ? void 0 : connectedType.label) || String(this.nodeType)
: String(this.nodeType);
}
}
static setUp(comfyClass, nodeData) {
RgthreeBaseServerNode.registerForOverride(comfyClass, nodeData, RgthreeAnySwitch);
addConnectionLayoutSupport(RgthreeAnySwitch, app, [
["Left", "Right"],
["Right", "Left"],
]);
}
}
RgthreeAnySwitch.title = NodeTypesString.ANY_SWITCH;
RgthreeAnySwitch.type = NodeTypesString.ANY_SWITCH;
RgthreeAnySwitch.comfyClass = NodeTypesString.ANY_SWITCH;
app.registerExtension({
name: "rgthree.AnySwitch",
async beforeRegisterNodeDef(nodeType, nodeData, app) {
if (nodeData.name === "Any Switch (rgthree)") {
RgthreeAnySwitch.setUp(nodeType, nodeData);
}
},
});