extra-iterator 0.10.3 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -5
- package/dist/index.js +16 -9
- package/dist/index.test.js +21 -7
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -46,12 +46,21 @@ export declare class ExtraIterator<T> extends Iterator<T, any, any> {
|
|
|
46
46
|
*
|
|
47
47
|
* @example
|
|
48
48
|
* ExtraIterator.range(5, 10).toArray() // returns [5, 6, 7, 8, 9]
|
|
49
|
-
* ExtraIterator.range(5, 10).
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* ExtraIterator.range(10, 0
|
|
49
|
+
* ExtraIterator.range(5, 10, { inclusive: true }).toArray() // returns [5, 6, 7, 8, 9, 10]
|
|
50
|
+
*
|
|
51
|
+
* // Counting down:
|
|
52
|
+
* ExtraIterator.range(10, 0).toArray() // return [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
53
|
+
* ExtraIterator.range(10, 0, { inclusive: true }).toArray() // return [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
|
|
54
|
+
*
|
|
55
|
+
* // Custom stepping value:
|
|
56
|
+
* ExtraIterator.range(1, 10, { step: 2 }).toArray() // returns [1, 3, 5, 7, 9]
|
|
57
|
+
* ExtraIterator.range(0, 1, { step: 0.25 }).toArray() // returns [0, 0.25, 0.5, 0.75]
|
|
58
|
+
* ExtraIterator.range(10, 0, { step: 2 }).toArray() // returns [10, 8, 6, 4, 2]
|
|
53
59
|
*/
|
|
54
|
-
static range(start: number, end: number, step?:
|
|
60
|
+
static range(start: number, end: number, { inclusive, step }?: {
|
|
61
|
+
inclusive?: boolean | undefined;
|
|
62
|
+
step?: number | undefined;
|
|
63
|
+
}): ExtraIterator<number>;
|
|
55
64
|
/**
|
|
56
65
|
* Creates an iterator that repeatedly yields the provided value.
|
|
57
66
|
*
|
package/dist/index.js
CHANGED
|
@@ -54,23 +54,30 @@ export class ExtraIterator extends Iterator {
|
|
|
54
54
|
*
|
|
55
55
|
* @example
|
|
56
56
|
* ExtraIterator.range(5, 10).toArray() // returns [5, 6, 7, 8, 9]
|
|
57
|
-
* ExtraIterator.range(5, 10).
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* ExtraIterator.range(10, 0
|
|
57
|
+
* ExtraIterator.range(5, 10, { inclusive: true }).toArray() // returns [5, 6, 7, 8, 9, 10]
|
|
58
|
+
*
|
|
59
|
+
* // Counting down:
|
|
60
|
+
* ExtraIterator.range(10, 0).toArray() // return [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
61
|
+
* ExtraIterator.range(10, 0, { inclusive: true }).toArray() // return [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
|
|
62
|
+
*
|
|
63
|
+
* // Custom stepping value:
|
|
64
|
+
* ExtraIterator.range(1, 10, { step: 2 }).toArray() // returns [1, 3, 5, 7, 9]
|
|
65
|
+
* ExtraIterator.range(0, 1, { step: 0.25 }).toArray() // returns [0, 0.25, 0.5, 0.75]
|
|
66
|
+
* ExtraIterator.range(10, 0, { step: 2 }).toArray() // returns [10, 8, 6, 4, 2]
|
|
61
67
|
*/
|
|
62
|
-
static range(start, end, step = 1) {
|
|
68
|
+
static range(start, end, { inclusive = false, step = 1 } = {}) {
|
|
63
69
|
return ExtraIterator.from(function* () {
|
|
64
|
-
|
|
70
|
+
step = Math.abs(step);
|
|
71
|
+
if (step < Number.EPSILON) {
|
|
65
72
|
throw new Error('Failed to create range. Cause: Range step cannot be 0.');
|
|
66
73
|
}
|
|
67
|
-
else if (
|
|
68
|
-
for (let i = start; i < end; i += step) {
|
|
74
|
+
else if (end > start) {
|
|
75
|
+
for (let i = start; inclusive ? i <= end : i < end; i += step) {
|
|
69
76
|
yield i;
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
else {
|
|
73
|
-
for (let i = start; i > end; i
|
|
80
|
+
for (let i = start; inclusive ? i >= end : i > end; i -= step) {
|
|
74
81
|
yield i;
|
|
75
82
|
}
|
|
76
83
|
}
|
package/dist/index.test.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ExtraIterator } from './index';
|
|
2
2
|
import { describe, it } from 'node:test';
|
|
3
3
|
import { expect } from 'expect';
|
|
4
|
-
describe(
|
|
4
|
+
describe(ExtraIterator.name, () => {
|
|
5
5
|
it('should create an ExtraIterator from an array', () => {
|
|
6
6
|
const array = [1, 2, 3];
|
|
7
7
|
const iterator = ExtraIterator.from(array);
|
|
@@ -195,11 +195,25 @@ describe('ExtraIterator', () => {
|
|
|
195
195
|
const iterator = ExtraIterator.from([1, 2, 3]).loop(3);
|
|
196
196
|
expect(iterator.toArray()).toEqual([1, 2, 3, 1, 2, 3, 1, 2, 3]);
|
|
197
197
|
});
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
198
|
+
describe(ExtraIterator.range.name, () => {
|
|
199
|
+
it('should iterate over ranges', () => {
|
|
200
|
+
expect(ExtraIterator.range(5, 10).toArray()).toEqual([5, 6, 7, 8, 9]);
|
|
201
|
+
expect(ExtraIterator.range(5, 10).append(10).toArray()).toEqual([5, 6, 7, 8, 9, 10]);
|
|
202
|
+
});
|
|
203
|
+
it('should iterate over ranges with steps', () => {
|
|
204
|
+
expect(ExtraIterator.range(1, 10, { step: 2 }).toArray()).toEqual([1, 3, 5, 7, 9]);
|
|
205
|
+
expect(ExtraIterator.range(0, 1, { step: 0.25 }).toArray()).toEqual([0, 0.25, 0.5, 0.75]);
|
|
206
|
+
expect(ExtraIterator.range(10, 0, { step: 2 }).toArray()).toEqual([10, 8, 6, 4, 2]);
|
|
207
|
+
expect(ExtraIterator.range(10, 0, { step: -2 }).toArray()).toEqual([10, 8, 6, 4, 2]);
|
|
208
|
+
});
|
|
209
|
+
it('should iterate over inclusive ranges', () => {
|
|
210
|
+
expect(ExtraIterator.range(1, 10, { inclusive: true }).toArray()).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
|
211
|
+
expect(ExtraIterator.range(1, 10, { inclusive: true, step: 2 }).toArray()).toEqual([1, 3, 5, 7, 9]);
|
|
212
|
+
expect(ExtraIterator.range(0, 1, { inclusive: true, step: 0.25 }).toArray()).toEqual([0, 0.25, 0.5, 0.75, 1]);
|
|
213
|
+
expect(ExtraIterator.range(10, 0, { inclusive: true, step: -2 }).toArray()).toEqual([10, 8, 6, 4, 2, 0]);
|
|
214
|
+
});
|
|
215
|
+
it('should throw an error if the step is 0', () => {
|
|
216
|
+
expect(() => ExtraIterator.range(0, 10, { step: 0 }).toArray()).toThrow();
|
|
217
|
+
});
|
|
204
218
|
});
|
|
205
219
|
});
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "An extension of the Iterator class with additional utility helper functions.",
|
|
4
4
|
"author": "Leonardo Raele <leonardoraele@gmail.com>",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.11.0",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": "./dist/index.js",
|