Spaces:
Running
on
L40S
Running
on
L40S
import type {DynamicContextNodeBase} from "../dynamic_context_base.js"; | |
import {app} from "scripts/app.js"; | |
import {NodeTypesString} from "../constants.js"; | |
import {getConnectedOutputNodesAndFilterPassThroughs} from "../utils.js"; | |
import {INodeInputSlot, INodeOutputSlot, INodeSlot, LGraphNode} from "typings/litegraph.js"; | |
export let SERVICE: ContextService; | |
const OWNED_PREFIX = "+"; | |
const REGEX_PREFIX = /^[\+⚠️]\s*/; | |
const REGEX_EMPTY_INPUT = /^\+\s*$/; | |
export function stripContextInputPrefixes(name: string) { | |
return name.replace(REGEX_PREFIX, ""); | |
} | |
export function getContextOutputName(inputName: string) { | |
if (inputName === "base_ctx") return "CONTEXT"; | |
return stripContextInputPrefixes(inputName).toUpperCase(); | |
} | |
export enum InputMutationOperation { | |
"UNKNOWN", | |
"ADDED", | |
"REMOVED", | |
"RENAMED", | |
} | |
export type InputMutation = { | |
operation: InputMutationOperation; | |
node: DynamicContextNodeBase; | |
slotIndex: number; | |
slot: INodeSlot; | |
}; | |
export class ContextService { | |
constructor() { | |
if (SERVICE) { | |
throw new Error("ContextService was already instantiated."); | |
} | |
} | |
onInputChanges(node: any, mutation: InputMutation) { | |
const childCtxs = getConnectedOutputNodesAndFilterPassThroughs( | |
node, | |
node, | |
0, | |
) as DynamicContextNodeBase[]; | |
for (const childCtx of childCtxs) { | |
childCtx.handleUpstreamMutation(mutation); | |
} | |
} | |
getDynamicContextInputsData(node: DynamicContextNodeBase) { | |
return node | |
.getContextInputsList() | |
.map((input: INodeInputSlot, index: number) => ({ | |
name: stripContextInputPrefixes(input.name), | |
type: String(input.type), | |
index, | |
})) | |
.filter((i) => i.type !== "*"); | |
} | |
getDynamicContextOutputsData(node: LGraphNode) { | |
return node.outputs.map((output: INodeOutputSlot, index: number) => ({ | |
name: stripContextInputPrefixes(output.name), | |
type: String(output.type), | |
index, | |
})); | |
} | |
} | |
SERVICE = new ContextService(); | |