SubProject Item

# Transformer Item

A transformer takes zero or more inputs and produces one or more output artifacts from them. The following transformer creates one output file from one input file:

    Transformer {
        inputs: "raw_input.txt"
        Artifact {
            fileName: "processed_input.txt"
            fileTags: "processed_file"
        }
        prepare: {
            var cmd = new JavaScriptCommand();
            cmd.description = "Processing '" + input.fileName + "'";
            cmd.highlight = "codegen";
            cmd.sourceCode = function() {
                var file = new TextFile(input.fileName);
                var content = file.readAll();
                file.close()
                content = content.replace(/\r\n/g, "\n");
                file = new TextFile(output.fileName, TextFile.WriteOnly);
                file.truncate();
                file.write(content);
                file.close();
            }
            return cmd;
        }
    }

This example exhibits some interesting features of transformers:

- If there is only one input file, the property `input` is available as syntactic sugar for `inputs[0]`.
- The filenames of the output artifacts are available as `outputs`. If there is only one of these, it can be referred to it as `output`.

A `Transformer` is always attached to a `Product`, possibly indirectly via a `Module`.

## Transformer Properties

Property | Type | Default | Description
--- | --- | --- | ---
inputs | stringList | empty list | The list of inputs to the transformer.
prepare | list of Javascript commands | empty list | The commands that the transformer runs. These typically read from the input files and write to the output files in some way.
condition | bool | true | If true, the transformer is enabled, otherwise it does nothing.
explicitlyDependsOn | stringList | `undefined` | A list of file tags. All output artifacts of this transformer will have a dependency to all artifacts with the given file tags.

SubProject Item