KyleRoss/kinesis-events

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# kinesis-events
[![npm](https://img.shields.io/npm/v/kinesis-events.svg?style=for-the-badge)](https://www.npmjs.com/package/kinesis-events) [![npm](https://img.shields.io/npm/dt/kinesis-events.svg?style=for-the-badge)](https://www.npmjs.com/package/kinesis-events) [![David](https://img.shields.io/david/KyleRoss/kinesis-events.svg?style=for-the-badge)](https://david-dm.org/KyleRoss/kinesis-events) [![Travis](https://img.shields.io/travis/KyleRoss/kinesis-events/master.svg?style=for-the-badge)](https://travis-ci.org/KyleRoss/kinesis-events) [![license](https://img.shields.io/github/license/KyleRoss/kinesis-events.svg?style=for-the-badge)](https://github.com/KyleRoss/kinesis-events/blob/master/LICENSE) [![Beerpay](https://img.shields.io/beerpay/KyleRoss/kinesis-events.svg?style=for-the-badge)](https://beerpay.io/KyleRoss/kinesis-events)

AWS Kinesis event parser and handler for Lambda consumers. Ability to parse kinesis events with error handling and JSON support. Supports Node 8.10+ on AWS Lambda.

---

## Install
```bash
npm i --save kinesis-events
```

## Usage
```js
const kinesisEvents = require('kinesis-events');

// Lambda function handler
exports.handler = async event => {
    // Parse the records
    const result = kinesisEvents.parse(event);
    
    // Check for errors (optional)
    if(result.hasErrors) {
        console.error('There are errors while parsing, ending process...');
        process.exit(1);
    }
    
    result.records.forEach(record => {
        //... iterate through the parsed records
    });
};
```

---

# API Documentation
<a name="module_kinesis-events"></a>

## kinesis-events
<a name="exp_module_kinesis-events--kinesisEvents"></a>

### kinesisEvents : [<code>KinesisEvents</code>](#KinesisEvents) ⏏
Instance of the [KinesisEvents](#kinesisevents) class which is exported when calling `require('kinesis-events')`.
For more advanced usage, you may create a new instance of KinesisEvents (see example below).

**Kind**: Exported KinesisEvents Instance  
**Example**  
```js
const kinesisEvents = require('kinesis-events');

// Advanced usage
const { KinesisEvents } = require('kinesis-events');
const kinesisEvents = new KinesisEvents({
    // options...
});
```
<a name="ParseError"></a>

## ParseError ⇐ <code>Error</code>
Custom error that is generated when there is a parsing error.

**Kind**: global class  
**Extends**: <code>Error</code>  
<a name="ParseError+payload"></a>

### parseError.payload : <code>String</code>
The original data that caused the error.

**Kind**: instance property of [<code>ParseError</code>](#ParseError)  
<a name="KinesisEvents"></a>

## KinesisEvents
**Kind**: global class  

* [KinesisEvents](#KinesisEvents)
    * [new KinesisEvents([options])](#new_KinesisEvents_new)
    * [kinesisEvents.options](#KinesisEvents+options) : <code>Object</code>
    * [kinesisEvents.ParseError](#KinesisEvents+ParseError) : [<code>ParseError</code>](#ParseError)
    * [kinesisEvents.parse(records, [json])](#KinesisEvents+parse) ⇒ [<code>RecordSet</code>](#RecordSet)

<a name="new_KinesisEvents_new"></a>

### new KinesisEvents([options])
Constructor for KinesisEvents.


| Param | Type | Default | Description |
| --- | --- | --- | --- |
| [options] | <code>Object</code> | <code>{}</code> | Options object to control certain features of KinesisEvents. |
| [options.transform(record, index)] | <code>function</code> |  | Optional transform function to call for each record. See [Transform Function](#transform-function). |

<a name="KinesisEvents+options"></a>

### kinesisEvents.options : <code>Object</code>
Options object for KinesisEvents. Allows overridding options after instantiation.

**Kind**: instance property of [<code>KinesisEvents</code>](#KinesisEvents)  
**Example**  
```js
kinesisEvents.options.transform = function(record, index) {
    // transform record...
    return record;
};
```
<a name="KinesisEvents+ParseError"></a>

### kinesisEvents.ParseError : [<code>ParseError</code>](#ParseError)
Access to the ParseError class.

**Kind**: instance property of [<code>KinesisEvents</code>](#KinesisEvents)  
**Read only**: true  
<a name="KinesisEvents+parse"></a>

### kinesisEvents.parse(records, [json]) ⇒ [<code>RecordSet</code>](#RecordSet)
Parses records from the incoming Kinesis event.

**Kind**: instance method of [<code>KinesisEvents</code>](#KinesisEvents)  
**Returns**: [<code>RecordSet</code>](#RecordSet) - New instance of RecordSet with the parsed records.  

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| records | <code>Array</code> |  | Event data (records) to parse. |
| [json] | <code>Boolean</code> | <code>true</code> | Enable/disable JSON parsing for each event. |

**Example**  
```js
const result = kinesisEvents.parse(event.Records);

result.records.forEach(record => {
    // do something with each record...
});
```
<a name="RecordSet"></a>

## RecordSet
A set of parsed records with additional functionality.

**Kind**: global class  

* [RecordSet](#RecordSet)
    * [recordSet.records](#RecordSet+records) : <code>Array</code>
    * [recordSet.failed](#RecordSet+failed) : [<code>Array.&lt;ParseError&gt;</code>](#ParseError)
    * [recordSet.length](#RecordSet+length) : <code>Number</code>
    * [recordSet.hasErrors](#RecordSet+hasErrors) : <code>Boolean</code>

<a name="RecordSet+records"></a>

### recordSet.records : <code>Array</code>
The records within this record set.

**Kind**: instance property of [<code>RecordSet</code>](#RecordSet)  
<a name="RecordSet+failed"></a>

### recordSet.failed : [<code>Array.&lt;ParseError&gt;</code>](#ParseError)
List of failed records (ParseError).

**Kind**: instance property of [<code>RecordSet</code>](#RecordSet)  
<a name="RecordSet+length"></a>

### recordSet.length : <code>Number</code>
The total number of parsed records in the record set.

**Kind**: instance property of [<code>RecordSet</code>](#RecordSet)  
**Read only**: true  
<a name="RecordSet+hasErrors"></a>

### recordSet.hasErrors : <code>Boolean</code>
Boolean flag if this record set has failed records.

**Kind**: instance property of [<code>RecordSet</code>](#RecordSet)  
**Read only**: true  
## Transform Function
New in v3.0.0, there is now an option to pass in a transform function that will allow you to transform the record before it is added to the RecordSet. This allows custom functionality or business logic to be implemented at a higher level.

The transform function takes 2 arguments, `record` and `index`. The function must return the transformed record in order for it to be added to the RecordSet. If the record is not returned from the function, it will be ignored.

```js
const { KinesisEvents } = require('kinesis-events');
const kinesisEvents = new KinesisEvents({
    transform: (record, index) => {
        if(record.firstName && record.lastName) {
            // example, remove record if data is missing
            return null;
        }
        
        record.someCustomProperty = 'some custom value';
        return record;
    }
});
```

---

## Tests
Tests are written and provided as part of the module. It requires mocha to be installed which is included as a `devDependency`. You may run the tests by calling:

```bash
$ npm run test
```

## License
MIT License. See [License](https://github.com/KyleRoss/kinesis-events/blob/master/LICENSE) in the repository.