# input-reader

> Library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.

Latest version **2.0.1** (published 2019-07-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install input-reader
pnpm add input-reader
yarn add input-reader
bun add input-reader
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2019-07-05 |
| First published | 2018-03-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 15.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Łukasz Jenczmyk |
| Maintainers | lukix |

## Links

- npm: https://www.npmjs.com/package/input-reader
- Repository: https://github.com/lukix/input-reader
- Homepage: https://github.com/lukix/input-reader#readme
- Issues: https://github.com/lukix/input-reader/issues
- npm.io page: https://npm.io/package/input-reader

## Dependencies (1)

- [zip-array](https://npm.io/package/zip-array.md) 1.0.1

## Recent versions

- 2.0.1 (latest) — 2019-07-05
- 2.0.0 — 2019-02-02
- 1.0.0 — 2018-03-10

## README

# input-reader
JavaScript library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.

## Quick Start
### Installation
```bash
npm install --save input-reader
```

### Example usage
```javascript
const reader = require('input-reader')
const data = `
    4 2
    9 1 2 3
`
const pattern = `
    a b
    c ...arr
`
reader(data, pattern) // { a: 4, b: 2, c: 9, arr: [1, 2, 3] }
```

## API
Module exports single function, which takes three parameters:
```javascript
reader(data, pattern, options)
```
**Parameters:**
* **data** - string containing input data.
* **pattern** - string describing how **data** should be mapped to the returned object.
* **options** - object specifying additional behaviour. Optional.

**Return value:**
* Object containing input data placed in properties sepecified by **pattern** parameter.

### Pattern syntax
**Single-line mapping**
```javascript
const data = '1 2'
const pattern = 'foo bar'
reader(data, pattern) // { foo: 1, bar: 2 }
```

**Multi-line mapping**
```javascript
const data = `
    1 2
    3 4 5
`
const pattern = `
    foo bar
    a b c
`
reader(data, pattern) // { foo: 1, bar: 2, a: 3, b: 4, c: 5 }
```

**Rest operator**
Rest operator collects all the remaining elements of the line into an array. It must be used as the last symbol of the line.
```javascript
const data = `
    1 2 3 4
`
const pattern = `
    foo ...bar
`
reader(data, pattern) // { foo: 1, bar: [2, 3, 4] }
```

**Multi-line rest operator**
Multi-line rest operator collects all the remaining lines into an array. It can be only used in the last line of a pattern string.
```javascript
const data = `
    9
    8 7
    6 5
`
const pattern = `
    foo
    ...bar[a b]
`
reader(data, pattern) // { foo: 9, bar: [{ a: 8, b: 7 }, { a: 6, b: 5 }] }
```

**Empty multi-line rest operator**
If you don't specify the structure of each line, all the values will be collected directly into arrays.
```javascript
const data = `
    9
    8 7
    6 5
`
const pattern = `
    foo
    ...bar[]
`
reader(data, pattern) // { foo: 9, bar: [[8, 7], [6, 5]] }
```

**Nested rest operator**
```javascript
const data = `
    9
    1 2 3 4
    5 6 7 8
`
const pattern = `
    foo
    ...bar[a ...b]
`
reader(data, pattern) // { foo: 9, bar: [{ a: 1, b: [2, 3, 4] }, { a: 5, b: [6, 7, 8] }] }
```

**Convert to numbers**
```javascript
const data = '1 hello'
const pattern = 'foo bar'
reader(data, pattern, { convertToNumbers: true }) // { foo: 1, bar: 'hello' }
reader(data, pattern, { convertToNumbers: false }) // { foo: '1', bar: 'hello' }
```

### Options
Property&nbsp;Name | Type | Default&nbsp;Value | Description
--- | --- | --- | ---
convertToNumbers | boolean | true | If true, all elements will be converted to *Number* type. If conversion results in *NaN* value, then the original type and value will be left.

---
_Source: https://npm.io/package/input-reader · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
