В этом разделе приведены сведения о предварительной обработке при помощи Javascript.
Javascript предобработка выполняется с помощью вызова JavaScript функции с одним параметром 'value' и заданным пользователем телом функции. Результатом шага предобработки является значение, которое возвращается из этой функции, например, для выполнения конвертации градусов с Фаренгейта в Цельсия пользователю необходимо ввести
в параметрах JavaScript предобработки, которая будет упакована сервером в JavaScript функцию:
Входящий параметр 'value' всегда передается строкой. Возвращаемое значение автоматически приводится к строке через ToString() метод (если он завершится с ошибкой, тогда эта ошибка возвращается в виде строкового значения), с несколькими исключениями:
Ошибки можно возвращаться при помощи вызова исключения к значениям / объектам (обычно это строки или объекты ошибок).
Например:
У каждого скрипта есть 10 секундное время ожидания выполнения (в зависимости от скрипта выполнение может занять более длительное время, что вызовет превышение времени ожидания); превышение времени ожидания вернет ошибку. Также применяется ограничение heap памяти в 10 мегабайт.
Байтовое представление шага JavaScript предобработки кэшируется и используется повторно, когда шаг применяется в следующий раз. Любые изменения в шагах предобработки вызовут сброс кэширования скрипта и позже повторную компиляцию.
Последовательные ошибки во время выполнения (3 раза подряд) вызовут повторную инициализацию механизма для уменьшения вероятности варианта того, что один скрипт сломает всю среду выполнения для следующих скриптов (это действие журналируется с режимом отладки DebugLevel 4 и выше).
JavaScript предобработка реализована при помощи Duktape (https://duktape.org/) JavaScript механизма.
Смотрите также: Дополнительные Javascript объекты
It is possible to use user macros in JavaScript code. If a script contains user macros, these macros are resolved by server/proxy before executing specific preprocessing steps. Note, that when testing preprocessing steps in the frontend, macro values will not be pulled and need to be entered manually.
Context is ignored when a macro is replaced with its value. Macro value is inserted in the code as is, it is not possible to add additional escaping before placing the value in the JavaScript code. Please be advised, that this can cause JavaScript errors in some cases.
In an example below, if received value exceeds a {$THRESHOLD} macro value, the threshold value (if present) will be returned instead: