mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-02 19:49:58 +00:00
- Replace @/utils/formatUtil imports with @comfyorg/shared-frontend-utils/formatUtil - Fixes import resolution issues after main rebase - All tests pass (3670/3932) with correct package dependencies
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import type { LGraph, Subgraph } from '@/lib/litegraph/src/litegraph'
|
|
import { formatDate } from '@comfyorg/shared-frontend-utils/formatUtil'
|
|
import { collectAllNodes } from '@/utils/graphTraversalUtil'
|
|
|
|
export function applyTextReplacements(
|
|
graph: LGraph | Subgraph,
|
|
value: string
|
|
): string {
|
|
const allNodes = collectAllNodes(graph)
|
|
|
|
return value.replace(/%([^%]+)%/g, function (match, text) {
|
|
const split = text.split('.')
|
|
if (split.length !== 2) {
|
|
// Special handling for dates
|
|
if (split[0].startsWith('date:')) {
|
|
return formatDate(split[0].substring(5), new Date())
|
|
}
|
|
|
|
if (text !== 'width' && text !== 'height') {
|
|
// Dont warn on standard replacements
|
|
console.warn('Invalid replacement pattern', text)
|
|
}
|
|
return match
|
|
}
|
|
|
|
// Find node with matching S&R property name
|
|
let nodes = allNodes.filter(
|
|
(n) => n.properties?.['Node name for S&R'] === split[0]
|
|
)
|
|
// If we can't, see if there is a node with that title
|
|
if (!nodes.length) {
|
|
nodes = allNodes.filter((n) => n.title === split[0])
|
|
}
|
|
if (!nodes.length) {
|
|
console.warn('Unable to find node', split[0])
|
|
return match
|
|
}
|
|
|
|
if (nodes.length > 1) {
|
|
console.warn('Multiple nodes matched', split[0], 'using first match')
|
|
}
|
|
|
|
const node = nodes[0]
|
|
|
|
const widget = node.widgets?.find((w) => w.name === split[1])
|
|
if (!widget) {
|
|
console.warn('Unable to find widget', split[1], 'on node', split[0], node)
|
|
return match
|
|
}
|
|
|
|
return ((widget.value ?? '') + '').replaceAll(
|
|
// eslint-disable-next-line no-control-regex
|
|
/[/?<>\\:*|"\x00-\x1F\x7F]/g,
|
|
'_'
|
|
)
|
|
})
|
|
}
|