| OLD | NEW | 
| (Empty) |  | 
 |    1 ## 0.15.2+7 | 
 |    2  | 
 |    3 * Add periodic fine-grained logging for long running transformers. | 
 |    4  | 
 |    5 ## 0.15.2+6 | 
 |    6  | 
 |    7 * Fix a deadlock that occurred occasionally when a declaring transformer was | 
 |    8   followed by a lazy transformer (most commonly `$dart2js`). | 
 |    9  | 
 |   10 ## 0.15.2+5 | 
 |   11  | 
 |   12 * If a transformer requests a non-existent asset from another package, it will | 
 |   13   now be re-run if that asset is later created. | 
 |   14  | 
 |   15 ## 0.15.2+4 | 
 |   16  | 
 |   17 * Fix an incorrect example. | 
 |   18  | 
 |   19 ## 0.15.2+3 | 
 |   20  | 
 |   21 * Clarify that a transform may emit any number of outputs. | 
 |   22  | 
 |   23 ## 0.15.2+2 | 
 |   24  | 
 |   25 * Fix a bug in listing all assets from a static package. | 
 |   26  | 
 |   27 ## 0.15.2+1 | 
 |   28  | 
 |   29 * Properly handle logs from a transformer that's been canceled. | 
 |   30  | 
 |   31 ## 0.15.2 | 
 |   32  | 
 |   33 * Add a `StaticPackageProvider` class to more efficiently handle immutable, | 
 |   34   untransformed packages. | 
 |   35  | 
 |   36 ## 0.15.0+1 | 
 |   37  | 
 |   38 * Widen the version constraint on the `collection` package. | 
 |   39  | 
 |   40 ## 0.15.0 | 
 |   41  | 
 |   42 * Fully switch from `source_maps`' `Span` class to `source_span`'s `SourceSpan` | 
 |   43   class. | 
 |   44  | 
 |   45 ## 0.14.2 | 
 |   46  | 
 |   47 * All TransformLogger methods now accept SourceSpans from the source_span | 
 |   48   package in addition to Spans from the source_maps package. In 0.15.0, only | 
 |   49   SourceSpans will be accepted. | 
 |   50  | 
 |   51 ## 0.14.1+3 | 
 |   52  | 
 |   53 * Add a dependency on the `pool` package. | 
 |   54  | 
 |   55 ## 0.14.1+2 | 
 |   56  | 
 |   57 * Automatically log how long it takes long-running transforms to run. | 
 |   58  | 
 |   59 ## 0.14.1+1 | 
 |   60  | 
 |   61 * Fix a bug where an event could be added to a closed stream. | 
 |   62  | 
 |   63 ## 0.14.1 | 
 |   64  | 
 |   65 * Add an `AggregateTransformer` type. Aggregate transformers transform groups of | 
 |   66   assets for which no single asset is primary. For example, one could be used to | 
 |   67   merge all images in a directory into a single file. | 
 |   68  | 
 |   69 * Add a `message` getter to `TransformerException` and `AssetLoadException`. | 
 |   70  | 
 |   71 * Fix a bug where transformers would occasionally emit stale output after their | 
 |   72   inputs changed. | 
 |   73  | 
 |   74 ## 0.14.0+3 | 
 |   75  | 
 |   76 * Properly handle synchronous errors in `PackageProvider.getAsset()`. | 
 |   77  | 
 |   78 ## 0.14.0+2 | 
 |   79  | 
 |   80 * Fix a bug with the previous bug fix. | 
 |   81  | 
 |   82 ## 0.14.0+1 | 
 |   83  | 
 |   84 * Fix a bug where a transformer group preceded by another transformer group | 
 |   85   would sometimes fail to load secondary assets. | 
 |   86  | 
 |   87 ## 0.14.0 | 
 |   88  | 
 |   89 * **Breaking change**: when an output of a lazy transformer is requested, that | 
 |   90   transformer will run long enough to generate the output, then become lazy | 
 |   91   again. Previously, it would become eager as soon as an asset had been | 
 |   92   requested. | 
 |   93  | 
 |   94 * Only run `Transformer.isPrimary` and `Transformer.declareOutputs` once for | 
 |   95   each asset. | 
 |   96  | 
 |   97 * Lazy transformers' laziness is preserved when followed by | 
 |   98   declaring transformers, or by normal transformers for which the lazy outputs | 
 |   99   aren't primary. | 
 |  100  | 
 |  101 * Fix a bug where reading the primary input using `Transform.readInputAsString` | 
 |  102   had slightly different behavior than reading it using | 
 |  103   `Transform.primary.readAsString`. | 
 |  104  | 
 |  105 * Fix a crashing bug when `Barback.getAllAssets` is called synchronously after | 
 |  106   creating a new `Barback` instance. | 
 |  107  | 
 |  108 * Don't warn if a lazy or declaring transformer doesn't emit outputs that it has | 
 |  109   declared. This is valid for transformers like dart2js that need to read their | 
 |  110   primary input in order to determine whether they should run. | 
 |  111  | 
 |  112 * Allow `Transformer.isPrimary`, `Transformer.apply`, and | 
 |  113   `DeclaringTransformer.declareOutputs` to return non-`Future` values if they | 
 |  114   run synchronously. | 
 |  115  | 
 |  116 * Fix a deadlock bug when a lazy primary input to a lazy transformer became | 
 |  117   dirty while the transformer's `apply` method was running. | 
 |  118  | 
 |  119 * Run declaring transformers with lazy inputs eagerly if the inputs become | 
 |  120   available. | 
 |  121  | 
 |  122 ## 0.13.0 | 
 |  123  | 
 |  124 * `Transformer.isPrimary` now takes an `AssetId` rather than an `Asset`. | 
 |  125  | 
 |  126 * `DeclaringTransform` now only exposes the primary input's `AssetId`, rather | 
 |  127   than the primary `Asset` object. | 
 |  128  | 
 |  129 * `DeclaringTransform` no longer supports `getInput`, `readInput`, | 
 |  130   `readInputAsString`, or `hasInput`. | 
 |  131  | 
 |  132 ## 0.12.0 | 
 |  133  | 
 |  134 * Add a `Transform.logger.fine` function that doesn't print its messages by | 
 |  135   default. When using Barback with pub in verbose mode, these messages will be | 
 |  136   printed. | 
 |  137  | 
 |  138 * Add a `Transform.hasInput` function that returns whether or not a given | 
 |  139   secondary input exists. | 
 |  140  | 
 |  141 * `Transformer.allowedExtensions` now supports extensions containing multiple | 
 |  142   periods, such as `.dart.js`. | 
 |  143  | 
 |  144 * Transforms now pass their primary inputs through to the next phase by default. | 
 |  145   A transformer may still overwrite its primary input without causing a | 
 |  146   collision. If a transformer doesn't overwrite its primary input, it may cause | 
 |  147   it not to be passed through by calling `Transform.consumePrimary`. The primary | 
 |  148   input will be consumed by default if a transformer throws an error. | 
 |  149  | 
 |  150 * If an input requested with `Transform.getInput`, `Transform.readInput`, or | 
 |  151   `Transform.readInputAsString` cannot be found, an `AssetNotFoundException` | 
 |  152   will be thrown. This was always what the documentation said, but previously a | 
 |  153   `MissingInputException` was thrown instead. | 
 |  154  | 
 |  155 * If a transformer calls `Transform.logger.error`, the transformer will now be | 
 |  156   considered to have failed after it finishes running `apply()`. This means that | 
 |  157   its outputs will not be consumed by future transformers and its primary input | 
 |  158   will not be passed through to the next phase. | 
 |  159  | 
 |  160 * If a transform calls `Transform.getInput`, `Transform.readInput`, | 
 |  161   `Transform.readInputAsString`, or `Transform.hasInput` on an input that | 
 |  162   doesn't exist, the transform will be re-run if that input is created in the | 
 |  163   future. | 
| OLD | NEW |