
## scramjet
Scramjet main exports expose all the stream classes and a number of methods.
All scramjet streams allow writing, reading or transform modes - currently
exclusively (meaning you can't have two at once). Any of the scramjet streams
can be constructed with the following options passed to mimic node.js standard streams:
* `async promiseTransform(chunk)` - transform method that resolves with a single output chunk
* `async promiseWrite(chunk)` - write method that that resolves when chunk is written
* `async promiseRead(count)` - read method that resolves with an array of chunks when called
See [node.js API for stream implementers for details](https://nodejs.org/api/stream.html#stream_api_for_stream_implementers)
The object exposes the following classes:
* `DataStream` {@see DataStream} - the basic object stream of any type
* `StringStream` {@see StringStream} - a stream of strings
* `BufferStream` {@see BufferStream} - a stream of buffers
* `MultiStream` {@see MultiStream} - a group of streams
* `NumberStream` {@see NumberStream} - a stream of numbers
* `WindowStream` {@see WindowStream} - a stream of windows of objects
The general concept of Scramjet streams is facilitating node's TransformStream mechanism so that you don't need
to create a number of streams and create the pipeline, but use the concept of chaining instead. When you call `parse`
method for instance, scramjet creates a new stream, pipes it to the callee and forwards errors.
What's worth mentioning - scramjet tries to limit the number of created transform streams and pushes the transforms
one after another into the same stream class therefore a code `stream.map(transform1).map(transform2).filter(transform3)`
will only operate on a single transform stream that evaluates all three transforms one after another.
* [scramjet](#module_scramjet)
* [:StreamWorker](#module_scramjet.StreamWorker) [StreamWorker](stream-worker.md#module_scramjet.StreamWorker)
* [:from(input, [options])](#module_scramjet.from) [DataStream](data-stream.md#module_scramjet.DataStream)
* [:fromArray(array, [options])](#module_scramjet.fromArray) [DataStream](data-stream.md#module_scramjet.DataStream)
* [:createTransformModule(transform, [options])](#module_scramjet.createTransformModule) function
* [:createReadModule(anything, [options])](#module_scramjet.createReadModule) function
* [:plugin(mixin)](#module_scramjet.plugin) [ScramjetPlugin](definitions.md#module_scramjet..ScramjetPlugin)
* [:API(version)](#module_scramjet.API) [ScramjetPlugin](definitions.md#module_scramjet..ScramjetPlugin)
### scramjet:StreamWorker : StreamWorker
A Stream Worker class
**Kind**: static property of [scramjet](#module_scramjet)
**Inject**: StreamWorker
### scramjet:from(input, [options]) : DataStream
Creates a DataStream that's piped from the passed readable.
**Kind**: static method of [scramjet](#module_scramjet)
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| input | Array \| Iterable.<any> \| AsyncGeneratorFunction \| GeneratorFunction \| AsyncFunction \| function \| string \| Readable | | argument to be turned into new stream |
| [options] | [DataStreamOptions](definitions.md#module_scramjet..DataStreamOptions) \| Writable | {} | options for creation of a new stream or the target stream |
| ...args | Array.<any> | | additional arguments for the stream - will be passed to the function or generator |
### scramjet:fromArray(array, [options]) : DataStream
Creates a DataStream from an Array
**Kind**: static method of [scramjet](#module_scramjet)
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| array | Array | | list of chunks |
| [options] | [DataStreamOptions](definitions.md#module_scramjet..DataStreamOptions) | {} | the read stream options |
### scramjet:createTransformModule(transform, [options]) : function
Creates a safe wrapper for scramjet transform module. See [Modules documentation](modules.md) for more info.
**Kind**: static method of [scramjet](#module_scramjet)
**Returns**: function - a scramjet module function
| Param | Type | Default |
| --- | --- | --- |
| transform | [UseCallback](definitions.md#module_scramjet..UseCallback) | |
| [options] | [CreateModuleOptions](definitions.md#module_scramjet..CreateModuleOptions) | {} |
| ...initialArgs | Array.<any> | |
### scramjet:createReadModule(anything, [options]) : function
Creates a safe wrapper for scramjet read module. See [Modules documentation](modules.md) for more info.
**Kind**: static method of [scramjet](#module_scramjet)
**Returns**: function - a scramjet module function
| Param | Type | Default |
| --- | --- | --- |
| anything | Array \| Iterable.<any> \| AsyncGeneratorFunction \| GeneratorFunction \| AsyncFunction \| function \| string \| Readable | |
| [options] | [CreateModuleOptions](definitions.md#module_scramjet..CreateModuleOptions) | {} |
| ...initialArgs | Array.<any> | |
### scramjet:plugin(mixin) : ScramjetPlugin
Plugs in methods for any of the classes
**Kind**: static method of [scramjet](#module_scramjet)
**Test**: test/methods/scramjet-plugin.js
| Param | Type | Description |
| --- | --- | --- |
| mixin | [ScramjetPlugin](definitions.md#module_scramjet..ScramjetPlugin) | the plugin object |
### scramjet:API(version) : ScramjetPlugin
Gets an API version (this may be important for future use)
**Kind**: static method of [scramjet](#module_scramjet)
| Param | Type | Description |
| --- | --- | --- |
| version | number | The required version (currently only: 1) |