看起来是 Discourse Workflows 自己的 JavaScript 表达式系统,它在服务器端的沙箱环境中执行,而不是像 Liquid 或 Handlebars 那样的独立模板语言。
因此,例如:
={{ $json.topic.title.toLowerCase() }}
之所以有效,是因为 {{ ... }} 中的内容被作为 JavaScript 进行求值,而 toLowerCase() 是标准的 JavaScript 字符串方法。
其实现位于 plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb 文件中;它暴露了工作流特定的全局变量,如 $json、$input、$itemIndex、$trigger、$execution 和 $()。
其语法和概念与 n8n 非常相似。实际上,Workflows 源代码的其他地方明确引用了 n8n:
下方 oneboxed 的提交添加了 merge-node 的组合行为,并包含一个描述为:
defaults clash handling to add_suffix (matches n8n position combine)(默认冲突处理为 add_suffix,与 n8n 的位置组合匹配)
的测试。
因此,有证据表明 Workflows 的部分功能刻意与 n8n 的行为保持一致,尽管我没能找到任何明确说明 表达式语言本身 是复制或基于 n8n 的内容。因此,我会将其描述为 Discourse Workflows 提供的沙箱化 JavaScript 表达式,并带有一些类似 n8n 的约定。