@naturalcycles/js-lib 15.7.1 → 15.8.1

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.
@@ -1,5 +1,7 @@
1
1
  import { AsyncIterable2 } from '../iter/asyncIterable2.js';
2
2
  import { Iterable2 } from '../iter/iterable2.js';
3
+ import type { Primitive } from '../typeFest.js';
4
+ import type { Integer } from '../types.js';
3
5
  /**
4
6
  * Returns an array with ranges from `from` up to (but not including) `to`.
5
7
  *
@@ -10,15 +12,24 @@ import { Iterable2 } from '../iter/iterable2.js';
10
12
  * range(3, 6) // [ 3, 4, 5 ]
11
13
  * range(1, 10, 2) // [ 1, 3, 5, 7, 9 ]
12
14
  */
13
- export declare function _range(toExcl: number): number[];
14
- export declare function _range(fromIncl: number, toExcl: number, step?: number): number[];
15
+ export declare function _range(toExcl: Integer): number[];
16
+ export declare function _range(fromIncl: Integer, toExcl: Integer, step?: number): number[];
17
+ /**
18
+ * Returns an array of `length` filled with `fill` primitive value.
19
+ * Performance-optimized implementation.
20
+ * `Array.from({ length }, () => fill)` shows ~25x perf regression in benchmarks
21
+ *
22
+ * Fill is Primitive, because it's safe to shallow-copy.
23
+ * If it was an object - it'll paste the same object reference, which can create bugs.
24
+ */
25
+ export declare function _arrayFilled<T extends Primitive>(length: Integer, fill: T): T[];
15
26
  /**
16
27
  * Like _range, but returns an Iterable2.
17
28
  */
18
- export declare function _rangeIterable(toExcl: number): Iterable2<number>;
19
- export declare function _rangeIterable(fromIncl: number, toExcl: number, step?: number): Iterable2<number>;
29
+ export declare function _rangeIterable(toExcl: Integer): Iterable2<number>;
30
+ export declare function _rangeIterable(fromIncl: Integer, toExcl: Integer, step?: number): Iterable2<number>;
20
31
  /**
21
32
  * Like _range, but returns an AsyncIterable2.
22
33
  */
23
- export declare function _rangeAsyncIterable(toExcl: number): AsyncIterable2<number>;
24
- export declare function _rangeAsyncIterable(fromIncl: number, toExcl: number, step?: number): AsyncIterable2<number>;
34
+ export declare function _rangeAsyncIterable(toExcl: Integer): AsyncIterable2<number>;
35
+ export declare function _rangeAsyncIterable(fromIncl: Integer, toExcl: Integer, step?: number): AsyncIterable2<number>;
@@ -11,6 +11,18 @@ export function _range(fromIncl, toExcl, step = 1) {
11
11
  }
12
12
  return a;
13
13
  }
14
+ /**
15
+ * Returns an array of `length` filled with `fill` primitive value.
16
+ * Performance-optimized implementation.
17
+ * `Array.from({ length }, () => fill)` shows ~25x perf regression in benchmarks
18
+ *
19
+ * Fill is Primitive, because it's safe to shallow-copy.
20
+ * If it was an object - it'll paste the same object reference, which can create bugs.
21
+ */
22
+ export function _arrayFilled(length, fill) {
23
+ // biome-ignore lint/style/useConsistentBuiltinInstantiation: ok
24
+ return Array(length).fill(fill);
25
+ }
14
26
  export function _rangeIterable(fromIncl, toExcl, step = 1) {
15
27
  if (toExcl === undefined) {
16
28
  toExcl = fromIncl;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@naturalcycles/js-lib",
3
3
  "type": "module",
4
- "version": "15.7.1",
4
+ "version": "15.8.1",
5
5
  "dependencies": {
6
6
  "tslib": "^2",
7
7
  "zod": "^3"
@@ -1,5 +1,7 @@
1
1
  import { AsyncIterable2 } from '../iter/asyncIterable2.js'
2
2
  import { Iterable2 } from '../iter/iterable2.js'
3
+ import type { Primitive } from '../typeFest.js'
4
+ import type { Integer } from '../types.js'
3
5
 
4
6
  /**
5
7
  * Returns an array with ranges from `from` up to (but not including) `to`.
@@ -11,9 +13,9 @@ import { Iterable2 } from '../iter/iterable2.js'
11
13
  * range(3, 6) // [ 3, 4, 5 ]
12
14
  * range(1, 10, 2) // [ 1, 3, 5, 7, 9 ]
13
15
  */
14
- export function _range(toExcl: number): number[]
15
- export function _range(fromIncl: number, toExcl: number, step?: number): number[]
16
- export function _range(fromIncl: number, toExcl?: number, step = 1): number[] {
16
+ export function _range(toExcl: Integer): number[]
17
+ export function _range(fromIncl: Integer, toExcl: Integer, step?: number): number[]
18
+ export function _range(fromIncl: Integer, toExcl?: Integer, step = 1): number[] {
17
19
  if (toExcl === undefined) {
18
20
  toExcl = fromIncl
19
21
  fromIncl = 0
@@ -26,12 +28,25 @@ export function _range(fromIncl: number, toExcl?: number, step = 1): number[] {
26
28
  return a
27
29
  }
28
30
 
31
+ /**
32
+ * Returns an array of `length` filled with `fill` primitive value.
33
+ * Performance-optimized implementation.
34
+ * `Array.from({ length }, () => fill)` shows ~25x perf regression in benchmarks
35
+ *
36
+ * Fill is Primitive, because it's safe to shallow-copy.
37
+ * If it was an object - it'll paste the same object reference, which can create bugs.
38
+ */
39
+ export function _arrayFilled<T extends Primitive>(length: Integer, fill: T): T[] {
40
+ // biome-ignore lint/style/useConsistentBuiltinInstantiation: ok
41
+ return Array(length).fill(fill)
42
+ }
43
+
29
44
  /**
30
45
  * Like _range, but returns an Iterable2.
31
46
  */
32
- export function _rangeIterable(toExcl: number): Iterable2<number>
33
- export function _rangeIterable(fromIncl: number, toExcl: number, step?: number): Iterable2<number>
34
- export function _rangeIterable(fromIncl: number, toExcl?: number, step = 1): Iterable2<number> {
47
+ export function _rangeIterable(toExcl: Integer): Iterable2<number>
48
+ export function _rangeIterable(fromIncl: Integer, toExcl: Integer, step?: number): Iterable2<number>
49
+ export function _rangeIterable(fromIncl: Integer, toExcl?: Integer, step = 1): Iterable2<number> {
35
50
  if (toExcl === undefined) {
36
51
  toExcl = fromIncl
37
52
  fromIncl = 0
@@ -49,15 +64,15 @@ export function _rangeIterable(fromIncl: number, toExcl?: number, step = 1): Ite
49
64
  /**
50
65
  * Like _range, but returns an AsyncIterable2.
51
66
  */
52
- export function _rangeAsyncIterable(toExcl: number): AsyncIterable2<number>
67
+ export function _rangeAsyncIterable(toExcl: Integer): AsyncIterable2<number>
53
68
  export function _rangeAsyncIterable(
54
- fromIncl: number,
55
- toExcl: number,
69
+ fromIncl: Integer,
70
+ toExcl: Integer,
56
71
  step?: number,
57
72
  ): AsyncIterable2<number>
58
73
  export function _rangeAsyncIterable(
59
- fromIncl: number,
60
- toExcl?: number,
74
+ fromIncl: Integer,
75
+ toExcl?: Integer,
61
76
  step = 1,
62
77
  ): AsyncIterable2<number> {
63
78
  if (toExcl === undefined) {