GraalVM FileTransform

GraalVM FileTransform

Certified

Transform rows with JavaScript on GraalVM

Streams rows from from (kestra:// URI, map, or list), lets JavaScript mutate row, and writes the result as an ION file. Set concurrent for parallel processing (order not preserved). Set row = null to drop a record; set rows array to emit multiple rows.

yaml
type: io.kestra.plugin.graalvm.js.FileTransform
yaml
id: transformJs
namespace: company.team

tasks:
  - id: download
    type: io.kestra.plugin.core.http.Download
    uri: https://dummyjson.com/carts/1
  - id: jsonToIon
    type: io.kestra.plugin.serdes.json.JsonToIon
    from: "{{outputs.download.uri}}"
  - id: transformJs
    type: io.kestra.plugin.graalvm.js.FileTransform
    from: "{{ outputs.jsonToIon.uri }}"
    script: |
      if (row['id'] === 666) {
        // remove un-needed row
        row = null
      } else {
        // remove the 'products' column
        row['products'] = null;
        // add a 'totalItems' column
        row['totalItems'] = row['totalProducts'] * row['totalQuantity']
      }
Properties

Source file containing rows to transform

Accepts a kestra:// internal storage URI, map, or list; rows stream into the script before being rewritten as ION

Script body to execute

Template-rendered source code run by GraalVM in the selected language; flow variables are resolved before execution

Assets this task consumes as inputs or produces as outputs, for lineage tracking and the asset graph (Enterprise Edition). A flow declaring this property on a task is rejected in the open-source edition.

Definitions
assetFailureBehaviorstring
Possible Values
IGNOREFAILWARN

Asset failure behavior

Behavior applied to the task state when a declared asset fails to render, emit, or be persisted (e.g. a lock conflict): FAIL escalates it to FAILED, WARN (default) warns it if it would otherwise succeed, IGNORE leaves the state untouched.

enableAutobooleanstring

Whether to auto-register assets referenced dynamically at runtime that are not statically declared in inputs or outputs.

inputsarray

The assets consumed as inputs.

id*string
Min length1
typestring
outputs

The assets produced as outputs.

id*string
Min length1
Max length150
type*object
descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150
id*string
Min length1
Max length150
type*object
descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150
id*string
Min length1
Max length150
type*object
descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150
id*string
Min length1
Max length150
type*object
descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150
id*string
Min length1
Max length150
type*object
descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150
id*string
Min length1
Max length150
type*string
Min length1

Custom asset type

descriptionstring
displayNamestring
metadataobject
Default{}
namespacestring
Min length1
Max length150

Parallel transformations to execute

Number of concurrent workers; ordering is not preserved when set and execution defaults to sequential when null

Advanced GraalVM context options

Maps directly to GraalVM's Context.Builder#options: one entry per option key/value, for example python.WarnOptions or js.ecmascript-version. Keys that would weaken the sandbox already enforced by this task are rejected at execution time: python.PosixModuleBackend, any key related to host access or class loading, and any key prefixed with engine. or sandbox..

Formaturi

URI of a temporary result file

The file will be serialized as an ION file.

Unitcount

Number of records or entities processed by the JavaScript script. This includes both modified and filtered rows from the input file.