scripting / scripting-5Markdown ↓

Where scripts run

CoCoCo runs a script in one of two ways.

Evaluated. The whole script runs, and the value it returns with return is the result. Its data arrives in the global input, or as the script's arguments, which you read at the top with local input = ....

Dispatched. The script runs once to set itself up, putting functions on the global exports table, and then CoCoCo calls one of them. A return at the top level is ignored. Keep the top level to constants and function definitions: it runs before every call and counts against the same limits.

The table shows how each kind of script is run, how its data arrives and what CoCoCo does with the result. The next chapters take them in turn, with a complete script for each: Workflows, webhooks and apps for Normal scripts, Integrations, and Pure scripts.

Where Profile Data Result
Playground and stored scripts Normal local input = ... The chunk's return value is the run's output.
Workflow script nodes Normal local input = ... The chunk's return value is the node's output.
Custom workflow actions Normal local input, config = ... The chunk's return value is the node's output.
Incoming webhooks Normal called as exports.handler(request) The handler's return value is the HTTP response.
Custom app server functions Normal called as exports.<method>(…) The function's return value is sent back to the app.
Workspace handlers Normal called as exports.<handler>(input) The handler's return value is its declared output.
MCP tools Normal called as exports.handler(input) The handler returns the tool's JSON result.
Archive jobs Normal input: last_checkpoint holds the checkpoint of the last successful run, or nil on the first exports.schema() describes the columns; exports.next_chunk() returns rows until nil.
Quote price tuning Normal local input = ... The chunk returns a list of line adjustments.
Integration lifecycle hooks Integration called as exports.init / shutdown / on_timer / on_event(…, config) The return value is ignored.
Integration handler scripts Integration local …, config = ...: the timer name, event or command input, then config A command's return value is its result; other handlers' are ignored.
Integration server functions Integration called as exports.<method>(…) The function's return value is sent back to the caller.
Integration workflow actions Integration local input, config = ... The chunk's return value is the node's output.
Integration upgrade scripts Integration local oldVersion, newVersion, oldConfig = ... A returned table becomes the new config; anything else keeps the old one.
Data pipeline stages Pure input: the row The chunk returns the transformed row, or nil to drop it.
Report preparation scripts Pure input: the report's parameters, context and datasets The chunk returns input with its datasets changed; the parameters stay as they were passed.
Scheduler penalty functions Pure called as exports.calculatePenalty(schedule) The function returns the schedule's penalty as a number.
Product template resolvers Pure input: the template's configuration, components and finishing flags The chunk returns a patch to the components and finishing, or nil for no change.
JDF and JMF templates Pure none The chunk returns the template, usually a table of functions, to the script that loaded it.

Playground input

The playground passes the JSON in its Input box to the script as its argument, not as a global variable or ctx.input, so bind it at the top with local input = .... When the box is empty the script receives no arguments and input is nil, so give it a default. The next chapter opens with a complete playground script.

Calling the executeLuaScript mutation directly works the same way: supply its input.input as a JSON-encoded string, for example "{\"operationId\":\"example\"}".

Published platform manual · revision 2a26d693f1d1