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