API Documentation

On GitHub

IP API

NoFlo - Flow-Based Programming for JavaScript
(c) 2016-2017 Flowhub UG
NoFlo may be freely distributed under the MIT license

Information Packets

IP objects are the way information is transmitted between components running in a NoFlo network. IP objects contain a type that defines whether they’re regular data IPs or whether they are the beginning or end of a stream (openBracket, closeBracket).

The component currently holding an IP object is identified with the owner key.

By default, IP objects may be sent to multiple components. If they’re set to be clonable, each component will receive its own clone of the IP. This should be enabled for any IP object working with data that is safe to clone.

It is also possible to carry metadata with an IP object. For example, the datatype and schema of the sending port is transmitted with the IP object.

Valid IP types:

  • ‘data’
  • ‘openBracket’
  • ‘closeBracket’
export default class IP {

Detects if an arbitrary value is an IP

  /**
   * @param {any} obj
   * @returns {boolean}
   */
  static isIP(obj) {
    return obj && (typeof obj === 'object') && (obj.isIP === true);
  }

Creates as new IP object Valid types: ‘data’, ‘openBracket’, ‘closeBracket’

  /**
   * @param {string} type
   * @param {any} data
   * @param {Object<string, boolean|string>} [options]
   */
  constructor(type, data = null, options = {}) {
    this.type = type || 'data';
    this.data = data;
    this.isIP = true;
    /** @type {string|null} */
    this.scope = null; // sync scope id
    /** @type {string|null} */
    this.owner = null; // packet owner process
    this.clonable = false; // cloning safety flag
    /** @type {number|null} */
    this.index = null; // addressable port index
    this.schema = null;
    this.datatype = 'all';
    this.initial = false;
    if (typeof options === 'object') {
      Object.keys(options).forEach((key) => { this[key] = options[key]; });
    }
    return this;
  }

Creates a new IP copying its contents by value not reference

  /**
   * @returns {IP}
   */
  clone() {
    const ip = new IP(this.type);
    Object.keys(this).forEach((key) => {
      const val = this[key];
      if (key === 'owner') { return; }
      if (val === null) { return; }
      if (typeof (val) === 'object') {
        ip[key] = JSON.parse(JSON.stringify(val));
      } else {
        ip[key] = val;
      }
    });
    return ip;
  }

Moves an IP to a different owner

  /**
   * @param {string|null} owner
   */
  move(owner) {

no-op

    this.owner = owner;
    return this;
  }

Frees IP contents

  drop() {
    Object.keys(this).forEach((key) => {
      delete this[key];
    });
  }
}

This page contains documentation generated automatically from NoFlo's IP.js file.