# thesmo-range-generator

> Range generators collection

Latest version **1.4.6** (published 2020-03-18) · MIT license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install thesmo-range-generator
pnpm add thesmo-range-generator
yarn add thesmo-range-generator
bun add thesmo-range-generator
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 1.4.6 |
| Published | 2020-03-18 |
| First published | 2020-01-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 16.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | revrulb |
| Maintainers | revrulb |
| Keywords | range, array, generation, range-generation, array-generation, iota |

## Links

- npm: https://www.npmjs.com/package/thesmo-range-generator
- Repository: https://github.com/revrulb/thesmo-range-generator
- Homepage: https://github.com/revrulb/thesmo-range-generator#readme
- Issues: https://github.com/revrulb/thesmo-range-generator/issues
- npm.io page: https://npm.io/package/thesmo-range-generator

## Dependencies (1)

- [@babel/runtime](https://npm.io/package/@babel/runtime.md) latest

## Recent versions

- 1.4.6 (latest) — 2020-03-18
- 1.4.5 — 2020-03-17
- 1.4.4 — 2020-02-29
- 1.4.3 — 2020-02-28
- 1.4.2 — 2020-02-14
- 1.4.1 — 2020-02-08
- 1.4.0 — 2020-02-04
- 1.3.1 — 2020-02-02
- 1.3.0 — 2020-02-02
- 1.2.0 — 2020-01-31
- 1.1.11 — 2020-01-29
- 1.1.10 — 2020-01-29
- 1.1.9 — 2020-01-28
- 1.1.8 — 2020-01-28
- 1.1.7 — 2020-01-28
- … 11 more at https://npm.io/package/thesmo-range-generator/versions

## README

# Range generator

![npm](https://img.shields.io/npm/v/thesmo-range-generator?style=for-the-badge)
![GitHub](https://img.shields.io/github/license/revrulb/thesmo-range-generator?style=for-the-badge)
![GitHub last commit](https://img.shields.io/github/last-commit/revrulb/thesmo-range-generator?style=for-the-badge)
![npm](https://img.shields.io/npm/dm/thesmo-range-generator?style=for-the-badge)

## Summary
This package contains the collection of methods for ranges generating. It includes simple numeric ranges and ranges of user types with custom member generators, so any approach can be used.

## API
- [ByBordersAndStep](#by-borders-and-step)
- [ByGeneratorAndQuitCondition](#by-generator-and-quit-condition)
- [CustomByBordersAndStep](#custom-by-borders-and-step)
- [RepeatMember](#repeat-member)

## API methods clarification
### <a id='by-borders-and-step'></a> ByBordersAndStep
#### Signature
```javascript
/* arguments object */
({ 
    inclusiveDownBorder: number, 
    notInclusiveUpBorder: number, 
    step?: number //1 by default
})
/* returns */
number[]
```
#### Usage example
```javascript
const { ByBordersAndStep } = require("thesmo-range-generator");

//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
const foo = ByBordersAndStep({ 
    inclusiveDownBorder: 0, 
    notInclusiveUpBorder: 10 
});

//[0, 4, 8, 12, 16]
const bar = ByBordersAndStep({ 
    inclusiveDownBorder: 0, 
    notInclusiveUpBorder: 20, 
    step: 4 
});
```

### <a id='by-generator-and-quit-condition'></a> ByGeneratorAndQuitCondition
#### Signature
```javascript
/* arguments object */
({ 
    firstMember: any, 
    generator: (previousMember: any, currentZeroBasedIndex: number) => any, 
    quitCondition: (member: any, arrayLength: number) => boolean
})
/* returns */
MemberType[]
```
#### Usage example
```javascript
const { ByGeneratorAndQuitCondition } = require("thesmo-range-generator");

// [{ a: 1, index: 0 }, { a: 2, index: 1 }, { a: 4, index: 2 }, { a: 8, index: 3 }]
const generatedRangeOfTestEntities = ByGeneratorAndQuitCondition({
    quitCondition: (member, arrayLength) => member.a > 8,
    firstMember: {a: 1, index: 0},
    generator: (previousMember, currentZeroBasedIndex) => { 
        return { 
            a: previousMember.a * 2, 
            index: currentZeroBasedIndex 
        }
    }
})
```

### <a id='custom-by-borders-and-step'></a> CustomByBordersAndStep
#### Signature
```javascript
/* arguments object */
({ 
    inclusiveDownBorder: any, 
    notInclusiveUpBorder: any,
    step: any,
    sumOperation: (firstOperand: any, secondOperand: any) => any, 
    firstOperandIsGreaterThanSecond: (firstOperand: any, secondOperand: any) => boolean
})
/* returns */
any[]
```

#### Usage example
```javascript
const { CustomByBordersAndStep } = require("thesmo-range-generator");

// [ {a: 0}, {a: 1}, {a: 2}, {a: 3} ]
const rangeOfTestEntities = CustomByBordersAndStep({
    firstOperandIsGreaterThanSecond: (firstOperand, secondOperand) => firstOperand.a > secondOperand.a,
    inclusiveDownBorder: {a: 0},
    notInclusiveUpBorder: {a: 4},
    step: {a: 1},
    sumOperation: (firstOperand, secondOperand) => {
        return {
            a: firstOperand.a + secondOperand.a
        }
    }
});
```

### <a id='repeat-member'></a> RepeatMember
#### Signature
```javascript
/* arguments object */
({ 
    member: any, 
    times: number,
    //no mutations will be applied if current parameter is not set
    mutateMemberByIndex?: (sourceMember: any, index: number) => any
})
/* returns */
MemberType[]
```
#### Usage example
```javascript
const { RepeatMember } = require("thesmo-range-generator")

// [54, 54]
const numberRepeated2Times = RepeatMember({member: 54, times: 2});

// [{a: 11}, {a: 11}, {a: 11}, {a: 11}, {a: 11}]
const testEntityRepeated5Times = RepeatMember({member: {a: 11}, times: 5});

// [{a: 11}, {a: 12}, {a: 13}, {a: 14}, {a: 15}]
const testEntityRepeated5TimesWithMutator = RepeatMember({
    member: {a: 11}, 
    times: 5, 
    mutateMemberByIndex: (sourceMember, index) => {
        return { 
            a: sourceMember.a + index 
        };
    }
});
```

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