noflo 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/.ecrc +3 -0
  2. package/.eslintignore +2 -0
  3. package/{CHANGES.md → CHANGELOG.md} +520 -523
  4. package/README.md +1 -1
  5. package/bin/noflo-cache-preheat +17 -15
  6. package/components/Graph.d.ts +50 -15
  7. package/components/Graph.js +94 -68
  8. package/examples/http/HelloController.js +9 -6
  9. package/examples/spreadsheet/parse.fbp +3 -3
  10. package/lib/AsCallback.d.ts +22 -9
  11. package/lib/AsCallback.js +69 -18
  12. package/lib/AsComponent.d.ts +1 -1
  13. package/lib/AsComponent.js +5 -3
  14. package/lib/BaseNetwork.d.ts +16 -6
  15. package/lib/BaseNetwork.js +65 -31
  16. package/lib/BasePort.d.ts +39 -12
  17. package/lib/BasePort.js +34 -6
  18. package/lib/Component.d.ts +8 -8
  19. package/lib/Component.js +23 -20
  20. package/lib/ComponentLoader.d.ts +3 -4
  21. package/lib/ComponentLoader.js +9 -10
  22. package/lib/IP.d.ts +12 -8
  23. package/lib/IP.js +6 -4
  24. package/lib/InPort.d.ts +81 -10
  25. package/lib/InPort.js +83 -19
  26. package/lib/InternalSocket.d.ts +53 -7
  27. package/lib/InternalSocket.js +51 -14
  28. package/lib/LegacyNetwork.d.ts +12 -2
  29. package/lib/LegacyNetwork.js +5 -5
  30. package/lib/Network.d.ts +13 -2
  31. package/lib/Network.js +10 -10
  32. package/lib/NoFlo.d.ts +13 -13
  33. package/lib/NoFlo.js +29 -27
  34. package/lib/OutPort.d.ts +74 -32
  35. package/lib/OutPort.js +79 -23
  36. package/lib/Platform.d.ts +1 -1
  37. package/lib/Platform.js +9 -4
  38. package/lib/Ports.d.ts +14 -21
  39. package/lib/Ports.js +11 -13
  40. package/lib/ProcessInput.d.ts +5 -9
  41. package/lib/ProcessInput.js +8 -9
  42. package/lib/ProcessOutput.d.ts +2 -2
  43. package/lib/ProcessOutput.js +5 -5
  44. package/lib/loader/NodeJs.d.ts +0 -1
  45. package/lib/loader/NodeJs.js +104 -105
  46. package/lib/loader/register.d.ts +1 -1
  47. package/lib/loader/register.js +8 -4
  48. package/package.json +16 -11
  49. package/spec/.eslintrc +5 -2
  50. package/spec/AsCallback.js +9 -13
  51. package/spec/AsComponent.js +10 -4
  52. package/spec/AsPromise.js +38 -0
  53. package/spec/CommonJS.cjs +10 -0
  54. package/spec/ComponentLoader.js +2 -38
  55. package/spec/ESModule.mjs +11 -0
  56. package/spec/Network.js +32 -11
  57. package/spec/NetworkSync.js +892 -0
  58. package/spec/Scoping.js +27 -42
  59. package/spec/Subgraph.js +6 -11
  60. package/spec/fixtures/componentloader/components/Output.js +1 -1
  61. package/spec/fixtures/componentloader/components/Repeat.ts +1 -1
  62. package/spec/fixtures/componentloader/components/RepeatAsync.coffee +1 -1
  63. package/spec/fixtures/componentloader/node_modules/example/components/Forward.js +1 -1
  64. package/spec/fixtures/componentloader/node_modules/example/package.json +1 -1
  65. package/spec/fixtures/componentloader/package.json +1 -1
  66. package/spec/fixtures/componentloader/spec/Repeat.yaml +1 -1
  67. package/src/.eslintrc +9 -2
  68. package/src/components/Graph.js +105 -71
  69. package/src/lib/AsCallback.js +71 -16
  70. package/src/lib/AsComponent.js +4 -3
  71. package/src/lib/BaseNetwork.js +48 -15
  72. package/src/lib/BasePort.js +43 -9
  73. package/src/lib/Component.js +8 -8
  74. package/src/lib/ComponentLoader.js +3 -4
  75. package/src/lib/IP.js +7 -4
  76. package/src/lib/InPort.js +86 -21
  77. package/src/lib/InternalSocket.js +49 -9
  78. package/src/lib/LegacyNetwork.js +2 -2
  79. package/src/lib/Network.js +2 -2
  80. package/src/lib/NoFlo.js +15 -13
  81. package/src/lib/OutPort.js +83 -22
  82. package/src/lib/Platform.js +9 -4
  83. package/src/lib/Ports.js +9 -11
  84. package/src/lib/ProcessInput.js +7 -9
  85. package/src/lib/ProcessOutput.js +1 -1
  86. package/src/lib/loader/NodeJs.js +122 -116
  87. package/src/lib/loader/register.js +2 -2
  88. /package/{karma.config.js → karma.config.cjs} +0 -0
  89. /package/{webpack.config.js → webpack.config.cjs} +0 -0
