About TypeScript bricks

TypeScript scripting bricks give you access to Deno's extensive list of third-party modules and allow you to process your messages with only a few lines of code. We use Deno for our TypeScript bricks, which is a secure Runtime for JavaScript and TypeScript.

Configuring a TypeScript brick#

TypeScript bricks have the following configuration parameters:

ParameterDescription
ScriptYou can add and edit your TypeScript script in this field
Script (URL)Alternatively you can put a link to a gist of your script in this field

TypeScript scripting bricks can be used for all brick types (source, transform, and action).

NameBrick Type
typescript-source-ngSource
typescript-transform-ngTransform
typescript-action-ngAction

TypeScript example#

typescript-transform
import { transform, update, flatten, grok, getValue, setValue, copy, withNamespace } from 'https://gist.githubusercontent.com/nl5887/f16bdf0a9ef2881aa8d1b4bc159ced18/raw/653e4e0b8fee317419c1bf7bdda009c474265379/mod.ts';
// Connect to Workflow
const { Consumer, Producer, Message } = Workflow;
let consumer = await Consumer.connect({});
const producer = await Producer.connect({});
let count = 0;
const start = Date.now();
try {
for await (let msg of consumer) {
// Use getValue() to get a value from the payload, or access directly.
const someValue = getValue(['someValue'], msg.payload)
// Use consumer.ack(msg) to acknowledge a message before producing it.
// Effectively not "producing" it to used in the next brick in the flow.
if (!someValue) {
consumer.ack(msg);
continue
}
// Use console.log("thing") statements to log anything
// Use producer.produce() to pass on a message to the next brick
await producer.produce({
payload: {
someNewValue: someValue,
...msg.payload,
},
});
// Acknowledge the message & increase count of processed messages.
consumer.ack(msg);
count++;
}
} catch (e) {
console.error(e); // Log errors
}
// Calculate and log execution time of the script:
const diff = (Date.now() - start) / 1000; /* seconds */
console.info('duration=%f rate=%f', diff, count / diff);
await consumer.close();