Рабочие процессы Discourse

Похоже, это собственная система JavaScript-выражений Discourse Workflows, которая выполняется на стороне сервера в песочнице, а не отдельный язык шаблонов, такой как 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:

в коммите ниже, который был добавлен через onebox, реализовано поведение объединения для merge-узла и включает тест с описанием:

defaults clash handling to add_suffix (matches n8n position combine)

Таким образом, есть доказательства того, что некоторые части Workflows намеренно соответствуют поведению n8n, хотя я не смог найти ничего, что явно указывало бы на то, что сам язык выражений скопирован из n8n или основан на нём. Поэтому я бы описал его как песочные JavaScript-выражения, предоставляемые Discourse Workflows, с некоторыми конвенциями, похожими на n8n.

3 лайка