@isopodlabs/utilities 1.5.4 → 1.5.6

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @isopodlabs/utilities
2
2
  [![npm version](https://img.shields.io/npm/v/@isopodlabs/utilities.svg)](https://www.npmjs.com/package/@isopodlabs/utilities)
3
- [![GitHub stars](https://img.shields.io/github/stars/adrianstephens/utilities.svg?style=social)](https://github.com/adrianstephens/utilities)
3
+ [![GitHub stars](https://img.shields.io/github/stars/adrianstephens/ts-utilities.svg?style=social)](https://github.com/adrianstephens/ts-utilities)
4
4
  [![License](https://img.shields.io/npm/l/@isopodlabs/utilities.svg)](LICENSE.txt)
5
5
 
6
6
  This package provides a set of utilities for TypeScript.
@@ -1,6 +1,7 @@
1
1
  type PartitionIndex<U> = U extends boolean ? 'true' | 'false' : U;
2
2
  export declare function partition<T, U extends keyof any | boolean>(array: Iterable<T>, func: (v: T) => U): Record<PartitionIndex<U>, T[]>;
3
- export declare function lowerBound<T>(array: T[], value: T, func: (a: T, b: T, i: number) => boolean): number;
3
+ export declare function less<T>(a: T, b: T): boolean;
4
+ export declare function lowerBound<T>(array: T[], value: T, func?: (a: T, b: T, i: number) => boolean): number;
4
5
  export declare function argmin<T>(array: T[], func?: (a: T, b: T) => number): number;
5
6
  export declare function min<T>(array: T[], func?: (a: T, b: T) => number): T;
6
7
  export declare function argmax<T>(array: T[], func?: (a: T, b: T) => number): number;
package/dist/algorithm.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.partition = partition;
4
+ exports.less = less;
4
5
  exports.lowerBound = lowerBound;
5
6
  exports.argmin = argmin;
6
7
  exports.min = min;
@@ -13,7 +14,10 @@ function partition(array, func) {
13
14
  (partitions[func(i)] ??= []).push(i);
14
15
  return partitions;
15
16
  }
16
- function lowerBound(array, value, func) {
17
+ function less(a, b) {
18
+ return a < b;
19
+ }
20
+ function lowerBound(array, value, func = less) {
17
21
  let i = 0;
18
22
  for (let n = array.length; n; n >>= 1) {
19
23
  const mid = i + (n >> 1);
@@ -0,0 +1,6 @@
1
+ export declare function remove<T>(array: T[], item: T): boolean;
2
+ export declare function compare<T>(arr1: T[], arr2: T[]): number;
3
+ export declare function equal<T>(arr1: T[], arr2: T[]): boolean;
4
+ export declare function reverse<T>(array: T[], start: number, end: number): void;
5
+ export declare function rotate<T>(array: T[], start: number, end: number, shift: number): void;
6
+ export declare function make<T>(n: number, constructor: new () => T): T[];
package/dist/array.js ADDED
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remove = remove;
4
+ exports.compare = compare;
5
+ exports.equal = equal;
6
+ exports.reverse = reverse;
7
+ exports.rotate = rotate;
8
+ exports.make = make;
9
+ const object_1 = require("./object");
10
+ //-----------------------------------------------------------------------------
11
+ // array
12
+ //-----------------------------------------------------------------------------
13
+ //remove element of array
14
+ function remove(array, item) {
15
+ const index = array.indexOf(item);
16
+ if (index === -1)
17
+ return false;
18
+ array.splice(index, 1);
19
+ return true;
20
+ }
21
+ function compare(arr1, arr2) {
22
+ const length = Math.min(arr1.length, arr2.length);
23
+ for (let i = 0; i < length; i++) {
24
+ const r = (0, object_1.compare)(arr1[i], arr2[i]);
25
+ if (r)
26
+ return r;
27
+ }
28
+ return arr1.length - arr2.length;
29
+ }
30
+ function equal(arr1, arr2) {
31
+ if (arr1.length !== arr2.length)
32
+ return false;
33
+ for (let i = 0; i < arr1.length; i++) {
34
+ if (arr1[i] !== arr2[i])
35
+ return false;
36
+ }
37
+ return true;
38
+ }
39
+ function reverse(array, start, end) {
40
+ while (start < end) {
41
+ [array[start], array[end]] = [array[end], array[start]];
42
+ start++;
43
+ end--;
44
+ }
45
+ }
46
+ function rotate(array, start, end, shift) {
47
+ const length = end - start;
48
+ if (length > 1 && shift % length) {
49
+ shift = ((shift % length) + length) % length;
50
+ reverse(array, start, end - 1);
51
+ reverse(array, start, start + shift - 1);
52
+ reverse(array, start + shift, end - 1);
53
+ }
54
+ }
55
+ function make(n, constructor) {
56
+ return Array.from({ length: n }, () => new constructor);
57
+ }
@@ -0,0 +1,4 @@
1
+ export declare function map<T, U>(iterable: Iterable<T> | undefined, func: (v: T, i: number) => Promise<U>): Promise<U[]>;
2
+ export declare function mapSerial<T, U>(iterable: Iterable<T> | undefined, func: (v: T, i: number) => Promise<U>): Promise<U[]>;
3
+ export declare function reduce<T, U>(iterable: Iterable<T>, func: (acc: U, v: T, i: number, iterable: Iterable<T>) => Promise<U>, initialValue: U): Promise<U>;
4
+ export declare function filter<T>(iterable: Iterable<T>, func: (v: T) => Promise<unknown>): Promise<T[]>;
package/dist/async.js ADDED
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.map = map;
37
+ exports.mapSerial = mapSerial;
38
+ exports.reduce = reduce;
39
+ exports.filter = filter;
40
+ const iterator = __importStar(require("./iterator"));
41
+ //-----------------------------------------------------------------------------
42
+ // async
43
+ //-----------------------------------------------------------------------------
44
+ //let forceSerial = false;
45
+ async function map(iterable, func) {
46
+ return Promise.all(iterator.map(iterable, func));
47
+ }
48
+ async function mapSerial(iterable, func) {
49
+ const results = [];
50
+ let i = 0;
51
+ for (const v of iterable || [])
52
+ results.push(await func(v, i++));
53
+ return results;
54
+ }
55
+ async function reduce(iterable, func, initialValue) {
56
+ let acc = initialValue;
57
+ let i = 0;
58
+ for (const v of iterable)
59
+ acc = await func(acc, v, i++, iterable);
60
+ return acc;
61
+ }
62
+ async function filter(iterable, func) {
63
+ const filters = await map(iterable, func);
64
+ return iterator.filter(iterable, (_, i) => filters[i]);
65
+ }
package/dist/bits.d.ts ADDED
@@ -0,0 +1,82 @@
1
+ export declare function lowestSet32(x: number): number;
2
+ export declare function highestSet32(x: number): number;
3
+ export declare function countSet32(x: number): number;
4
+ export declare function highestSet(x: bigint | number): number;
5
+ export declare function lowestSet(x: number | bigint): number;
6
+ export declare function countSet(x: bigint | number): number;
7
+ export declare function highestClear(x: number | bigint): number;
8
+ export declare function lowestClear(x: number | bigint): number;
9
+ export declare function countClear(x: bigint | number): number;
10
+ export declare class ImmutableSparseBits {
11
+ protected bits: number[];
12
+ protected undef: number;
13
+ static whereGenerator(bits: number[], undef: number, set: boolean, from?: number): Generator<number>;
14
+ constructor(initial?: boolean);
15
+ protected create(init?: boolean): this;
16
+ protected copyUndefined(other: ImmutableSparseBits): this;
17
+ protected flipUndefined(other: ImmutableSparseBits): this;
18
+ static fromEntries<T extends ImmutableSparseBits>(this: new (initial?: boolean) => T, entries: Record<number, number> | [number, number][], initial?: boolean): T;
19
+ keys(): number[];
20
+ entries(): [number, number][];
21
+ complement(): this;
22
+ intersect(other: ImmutableSparseBits): this;
23
+ union(other: ImmutableSparseBits): this;
24
+ xor(other: ImmutableSparseBits): this;
25
+ clean(): this;
26
+ contains(other: ImmutableSparseBits): boolean;
27
+ has(a: number): boolean;
28
+ next(a: number, set?: boolean): number;
29
+ toDense(): DenseBits;
30
+ where(set: boolean, from?: number): {
31
+ [Symbol.iterator]: () => Generator<number, any, any>;
32
+ };
33
+ ranges(): {
34
+ [Symbol.iterator](): Generator<number[]>;
35
+ };
36
+ [Symbol.iterator](): Generator<number>;
37
+ }
38
+ export declare class SparseBits extends ImmutableSparseBits {
39
+ private setMask;
40
+ private clearMask;
41
+ selfComplement(): this;
42
+ selfIntersect(other: SparseBits): this;
43
+ selfUnion(other: SparseBits): this;
44
+ selfXor(other: SparseBits): this;
45
+ set(a: number): void;
46
+ clear(a: number): void;
47
+ has(a: number): boolean;
48
+ setRange(a: number, b: number): this;
49
+ clearRange(a: number, b: number): this;
50
+ }
51
+ export declare class ImmutableDenseBits {
52
+ protected bits: bigint;
53
+ constructor(bits?: bigint);
54
+ protected create(bits?: bigint): this;
55
+ complement(): this;
56
+ intersect(other: DenseBits): this;
57
+ union(other: DenseBits): this;
58
+ xor(other: DenseBits): this;
59
+ has(a: number): boolean;
60
+ next(a: number, set?: boolean): number;
61
+ get length(): number;
62
+ where(set: boolean, from?: number): {
63
+ [Symbol.iterator](): Generator<number>;
64
+ };
65
+ ranges(): {
66
+ [Symbol.iterator](): Generator<number[]>;
67
+ };
68
+ [Symbol.iterator](): Generator<number>;
69
+ toSparse(): SparseBits;
70
+ }
71
+ export declare class DenseBits extends ImmutableDenseBits {
72
+ private setMask;
73
+ private clearMask;
74
+ selfComplement(): this;
75
+ selfIntersect(other: DenseBits): this;
76
+ selfUnion(other: DenseBits): this;
77
+ selfXor(other: DenseBits): this;
78
+ set(a: number): void;
79
+ clear(a: number): void;
80
+ setRange(a: number, b: number): this;
81
+ clearRange(a: number, b: number): this;
82
+ }