- Add
build
event to watcher
- Remove redundant
beginBuild
/endBuild
(formerlystart
/end
) events on builder
- Improve test suite
- Minor cosmetic changes
-
Add
watcher.watch()
method.Watcher
no longer automatically starts watching; instead, you must call this method explicitly. It returns a promise that is fulfilled if you later callwatcher.quit()
, or rejected if watching one of the source directories fails.server
will callwatcher.watch()
for you.- In contrast,
getMiddleware
expects a watcher that is already watching.
-
Drop support for plugins that implement only the old
.read/.rebuild
API -
Fail build when a source node is a file rather than a directory
-
Fail build when a source node doesn't exist
-
Builder API changes:
new Builder
has atmpdir
option, which defaults toos.tmpdir()
(typically/tmp
); pass{ tmpdir: './tmp' }
to get the old behavior.build()
no longer returns a promise to the output path; instead, the output path stored atbuilder.outputPath
and doesn't change between buildsstart
,end
,nodeStart
,nodeEnd
events renamed tobeginBuild
,endBuild
,beginNode
,endNode
- Nodes passed to
nodeBegin
/nodeEnd
arguments are "node wrapper" objects (also accessible atbuilder.nodeWrappers
); timings now reside atnodeWrapper.buildState.selfTime/totalTime
and are in milliseconds, not nanoseconds build()
no longer takes awillReadStringTree
callback argument; instead, source directories are recorded atbuilder.watchedPaths
-
Watcher API changes:
- Add
watcher.quit()
method, which returns a promise until a running build has finished (if any) - Rename
watcher.current
towatcher.currentBuild
, and removewatcher.then
- Use
RSVP.EventTarget
instead ofEventEmitter
for events
- Add
-
Build error objects have been changed to
Builder.BuildError
objects, which contain additional information aterr.broccoliPayload
- Add builder hooks
- Export watcher and middleware as
Watcher
andgetMiddleware
- Export watcher and middleware
- On BROCCOLI_WARN_READ_API=y, print deprecation warning for .rebuild as well
- Return server objects for easier extensibility
- Do not silently swallow errors in change/error event handlers
- Add missing dependency
- Add Node interface to Builder, to enable building visualizations
- Export
Builder.getDescription(tree)
helper function - Add footer to directory listings, so people know where they come from
- Remove built-in LiveReload server; tools like Ember CLI inject LiveReload scripts, which is generally preferable because it doesn't need a separate port
- Send
Cache-Control
header for directory listings and redirects - Honor
liveReloadPath
middleware option in directory listings as well - Add
autoIndex
middleware option to disable directory listings
- Correctly display multi-line error messages
- Add ability to inject live-reload script into error messages
- Hide API warnings behind $BROCCOLI_WARN_READ_API env flag
- Add support for new error API
- Fail fast if
build
output directory already exists
- Print deprecation warnings for plugins only providing old
.read
API
- Add support for new
.rebuild
API, in addition to existing (now deprecated).read
API
- Throw helpful error when we encounter as-yet unsupported
.rebuild
-based plugins
- Add missing
var
- More detailed error message when a tree object is invalid
- Watcher no longer rebuilds forever when a very early build error occurs
- Fix SIGINT/SIGTERM (Ctrl+C) handling to avoid leaking tmp files
- Extract slow trees printout into broccoli-slow-trees package
- Allow the tree
cleanup
method to be asynchronous (by returning a promise).
- Update dependencies to fix
various low-severity vulnerabilities
in
broccoli serve
- Dereference symlinks in
broccoli build
output by copying the files or directories they point to into place - Sort entries when browsing directories in middleware
- Exclude
logo
andtest
directories from npm distribution
- Fix directory handling in server on Windows
- Show directory listing with
broccoli serve
when there is noindex.html
- Add
willReadStringTree
callback argument toBuilder::build
and retireBuilder::treesRead
- Update
Watcher
andBuilder
interaction to prevent double builds. - Avoid unhandled rejected promise
- Fix trailing slash handling in server on Windows
- Change
Watcher
'schange
event to provide the full build results (instead of just the directory). - Add slow tree logging to
broccoli serve
output. - Add logo
- Move process.exit listener out of builder into server
- Change
Builder::build()
method to return a{ directory, graph }
hash instead of only the directory, wheregraph
contains the output directories and timings for each tree - Avoid keeping file streams open in server, to fix EBUSY issues on Windows
Brocfile.js
now exports a tree, not a function (sample diff)
- Extract bowerTrees into broccoli-bower plugin (sample diff)
- Update dependencies
- Do not use hardlinks in bower implementation
- Remove
broccoli.MergedTree
; it has been extracted into broccoli-merge-trees (sample diff)
- Disallow returning arrays from Brocfile.js, in favor of broccoli-merge-trees plugin (sample diff)
- Remove
broccoli.makeTree('foo')
in favor of string literals (just'foo'
) (sample diff) - Remove
broccoli.Reader
- Add
--version
command line option
- Correct mis-publish on npm
- Preserve value/error on Watcher::current promise
- This version has been unpublished due to a mis-publish
- Extract
broccoli.helpers
into broccoli-kitchen-sink-helpers package
- Report unhandled errors in the watcher
- Add support for
.treeDir
property on error objects - Improve watcher logic to stop double builds when build errors happen
- Bind to
localhost
instead of0.0.0.0
(whole wide world) by default
- Overwrite mis-pushed release
- Refactor watcher logic to use promises
- Turn the hapi server into a connect middleware
- Use smaller
bower-config
package instead ofbower
to parsebower.json
files
- Add
--port
,--host
, and--live-reload-port
options toserve
command
- Update hapi dependency to avoid file handle leaks, causing EMFILE errors
- In addition to
Brocfile.js
, accept lowercasebrocfile.js
- Fix error reporting for string exceptions
- Rename
Broccolifile.js
toBrocfile.js
- Change default port from 8000 to 4200
- Make
tree.cleanup
non-optional - Rename
broccoli.read
tobroccoli.makeTree
- Bump to indicate beta status
- Remove unused
helpers.walkSync
(now in node-walk-sync)
- Extract
Transformer
intobroccoli-transform
package (now "Transform
") - Extract
Filter
intobroccoli-filter
package
- In plugin (tree) API, replace
.afterBuild
with.cleanup
- Move temporary directories out of the way
- Extract
factory.env
into broccoli-env package - Eliminate
factory
argument to Broccolifile
- Change to a
.read
-based everything-is-a-tree architecture - Various performance improvements
- Various plugin API changes
- Add
MergedTree
- Broccolifile may now return an array of trees, which will be merged
- Expose
broccoli.bowerTrees()
, which will hopefully be redesigned and go away again - Remove
Component
base class - Remove
CompilerCollection
andCompiler
base class; use aTransformer
- Remove
Tree::addTransform
,Tree::addTrees
, andTree::addBower
Builder::build
now has a promise interface as well
- Expect a
Tree
, not aBuilder
, returned from Broccolifile.js
- Fold
Reader
intoTree
- Replace
PreprocessorPipeline
andPreprocessor
withFilter
; eachFilter
is added directly on the tree or builder withaddTransform
- Bind to
0.0.0.0
instead oflocalhost
- Add
factory.env
based on$BROCCOLI_ENV
- Do not fail on invalid Cookie header
- Use promises instead of callbacks in all external APIs
- Here be dragons