<commit_before><div align="center">
  <a href="http://github.com/flyjs/fly">
    <img width=120px  src="https://cloud.githubusercontent.com/assets/8317250/8733685/0be81080-2c40-11e5-98d2-c634f076ccd7.png">
  </a>
</div>

# Changelog

+ [v0.5.0](#v050)
+ [v0.4.0](#v040)
+ [v0.3.4](#v034)
+ [v0.3.1](#v031)
+ [v0.3.0](#v030)
  + [Multitasking](#multitasking)
  + [New Examples](#new-examples)
+ [v0.2.0](#v020)
  + [Async Transformers](#async-transformers)
+ [v0.1.11](#v0111)
+ [v0.1.10](#v0110)
+ [v0.1.9](#v019)
+ [v0.1.8](#v018)
+ [v0.1.7](#v017)
  + [Cascading Tasks](#cascading-tasks)
+ [v0.1.6](#v016)
+ [v0.1.5](#v015)
+ [v0.1.4](#v014)
+ [v0.1.3](#v013)
+ [v0.1.2](#v012)
+ [v0.1.1](#v011)
+ [v0.1.0](#v010)
  + [Multi-Flyfile Support](#multi-flyfile-support)
  + [Plugins API update](#plugins-api-update)
  + [`watch` API update](#watch-api-update)
+ [v0.0.1](#v001)

## v0.5.0

+ :boom: Fix Fly's own `flyfile.js` to compile with fly. If you have fly installed globally just type `fly` to compile fly, otherwise type `bin/index`. For full instrumentation type: `DEBUG="fly*" fly` or `env DEBUG="fly*" fly`.

+ :boom: Upgrade to [`parsec@1.3.0`](https://github.com/bucaran/parsec/blob/master/src/index.js) that featured a complete rewrite and several improvements.

+ :boom: Fix bug where plugin closures created by `Fly.proto.filter` where bound to the fly instance `.filter` instead of the Fly instance that would exist during concurrent execution.

  > Loading plugins (invoking each plugin's default export function) occurs only once during Fly's instantiation by the CLI. Some plugins may inject dependencies directly into the Fly instance or use `Fly.proto.filter` at this time. Before, `.filter` would create a closure by means of an arrow function bound to the new Fly instance. This would break concurrent tasks using `fly-*` plugins as described by [#73](https://github.com/flyjs/fly/issues/73).
  
  > Each task running in parallel is invoked bound to a copy of the Fly instance which is obtained via `Object.create(fly)`. This fix does not bind the closure created in `.filter` to any object, thus the correct `this` reference to any Fly instance is always picked up.

+ Fix encoding issue during `.source` → `.target` simple file copies of non-text files. Fixes [#72](https://github.com/flyjs/fly/issues/72)

+ Fix bug in `Fly.proto.target` where target directory name was not specified, and only the new file name was used to copy to _target_. The result was each `.target` write operation would create a flat tree skipping subdirectories and writing everything to the _target_ directory.

+ Improve `Fly.proto.target` with more instrumentation and simplify recursive reduce filter.<commit_msg>updates and add notes regarding encoding<commit_after><div align="center">
  <a href="http://github.com/flyjs/fly">
    <img width=120px  src="https://cloud.githubusercontent.com/assets/8317250/8733685/0be81080-2c40-11e5-98d2-c634f076ccd7.png">
  </a>
</div>

# Changelog

+ [v0.6.0](#v060)
+ [v0.5.0](#v050)
+ [v0.4.0](#v040)
+ [v0.3.4](#v034)
+ [v0.3.1](#v031)
+ [v0.3.0](#v030)
  + [Multitasking](#multitasking)
  + [New Examples](#new-examples)
+ [v0.2.0](#v020)
  + [Async Transformers](#async-transformers)
+ [v0.1.11](#v0111)
+ [v0.1.10](#v0110)
+ [v0.1.9](#v019)
+ [v0.1.8](#v018)
+ [v0.1.7](#v017)
  + [Cascading Tasks](#cascading-tasks)
+ [v0.1.6](#v016)
+ [v0.1.5](#v015)
+ [v0.1.4](#v014)
+ [v0.1.3](#v013)
+ [v0.1.2](#v012)
+ [v0.1.1](#v011)
+ [v0.1.0](#v010)
  + [Multi-Flyfile Support](#multi-flyfile-support)
  + [Plugins API update](#plugins-api-update)
  + [`watch` API update](#watch-api-update)
+ [v0.0.1](#v001)

## v0.6.0

+ Improve build workflow by removing `dist` from repository and using `npm prepublish` step to compile Fly.

+ :boom: :boom: Fix encoding bug that was corrupting non-text files. Now Fly can read/filter/write any type of files, but there is a minor caveat:

> Now filters and plugins, will receive the **raw data** as opposed to a _string_. This means if the filter/plugin is expecting a string, (for example `fly-coffescript` expects the source code to compile as a string) you need to convert the data to a string _before_ you can call any `String.prototype` methods on it.

  For example:

  ```js
  export default function* () {
    yield this
      .source("words.txt")
      .filter((data) => `${data}\n`)
      .target("dist")
  }
  ```

  or


  ```js
  export default function* () {
    yield this
      .source("words.txt")
      .filter((data) => data.toString() + "\n")
      .target("dist")
  }
  ```

  > Documentation, examples and existing plugins have been updated.


+ :boom: Following up on the above mentioned fix, `Fly.proto.encoding` has been deprecated starting from this `@0.6.0`.

## v0.5.0

+ :boom: Fix Fly's own `flyfile.js` to compile with fly. If you have fly installed globally just type `fly` to compile fly, otherwise type `bin/index`. For full instrumentation type: `DEBUG="fly*" fly` or `env DEBUG="fly*" fly`.

+ :boom: Upgrade to [`parsec@1.3.0`](https://github.com/bucaran/parsec/blob/master/src/index.js) that featured a complete rewrite and several improvements.

+ :boom: Fix bug where plugin closures created by `Fly.proto.filter` where bound to the fly instance `.filter` instead of the Fly instance that would exist during concurrent execution.

  > Loading plugins (invoking each plugin's default export function) occurs only once during Fly's instantiation by the CLI. Some plugins may inject dependencies directly into the Fly instance or use `Fly.proto.filter` at this time. Before, `.filter` would create a closure by means of an arrow function bound to the new Fly instance. This would break concurrent tasks using `fly-*` plugins as described by [#73](https://github.com/flyjs/fly/issues/73).

  > Each task running in parallel is invoked bound to a copy of the Fly instance which is obtained via `Object.create(fly)`. This fix does not bind the closure created in `.filter` to any object, thus the correct `this` reference to any Fly instance is always picked up.

+ Fix encoding issue during `.source` → `.target` simple file copies of non-text files. Fixes [#72](https://github.com/flyjs/fly/issues/72)

+ Fix bug in `Fly.proto.target` where target directory name was not specified, and only the new file name was used to copy to _target_. The result was each `.target` write operation would create a flat tree skipping subdirectories and writing everything to the _target_ directory.

+ Improve `Fly.proto.target` with more instrumentation and simplify recursive reduce filter.
{'fraction_non_alphanumeric': 0.1443955710602154, 'fraction_numerical': 0.053693311087517064, 'mean_word_length': 4.167711598746082, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 21, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5120992', 'n_tokens_mistral': 2435, 'n_tokens_neox': 2185, 'n_words': 739}