Message and Headers types used by riff's node-function-invoker.
The node-function-invoker has a copy of this package built-in, however, in order to tests functions that accept and/or produce message, it's recomended that it is installed as a dependency that can be required directly whether running as a unit test or inside riff.
npm install --save @projectriff/messageThere are two primary types provided by this module Message and Headers. A message is a payload with headers. Headers is a case insensitive map with one to many values. While it's possible to construct message and headers objects directly, it's more common to use the builder.
const { Message, Headers } = require('@projectriff/message');
// create a message, don't forget to call `.build()` at the end
const message = Message.builder()
    // add header with a single value
    .addHeader('Content-Type', 'text/plain')
    .addHeader('Accept', 'application/json')
    // add additional values for a header
    .addHeader('accept', 'text/plain;0.8', 'application/octet-stream;q=0.5')
    // replace a header, overwriting existing values
    .replaceHeader('Accept', 'application/octet-stream', 'text/plain')
    // set the payload
    .payload('Hello World!')
    // return the message
    .build();
// message headers are Headers
message.headers instanceof Headers; // true
// get the frist or all values for a header
message.headers.getValue('Content-Type');  // 'text/plain'
message.headers.getValues('Content-Type'); // [ 'text/plain' ]
message.headers.getValue('Accept');        // 'application/octet-stream'
message.headers.getValues('Accept');       // [ 'application/octet-stream', 'text/plain' ]
// header name are case insensitive
message.headers.getValue('Content-Type');  // 'text/plain'
message.headers.getValue('content-type');  // 'text/plain'
message.headers.getValue('CONTENT-TYPE');  // 'text/plain'
// content of the message
message.payload; // 'Hello World!'The message and message.headers objects are immutable once constructed.
To recieve a Message with headers instead of a payload.
module.exports = message => {
    const { headers, payload } = message;
    return `Message received with Content-Type '${headers.getValue('Content-Type')}' and payload '${payload}'.`;
};
// set argument type to message, default is payload
module.exports.$argumentType = 'message';
Functions that set custom headers need to return a Message.
const { Message } = require('@projectriff/message');
module.exports = name => {
    return Message.builder()
        .addHeader('Content-Type', 'text/plain')
        .payload(`Hello ${name}!`)
        .build();
};See the node-function-invoker documentation for details.