Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

620 lines (507 sloc) 24.058 kb


v4.0.0 March 17, 2015

  • Removed spawnCommand and spawnCommands use spawn and spawnMultiple instead

v3.0.2 March 17, 2015

  • Will no longer attempt to read stdout and stderr on spawn if stdio option is set (it's not possible)

v3.0.1 March 17, 2015

  • Fixed Buffer concatenation error inside spawn

v3.0.0 March 17, 2015

  • Backwards Compatibility Breaks:
    • spawn's stdout and stderr are now Buffers
      • If you're upgrading, all you have to do to get the previous functionality is to do stdout.toString()
    • outputPrefix value no longer affects stdout and stderr results (only their output to the terminal)
  • Added:
    • hasSpawnSync
    • hasExecSync
    • isExecutable(path, opts?, next)
    • isExecutableSync(path, opts?, next?)
    • spawnSync(command, opts?, next?)
    • execSync(command, opts?, next?)
  • Improvements:
    • exec now supports outputPrefix option
    • The checks to see if an executable path exists and works have been greatly improved and abstracted out from determineExecPath into isExecutable and isExecutableSync
    • determineExecPath, getExecPath, and isExecutable can now operate synchronously with a callback using the sync: true option
    • Retrieval and writing to a path cache can now be disabled using the cache: false option
  • Updated dependencies

v2.2.13 February 7, 2015

  • Updated dependencies

v2.2.12 May 21, 2014

  • Fix execMultiple
  • Updated dependencies

v2.2.11 January 10, 2014

  • Added outputPrefix option for safeps.spawn

v2.2.10 December 27, 2013

  • Updated dependencies

v2.2.9 November 6, 2013

  • Repackaged
  • Updated dependencies

v2.2.8 September 16, 2013

  • Fixed Error: A task's completion callback has fired when the task was already in a completed state, this is unexpected when an error occurs before close within a spawned process

v2.2.7 August 29, 2013

  • Updated dependencies

v2.2.6 June 29, 2013

  • Added support for .cmd aliases on windows to getPossibleExecPaths

v2.2.5 June 29, 2013

  • Split out possible exec path functionality from getExecPath to getPossibleExecPaths(execName?)
  • Added support for .bat aliases on windows to getPossibleExecPaths
  • More efficient possible exec paths ordering when on windows

v2.2.4 June 25, 2013

  • Repackaged

v2.2.3 June 25, 2013

  • spawn now works when stdio is set to inherit

v2.2.2 June 24, 2013

  • determineExecPath now works for processes that do not implement --version
  • spawn now won't crash on EACCESS errors

v2.2.1 June 24, 2013

  • determinePossibleExecPath is now more effecient
  • getGitPath, getNodePath, getNpmPath won't added undefined paths
  • spawn
    • now inherits our process.env by default, can be changed with opts.env
    • now sends signal and code in the completion callback correctly
    • now works
  • getExecPath
    • now caches the result
    • won't currupt absolute paths
    • will work with relative paths

v2.2.0 June 24, 2013

  • Split from bal-util
  • spawn is now safe rather than just spawnCommand
  • spawn now waits for close instead of exit
  • getEnvironmentPaths now uses require('path').delimiter for seperation
  • getStandardExecPaths now uses require('path').join for joining execName to a possible path
  • initGitRepo, initOrPullGitRepo and initNodeModules now use opts.cwd instead of opts.path

v2.1.0 May 25, 2013

  • balUtilEvent changes:
    • Event listeners can now have priorities. Highest priorities run first. Set them by listener.priority = 500
    • Added off alias for removeListener

v2.0.5 April 25, 2013

  • balUtilFlow changes:
    • extractOptsAndCallback now accepts config argument
  • balUtilPaths changes:
    • readPath now uses Wget/1.14 (linux-gnu) as the default user agent

v2.0.4 April 6, 2013

  • balUtilPaths changes:
    • Fixed redirect handling on readPath

v2.0.3 April 5, 2013

  • balUtilModules changes:
    • Fixed spawnCommands
    • initGitRepo and initNodeModules now take a log function rather than a logger object (regards opts)

v2.0.2 April 5, 2013

  • balUtilModules changes:
    • Fixed spawnCommand and spawnCommands
    • closeProcess now deprecated in favor of completion callback on openProcess

v2.0.1 April 5, 2013

  • balUtilPaths changes:
    • Removed safefs aliases

v2.0.0 April 5, 2013

  • We no longer alias split off projects, you should use them directly now
  • balUtilModules changes:
    • Killed (git|node|npm)(Command|Commands) functions, use spawnCommand and spawnCommands instead
  • balUtilHTML changes:
    • replaceElementAsync now executes tasks in parallel rather than in serial

v1.17.0 March 27, 2013

  • Killed explicit browser support, use Browserify instead
  • Removed the out directory from git
  • Now compiled with the coffee-script bare option

v1.16.13 March 23, 2013

  • balUtilEvents changes:
    • EventEmitterEnhanced changes:
      • Now works with once calls in node 0.10.0
      • Changed emitSync to be an alias to emitSerial and emitAsync to be an alias to emitParallel
      • Added new getListenerGroup function
  • balUtilFlow changes:
    • fireWithOptionalCallback can now take the method as an array of [fireMethod,introspectMethod] useful for pesly binds

v1.16.12 March 18, 2013

  • balUtilFlow changes:
    • Groups::run signature changed from no arguments to a single mode argument

v1.16.11 March 10, 2013

  • balUtilModules changes:
    • Fixed getCountryCode and getLanguageCode failing when there is no locale code

v1.16.10 March 8, 2013

  • balUtilModules changes:
    • Fixed requireFresh regression, added test

v1.16.9 March 8, 2013

  • balUtilModules changes:
    • Added getLocaleCode
    • Added getCountryCode
    • Added getLanguageCode

v1.16.8 February 16, 2013

  • balUtilModules changes:
    • spawnMultiple, execMultiple: now accept a tasksMode option that can be serial (default) or parallel

v1.16.7 February 12, 2013

  • balUtilPaths changes:
    • readPath: do not prefer gzip, but still support it for decoding, as the zlib library is buggy

v1.16.6 February 12, 2013

  • balUtilPaths changes:
    • readPath: add support for gzip decoding for node 0.6 and higher

v1.16.5 February 6, 2013

v1.16.4 February 6, 2013

v1.16.3 February 5, 2013

  • Node v0.4 support
  • balUtilPaths changes:
    • Removed deprecated console.logs when errors occur (they are now sent to the callback)
    • Fixed determineExecPath when executable requires the environment configuration
  • balUtilTypes changes:
    • isEmptyObject now works for empty values (e.g. null)
  • balUtilFlow changes:
    • Added clone
    • Added deepClone
    • setDeep and getDeep now handle undefined values correctly

v1.16.2 February 1, 2013

  • balUtilPaths changes:
    • Added timeout support to readPath
  • balUtilFlow changes:
    • Added setDeep
    • Added getDeep

v1.16.1 January 25, 2013

  • balUtilFlow changes:
    • Added safeShallowExtendPlainObjects
    • Added safeDeepExtendPlainObjects

v1.16.0 January 24, 2013

  • Node v0.9 compatability
  • balUtilModules changes:
    • Added getEnvironmentPaths
    • Added getStandardExecPaths(execName)
    • exec now supports the output option
    • determineExecPath now resolves the possible paths and checks for their existance
      • This avoids Node v0.9's ENOENT crash when executing a path that doesn't exit
    • getExecPath will now try for .exe paths as well when running on windows if an extension hasn't already been defined
    • getGitPath, getNodePath, getNpmPath will now also check the environment paths
  • balUtilFlow changes:
    • Added createSnore
    • Added suffixArray
    • flow now accepts the signatures ({object,actions,action,args,tasks,next}), (object, action, args, next) and (actions,args,next)
    • Group changes:
      • mode can now be either parallel or serial, rather than async and sync
      • async() is now parallel() (aliased for b/c)
      • sync() is now serial() (aliased for b/c)
  • balUtilTypes changes:
    • Added isEmptyObject

v1.15.4 January 8, 2013

  • balUtilPaths changes:
    • Renamed testIgnorePatterns to isIgnoredPath
      • Added aliases for b/c compatibility
    • Added new ignorePaths option

v1.15.3 December 24, 2012

  • balUtilModules changes:
    • Added requireFresh

v1.15.2 December 16, 2012

  • balUtilPaths changes:
    • Fixed scandir not inheriting ignore patterns when recursing

v1.15.1 December 15, 2012

  • balUtilPaths changes:
    • Fixed testIgnorePatterns when ignoreCommonPatterns is set to true

v1.15.0 December 15, 2012

  • balUtilPaths changes:
    • Added testIgnorePatterns
    • Renamed ignorePatterns to ignoreCommonPatterns, and added new ignoreCustomPatterns
      • Affects scandir options
    • Added emac cache files to ignoreCommonPatterns

v1.14.1 December 14, 2012

  • balUtilModules changes:
    • Added getExecPath that will fetch an executable path based on the paths within the environment PATH variable
  • Rebuilt with CoffeeScript 1.4.x

v1.14.0 November 23, 2012

  • balUtilPaths changes:
    • readPath will now follow url redirects

v1.13.13 October 26, 2012

  • balUtilPaths changes:
    • Files that start with ~ are now correctly ignored in commonIgnorePatterns

v1.13.12 October 22, 2012

  • balUtilFlow changes:
    • extend is now an alias of shallowExtendPlainObjects as they were exactly the same
  • balUtilHTML changes:
    • replaceElement and replaceElementAsync changes:
      • now accept arguments in object form as well
      • accept a removeIndentation argument that defaults to true

v1.13.11 October 22, 2012

  • balUtilPaths changes:
    • ensurePath now returns err and exists instead of just err
  • balUtilModules changes:
    • initGitRepo will now default remote to origin and branch to master
    • Added initOrPullGitRepo

v1.13.10 October 7, 2012

  • balUtilPaths changes:
    • Added shallowExtendPlainObjects

v1.13.9 October 7, 2012

v1.13.8 October 2, 2012

  • balUtilModules changes:
    • Added openProcess and closeProcess, and using them in spawn and exec, used to prevent EMFILE errors when there are too many open processes
    • Max number of open processes is configurable via the NODE_MAX_OPEN_PROCESSES environment variable balUtilPaths changes:
    • Max number of open files is now configurable via theNODE_MAX_OPEN_FILES environment variable

v1.13.7 September 24, 2012

  • balUtilPaths changes:
    • Added textExtensions and binaryExtensions
      • The environment variables TEXT_EXTENSIONS and BINARY_EXTENSIONS will append to these arrays
    • Added isText and isTextSync

v1.13.6 September 18, 2012

  • balUtilPaths changes:
    • Improved getEncoding/getEncodingSync detection
      • Will now scan start, middle and end, instead of just middle

v1.13.5 September 13, 2012

  • balUtilPaths changes:
    • Added getEncoding and getEncodingSync

v1.13.4 August 28, 2012

  • balUtilModules changes:
    • Failing to retrieve the path on getGitPath, getNodePath and getNpmPath will now result in an error

v1.13.3 August 28, 2012

  • balUtilModules changes:
    • Fixed exec and execMultiple
    • Added gitCommands, nodeCommands and npmCommands
  • Dropped node v0.4 support, min required version now 0.6

v1.13.2 August 16, 2012

  • Repackaged

v1.13.1 August 16, 2012

  • balUtilHTML changes:
    • Fixed replaceElement from mixing up elements that start with our desired selector, instead of being only our desired selector

v1.13.0 August 3, 2012

  • balUtilModules changes:
    • Added determineExecPath, getNpmPath, getTmpPath, nodeCommand and gitCommand
    • initNodeModules and initGitRepo will now get the determined path of the executable if a path isn't passed
  • Re-added markdown files to npm distribution as they are required for the npm website

v1.12.5 July 18, 2012

  • balUtilTypes changes:
    • Better checks for isString and isNumber under some environments
  • balUtilFlow changes:
    • Removed ambigious clone function, use dereference or extend or deepExtendPlainObjects instead

v1.12.4 July 12, 2012

  • balUtilTypes changes:
    • isObject now also checks truthyness to avoid null and undefined from being objects
    • isPlainObject got so good, it can't get better
  • balUtilFlow changes:
    • added deepExtendPlainObjects

v1.12.3 July 12, 2012

  • balUtilModules changes:
    • npmCommand will now only prefix with the nodePath if the npmPath exists
    • npmCommand and initNodeModules now use async fs calls instead of sync calls

v1.12.2 July 12, 2012

  • balUtilFlow changes:
    • Added dereference

v1.12.1 July 10, 2012

  • balUtilModules changes:
    • Added stdin option to spawn

v1.12.0 July 7, 2012

  • Rejigged balUtilTypes and now top level
    • Other components now make use of this instead of inline typeof and instanceof checks
  • balUtilFlow changes:
    • isArray and toString moved to balUtilTypes

v1.11.2 July 7, 2012

  • balUtilFlow changes:
    • Added clone
  • balUtilModules changes:
    • Fixed exists warning on initNodeModules
  • balUtilPaths changes:
    • Added scanlist
    • scandir changes:
      • If readFiles is true, then we will return the contents into the list entries as well as the tree entries (we weren't doing this for lists before)

v1.11.1 July 4, 2012

  • balUtilFlow changes:
    • Group changes:
      • Cleaned up the context handling code
    • Block changes:
      • Block constructor as well as createSubBlock arguments is now a single opts object, acceping the options name, fn, parentBlock and the new complete
      • Fixed bug introduced in v1.11.0 causing blocks to complete instantly (instead of once their tasks are finished)

v1.11.0 July 1, 2012

  • Added balUtilHTML:
    • getAttribute(attributes,attribute)
    • detectIndentation(source)
    • removeIndentation(source)
    • replaceElement(source, elementNameMatcher, replaceElementCallback)
    • replaceElementAsync(source, elementNameMatcher, replaceElementCallback, next)
  • balUtilFlow changes:
    • wait(delay,fn) introduced as an alternative to setTimeout
    • Group changes:
      • push and pushAndRun signatures are now ([context], task)
        • context is optional, and what we should bind to this
        • it saves us having to often wrap our task pushing into for each scopes
      • task completion callbacks are now optional, if not specified a task will be completed as soon as it finishes executing
  • balUtilEvents, balUtilModules changes:
    • Now make use of the balUtilFlow.push|pushAndRun new context argument to simplify some loops

v1.10.3 June 26, 2012

  • balUtilModules changes:
    • initNodeModules will now install modules from cache, unless force is true

v1.10.2 June 26, 2012

  • balUtilModules changes:
    • initNodeModules will now never install modules from cache

v1.10.1 June 26, 2012

  • balUtilModules changes:
    • Fixed npmCommand under some situations

v1.10.0 June 26, 2012

  • balUtilModules changes:
    • Added spawnMultiple, execMultiple, gitGitPath, getNodePath, and npmCommand
    • spawn and exec are now only for single commands, use the new spawnMultiple and execMultiple for multiple commands instead
    • error exit code is now anything that isnt 0

v1.9.4 June 22, 2012

  • Fixed a problem with large asynchronous groups

v1.9.3 June 22, 2012

  • balUtilFlow changes:
    • Added extractOptsAndCallback and extend

v1.9.2 June 21, 2012

  • balUtilFlow changes:
    • Added fireWithOptionalCallback, updated groups and emitters to use this

v1.9.1 June 21, 2012

  • balUtilModules changes:
    • initNodeModules now supports output option

v1.9.0 June 21, 2012

  • balUtilEvents changes:
    • EventEmitterEnhanced changes:
      • emitSync and emitAsync changes:
        • The next callback is now optional, if it is not detected then we will automatically mark the listener as completed once we have executed it (in other words, if it doesn't have a next callback, then we treat it as a synchronous listener)

v1.8.8 June 19, 2012

  • Fixed a problem with large synchronous groups

v1.8.7 June 19, 2012

  • Defaulted dependencies to an empty object, to hopefully fix npm issue #2540

v1.8.6 June 19, 2012

  • balUtilEvents changes:
    • Split emitSync and emitAsync out of EventSystem and into new EventEmitterEnhanced that EventSystem extends

v1.8.5 June 11, 2012

  • Made next callbacks necessary by default

v1.8.4 June 11, 2012

  • balUtilModule changes:
    • spawn
      • will now return results in the order of err, stdout, stderr, code, signal
      • now splits string commands using / /
  • balUtilFlow changes:
    • Group will now only return error as an array if we have more than one error
  • Updated for Joe v1.0.0

v1.8.3 June 9, 2012

  • balUtilCompare changes:
    • packageCompare will now fail gracefully if it receives malformed json

v1.8.2 June 9, 2012

  • Removed request dependency, we now use the native http/https modules

v1.8.1 June 9, 2012

  • Restructured directories
  • Removed generated docs, use the wiki instead
  • Moved tests from Mocha to Joe
  • Travis now tests against node v0.7
  • balUtilPaths changes:
    • Added exists and existsSync to normalize node's 0.6 to 0.8 api differences
  • Made request an optional dependency

v1.8.0 June 9, 2012

  • Added expiremental balUtilFlow.Block
  • Possibly some undocumented balUtilFlow.Group changes

v1.7.0 June 4, 2012

  • balUtilFlow changes:
    • Group changes:
      • Constructor now supports next and mode arguments in any order
      • clear() now clears everything
      • Added hasTasks()
      • Group completion callback's first argument (the error argument) is now an array of errors (or null if no errors)
      • Added breakOnError option (defaults to true)
      • Added autoClear option to clear once all tasks have run (defualts to false)

v1.6.5 May 30, 2012

  • balUtilFlow changes:
    • Group changes:
      • Reverted the change made in v1.6.4 where errors in callbacks still increment the complete count
        • Instead, you should be using the hasExited() instead of hasCompleted() which is used to find out if everything passed successfully

v1.6.4 May 30, 2012

  • balUtilFlow changes:
    • Added flow({object,action,[args],[tasks],next}) to simplify calling a series of functions of an object
    • Group changes:
      • If complete callback is called with an error, it'll still increment the complete count (it didn't before)
      • Added hasExited()
  • balUtilPaths changes:
    • writeFile will now call ensurePath before writing the file

v1.6.3 May 22, 2012

  • balUtilPaths changes:
    • Fixed a problem introduced with v1.6.0 with isDirectory not opening the file before closing it
    • If the number of open files becomes a negative number, we will now throw an error
    • Decreased the max amount of allowed open files from 500 to 100
    • Increased the wait time for opening a file from 50 to 100
      • This is now customisable through the global waitingToOpenFileDelay

v1.6.2 May 13, 2012

  • Added support for balUtilFlow and balUtilTypes to be used inside web browsers

v1.6.1 May 4, 2012

  • balUtilPaths changes:
    • Fixed initNodeModules

v1.6.0 May 4, 2012

  • We now pre-compile our coffee-script
  • balUtilPaths changes:
    • Added readFile, writeFile, mkdir, stat, readdir, unlink, rmdir
    • Renamed rmdir to rmdirDeep
  • balUtilModules changes:
    • Removed initGitSubmodules, gitPull
    • Added initGitRepo
    • Rewrote initNodeModules

v1.5.0 April 18, 2012

  • balUtilPaths changes:
    • scan was removed, not sure what it was used for
    • isDirectory now returns the fileStat argument to the callback
    • scandir changes:
      • ignorePatterns option when set to true now uses the new balUtilPaths.commonIgnorePatterns property
      • fixed error throwing when passed an invalid path
      • now supports a new stat option
      • will return the fileStat argument to the fileAction and dirAction callbacks
      • ignorePatterns and ignoreHiddenFiles will now correctly be passed to child scandir calls
    • cpdir and rpdir now uses path.join and support ignoreHiddenFiles and ignorePatterns
    • writetree now uses path.join

v1.4.3 April 14, 2012

  • CoffeeScript dependency is now bundled
  • Fixed incorrect octal 0700 should have been 700

v1.4.2 April 5, 2012

  • Fixed a failing test due to the bal-util.npm to bal-util rename
  • Improvements to balUtilModules.spawn
    • will only return an error if the exit code was 1
    • will also contain the code and signal with the results
    • results[x][0] is now the stderr string, rather than an error object

v1.4.1 April 5, 2012

  • Added spawn to balUtilModules
  • Added ignoreHiddenFiles option to balUtilPaths.scandir

v1.4.0 April 2, 2012

  • Renamed balUtilGroups to balUtilFlow
  • Added toString, isArray and each to balUtilFlow
  • Added rpdir, empty, and isPathOlderThan to balUtilPaths

v1.3.0 February 26, 2012

  • Added openFile and closeFile to open and close files safely (always stays below the maximum number of allowed open files)
  • Updated all path utilities to use openFile and closeFile
  • Added npm scripts

v1.2.0 February 14, 2012

  • Removed single and multi modes from exec, now always returns the same consistent callback(err,results) instead

v1.1.0 February 6, 2012

  • Modularized
  • Added docco docs

v1.0 February 5, 2012

  • Moved unit tests to Mocha
    • Offers more flexible unit testing
    • Offers better guarantees that tests actually ran, and that they actually ran correctly
  • Added readPath and scantree
  • Added readFiles option to scandir
  • scandir now supports arguments in object format
  • Removed parallel
  • Tasks inside groups now are passed next as there only argument
  • Removed resolvePath, expandPath and expandPaths, they were essentially the same as path.resolve
  • Most functions will now chain
  • comparePackage now supports comparing two local, or two remote packages
  • Added gitPull

v0.9 January 18, 2012

  • Added exec, initNodeModules, initGitSubmodules, EventSystem.when
  • Added support for no callbacks

v0.8 November 2, 2011

  • Considerable improvements to scandir, cpdir and rmdir
    • Note, passing false as the file or dir actions will now skip all of that type. Pass null if you do not want that.
    • dirAction is now fired before we read the directories children, if you want it to fire after then in the next callback, pass a callback in the 3rd argument. See rmdir for an example of this.
  • Fixed npm web to url warnings

v0.7 October 3, 2011

  • Added versionCompare and packageCompare functions
    • Added request dependency

v0.6 September 14, 2011

  • Updated util.Group to support async and sync grouping

v0.4 June 2, 2011

  • Added util.type for testing the type of a variable
  • Added util.expandPath and util.expandPaths

v0.3 June 1, 2011

  • Added util.Group class for your async needs :)

v0.2 May 20, 2011

  • Added some tests with expresso
  • util.scandir now returns err,list,tree
  • Added util.writetree

v0.1 May 18, 2011

  • Initial commit
Jump to Line
Something went wrong with that request. Please try again.