Licensed under either the [WTFPL](http://www.wtfpl.net/txt/copying/) or [CC0](https://creativecommons.org/publicdomain/zero/1.0/), at your choice. In practice, that means it's more or less public domain, and you can do whatever you want with it. Giving credit is *not* required, but still very much appreciated! I'd love to [hear from you](mailto:admin@cryto.net) if this module was useful to you.
Creating and maintaining open-source modules is a lot of work. A donation is also not required, but much appreciated! You can donate [here](http://cryto.net/~joepie91/donate.html).
## Example
A runnable version of this example can be found in `example.js` in the repository.
Creates and returns a new `consumableValue`, optionally with an `initialValue`.
The consumable will be considered to have been 'set' if the `initialValue` is *not*`undefined`. If you intend to initialize it with `undefined` as an explicit value, you should use a separate `.set` call instead.
### consumableValue.consume()
Returns whatever value is currently set, and unsets it internally. Future calls to `.consume`, `.peek` and `.replace` will fail until a new value is `.set`.
Throws if no value is currently set.
### consumableValue.peek()
Returns the currently-set value, but does not unset it internally. This is a utility function for edge cases, and not intended as the main API - if you are only using `.peek` and not `.consume`, then you probably don't need this library at all.
Throws if no value is currently set.
### consumableValue.set(newValue)
Sets a new value, overriding the previous one if any.
- __newValue:__ The new value to set.
### consumableValue.replace(newValue)
A combination of `.consume` and `.set`; returns the previously-set value and sets the specified `newValue` as the new value.
- __newValue:__ The new value to set.
Throws if no value is currently set.
### consumableValue.isSet()
Returns `true` when a value is currently set, or `false` otherwise.