()
| 12 | nodeType[nodeDataKey] = nodeData; |
| 13 | }, |
| 14 | setup() { |
| 15 | let defaults; |
| 16 | let regexDefaults; |
| 17 | let setting; |
| 18 | |
| 19 | const getNodeDefaults = (node, defaults) => { |
| 20 | const nodeDefaults = defaults[node.type] ?? {}; |
| 21 | const propSetBy = {}; |
| 22 | |
| 23 | Object.keys(regexDefaults) |
| 24 | .filter((r) => new RegExp(r).test(node.type)) |
| 25 | .reduce((p, n) => { |
| 26 | const props = regexDefaults[n]; |
| 27 | for (const k in props) { |
| 28 | // Use the longest matching key as its probably the most specific |
| 29 | if (!(k in nodeDefaults) || (k in propSetBy && n.length > propSetBy[k].length)) { |
| 30 | propSetBy[k] = n; |
| 31 | nodeDefaults[k] = props[k]; |
| 32 | } |
| 33 | } |
| 34 | return p; |
| 35 | }, nodeDefaults); |
| 36 | |
| 37 | return nodeDefaults; |
| 38 | }; |
| 39 | |
| 40 | const applyDefaults = (defaults) => { |
| 41 | for (const node of Object.values(LiteGraph.registered_node_types)) { |
| 42 | const nodeData = node[nodeDataKey]; |
| 43 | if (!nodeData) continue; |
| 44 | const nodeDefaults = getNodeDefaults(node, defaults); |
| 45 | if (!nodeDefaults) continue; |
| 46 | const inputs = { ...(nodeData.input?.required || {}), ...(nodeData.input?.optional || {}) }; |
| 47 | |
| 48 | for (const w in nodeDefaults) { |
| 49 | const widgetDef = inputs[w]; |
| 50 | if (widgetDef) { |
| 51 | let v = nodeDefaults[w]; |
| 52 | if (widgetDef[0] === "INT" || widgetDef[0] === "FLOAT") { |
| 53 | v = +v; |
| 54 | } |
| 55 | if (widgetDef[1]) { |
| 56 | widgetDef[1].default = v; |
| 57 | } else { |
| 58 | widgetDef[1] = { default: v }; |
| 59 | } |
| 60 | } |
| 61 | } |
| 62 | } |
| 63 | }; |
| 64 | |
| 65 | const getDefaults = () => { |
| 66 | let items; |
| 67 | regexDefaults = {}; |
| 68 | try { |
| 69 | items = JSON.parse(setting.value); |
| 70 | items = items.reduce((p, n) => { |
| 71 | if (n.node.startsWith("/") && n.node.endsWith("/")) { |
nothing calls this directly
no test coverage detected