@@ -1,26 +1,42 @@
1
- NoFlo ChangeLog
2
- ===============
3
-
4
- ## 1.4.2 (December 10th 2020)
5
-
6
- * Made Component and Network option TypeScript definitions easier to extend when subclassing
7
-
8
- ## 1.4.1 (December 10th 2020)
9
-
10
- * The `asPromise` function (promisified version of `noflo.asCallback`) now ships with the correct type definition
11
-
12
- ## 1.4.0 (December 10th 2020)
13
-
14
- * Asynchronous NoFlo methods (like `createNetwork` and `network.start`) now return Promises. Callbacks are still supported as a compatibility layer.
15
- * Component `setUp` and `tearDown` can now return a Promise instead of calling the supplied callback
16
- * Component processing function can now return a Promise instead of calling `sendDone` or `done` (if the Promise resolves to a value, it will be sent out)
17
- * NoFlo now ships with TypeScript type definitions
18
- * The `src/lib` folder contains NoFlo as JavaScript Modules. `lib` is the CommonJS version
19
- * The CommonJS version of NoFlo is now shipped as modern ES2020 instead of babelized ES5. Use Babel in your project if you need compatibility with old JS runtimes
20
-
21
- ## 1.3.0 (November 23rd 2020)
22
-
23
- * NoFlo `createNetwork` and `asCallback` now accept a `flowtrace` option to pass a [Flowtrace instance](https://github.com/flowbased/flowtrace) for retroactive debugging. Example:
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [1.5.0] - 2026-06-20
8
+ ### Changed
9
+ - Improved using NoFlo directly as ES Module dependency
10
+
11
+ ## [1.4.3] - 2020-12-10
12
+ ### Changed
13
+ - Improved inport and outport options TypeScript definitions
14
+
15
+ ## [1.4.2] - 2020-12-10
16
+ ### Changed
17
+ - Made Component and Network option TypeScript definitions easier to extend when subclassing
18
+
19
+ ## [1.4.1] - 2020-12-10
20
+ ### Changed
21
+ - The `asPromise` function (promisified version of `noflo.asCallback`) now ships with the correct type definition
22
+
23
+ ## [1.4.0] - 2020-12-10
24
+ ### Changed
25
+ - Asynchronous NoFlo methods (like `createNetwork` and `network.start`) now return Promises. Callbacks are still supported as a compatibility layer.
26
+ - Component `setUp` and `tearDown` can now return a Promise instead of calling the supplied callback
27
+ - Component processing function can now return a Promise instead of calling `sendDone` or `done` (if the Promise resolves to a value, it will be sent out)
28
+ - NoFlo now ships with TypeScript type definitions
29
+ - The `src/lib` folder contains NoFlo as JavaScript Modules. `lib` is the CommonJS version
30
+ - The CommonJS version of NoFlo is now shipped as modern ES2020 instead of babelized ES5. Use Babel in your project if you need compatibility with old JS runtimes
31
+
32
+ ## [1.3.0] - 2020-11-23
33
+ ### Changed
34
+ - NoFlo `createNetwork` and `asCallback` now accept a `flowtrace` option to pass a [Flowtrace instance](https://github.com/flowbased/flowtrace) for retroactive debugging. Example:
35
+ - NoFlo `createNetwork` now accepts `componentLoader` and `baseDir` via options. Passing them via Graph properties is deprecated
36
+ - NoFlo `createNetwork` now defaults to the non-legacy "network drives graph" mode
37
+ - NoFlo `createNetwork` now only supports the `graph, options, callback` signature, no options given in some other order
38
+ - `noflo.Network` interface has been removed. Use `createNetwork` to instantiate networks
39
+ - CoffeeScript is no longer bundled with NoFlo. Install the CoffeeScript compiler in your project if you need to be able to load CoffeeScript components
24
40
 
25
41
  ```javascript
26
42
  const { Flowtrace } = require('flowtrace');
@@ -33,93 +49,104 @@ noflo.createNetwork(myGraph, {
33
49
  });
34
50
  ```
35
51
 
36
- * NoFlo `createNetwork` now accepts `componentLoader` and `baseDir` via options. Passing them via Graph properties is deprecated
37
- * NoFlo `createNetwork` now defaults to the non-legacy "network drives graph" mode
38
- * NoFlo `createNetwork` now only supports the `graph, options, callback` signature, no options given in some other order
39
- * `noflo.Network` interface has been removed. Use `createNetwork` to instantiate networks
40
- * CoffeeScript is no longer bundled with NoFlo. Install the CoffeeScript compiler in your project if you need to be able to load CoffeeScript components
41
-
42
- ## 1.2.7 (November 13th 2020)
43
-
44
- * Added safeties against trying to load a falsy graph in `asCallback`
45
- * Added safeties against trying to load unnamed components
52
+ ## [1.2.7] - 2020-11-13
53
+ ### Added
54
+ - Added safeties against trying to load a falsy graph in `asCallback`
55
+ - Added safeties against trying to load unnamed components
46
56
 
47
- ## 1.2.6 (September 24th 2020)
57
+ ## [1.2.6] - 2020-09-24
58
+ ### Fixed
59
+ - Fixed an issue with `getSource` on Node.js
48
60
 
49
- * Fixed an issue with `getSource` on Node.js
61
+ ## [1.2.5] - 2020-09-24
62
+ ### Fixed
63
+ - Fixed an issue with deployment automation
50
64
 
51
- ## 1.2.5 (September 24th 2020)
65
+ ## [1.2.4] - 2020-09-24
66
+ ### Changed
67
+ - ComponentLoader `getSource` now returns also component specs when available
52
68
 
53
- * Fixed an issue with deployment automation
69
+ ## [1.2.3] - 2020-09-17
70
+ ### Changed
71
+ - TypeScript components loaded on Node.js now target modern ES6
54
72
 
55
- ## 1.2.4 (September 24th 2020)
73
+ ## [1.2.2] - 2020-09-17
74
+ ### Added
75
+ - Added initial support for components written in TypeScript. Requires the `typescript` module to be installed
56
76
 
57
- * ComponentLoader `getSource` now returns also component specs when available
77
+ ### Changed
78
+ - NoFlo ComponentLoader can now tell the supported programming languages with the `getLanguages` method
79
+ - Components written with `setSource` now return the original untranspiled source code with `getSource` also on Node.js
58
80
 
59
- ## 1.2.3 (September 17th 2020)
81
+ ## [1.2.1] - 2020-09-16
82
+ ### Added
83
+ - Added better error messages when trying to write to a non-existing outport in a component
84
+ - Added support for loading subgraph components even if they come from a different version of fbp-graph
60
85
 
61
- * TypeScript components loaded on Node.js now target modern ES6
86
+ ## [1.2.0] - 2020-08-28
87
+ ### Added
88
+ - Added support for a more standard `noflo.createNetwork(graph, options, callback)` signature, with backwards compatibility for the legacy `noflo.createNetwork(graph, callback, options)` signature
89
+ - Added optional `networkCallback` option for `noflo.asCallback` to provide access to the network instance for debugging purposes
62
90
 
63
- ## 1.2.2 (September 17th 2020)
91
+ ### Changed
92
+ - Ported NoFlo from CoffeeScript to ES6
64
93
 
65
- * Added initial support for components written in TypeScript. Requires the `typescript` module to be installed
66
- * NoFlo ComponentLoader can now tell the supported programming languages with the `getLanguages` method
67
- * Components written with `setSource` now return the original untranspiled source code with `getSource` also on Node.js
94
+ ### Deprecated
95
+ - Deprecated constructing networks with `new noflo.Network`. Use `noflo.createNetwork` instead, with the following options available:
68
96
 
69
- ## 1.2.1 (September 16th 2020)
97
+ ### Removed
98
+ - Removed support for `noflo.WirePattern`. WirePattern has been deprecated since 1.0, and all code using it should be migrated to the latest Process API
99
+ - Removed support for changing component icon and description statically (on class level) at run-time (i.e. `ComponentName::icon = 'new-icon'`). Component icon and description should be set in class constructor or in `getComponent` instead. Changing icon and description for a specific instance (process) is not affected and is fully supported
70
100
 
71
- * Added better error messages when trying to write to a non-existing outport in a component
72
- * Added support for loading subgraph components even if they come from a different version of fbp-graph
73
-
74
- ## 1.2.0 (August 28th 2020)
75
-
76
- * Ported NoFlo from CoffeeScript to ES6
77
- * Deprecated constructing networks with `new noflo.Network`. Use `noflo.createNetwork` instead, with the following options available:
78
101
  - `subscribeGraph: true`: Uses `LegacyNetwork` which modifies network topology based on changes in graph. This can cause some types of errors to be silent.
79
102
  - `subscribeGraph: false`: Uses `Network`: network topology can be changed with network's methods (`addNode`, `removeEdge`, etc) and will be also written to the graph.
80
103
  For backwards compatibility reasons, `subscribeGraph` defaults to `true`. Adapt your applications to use `false` instead and start utilizing Network methods for any changes to a running graph.
81
- * Added support for a more standard `noflo.createNetwork(graph, options, callback)` signature, with backwards compatibility for the legacy `noflo.createNetwork(graph, callback, options)` signature
82
- * Removed support for `noflo.WirePattern`. WirePattern has been deprecated since 1.0, and all code using it should be migrated to the latest Process API
83
- * Removed support for changing component icon and description statically (on class level) at run-time (i.e. `ComponentName::icon = 'new-icon'`). Component icon and description should be set in class constructor or in `getComponent` instead. Changing icon and description for a specific instance (process) is not affected and is fully supported
84
- * Added optional `networkCallback` option for `noflo.asCallback` to provide access to the network instance for debugging purposes
85
-
86
- ## 1.1.3 (April 12th 2018)
87
-
88
- * Fixed issue with custom component loaders on Node.js
89
-
90
- ## 1.1.2 (March 24th 2018)
91
104
 
92
- * Improved detection of when network finishes to not stop synchronous networks too early
105
+ ## [1.1.3] - 2018-04-12
106
+ ### Fixed
107
+ - Fixed issue with custom component loaders on Node.js
93
108
 
94
- ## 1.1.1 (February 19th 2018)
109
+ ## [1.1.2] - 2018-03-24
110
+ ### Changed
111
+ - Improved detection of when network finishes to not stop synchronous networks too early
95
112
 
96
- * Fixed `noflo.asComponent` handling of functions that return a `NULL`
113
+ ## [1.1.1] - 2018-02-19
114
+ ### Fixed
115
+ - Fixed `noflo.asComponent` handling of functions that return a `NULL`
97
116
 
98
- ## 1.1.0 (February 19th 2018)
117
+ ## [1.1.0] - 2018-02-19
118
+ ### Added
119
+ - Added [noflo.asComponent](https://github.com/noflo/noflo/pull/591) for easy mapping of JavaScript functions into NoFlo components. Each argument will get its own inport with the name of the argument, and output is handled based on the type of function being wrapped:
99
120
 
100
- * Added [noflo.asComponent](https://github.com/noflo/noflo/pull/591) for easy mapping of JavaScript functions into NoFlo components. Each argument will get its own inport with the name of the argument, and output is handled based on the type of function being wrapped:
101
121
  - Regular synchronous functions: return value gets sent to `out`. Thrown errors get sent to `error`
102
122
  - Functions returning a Promise: resolved promises get sent to `out`, rejected promises to `error`
103
123
  - Functions taking a Node.js style asynchronous callback: `err` argument to callback gets sent to `error`, result gets sent to `out`
104
124
 
105
- ## 1.0.3 (November 24th 2017)
125
+ ## [1.0.3] - 2017-11-24
126
+ ### Added
127
+ - Added support for running arbitrary NoFlo graphs via `noflo.asCallback`. You can call this function now with either a component name, or a `noflo.Graph` instance
106
128
 
107
- * Added support for running arbitrary NoFlo graphs via `noflo.asCallback`. You can call this function now with either a component name, or a `noflo.Graph` instance
129
+ ## [1.0.2] - 2017-11-17
130
+ ### Fixed
131
+ - Fix sub-subgraph identification in network events
108
132
 
109
- ## 1.0.2 (November 17th 2017)
133
+ ## [1.0.1] - 2017-11-13
134
+ ### Changed
135
+ - Subgraphs re-activate themselves when receiving new packets after they've completed running
136
+ - Subgraphs now use the JavaScript implementation of Graph component also on Node.js
137
+ - NoFlo `setSource` on Node.js no longer transpiles ES6 sources using Babel. All supported Node.js versions should run ES6 without issues
110
138
 
111
- * Fix sub-subgraph identification in network events
139
+ ## [1.0.0] - 2017-11-03
140
+ ### Added
141
+ - Added _unscoped_ support for outports. Setting `scoped: false` on an outport will force all packets sent to that port to be unscoped
142
+ - Added a deprecation warning when loading legacy API components
112
143
 
113
- ## 1.0.1 (November 13th 2017)
144
+ ### Changed
145
+ - The shipping NoFlo build is now using ES6 syntax, as provided by the [CoffeeScript 2.x compiler](http://coffeescript.org/). If you need to support older browsers or Node.js versions, you can transpile the code to ES5 using [Babel](https://babeljs.io/)
146
+ - The APIs deprecated in NoFlo 0.8 were removed:
147
+ - Improved errors thrown when trying to read from non-existing ports
148
+ - More information on preparing for NoFlo 1.0 can be found from [this blog post](http://bergie.iki.fi/blog/noflo-10-prep/)
114
149
 
115
- * Subgraphs re-activate themselves when receiving new packets after they've completed running
116
- * Subgraphs now use the JavaScript implementation of Graph component also on Node.js
117
- * NoFlo `setSource` on Node.js no longer transpiles ES6 sources using Babel. All supported Node.js versions should run ES6 without issues
118
-
119
- ## 1.0.0 (November 3rd 2017)
120
-
121
- * The shipping NoFlo build is now using ES6 syntax, as provided by the [CoffeeScript 2.x compiler](http://coffeescript.org/). If you need to support older browsers or Node.js versions, you can transpile the code to ES5 using [Babel](https://babeljs.io/)
122
- * The APIs deprecated in NoFlo 0.8 were removed:
123
150
  - `noflo.AsyncComponent` class -- use WirePattern or Process API instead
124
151
  - `noflo.ArrayPort` class -- use InPort/OutPort with `addressable: true` instead
125
152
  - `noflo.Port` class -- use InPort/OutPort instead
@@ -132,75 +159,85 @@ noflo.createNetwork(myGraph, {
132
159
  - `noflo.InPort` receive method -- use Process API getX methods
133
160
  - `noflo.InPort` contains method -- use Process API hasX methods
134
161
  - Subgraph `EXPORTS` mechanism -- disambiguate with INPORT/OUTPORT
135
- * Improved errors thrown when trying to read from non-existing ports
136
- * Added _unscoped_ support for outports. Setting `scoped: false` on an outport will force all packets sent to that port to be unscoped
137
- * Added a deprecation warning when loading legacy API components
138
- * More information on preparing for NoFlo 1.0 can be found from [this blog post](http://bergie.iki.fi/blog/noflo-10-prep/)
139
-
140
- ## 0.8.6 (October 21st 2017)
141
-
142
- * Fixed an issue with synchronous components causing Process API output streams to be replayed in some situations
143
- * Improved error handling when trying to load a graph with misconfigured edges
144
162
 
145
- ## 0.8.5 (September 17th 2017)
163
+ ## [0.8.6] - 2017-10-21
164
+ ### Changed
165
+ - Improved error handling when trying to load a graph with misconfigured edges
166
+
167
+ ### Fixed
168
+ - Fixed an issue with synchronous components causing Process API output streams to be replayed in some situations
169
+
170
+ ## [0.8.5] - 2017-09-17
171
+ ### Changed
172
+ - It is now possible to set individual ports to _unscoped_ mode by setting the `scoped: false` parameter. This is useful for components that mix unscoped and scoped inputs
173
+ - Ports and IP objects can now be annotated with a JSON schema for their payloads using the `schema` key. Ports with a schema annotate their IP objects automatically with the schema unless the IP object already has a specific schema
174
+ - The previous `type` key of ports is now converted to the `schema` key. The schema of a port is available via the `getSchema()` method
175
+
176
+ ## [0.8.4] - 2017-07-21
177
+ ### Changed
178
+ - Send newly-added IIPs even if network has finished, but not after stopping the network
179
+
180
+ ## [0.8.3] - 2017-03-08
181
+ ### Changed
182
+ - Don't mark the network as finished if we still have running components
183
+
184
+ ## [0.8.2] - 2017-03-05
185
+ ### Added
186
+ - Added [asCallback()](https://github.com/noflo/noflo/pull/538) function to embed NoFlo graphs and components into non-NoFlo applications and tests
187
+
188
+ ### Changed
189
+ - Improved subgraph instantiation error handling
190
+
191
+ ### Fixed
192
+ - Fixed a problem of IIPs not visible to processes when inside an IP scope
193
+
194
+ ## [0.8.1] - 2017-03-02
195
+ ### Fixed
196
+ - Fixed issue with Process API WirePattern emulation on deeper bracket hierarchies
197
+ - Fixed inport buffer clearing on component shutdown
198
+
199
+ ## [0.8.0] - 2017-03-01
200
+ ### Added
201
+ - Added deprecation warnings to several WirePattern options:
202
+ - Added `setUp` and `tearDown` methods for easier handling of custom states in components. These methods take an asynchronous callback and are recommended to be used instead of `start` and `shutdown`
203
+ - Added callbacks for component `start` and `shutdown` methods
204
+ - Added a `clear` method for inports to clear their packet buffer. Used by component `shutdown` method
205
+ - Added addressable port support to Process API
206
+ - Added callback for `Network.stop`
207
+ - Added deprecation warnings for APIs that will be removed by NoFlo 1.0. These can be made fatal by setting the `NOFLO_FATAL_DEPRECATED` environment variable. These include:
208
+ - Added IP object `scope` support to `WirePattern` to make `WirePattern` components more concurrency-friendly
209
+ - Added stream helpers for Process API input. `hasStream` checks if an input buffer contains a complete stream (matching brackets and data, or only data), `getStream` returns a complete stream of packets. These require `forwardBrackets` to be disabled for the port.
210
+
211
+ ### Changed
212
+ - General availability of [Process API for NoFlo components](http://bergie.iki.fi/blog/noflo-process-api/)
213
+ - Updated headers to reflect the copyright assignment from [The Grid](https://thegrid.io) to [Flowhub UG](https://flowhub.io)
214
+ - Reimplemented `noflo.helpers.MapComponent` to use Process API internally. This helper is deprecated and components using it should be ported to Process API
215
+ - Reimplemented `noflo.helpers.WirePattern` to use Process API internally. To use the original WirePattern implementation, either pass a `legacy: true` to WirePattern function or set `NOFLO_WIREPATTERN_LEGACY` environment variable
216
+ - `postpone` and `resume`. These are still available in legacy mode but will be removed soon
217
+ - `group` collation
218
+ - `field` collation
219
+ - `async: false` option
220
+ - `component.error` method with WirePattern. Use async and error callback instead
221
+ - `component.fail` method with WirePattern. Use async and error callback instead
222
+ - `component.sendDefaults` method with WirePattern. Start your components with a NoFlo network to get defaults sent
223
+ - `noflo.helpers.MultiError`. Use error callback instead
224
+ - Outmost brackets are no longer automatically converted to `connect` and `disconnect` events. Instead, `connect` and `disconnect` are injected as needed, but only for subscribers of the legacy events
225
+ - Graph JSON schema has been moved to https://github.com/flowbased/fbp, and updated with tests.
226
+ - [babel-core](https://www.npmjs.com/package/babel-core) was removed as a dependency. Install separately for projects needing ES6 component support
227
+ - underscore.js was removed as a dependency
228
+ - `input.getData()` in Process API has been changed to fetch only packets of `data` type skipping and dropping brackets inbetween
229
+ - IP objects are strictly required to be of `noflo.IP` type
230
+ - NoFlo Graph and Journal were moved to a dedicated [fbp-graph](https://github.com/flowbased/fbp-graph) library for easier usage in other FBP projects. No changes to NoFlo interface
231
+ - NoFlo networks now emit packet events only while the network is running
232
+ - NoFlo networks can show their currently active processes with the `getActiveProcesses()` method
233
+
234
+ ### Removed
235
+ - Removed WirePattern `receiveStreams` and `sendStream` options
236
+ - Removed `receiveStreams` option from `WirePattern`
237
+ - Removed support for deprecated Node.js 0.x versions
146
238
 
147
- * It is now possible to set individual ports to _unscoped_ mode by setting the `scoped: false` parameter. This is useful for components that mix unscoped and scoped inputs
148
- * Ports and IP objects can now be annotated with a JSON schema for their payloads using the `schema` key. Ports with a schema annotate their IP objects automatically with the schema unless the IP object already has a specific schema
149
- * The previous `type` key of ports is now converted to the `schema` key. The schema of a port is available via the `getSchema()` method
150
-
151
- ## 0.8.4 (July 21st 2017)
152
-
153
- * Send newly-added IIPs even if network has finished, but not after stopping the network
154
-
155
- ## 0.8.3 (March 8th 2017)
156
-
157
- * Don't mark the network as finished if we still have running components
158
-
159
- ## 0.8.2 (March 5th 2017)
160
-
161
- * Improved subgraph instantiation error handling
162
- * Fixed a problem of IIPs not visible to processes when inside an IP scope
163
- * Added [asCallback()](https://github.com/noflo/noflo/pull/538) function to embed NoFlo graphs and components into non-NoFlo applications and tests
164
-
165
- ## 0.8.1 (March 2nd 2017)
166
-
167
- * Fixed issue with Process API WirePattern emulation on deeper bracket hierarchies
168
- * Fixed inport buffer clearing on component shutdown
169
-
170
- ## 0.8.0 (March 1st 2017)
171
-
172
- * General availability of [Process API for NoFlo components](http://bergie.iki.fi/blog/noflo-process-api/)
173
- * Updated headers to reflect the copyright assignment from [The Grid](https://thegrid.io) to [Flowhub UG](https://flowhub.io)
174
-
175
- ## 0.8.0-beta3 (February 21st 2017)
176
-
177
- * Reimplemented `noflo.helpers.MapComponent` to use Process API internally. This helper is deprecated and components using it should be ported to Process API
178
- * Reimplemented `noflo.helpers.WirePattern` to use Process API internally. To use the original WirePattern implementation, either pass a `legacy: true` to WirePattern function or set `NOFLO_WIREPATTERN_LEGACY` environment variable
179
- * Removed WirePattern `receiveStreams` and `sendStream` options
180
- * Added deprecation warnings to several WirePattern options:
181
- * `postpone` and `resume`. These are still available in legacy mode but will be removed soon
182
- * `group` collation
183
- * `field` collation
184
- * `async: false` option
185
- * `component.error` method with WirePattern. Use async and error callback instead
186
- * `component.fail` method with WirePattern. Use async and error callback instead
187
- * `component.sendDefaults` method with WirePattern. Start your components with a NoFlo network to get defaults sent
188
- * `noflo.helpers.MultiError`. Use error callback instead
189
-
190
- ## 0.8.0-beta2 (February 8th 2017)
191
-
192
- * Added `setUp` and `tearDown` methods for easier handling of custom states in components. These methods take an asynchronous callback and are recommended to be used instead of `start` and `shutdown`
193
- * Added callbacks for component `start` and `shutdown` methods
194
- * Added a `clear` method for inports to clear their packet buffer. Used by component `shutdown` method
195
- * Added addressable port support to Process API
196
239
  - When sending packets to an addressable outport, the connection to send to will be selected based on the `index` attribute of the IP object
197
240
  - When reading from addressable ports, provide port name with index in format `[portname, index]`. For example: `input.getData ['in', 2]`
198
-
199
- ## 0.8.0-beta1 (January 18th 2017)
200
-
201
- * Added callback for `Network.stop`
202
- * Outmost brackets are no longer automatically converted to `connect` and `disconnect` events. Instead, `connect` and `disconnect` are injected as needed, but only for subscribers of the legacy events
203
- * Added deprecation warnings for APIs that will be removed by NoFlo 1.0. These can be made fatal by setting the `NOFLO_FATAL_DEPRECATED` environment variable. These include:
204
241
  - `noflo.AsyncComponent`: should be ported to Process API
205
242
  - `noflo.helpers.MapComponent`: should be ported to Process API
206
243
  - `noflo.ArrayPort`: should be ported to noflo.In/OutPort with `addressable: true`
@@ -211,177 +248,190 @@ noflo.createNetwork(myGraph, {
211
248
  - `noflo.InPort` `contains` method: replaced by the `has` method
212
249
  - `noflo.Graph` exports: use specific inport or outport instead
213
250
  - Additionally [component.io](https://github.com/componentjs/component) builds warn about deprecation in favor of [webpack](http://webpack.github.io/) with helpful automation available in [grunt-noflo-browser](https://www.npmjs.com/package/grunt-noflo-browser)
214
- * Added IP object `scope` support to `WirePattern` to make `WirePattern` components more concurrency-friendly
215
- * Removed `receiveStreams` option from `WirePattern`
216
- * Graph JSON schema has been moved to https://github.com/flowbased/fbp, and updated with tests.
217
- * Added stream helpers for Process API input. `hasStream` checks if an input buffer contains a complete stream (matching brackets and data, or only data), `getStream` returns a complete stream of packets. These require `forwardBrackets` to be disabled for the port.
218
- * [babel-core](https://www.npmjs.com/package/babel-core) was removed as a dependency. Install separately for projects needing ES6 component support
219
- * underscore.js was removed as a dependency
220
- * `input.getData()` in Process API has been changed to fetch only packets of `data` type skipping and dropping brackets inbetween
221
- * IP objects are strictly required to be of `noflo.IP` type
222
- * Removed support for deprecated Node.js 0.x versions
223
- * NoFlo Graph and Journal were moved to a dedicated [fbp-graph](https://github.com/flowbased/fbp-graph) library for easier usage in other FBP projects. No changes to NoFlo interface
224
- * NoFlo networks now emit packet events only while the network is running
225
- * NoFlo networks can show their currently active processes with the `getActiveProcesses()` method
226
-
227
- ## 0.7.8 (June 10th 2016)
228
-
229
- * Added input buffer manipulation methods
230
- * Added support for falsy IP object scopes
231
- * Added support for sending values out directly with `output.send` if there is only one non-error outport
232
- * InternalSocket no longer re-wraps already-wrapped errors coming from downstream
233
- * Switched NoFlo's default browser builder to webpack
234
251
 
235
- ## 0.7.7 (June 8th 2016)
252
+ ## [0.7.8] - 2016-06-10
253
+ ### Added
254
+ - Added input buffer manipulation methods
255
+ - Added support for falsy IP object scopes
256
+ - Added support for sending values out directly with `output.send` if there is only one non-error outport
236
257
 
237
- * `input.has` now accepts a validation callback function as the last argument. All packets in buffer will be passed to this function, and `has` will return false only if something returns true for each port specified
238
- * Removed `dropEmptyBrackets` option which was conflicting with asynchronous components. This results into empty brackets being forwarded to `error` outport, so make sure error handling components don't make false alerts on those.
239
- * ComponentLoader was refactored to allow easier injection of custom loaders when dealing with bundling tools like Browserify and Webpack
258
+ ### Changed
259
+ - InternalSocket no longer re-wraps already-wrapped errors coming from downstream
260
+ - Switched NoFlo's default browser builder to webpack
240
261
 
241
- ## 0.7.6 (June 2nd 2016)
262
+ ## [0.7.7] - 2016-06-08
263
+ ### Changed
264
+ - `input.has` now accepts a validation callback function as the last argument. All packets in buffer will be passed to this function, and `has` will return false only if something returns true for each port specified
265
+ - ComponentLoader was refactored to allow easier injection of custom loaders when dealing with bundling tools like Browserify and Webpack
242
266
 
243
- * Fixed ComponentLoader caching on Node.js
244
- * Added support for `stream` datatype in ports, allowing streams to be passed as data packets
245
- * NoFlo Graphs now support case sensitive mode, which is possible to trigger via options
267
+ ### Removed
268
+ - Removed `dropEmptyBrackets` option which was conflicting with asynchronous components. This results into empty brackets being forwarded to `error` outport, so make sure error handling components don't make false alerts on those.
246
269
 
247
- ## 0.7.5 (May 2nd 2016)
270
+ ## [0.7.6] - 2016-06-02
271
+ ### Added
272
+ - Added support for `stream` datatype in ports, allowing streams to be passed as data packets
248
273
 
249
- * Added automatic bracket forwarding via `forwardBrackets` option. Enabled from `in` port to `out` and `error` ports by default.
250
- * Empty brackets are not forwarded to ports in `dropEmptyBrackets` list (defaults to `['error']`).
251
- * IP metadata can easily be forwarded in simple components by using `output.pass()` instead of `output.sendDone()`.
274
+ ### Changed
275
+ - NoFlo Graphs now support case sensitive mode, which is possible to trigger via options
252
276
 
253
- ## 0.7.4 (April 7th 2016)
277
+ ### Fixed
278
+ - Fixed ComponentLoader caching on Node.js
254
279
 
255
- * Minor network starting improvement
280
+ ## [0.7.5] - 2016-05-02
281
+ ### Added
282
+ - Added automatic bracket forwarding via `forwardBrackets` option. Enabled from `in` port to `out` and `error` ports by default.
256
283
 
257
- ## 0.7.3 (April 7th 2016)
284
+ ### Changed
285
+ - Empty brackets are not forwarded to ports in `dropEmptyBrackets` list (defaults to `['error']`).
286
+ - IP metadata can easily be forwarded in simple components by using `output.pass()` instead of `output.sendDone()`.
258
287
 
259
- * Fixed error handling on broken FBP manifest data
260
- * Fixed network start callback when there are no defaults in a graph
261
- * Network uptime is now calculated from the first `start` event, not from initialization
288
+ ## [0.7.4] - 2016-04-07
289
+ ### Changed
290
+ - Minor network starting improvement
262
291
 
263
- ## 0.7.2 (April 1st 2016)
292
+ ## [0.7.3] - 2016-04-07
293
+ ### Changed
294
+ - Network uptime is now calculated from the first `start` event, not from initialization
264
295
 
265
- * Fixed FBP manifest caching
266
- * Fixed non-triggering property being applied on triggering ports
267
- * Fixed `input.getData()` crash on ports which have no packets yet
296
+ ### Fixed
297
+ - Fixed error handling on broken FBP manifest data
298
+ - Fixed network start callback when there are no defaults in a graph
268
299
 
269
- ## 0.7.1 (March 31st 2016)
300
+ ## [0.7.2] - 2016-04-01
301
+ ### Fixed
302
+ - Fixed FBP manifest caching
303
+ - Fixed non-triggering property being applied on triggering ports
304
+ - Fixed `input.getData()` crash on ports which have no packets yet
270
305
 
271
- * Fixed NoFlo subgraph component in build
306
+ ## [0.7.1] - 2016-03-31
307
+ ### Fixed
308
+ - Fixed NoFlo subgraph component in build
272
309
 
273
- ## 0.7.0 (March 31st 2016)
310
+ ## [0.7.0] - 2016-03-31
311
+ ### Changed
312
+ - Switched component discovery and caching from `read-installed` to [FBP manifest](https://github.com/flowbased/fbp-manifest). `fbp.json` files can be generated using `noflo-cache-preheat`.
313
+ - Component Loader `listComponents` can now return errors as first callback argument
314
+ - Control ports don't receive bracket IPs, only data
315
+ - NoFlo's InternalSocket now always handles information packets as IP Objects, with conversion to/from legacy packet events done automatically. Use `socket.on('ip', function (ip) {})` to receive IP object
274
316
 
275
- * Switched component discovery and caching from `read-installed` to [FBP manifest](https://github.com/flowbased/fbp-manifest). `fbp.json` files can be generated using `noflo-cache-preheat`.
276
317
  This also changes behavior related to components or graphs in custom locations. The fbp-manifest tool only finds them from the default `components/` and `graphs/` subdirectories of the project
277
318
  base directory.
278
- * Component Loader `listComponents` can now return errors as first callback argument
279
- * Control ports don't receive bracket IPs, only data
280
- * NoFlo's InternalSocket now always handles information packets as IP Objects, with conversion to/from legacy packet events done automatically. Use `socket.on('ip', function (ip) {})` to receive IP object
281
319
 
282
- ## 0.6.1 (March 30th 2016)
283
-
284
- * NoFlo's IP Objects are now available via `noflo.IP`
285
-
286
- ## 0.6.0 (March 29th 2016)
287
-
288
- * Removed the `noflo` executable in favor of [noflo-nodejs](https://www.npmjs.com/package/noflo-nodejs)
289
- * NoFlo `createNetwork` and `loadFile` methods can return errors as the first callback argument
290
- * New [IP Objects](https://github.com/noflo/noflo/issues/290) feature allowing bundling and handling of groups and packet data together
291
- * New option to enable [cloning of packets](https://github.com/noflo/noflo/pull/375) when sending to multiple outbound connections
292
- * New [Process API](https://github.com/noflo/noflo/pull/392) which replaces `WirePattern` and makes NoFlo component programming closer to Classical FBP
293
- * Graph-level [request isolation](https://github.com/noflo/noflo/issues/373) via `IP.scope` property
294
- * Removed the deprecated `LoggingComponent` baseclass
295
-
296
- ## 0.5.21 (December 3rd 2015)
297
-
298
- * Made NoFlo component cache keep Component Loader paths also relative
299
-
300
- ## 0.5.20 (December 2nd 2015)
301
-
302
- * NoFlo network instances now default to `debug` mode, meaning that errors thrown by components are available via the `process-error` event
303
- * If there are no listeners for the network `process-error` events or socket `error` event, then they are thrown
304
- * This change of behavior fixes issues with stale state in WirePattern networks caused by downstream exceptions
305
- * Debug mode can be disabled with `network.setDebug(false)`
306
-
307
- ## 0.5.18 (November 30th 2015)
308
-
309
- * Make NoFlo component cache paths relative to project root
310
-
311
- ## 0.5.17 (November 27th 2015)
312
-
313
- * Added a new `noflo-cache-preheat` tool that can be used for improving start-up times in Node.js projects with large lists of dependencies. Can be used as a `postinstall` script
314
-
315
- ## 0.5.16 (November 27th 2015)
316
-
317
- * Update the `read-installed` package to support scoped dependencies
318
-
319
- ## 0.5.15 (November 26th 2015)
320
-
321
- * Support for [scoped NPM packages](https://docs.npmjs.com/getting-started/scoped-packages)
322
-
323
- ## 0.5.14 (September 25th 2015)
324
-
325
- * EcmaScript 6 support in Component Loader
326
- * Node.js 4.x compatibility (`setSource` requires `components/` directory to exist in base directory to work)
327
-
328
- ## 0.5.13 (April 22nd 2015)
329
-
330
- * Custom componentloader support when cache mode is enabled
331
- * Optional support for [coffee-cache](https://www.npmjs.com/package/coffee-cache) when using `--cache`
332
-
333
- ## 0.5.12 (April 19th 2015)
334
-
335
- * Add support for [io.js](https://iojs.org/)
336
- * Add `componentName` property for components telling the component name
337
- * Socket events now include edge metadata
338
- * Node.js: component list can be cached for faster start-up time. Cache file is stored in `$BASEDIR/.noflo.json`
339
-
340
- ## 0.5.11 (October 23rd 2014)
341
-
342
- * On Node.js ComponentLoader `setSource` now loads components virtually from `<baseDir>/components` to support relative module loading
343
- * Subgraphs don't get unattached ports implicitly exported any longer. Register in/outports in the graph to make them available from the outside
344
- * Added safeties for restarted networks to WirePattern
345
-
346
- ## 0.5.10 (October 23rd 2014)
347
-
348
- * Port names are now validated to only contain lowercase alphanumeric characters or underscores
349
- * `ComponentLoader.load` method now calls its callback with the Node.js style `error, instance` signature to allow catching component loading issues
350
- * Graph merging support via the graph journal
351
- * `getSource` now returns correct type for graphs
352
- * Subgraph networks are started when the main network starts, instead of automatically on their own timing. As a fallback they will also start when any of their ports receives a `connect`
353
- * Networks can now be stopped and restarted at will using the `stop` and `start` methods
354
- * The running state of a NoFlo network can be now queried with the `isRunning` method
355
- * NoFlo networks support FBP protocol debugging via the `setDebug` and `getDebug` methods
356
- * `Ports.add` is now chainable
357
- * The `start` port was removed from subgraphs
320
+ ## [0.6.1] - 2016-03-30
321
+ ### Changed
322
+ - NoFlo's IP Objects are now available via `noflo.IP`
323
+
324
+ ## [0.6.0] - 2016-03-29
325
+ ### Added
326
+ - New [IP Objects](https://github.com/noflo/noflo/issues/290) feature allowing bundling and handling of groups and packet data together
327
+ - New option to enable [cloning of packets](https://github.com/noflo/noflo/pull/375) when sending to multiple outbound connections
328
+ - New [Process API](https://github.com/noflo/noflo/pull/392) which replaces `WirePattern` and makes NoFlo component programming closer to Classical FBP
329
+
330
+ ### Changed
331
+ - NoFlo `createNetwork` and `loadFile` methods can return errors as the first callback argument
332
+ - Graph-level [request isolation](https://github.com/noflo/noflo/issues/373) via `IP.scope` property
333
+
334
+ ### Removed
335
+ - Removed the `noflo` executable in favor of [noflo-nodejs](https://www.npmjs.com/package/noflo-nodejs)
336
+ - Removed the deprecated `LoggingComponent` baseclass
337
+
338
+ ## [0.5.21] - 2015-12-03
339
+ ### Changed
340
+ - Made NoFlo component cache keep Component Loader paths also relative
341
+
342
+ ## [0.5.20] - 2015-12-02
343
+ ### Changed
344
+ - NoFlo network instances now default to `debug` mode, meaning that errors thrown by components are available via the `process-error` event
345
+ - If there are no listeners for the network `process-error` events or socket `error` event, then they are thrown
346
+ - This change of behavior fixes issues with stale state in WirePattern networks caused by downstream exceptions
347
+ - Debug mode can be disabled with `network.setDebug(false)`
348
+
349
+ ## [0.5.18] - 2015-11-30
350
+ ### Changed
351
+ - Make NoFlo component cache paths relative to project root
352
+
353
+ ## [0.5.17] - 2015-11-27
354
+ ### Added
355
+ - Added a new `noflo-cache-preheat` tool that can be used for improving start-up times in Node.js projects with large lists of dependencies. Can be used as a `postinstall` script
356
+
357
+ ## [0.5.16] - 2015-11-27
358
+ ### Changed
359
+ - Update the `read-installed` package to support scoped dependencies
360
+
361
+ ## [0.5.15] - 2015-11-26
362
+ ### Changed
363
+ - Support for [scoped NPM packages](https://docs.npmjs.com/getting-started/scoped-packages)
364
+
365
+ ## [0.5.14] - 2015-09-25
366
+ ### Changed
367
+ - EcmaScript 6 support in Component Loader
368
+ - Node.js 4.x compatibility (`setSource` requires `components/` directory to exist in base directory to work)
369
+
370
+ ## [0.5.13] - 2015-04-22
371
+ ### Changed
372
+ - Custom componentloader support when cache mode is enabled
373
+ - Optional support for [coffee-cache](https://www.npmjs.com/package/coffee-cache) when using `--cache`
374
+
375
+ ## [0.5.12] - 2015-04-19
376
+ ### Added
377
+ - Add support for [io.js](https://iojs.org/)
378
+ - Add `componentName` property for components telling the component name
379
+
380
+ ### Changed
381
+ - Socket events now include edge metadata
382
+ - Node.js: component list can be cached for faster start-up time. Cache file is stored in `$BASEDIR/.noflo.json`
383
+
384
+ ## [0.5.11] - 2014-10-23
385
+ ### Added
386
+ - Added safeties for restarted networks to WirePattern
387
+
388
+ ### Changed
389
+ - On Node.js ComponentLoader `setSource` now loads components virtually from `<baseDir>/components` to support relative module loading
390
+ - Subgraphs don't get unattached ports implicitly exported any longer. Register in/outports in the graph to make them available from the outside
391
+
392
+ ## [0.5.10] - 2014-10-23
393
+ ### Changed
394
+ - Port names are now validated to only contain lowercase alphanumeric characters or underscores
395
+ - `ComponentLoader.load` method now calls its callback with the Node.js style `error, instance` signature to allow catching component loading issues
396
+ - Graph merging support via the graph journal
397
+ - `getSource` now returns correct type for graphs
398
+ - Subgraph networks are started when the main network starts, instead of automatically on their own timing. As a fallback they will also start when any of their ports receives a `connect`
399
+ - Networks can now be stopped and restarted at will using the `stop` and `start` methods
400
+ - The running state of a NoFlo network can be now queried with the `isRunning` method
401
+ - NoFlo networks support FBP protocol debugging via the `setDebug` and `getDebug` methods
402
+ - `Ports.add` is now chainable
403
+ - The `start` port was removed from subgraphs
358
404
 
359
405
  These changes mean that in situations where a subgraph is used standalone without a network around it, you need to call `component.start()` manually. This is typical especially in unit tests.
360
406
 
361
- ## 0.5.9 (August 5th 2014)
362
-
363
- * Hotfix reverting backwards-incompatible changes in subgraph loading, see [#229](https://github.com/noflo/noflo/issues/229).
364
-
365
- ## 0.5.8 (August 4th 2014)
407
+ ## [0.5.9] - 2014-08-05
408
+ ### Changed
409
+ - Hotfix reverting backwards-incompatible changes in subgraph loading, see [#229](https://github.com/noflo/noflo/issues/229).
366
410
 
367
- * Fixed several issues in connections and data synchronization
368
- * Updated `read-installed` to the latest version
369
- * Updated JSON Schema for NoFlo graph definition format
370
- * Low-level functions to add and remove graph inports at run-time, see [#242](https://github.com/noflo/noflo/pull/242)
371
- * Fixes for default port values and IIPs in subgraphs.
372
- * Added `dropInput` option for WirePattern to drop premature data while parameters not yet received. See [#239](https://github.com/noflo/noflo/issues/239)
373
- * Addressable ports support in WirePattern. See [details](https://github.com/noflo/noflo/issues/240#issuecomment-51094257).
411
+ ## [0.5.8] - 2014-08-04
412
+ ### Added
413
+ - Added `dropInput` option for WirePattern to drop premature data while parameters not yet received. See [#239](https://github.com/noflo/noflo/issues/239)
414
+ - Addressable ports support in WirePattern. See [details](https://github.com/noflo/noflo/issues/240#issuecomment-51094257).
374
415
 
375
- ## 0.5.7 (July 23rd 2014)
416
+ ### Changed
417
+ - Updated `read-installed` to the latest version
418
+ - Updated JSON Schema for NoFlo graph definition format
419
+ - Low-level functions to add and remove graph inports at run-time, see [#242](https://github.com/noflo/noflo/pull/242)
376
420
 
377
- * Ports now default to *not required*. Set the port option `required: true` the port needs to be connected in order for the component to work
378
- * `MultiError` pattern is enabled by default when using `WirePattern` and supports `forwardGroups` option for error packets.
379
- * `WirePattern` components now deal more consistently with groups and disconnect events
421
+ ### Fixed
422
+ - Fixed several issues in connections and data synchronization
423
+ - Fixes for default port values and IIPs in subgraphs.
380
424
 
381
- ## 0.5.6 (June 23rd 2014)
425
+ ## [0.5.7] - 2014-07-23
426
+ ### Changed
427
+ - Ports now default to *not required*. Set the port option `required: true` the port needs to be connected in order for the component to work
428
+ - `MultiError` pattern is enabled by default when using `WirePattern` and supports `forwardGroups` option for error packets.
429
+ - `WirePattern` components now deal more consistently with groups and disconnect events
382
430
 
383
- * Custom icon support for subgraphs via the `icon` key in graph properties
384
- * Parameter support for `WirePattern` components, allowing them to have configuration parameters that need to be set only once. Example:
431
+ ## [0.5.6] - 2014-06-23
432
+ ### Changed
433
+ - Custom icon support for subgraphs via the `icon` key in graph properties
434
+ - Parameter support for `WirePattern` components, allowing them to have configuration parameters that need to be set only once. Example:
385
435
 
386
436
  ```coffeescript
387
437
  component = new noflo.Component
@@ -399,7 +449,6 @@ component.outPorts.add 'out',
399
449
  datatype: 'object'
400
450
  component.outPorts.add 'error',
401
451
  datatype: 'object'
402
-
403
452
  noflo.helpers.WirePattern component,
404
453
  in: ['line', 'repeat']
405
454
  out: 'out'
@@ -414,45 +463,47 @@ noflo.helpers.WirePattern component,
414
463
  callback()
415
464
  ```
416
465
 
417
- ## 0.5.5 (June 20th 2014)
466
+ ## [0.5.5] - 2014-06-20
467
+ ### Added
468
+ - New `CustomizeError` helper for passing information with Error objects in NoFlo. For example:
418
469
 
419
- * Fixed an issue with `StreamSender` affecting WirePattern components dealing with multiple levels of grouping
420
- * New `CustomizeError` helper for passing information with Error objects in NoFlo. For example:
470
+ ### Fixed
471
+ - Fixed an issue with `StreamSender` affecting WirePattern components dealing with multiple levels of grouping
421
472
 
422
473
  ```coffeescript
423
- # Instantiate an error object
424
474
  err = new Error 'Something went wrong'
425
-
426
- # Add metadata to it. Usually this should include groups and other machine-readable information
427
475
  noflo.helpers.CustomizeError err,
428
476
  groups: groups
429
477
  foo: 'bar'
430
-
431
- # Send it to error port
432
478
  c.error err
433
479
  ```
434
480
 
435
- ## 0.5.4 (June 11th 2014)
481
+ ## [0.5.4] - 2014-06-11
482
+ ### Added
483
+ - Added support for multiple outputs and reading/writing substreams as solid objects in `WirePattern`.
484
+ - Added `load` outport handing in `WirePattern` to make it a complete replacement for `AsyncComponent`.
485
+ - Added helpers for advanced error handling, see [#185](https://github.com/noflo/noflo/issues/185).
486
+ - Added `caching` option for OutPorts that makes them re-send their latest value to any newly-added connections, see [#151](https://github.com/noflo/noflo/issues/151) for example use cases.
436
487
 
437
- * The new [noflo-api-updater](https://www.npmjs.org/package/noflo-api-updater) tool assists in updating components to the latest NoFlo API
438
- * `GroupedInput` helper has been renamed to `WirePattern` due to a bigger collection of synchronization options.
439
- * The `WirePattern` helper has a new `ordered` option for choosing whether the output should be in same order as the incoming packets
440
- * Options `group` and `forwardGroups` of `WirePattern` are made independent, so make sure to use `forwardGroups: true` if you need this feature together with `group: true`.
441
- * Added support for multiple outputs and reading/writing substreams as solid objects in `WirePattern`.
442
- * Added `load` outport handing in `WirePattern` to make it a complete replacement for `AsyncComponent`.
443
- * Added helpers for advanced error handling, see [#185](https://github.com/noflo/noflo/issues/185).
444
- * Added `caching` option for OutPorts that makes them re-send their latest value to any newly-added connections, see [#151](https://github.com/noflo/noflo/issues/151) for example use cases.
488
+ ### Changed
489
+ - The new [noflo-api-updater](https://www.npmjs.org/package/noflo-api-updater) tool assists in updating components to the latest NoFlo API
490
+ - `GroupedInput` helper has been renamed to `WirePattern` due to a bigger collection of synchronization options.
491
+ - The `WirePattern` helper has a new `ordered` option for choosing whether the output should be in same order as the incoming packets
492
+ - Options `group` and `forwardGroups` of `WirePattern` are made independent, so make sure to use `forwardGroups: true` if you need this feature together with `group: true`.
445
493
 
446
- ## 0.5.3 (May 31st 2014)
494
+ ## [0.5.3] - 2014-05-31
495
+ ### Added
496
+ - New component helpers for easier authoring
447
497
 
448
- * `integer` is accepted as an alias for the `int` datatype for ports
449
- * `buffer` is now an accepted port datatype
450
- * The Continuous Integration setup for NoFlo now runs on both [Linux](https://travis-ci.org/noflo/noflo) and [Windows](https://ci.appveyor.com/project/bergie/noflo)
451
- * Fixed a bug with ComponentLoader `getSource` method when invoked early on in execution
452
- * New component helpers for easier authoring
498
+ ### Changed
499
+ - `integer` is accepted as an alias for the `int` datatype for ports
500
+ - `buffer` is now an accepted port datatype
501
+ - The Continuous Integration setup for NoFlo now runs on both [Linux](https://travis-ci.org/noflo/noflo) and [Windows](https://ci.appveyor.com/project/bergie/noflo)
453
502
 
454
- The `MapComponent` helper is usable for synchronous components that operate on a single inport-outport combination:
503
+ ### Fixed
504
+ - Fixed a bug with ComponentLoader `getSource` method when invoked early on in execution
455
505
 
506
+ The `MapComponent` helper is usable for synchronous components that operate on a single inport-outport combination:
456
507
  ```coffeescript
457
508
  c = new noflo.Component
458
509
  inPorts:
@@ -464,9 +515,7 @@ c = new noflo.Component
464
515
  noflo.helpers.MapComponent c, (data, groups, out) ->
465
516
  out.send data * 2
466
517
  ```
467
-
468
518
  The `GroupedInput` helper assists in building components that need to synchronize multiple inputs by groups:
469
-
470
519
  ```coffeescript
471
520
  c = new noflo.Component
472
521
  inPorts:
@@ -477,16 +526,13 @@ c = new noflo.Component
477
526
  outPorts:
478
527
  radius:
479
528
  datatype: 'number'
480
-
481
529
  noflo.helpers.GroupedInput c,
482
530
  in: ['x', 'y']
483
531
  out: 'radius'
484
532
  , (data, groups, out) ->
485
533
  out.send Math.sqrt(data.x**2 + data.y**2)
486
534
  ```
487
-
488
535
  `GroupedInput` can also synchronize via specific fields of object-type packets:
489
-
490
536
  ```coffeescript
491
537
  helpers.GroupedInput c,
492
538
  in: ['user', 'message']
@@ -497,70 +543,65 @@ helpers.GroupedInput c,
497
543
  request: data.request
498
544
  user: data.user.name
499
545
  text: data.message.text
500
-
501
546
  user.send {request: 123, id: 42, name: 'John'}
502
547
  message.send {request: 123, id: 17, text: 'Hello world'}
503
-
504
- # Result:
505
548
  { request: 123, user: 'John', text: 'Hello world'}
506
549
  ```
507
550
 
508
- ## 0.5.2 (May 8th 2014)
509
-
510
- * Fixed a minor packaging issue
511
-
512
- ## 0.5.1 (May 8th 2014)
513
-
514
- * Custom component loaders can be registered programmatically using the `registerLoader` method of NoFlo's ComponentLoader
515
- * `contains` method for buffered inports returns the number of data packets the buffer has
516
- * [Call stack exhaustion](https://github.com/noflo/noflo/issues/156) on very large graphs has been fixed
517
- * The `error` outport of AsyncComponents now sends the group information of the original input together with the error
518
- * The `error` method of regular ports can now also handle groups as a second parameter
519
- * Ports can now list their attached sockets (by array index) via the `listAttached` method
520
- * `function` is now an accepted datatype for ports
521
- * There is now initial support for making connections to and from *addressable* ports with a specified index
551
+ ## [0.5.2] - 2014-05-08
552
+ ### Fixed
553
+ - Fixed a minor packaging issue
554
+
555
+ ## [0.5.1] - 2014-05-08
556
+ ### Changed
557
+ - Custom component loaders can be registered programmatically using the `registerLoader` method of NoFlo's ComponentLoader
558
+ - `contains` method for buffered inports returns the number of data packets the buffer has
559
+ - [Call stack exhaustion](https://github.com/noflo/noflo/issues/156) on very large graphs has been fixed
560
+ - The `error` outport of AsyncComponents now sends the group information of the original input together with the error
561
+ - The `error` method of regular ports can now also handle groups as a second parameter
562
+ - Ports can now list their attached sockets (by array index) via the `listAttached` method
563
+ - `function` is now an accepted datatype for ports
564
+ - There is now initial support for making connections to and from *addressable* ports with a specified index
522
565
 
523
566
  In the FBP format, these can be specified with the bracket syntax:
524
-
525
567
  ```fbp
526
568
  SomeNode OUT[2] -> IN OtherNode
527
569
  'foo' -> OPTS[1] OtherNode
528
570
  ```
529
-
530
571
  In the JSON file these are defined in connections by adding a integer to the `index` key of the `src` or `tgt` definition.
531
-
532
572
  The NoFlo Graph class provides these with the following methods:
533
-
534
573
  ```
535
574
  addEdgeIndex(str outNode, str outPort, int outIndex, str inNode, str inPort, int inIndex, obj metadata)
536
575
  addInitiaIndex(mixed data, str inNode, str inPort, int inIndex, obj metadata)
537
576
  ```
538
-
539
577
  If indexes are not specified, the fall-back behavior is to automatically index the connections based on next available slot in the port.
540
578
 
541
- ## 0.5.0 (March 28th 2014)
579
+ ## [0.5.0] - 2014-03-28
580
+ ### Added
581
+ - New methods for manipulating Graph metadata:
582
+ - New Graph transaction API for grouping graph changes. Transactions can be observed
583
+ - New Journal class, for following Graph changes and restoring earlier revisions. Currently supports `undo` and `redo`
584
+
585
+ ### Changed
586
+ - Support for setting the default `baseDir` of Node.js NoFlo environment with `NOFLO_PROJECT_ROOT` env var (defaults to current working directory)
587
+ - Support for loading graph definitions via AJAX on browser-based NoFlo
588
+ - Support for delayed initialization of Subgraph components via ComponentLoader
589
+ - Component instances now get the node's metadata passed to the `getComponent` function
590
+ - Graph exports can now be renamed, and emit `addExport`, `removeExport`, and `renameExport` events
591
+ - [New port API](https://github.com/noflo/noflo/issues/136) allowing better addressability and metadata
592
+ - Graph's published ports are now declared in two separate `inports` and `outports` arrays to [reduce ambiguity](https://github.com/noflo/noflo/issues/118)
593
+ - [New component API](https://github.com/noflo/noflo/issues/97) allowing simpler component definition in both CoffeeScript and JavaScript:
594
+ - Support for dealing with component source code via ComponentLoader `setSource` and `getSource` methods
542
595
 
543
- * Support for setting the default `baseDir` of Node.js NoFlo environment with `NOFLO_PROJECT_ROOT` env var (defaults to current working directory)
544
- * Support for loading graph definitions via AJAX on browser-based NoFlo
545
- * Support for delayed initialization of Subgraph components via ComponentLoader
546
- * Component instances now get the node's metadata passed to the `getComponent` function
547
- * New methods for manipulating Graph metadata:
548
596
  - `setProperties`
549
597
  - `setInportMetadata`
550
598
  - `setOutportMetadata`
551
599
  - `setGroupMetadata`
552
600
  - `setNodeMetadata`
553
601
  - `setEdgeMetadata`
554
- * Graph exports can now be renamed, and emit `addExport`, `removeExport`, and `renameExport` events
555
- * New Graph transaction API for grouping graph changes. Transactions can be observed
556
602
  - `startTransaction`
557
603
  - `endTransaction`
558
- * New Journal class, for following Graph changes and restoring earlier revisions. Currently supports `undo` and `redo`
559
- * [New port API](https://github.com/noflo/noflo/issues/136) allowing better addressability and metadata
560
- * Graph's published ports are now declared in two separate `inports` and `outports` arrays to [reduce ambiguity](https://github.com/noflo/noflo/issues/118)
561
-
562
604
  With the new API component ports can be declared with:
563
-
564
605
  ```coffeescript
565
606
  @inPorts = new noflo.InPorts
566
607
  @inPorts.add 'in', new noflo.InPort
@@ -570,9 +611,7 @@ With the new API component ports can be declared with:
570
611
  required: true
571
612
  buffered: true
572
613
  ```
573
-
574
614
  The `noflo.Ports` objects emit `add` and `remove` events when ports change. They also support passing port information as options:
575
-
576
615
  ```coffeescript
577
616
  @outPorts = new noflo.OutPorts
578
617
  out: new noflo.OutPort
@@ -582,109 +621,95 @@ The `noflo.Ports` objects emit `add` and `remove` events when ports change. They
582
621
  required: true
583
622
  addressable: true
584
623
  ```
585
-
586
624
  The input ports also allow passing in an optional *processing function* that gets called on information packets events.
587
-
588
- * [New component API](https://github.com/noflo/noflo/issues/97) allowing simpler component definition in both CoffeeScript and JavaScript:
589
-
590
625
  ```js
591
626
  var noflo = require('noflo');
592
-
593
627
  exports.getComponent = function() {
594
628
  var c = new noflo.Component();
595
-
596
629
  c.inPorts.add('in', function(event, payload) {
597
630
  if (packet.event !== 'data')
598
631
  return;
599
632
  // Do something with the packet, then
600
633
  c.outPorts.out.send(packet.data);
601
634
  });
602
-
603
635
  c.outPorts.add('out');
604
-
605
636
  return c;
606
637
  };
607
638
  ```
608
639
 
609
- * Support for dealing with component source code via ComponentLoader `setSource` and `getSource` methods
610
-
611
- ## 0.4.4 (February 4th 2014)
612
-
613
- * Support for CoffeeScript 1.7.x on Node.js
640
+ ## [0.4.4] - 2014-02-04
641
+ ### Changed
642
+ - Support for CoffeeScript 1.7.x on Node.js
643
+
644
+ ## [0.4.3] - 2013-12-06
645
+ ### Changed
646
+ - ArrayPorts with attached sockets now return `true` for `isAttached` checks. There is a separate `canAttach` method for checking whether more can be added
647
+ - Icon support was added for both libraries and components using the set from [Font Awesome](http://fortawesome.github.io/Font-Awesome/icons/)
648
+ - Subgraphs now support closing their internal NoFlo network via the `shutdown` method
649
+ - Component Loader is able to load arbitrary graphs outside of the normal package manifest registration via the `loadGraph` method
650
+ - Component Loader of the main NoFlo network is now carried across subgraphs instead of instantiating locally
651
+ - Libraries can provide a custom loader for their components by registering a `noflo.loader` key in the manifest pointing to a CommonJS module
652
+ - Exported ports can now contain metadata
653
+ - It is possible to create named groups of nodes in a NoFlo graph, which can be useful for visual editors
654
+ - Components have an `error` helper method for sending errors to the `error` outport, or throwing them if that isn't attached
614
655
 
615
- ## 0.4.3 (December 6th 2013)
616
-
617
- * ArrayPorts with attached sockets now return `true` for `isAttached` checks. There is a separate `canAttach` method for checking whether more can be added
618
- * Icon support was added for both libraries and components using the set from [Font Awesome](http://fortawesome.github.io/Font-Awesome/icons/)
619
656
  - For libraries, register via the `noflo.icon` key in your `package.json` (Node.js libraries) or `component.json` (browser libraries)
620
657
  - For components, provide via the `icon` attribute
621
- * Subgraphs now support closing their internal NoFlo network via the `shutdown` method
622
- * Component Loader is able to load arbitrary graphs outside of the normal package manifest registration via the `loadGraph` method
623
- * Component Loader of the main NoFlo network is now carried across subgraphs instead of instantiating locally
624
- * Libraries can provide a custom loader for their components by registering a `noflo.loader` key in the manifest pointing to a CommonJS module
625
- * Exported ports can now contain metadata
626
- * It is possible to create named groups of nodes in a NoFlo graph, which can be useful for visual editors
627
- * Components have an `error` helper method for sending errors to the `error` outport, or throwing them if that isn't attached
628
-
629
- ## 0.4.2 (September 28th 2013)
630
-
631
- * Easier debugging: port errors now contain the name of the NoFlo graph node and the port
632
-
633
- ## 0.4.1 (September 25th 2013)
634
658
 
635
- * NoFlo components can now implement a `shutdown` method which is called when they're removed from a network
636
- * Graphs can contain additional metadata in the `properties` key
637
- * NoFlo networks have now a `start` and a `stop` method for starting and stopping execution
638
-
639
- ## 0.4.0 (July 31st 2013)
659
+ ## [0.4.2] - 2013-09-28
660
+ ### Changed
661
+ - Easier debugging: port errors now contain the name of the NoFlo graph node and the port
662
+
663
+ ## [0.4.1] - 2013-09-25
664
+ ### Changed
665
+ - NoFlo components can now implement a `shutdown` method which is called when they're removed from a network
666
+ - Graphs can contain additional metadata in the `properties` key
667
+ - NoFlo networks have now a `start` and a `stop` method for starting and stopping execution
668
+
669
+ ## [0.4.0] - 2013-07-31
670
+ ### Added
671
+ - New BDD tests written with [Mocha](http://visionmedia.github.io/mocha/) that can be run on both browser and server
672
+ - Adding IIPs to a graph will now emit a `addInitial` event instead of an `addEdge` event
673
+
674
+ ### Changed
675
+ - The NoFlo engine has been made available client-side via the [Component](https://github.com/component/component) system
676
+ - All components have been moved to [various component libraries](http://noflojs.org/library/)
677
+ - [Grunt scaffold](https://github.com/bergie/grunt-init-noflo) for easily creating NoFlo component packages including cross-platform test automation
678
+ - NoFlo's internal FBP parser was removed in favor of the [fbp](https://github.com/noflo/fbp) package
679
+ - The `display` property of nodes in the [JSON format](https://github.com/bergie/noflo#noflo-graph-file-format) was removed in favor of the more flexible `metadata` object
680
+ - Support for renaming nodes in a NoFlo graph via the `renameNode` method
681
+ - Graph's `removeEdge` method allows specifying both ends of the connection to prevent ambiguity
682
+ - IIPs can now be removed using the `removeInitial` method, which fires a `removeInitial` event instead of `removeEdge`
683
+ - NoFlo Networks now support delayed starting
684
+ - The `isBrowser` method on the main NoFlo interface tells whether NoFlo is running under browser or Node.js
685
+ - Support for running under Node.js on Windows
640
686
 
641
687
  Browser support:
642
-
643
- * The NoFlo engine has been made available client-side via the [Component](https://github.com/component/component) system
644
- * New BDD tests written with [Mocha](http://visionmedia.github.io/mocha/) that can be run on both browser and server
645
-
646
688
  Changes to components:
647
-
648
- * All components have been moved to [various component libraries](http://noflojs.org/library/)
649
-
650
689
  Development tools:
651
-
652
- * [Grunt scaffold](https://github.com/bergie/grunt-init-noflo) for easily creating NoFlo component packages including cross-platform test automation
653
-
654
690
  File format support:
655
-
656
- * NoFlo's internal FBP parser was removed in favor of the [fbp](https://github.com/noflo/fbp) package
657
- * The `display` property of nodes in the [JSON format](https://github.com/bergie/noflo#noflo-graph-file-format) was removed in favor of the more flexible `metadata` object
658
-
659
691
  Internals:
660
692
 
661
- * Support for renaming nodes in a NoFlo graph via the `renameNode` method
662
- * Adding IIPs to a graph will now emit a `addInitial` event instead of an `addEdge` event
663
- * Graph's `removeEdge` method allows specifying both ends of the connection to prevent ambiguity
664
- * IIPs can now be removed using the `removeInitial` method, which fires a `removeInitial` event instead of `removeEdge`
665
- * NoFlo Networks now support delayed starting
666
- * The `isBrowser` method on the main NoFlo interface tells whether NoFlo is running under browser or Node.js
667
- * Support for running under Node.js on Windows
668
-
669
- ## 0.3.4 (July 5th 2013)
693
+ ## [0.3.4] - 2013-07-05
694
+ ### Added
695
+ - New `LoggingComponent` base class for component libraries
670
696
 
671
697
  Internals:
672
698
 
673
- * New `LoggingComponent` base class for component libraries
674
-
675
- ## 0.3.3 (April 9th 2013)
699
+ ## [0.3.3] - 2013-04-09
700
+ ### Changed
701
+ - Build process was switched from Cake to [Grunt](http://gruntjs.com/)
702
+ - NoFlo is no longer tested against Node.js 0.6
676
703
 
677
704
  Development:
678
705
 
679
- * Build process was switched from Cake to [Grunt](http://gruntjs.com/)
680
- * NoFlo is no longer tested against Node.js 0.6
681
-
682
- ## 0.3.2 (April 9th 2013)
706
+ ## [0.3.2] - 2013-04-09
707
+ ### Changed
708
+ - Ports now support optional type information, allowing editors to visualize compatible port types
709
+ - NoFlo ComponentLoader is now able to register new components and graphs and update package.json files accordingly
710
+ - [noflo-test](https://npmjs.org/package/noflo-test) provides a framework for testing NoFlo components
683
711
 
684
712
  NoFlo internals:
685
-
686
- * Ports now support optional type information, allowing editors to visualize compatible port types
687
-
688
713
  ``` coffeescript
689
714
  @inPorts =
690
715
  in: new noflo.ArrayPort 'object'
@@ -692,62 +717,79 @@ NoFlo internals:
692
717
  @outPorts =
693
718
  out: new noflo.Port 'string'
694
719
  ```
695
-
696
- * NoFlo ComponentLoader is now able to register new components and graphs and update package.json files accordingly
697
-
698
720
  ``` coffeescript
699
721
  loader = new noflo.ComponentLoader __dirname
700
722
  loader.registerComponent 'myproject', 'SayHello', './components/SayHello.json', (err) ->
701
723
  console.error err if err
702
724
  ```
703
-
704
725
  New libraries:
705
726
 
706
- * [noflo-test](https://npmjs.org/package/noflo-test) provides a framework for testing NoFlo components
707
-
708
- ## 0.3.1 (February 13th 2013)
727
+ ## [0.3.1] - 2013-02-13
728
+ ### Changed
729
+ - The NoFlo `.fbp` parser now [guards against recursion](https://github.com/bergie/noflo/pull/57) on inline subgraphs
730
+ - NoFlo subgraphs now inherit the directory context for component loading from the NoFlo process that loaded them
731
+ - Exported ports in NoFlo graphs are now supported also in NoFlo-generated JSON files
732
+ - Nodes in NoFlo graphs can now contain additional metadata to be used for visualization purposes. For example, in FBP format graphs:
733
+ - [noflo-filesystem](https://npmjs.org/package/noflo-filesystem) provides advanced file system components
734
+ - [noflo-github](https://npmjs.org/package/noflo-github) provides components for interacting with the GitHub service
735
+ - [noflo-git](https://npmjs.org/package/noflo-git) provides components for Git revision control system
736
+ - [noflo-oembed](https://npmjs.org/package/noflo-oembed) provides oEmbed protocol support
737
+ - [noflo-redis](https://npmjs.org/package/noflo-redis) provides Redis database components
709
738
 
710
739
  NoFlo internals:
711
-
712
- * The NoFlo `.fbp` parser now [guards against recursion](https://github.com/bergie/noflo/pull/57) on inline subgraphs
713
- * NoFlo subgraphs now inherit the directory context for component loading from the NoFlo process that loaded them
714
- * Exported ports in NoFlo graphs are now supported also in NoFlo-generated JSON files
715
- * Nodes in NoFlo graphs can now contain additional metadata to be used for visualization purposes. For example, in FBP format graphs:
716
-
717
740
  ``` fbp
718
741
  Read(ReadFile:foo) OUT -> IN Display(Output:foo)
719
742
  ```
720
-
721
743
  will cause both the _Read_ and the _Display_ node to contain a `metadata.routes` field with an array containing `foo`. Multiple routes can be specified by separating them with commas
722
-
723
744
  New component libraries:
724
745
 
725
- * [noflo-filesystem](https://npmjs.org/package/noflo-filesystem) provides advanced file system components
726
- * [noflo-github](https://npmjs.org/package/noflo-github) provides components for interacting with the GitHub service
727
- * [noflo-git](https://npmjs.org/package/noflo-git) provides components for Git revision control system
728
- * [noflo-oembed](https://npmjs.org/package/noflo-oembed) provides oEmbed protocol support
729
- * [noflo-redis](https://npmjs.org/package/noflo-redis) provides Redis database components
730
-
731
- ## 0.3.0 (December 19th 2012)
746
+ ## [0.3.0] - 2012-12-19
747
+ ### Changed
748
+ - NoFlo's web-based user interface has been moved to a separate [noflo-ui](https://github.com/bergie/noflo-ui) repository
749
+ - The `noflo` shell command now uses `STDOUT` for debug output (when invoked with `--debug`) instead of `STDERR`
750
+ - [DOT language](http://en.wikipedia.org/wiki/DOT_language) output from NoFlo was made more comprehensive
751
+ - NoFlo graphs can now alias their internal ports to more user-friendly names when used as subgraphs. When aliases are used, the other free ports are not exposed via the _Graph_ component. This works in both FBP and JSON formats:
752
+ - All code was migrated from 4 spaces to 2 space indentation as recommended by [CoffeeScript style guide](https://github.com/polarmobile/coffeescript-style-guide). Our CI environment safeguards this via [CoffeeLint](http://www.coffeelint.org/)
753
+ - Events emitted by ArrayPorts now contain the socket number as a second parameter
754
+ - Initial Information Packet sending was delayed by `process.nextTick` to ensure possible subgraphs are ready
755
+ - The `debug` flag was removed from NoFlo _Network_ class, and the networks were made EventEmitters for more flexible monitoring
756
+ - The `isSubgraph` method tells whether a _Component_ is a subgraph or a regular code component
757
+ - Subgraphs loaded directly by _ComponentLoader_ no longer expose their `graph` port
758
+ - The `addX` methods of _Graph_ now return the object that was added to the graph
759
+ - NoFlo networks now emit `start` and `end` events
760
+ - Component instances have the ID of the node available at the `nodeId` property
761
+ - Empty strings and other falsy values are now allowed as contents of Initial Information Packets
762
+ - _ReadGroup_ now sends the group to a `group` outport, and original packet to `out` port
763
+ - _GetObjectKey_ can now send packets that don't contain the specified key to a `missed` port instead of dropping them
764
+ - _SetPropertyValue_ provides the group hierarchy received via its `in` port when sending packets out
765
+ - _Kick_ can now optionally send out the packet it received via its `data` port when receiving a disconnect on the `in` port. Its `out` port is now an ArrayPort
766
+ - _Concat_ only clears its buffers on disconnect when all inports have connected at least once
767
+ - _SplitStr_ accepts both regular expressions (starting and ending with a `/`) and strings for splitting
768
+ - _ReadDir_ and _Stat_ are now AsyncComponents that can be throttled
769
+ - _MakeDir_ creates a directory at a given path
770
+ - _DirName_ sends the directory name for a given file path
771
+ - _CopyFile_ copies the file behind the path received via the `source` port to the path received via the `destination` port
772
+ - _FilterPacket_ allows filtering packets by regular expressions sent to the `regexp` port. Non-matching packets are sent to the `missed` port
773
+ - _FirstGroup_ allows you to limit group hierarchies of packets to a single level
774
+ - _LastPacket_ sends the last packet it received when getting a disconnect to the inport
775
+ - _MergeGroups_ collects grouped packets from its inports, and sends them out together once each inport has sent data with the same grouping
776
+ - _SimplifyObject_ simplifies the object structures outputted by the _CollectGroups_ component
777
+ - _CountSum_ sums together numbers received from different inports and sends the total out
778
+ - _SplitInSequence_ sends each packet to only one of its outports, going through them in sequence
779
+ - _CollectUntilIdle_ collects packets it receives, waits a given time if there are new packets, and if not, sends them out
780
+ - [noflo-liquid](https://npmjs.org/package/noflo-liquid) provides Liquid Templating functionality
781
+ - [noflo-markdown](https://npmjs.org/package/noflo-markdown) provides Markdown conversion
782
+ - [noflo-diffbot](https://npmjs.org/package/noflo-diffbot) provides access to the Diffbot screen-scraping service
732
783
 
733
784
  User interface:
734
-
735
- * NoFlo's web-based user interface has been moved to a separate [noflo-ui](https://github.com/bergie/noflo-ui) repository
736
- * The `noflo` shell command now uses `STDOUT` for debug output (when invoked with `--debug`) instead of `STDERR`
737
785
  - Events from subgraphs are also visible when the `noflo` command is used with the additional `-s` switch
738
786
  - Contents of packets are shown when the `noflo` command is used with the additional `-v` switch
739
787
  - Shell debug output is no colorized for easier reading
740
- * [DOT language](http://en.wikipedia.org/wiki/DOT_language) output from NoFlo was made more comprehensive
741
- * NoFlo graphs can now alias their internal ports to more user-friendly names when used as subgraphs. When aliases are used, the other free ports are not exposed via the _Graph_ component. This works in both FBP and JSON formats:
742
-
743
788
  For FBP format graphs:
744
-
745
789
  ``` fbp
746
790
  EXPORT=INTERNALPROCESS.PORT:EXTERNALPORT
747
791
  ```
748
-
749
792
  For JSON format graphs:
750
-
751
793
  ``` json
752
794
  {
753
795
  "exports": [
@@ -758,83 +800,38 @@ User interface:
758
800
  ]
759
801
  }
760
802
  ```
761
-
762
803
  NoFlo internals:
763
-
764
- * All code was migrated from 4 spaces to 2 space indentation as recommended by [CoffeeScript style guide](https://github.com/polarmobile/coffeescript-style-guide). Our CI environment safeguards this via [CoffeeLint](http://www.coffeelint.org/)
765
- * Events emitted by ArrayPorts now contain the socket number as a second parameter
766
- * Initial Information Packet sending was delayed by `process.nextTick` to ensure possible subgraphs are ready
767
- * The `debug` flag was removed from NoFlo _Network_ class, and the networks were made EventEmitters for more flexible monitoring
768
- * The `isSubgraph` method tells whether a _Component_ is a subgraph or a regular code component
769
- * Subgraphs loaded directly by _ComponentLoader_ no longer expose their `graph` port
770
- * The `addX` methods of _Graph_ now return the object that was added to the graph
771
- * NoFlo networks now emit `start` and `end` events
772
- * Component instances have the ID of the node available at the `nodeId` property
773
- * Empty strings and other falsy values are now allowed as contents of Initial Information Packets
774
-
775
804
  Changes to core components:
776
-
777
- * _ReadGroup_ now sends the group to a `group` outport, and original packet to `out` port
778
- * _GetObjectKey_ can now send packets that don't contain the specified key to a `missed` port instead of dropping them
779
- * _SetPropertyValue_ provides the group hierarchy received via its `in` port when sending packets out
780
- * _Kick_ can now optionally send out the packet it received via its `data` port when receiving a disconnect on the `in` port. Its `out` port is now an ArrayPort
781
- * _Concat_ only clears its buffers on disconnect when all inports have connected at least once
782
- * _SplitStr_ accepts both regular expressions (starting and ending with a `/`) and strings for splitting
783
- * _ReadDir_ and _Stat_ are now AsyncComponents that can be throttled
784
-
785
805
  New core components:
786
-
787
- * _MakeDir_ creates a directory at a given path
788
- * _DirName_ sends the directory name for a given file path
789
- * _CopyFile_ copies the file behind the path received via the `source` port to the path received via the `destination` port
790
- * _FilterPacket_ allows filtering packets by regular expressions sent to the `regexp` port. Non-matching packets are sent to the `missed` port
791
- * _FirstGroup_ allows you to limit group hierarchies of packets to a single level
792
- * _LastPacket_ sends the last packet it received when getting a disconnect to the inport
793
- * _MergeGroups_ collects grouped packets from its inports, and sends them out together once each inport has sent data with the same grouping
794
- * _SimplifyObject_ simplifies the object structures outputted by the _CollectGroups_ component
795
- * _CountSum_ sums together numbers received from different inports and sends the total out
796
- * _SplitInSequence_ sends each packet to only one of its outports, going through them in sequence
797
- * _CollectUntilIdle_ collects packets it receives, waits a given time if there are new packets, and if not, sends them out
798
-
799
806
  New component libraries:
800
807
 
801
- * [noflo-liquid](https://npmjs.org/package/noflo-liquid) provides Liquid Templating functionality
802
- * [noflo-markdown](https://npmjs.org/package/noflo-markdown) provides Markdown conversion
803
- * [noflo-diffbot](https://npmjs.org/package/noflo-diffbot) provides access to the Diffbot screen-scraping service
804
-
805
- ## 0.2.0 (November 13th 2012)
808
+ ## [0.2.0] - 2012-11-13
809
+ ### Added
810
+ - New _ComponentLoader_ to support loading components and subgraphs to installed NPM modules
811
+
812
+ ### Changed
813
+ - Message Queue components were moved to [noflo-mq](https://npmjs.org/package/noflo-mq)
814
+ - HTML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-html)
815
+ - XML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-xml)
816
+ - YAML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-yaml)
817
+ - Web Server components were moved to [noflo-webserver](https://npmjs.org/package/noflo-webserver)
818
+ - CouchDB components were moved to [noflo-couchdb](https://npmjs.org/package/noflo-couchdb)
819
+ - BaseCamp API components were moved to [noflo-basecamp](https://npmjs.org/package/noflo-basecamp)
820
+ - Restful Metrics components were moved to [noflo-restfulmetrics](https://npmjs.org/package/noflo-restfulmetrics)
821
+ - The `noflo` command-line tool now has a new `list` command for listing components available for a given directory, for example: `$ noflo list .`
822
+ - NoFlo's own codebase was moved to direct requires making the NPM installation simpler
823
+ - [daemon](https://npmjs.org/package/daemon) dependency was removed from NoFlo's command-line tools
824
+ - _Merge_ only disconnects once all of its inports have disconnected
825
+ - _Concat_ only disconnects once all of its inports have disconnected
826
+ - _CompileString_'s `in` port is now an ArrayPort
827
+ - _GroupByObjectKey_ also supports boolean values for the matched keys
828
+ - _ReadDir_ disconnects after reading a directory
829
+ - _Drop_ allows explicitly dropping packets in a graph. The component performs no operations on the data it receives
806
830
 
807
831
  The main change in 0.2 series was component packaging support and the fact that most component with external dependencies were moved to their own NPM packages:
808
-
809
- * Message Queue components were moved to [noflo-mq](https://npmjs.org/package/noflo-mq)
810
- * HTML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-html)
811
- * XML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-xml)
812
- * YAML parsing components were moved to [noflo-html](https://npmjs.org/package/noflo-yaml)
813
- * Web Server components were moved to [noflo-webserver](https://npmjs.org/package/noflo-webserver)
814
- * CouchDB components were moved to [noflo-couchdb](https://npmjs.org/package/noflo-couchdb)
815
- * BaseCamp API components were moved to [noflo-basecamp](https://npmjs.org/package/noflo-basecamp)
816
- * Restful Metrics components were moved to [noflo-restfulmetrics](https://npmjs.org/package/noflo-restfulmetrics)
817
-
818
832
  To use the components, install the corresponding NPM package and change the component's name in your graph to include the package namespace. For example, `yaml/ParseYaml` for the _ParseYaml_ component in the _noflo-yaml_ package
819
-
820
833
  User interface:
821
-
822
- * The `noflo` command-line tool now has a new `list` command for listing components available for a given directory, for example: `$ noflo list .`
823
-
824
834
  NoFlo internals:
825
-
826
- * New _ComponentLoader_ to support loading components and subgraphs to installed NPM modules
827
- * NoFlo's own codebase was moved to direct requires making the NPM installation simpler
828
- * [daemon](https://npmjs.org/package/daemon) dependency was removed from NoFlo's command-line tools
829
-
830
835
  Changes to core components:
831
-
832
- * _Merge_ only disconnects once all of its inports have disconnected
833
- * _Concat_ only disconnects once all of its inports have disconnected
834
- * _CompileString_'s `in` port is now an ArrayPort
835
- * _GroupByObjectKey_ also supports boolean values for the matched keys
836
- * _ReadDir_ disconnects after reading a directory
837
-
838
836
  New core components:
839
837
 
840
- * _Drop_ allows explicitly dropping packets in a graph. The component performs no operations on the data it receives