@rimbu/base 1.1.0 → 2.0.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.
- package/dist/bun/arr.mts +144 -27
- package/dist/cjs/arr.cjs +229 -166
- package/dist/cjs/arr.cjs.map +1 -0
- package/dist/cjs/arr.d.cts +33 -0
- package/dist/cjs/entry.cjs +9 -32
- package/dist/cjs/entry.cjs.map +1 -0
- package/dist/cjs/index.cjs +9 -246
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +5 -0
- package/dist/cjs/internal.cjs +4 -31
- package/dist/cjs/internal.cjs.map +1 -0
- package/dist/cjs/internal.d.cts +1 -0
- package/dist/cjs/plain-object.cjs +22 -32
- package/dist/cjs/plain-object.cjs.map +1 -0
- package/dist/cjs/rimbu-error.cjs +45 -66
- package/dist/cjs/rimbu-error.cjs.map +1 -0
- package/dist/cjs/token.cjs +4 -29
- package/dist/cjs/token.cjs.map +1 -0
- package/dist/esm/arr.d.mts +33 -0
- package/dist/esm/arr.mjs +86 -25
- package/dist/esm/arr.mjs.map +1 -1
- package/dist/esm/entry.d.mts +2 -0
- package/dist/esm/plain-object.d.mts +62 -0
- package/dist/esm/rimbu-error.d.mts +16 -0
- package/dist/esm/token.d.mts +2 -0
- package/package.json +19 -14
- package/src/arr.mts +144 -27
- package/dist/types/arr.d.mts +0 -17
- /package/dist/{types/entry.d.mts → cjs/entry.d.cts} +0 -0
- /package/dist/{types/plain-object.d.mts → cjs/plain-object.d.cts} +0 -0
- /package/dist/{types/rimbu-error.d.mts → cjs/rimbu-error.d.cts} +0 -0
- /package/dist/{types/token.d.mts → cjs/token.d.cts} +0 -0
- /package/dist/{types → esm}/index.d.mts +0 -0
- /package/dist/{types → esm}/internal.d.mts +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TraverseState, Update, type ArrayNonEmpty } from '@rimbu/common';
|
|
2
|
+
export declare function _appendNew<T>(array: readonly T[], value: T): ArrayNonEmpty<T>;
|
|
3
|
+
export declare function _appendOld<T>(array: readonly T[], value: T): ArrayNonEmpty<T>;
|
|
4
|
+
export declare const append: typeof _appendNew;
|
|
5
|
+
export declare function concat<T>(first: readonly T[], second: readonly T[]): readonly T[];
|
|
6
|
+
export declare function _reverseNew<T>(array: readonly T[], start?: number, end?: number): T[];
|
|
7
|
+
export declare function _reverseOld<T>(array: readonly T[], start?: number, end?: number): T[];
|
|
8
|
+
export declare const reverse: typeof _reverseNew;
|
|
9
|
+
export declare function forEach<T>(array: readonly T[], f: (value: T, index: number, halt: () => void) => void, state?: TraverseState, reversed?: boolean): void;
|
|
10
|
+
export declare function map<T, R>(array: readonly T[], f: (value: T, index: number) => R, indexOffset?: number): R[];
|
|
11
|
+
export declare function reverseMap<T, R>(array: readonly T[], f: (value: T, index: number) => R, indexOffset?: number): R[];
|
|
12
|
+
export declare function _prependNew<T>(array: readonly T[], value: T): ArrayNonEmpty<T>;
|
|
13
|
+
export declare function _prependOld<T>(array: readonly T[], value: T): ArrayNonEmpty<T>;
|
|
14
|
+
export declare const prepend: typeof _prependNew;
|
|
15
|
+
export declare function _lastNew<T>(arr: readonly T[]): T;
|
|
16
|
+
export declare function _lastOld<T>(arr: readonly T[]): T;
|
|
17
|
+
export declare const last: typeof _lastNew;
|
|
18
|
+
export declare function _updateNew<T>(arr: readonly T[], index: number, updater: Update<T>): readonly T[];
|
|
19
|
+
export declare function _updateOld<T>(arr: readonly T[], index: number, updater: Update<T>): readonly T[];
|
|
20
|
+
export declare const update: typeof _updateNew;
|
|
21
|
+
export declare function _modNew<T>(arr: readonly T[], index: number, f: (value: T) => T): readonly T[];
|
|
22
|
+
export declare function _modOld<T>(arr: readonly T[], index: number, f: (value: T) => T): readonly T[];
|
|
23
|
+
export declare const mod: typeof _modNew;
|
|
24
|
+
export declare function _insertNew<T>(arr: readonly T[], index: number, value: T): T[];
|
|
25
|
+
export declare function _insertOld<T>(arr: readonly T[], index: number, value: T): T[];
|
|
26
|
+
export declare const insert: typeof _insertNew;
|
|
27
|
+
export declare function tail<T>(arr: readonly T[]): T[];
|
|
28
|
+
export declare function init<T>(arr: readonly T[]): T[];
|
|
29
|
+
export declare function _spliceNew<T>(arr: readonly T[], start: number, deleteCount: number, ...items: T[]): T[];
|
|
30
|
+
export declare function _spliceOld<T>(arr: readonly T[], start: number, deleteCount: number, ...items: T[]): T[];
|
|
31
|
+
export declare const splice: typeof _spliceNew;
|
|
32
|
+
export declare function copySparse<T>(arr: readonly T[]): T[];
|
|
33
|
+
export declare function mapSparse<T, T2>(arr: readonly T[], f: (value: T, index: number) => T2): T2[];
|
package/dist/esm/arr.mjs
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { TraverseState, Update } from '@rimbu/common';
|
|
2
|
+
export function _appendNew(array, value) {
|
|
3
|
+
return array.toSpliced(array.length, 0, value);
|
|
4
|
+
}
|
|
5
|
+
export function _appendOld(array, value) {
|
|
4
6
|
const clone = array.slice();
|
|
5
7
|
clone.push(value);
|
|
6
8
|
return clone;
|
|
7
9
|
}
|
|
10
|
+
// Returns a copy of the array with the given value appended
|
|
11
|
+
export const append = `toSpliced` in Array.prototype ? _appendNew : _appendOld;
|
|
8
12
|
// Returns the concatenation of the two arrays, potentially reusing the input array if one of the arrays is empty
|
|
9
13
|
export function concat(first, second) {
|
|
10
14
|
if (first.length === 0)
|
|
@@ -13,16 +17,25 @@ export function concat(first, second) {
|
|
|
13
17
|
return first;
|
|
14
18
|
return first.concat(second);
|
|
15
19
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
export function _reverseNew(array, start, end) {
|
|
21
|
+
const source = undefined !== start || undefined !== end
|
|
22
|
+
? array.slice(start ?? 0, (end ?? array.length - 1) + 1)
|
|
23
|
+
: array;
|
|
24
|
+
return source.toReversed();
|
|
25
|
+
}
|
|
26
|
+
export function _reverseOld(array, start, end) {
|
|
27
|
+
const _start = start ?? 0;
|
|
28
|
+
const _end = end ?? array.length - 1;
|
|
29
|
+
const length = _end - _start + 1;
|
|
19
30
|
const res = [];
|
|
20
|
-
let arrayIndex =
|
|
31
|
+
let arrayIndex = _start - 1;
|
|
21
32
|
let resIndex = length - 1;
|
|
22
|
-
while (++arrayIndex <=
|
|
33
|
+
while (++arrayIndex <= _end)
|
|
23
34
|
res[resIndex--] = array[arrayIndex];
|
|
24
35
|
return res;
|
|
25
36
|
}
|
|
37
|
+
// Returns an copy of the array between the start and end indices, with the elements in reversed order.
|
|
38
|
+
export const reverse = 'toReversed' in Array.prototype ? _reverseNew : _reverseOld;
|
|
26
39
|
// Performs given function on each element of the array, in reverse order if 'reversed' is true.
|
|
27
40
|
export function forEach(array, f, state = TraverseState(), reversed = false) {
|
|
28
41
|
if (state.halted)
|
|
@@ -44,6 +57,10 @@ export function forEach(array, f, state = TraverseState(), reversed = false) {
|
|
|
44
57
|
}
|
|
45
58
|
// Returns a copy of the array where given function is applied to each element
|
|
46
59
|
export function map(array, f, indexOffset = 0) {
|
|
60
|
+
if (indexOffset === 0) {
|
|
61
|
+
// without offset, can use standard array map
|
|
62
|
+
return array.map(f);
|
|
63
|
+
}
|
|
47
64
|
const result = [];
|
|
48
65
|
let index = indexOffset;
|
|
49
66
|
let i = -1;
|
|
@@ -63,48 +80,88 @@ export function reverseMap(array, f, indexOffset = 0) {
|
|
|
63
80
|
result[resultIndex++] = f(array[arrayIndex], index++);
|
|
64
81
|
return result;
|
|
65
82
|
}
|
|
66
|
-
|
|
67
|
-
|
|
83
|
+
export function _prependNew(array, value) {
|
|
84
|
+
return array.toSpliced(0, 0, value);
|
|
85
|
+
}
|
|
86
|
+
export function _prependOld(array, value) {
|
|
68
87
|
const clone = array.slice();
|
|
69
88
|
clone.unshift(value);
|
|
70
89
|
return clone;
|
|
71
90
|
}
|
|
72
|
-
// Returns the
|
|
73
|
-
export
|
|
91
|
+
// Returns a copy of the given array with the given value added at the start
|
|
92
|
+
export const prepend = `toSpliced` in Array.prototype ? _prependNew : _prependOld;
|
|
93
|
+
export function _lastNew(arr) {
|
|
94
|
+
return arr.at(-1);
|
|
95
|
+
}
|
|
96
|
+
export function _lastOld(arr) {
|
|
74
97
|
return arr[arr.length - 1];
|
|
75
98
|
}
|
|
76
|
-
// Returns
|
|
77
|
-
|
|
78
|
-
export function
|
|
79
|
-
if (index < 0 || index >= arr.length)
|
|
99
|
+
// Returns the last element of the array
|
|
100
|
+
export const last = `at` in Array.prototype ? _lastNew : _lastOld;
|
|
101
|
+
export function _updateNew(arr, index, updater) {
|
|
102
|
+
if (index < 0 || index >= arr.length) {
|
|
80
103
|
return arr;
|
|
104
|
+
}
|
|
81
105
|
const curValue = arr[index];
|
|
82
106
|
const newValue = Update(curValue, updater);
|
|
83
|
-
if (Object.is(newValue, curValue))
|
|
107
|
+
if (Object.is(newValue, curValue)) {
|
|
84
108
|
return arr;
|
|
109
|
+
}
|
|
110
|
+
return arr.with(index, newValue);
|
|
111
|
+
}
|
|
112
|
+
export function _updateOld(arr, index, updater) {
|
|
113
|
+
if (index < 0 || index >= arr.length) {
|
|
114
|
+
return arr;
|
|
115
|
+
}
|
|
116
|
+
const curValue = arr[index];
|
|
117
|
+
const newValue = Update(curValue, updater);
|
|
118
|
+
if (Object.is(newValue, curValue)) {
|
|
119
|
+
return arr;
|
|
120
|
+
}
|
|
85
121
|
const newArr = arr.slice();
|
|
86
122
|
newArr[index] = newValue;
|
|
87
123
|
return newArr;
|
|
88
124
|
}
|
|
89
|
-
// Returns a copy of the array where the element at given index is replaced by
|
|
125
|
+
// Returns a copy of the array where the element at given index is replaced by the given updater.
|
|
90
126
|
// If the new element is the same as the old element, the original array is returned
|
|
91
|
-
export
|
|
92
|
-
|
|
127
|
+
export const update = `with` in Array.prototype ? _updateNew : _updateOld;
|
|
128
|
+
export function _modNew(arr, index, f) {
|
|
129
|
+
if (index < 0 || index >= arr.length) {
|
|
93
130
|
return arr;
|
|
131
|
+
}
|
|
94
132
|
const curValue = arr[index];
|
|
95
133
|
const newValue = f(curValue);
|
|
96
|
-
if (Object.is(newValue, curValue))
|
|
134
|
+
if (Object.is(newValue, curValue)) {
|
|
97
135
|
return arr;
|
|
136
|
+
}
|
|
137
|
+
return arr.with(index, newValue);
|
|
138
|
+
}
|
|
139
|
+
export function _modOld(arr, index, f) {
|
|
140
|
+
if (index < 0 || index >= arr.length) {
|
|
141
|
+
return arr;
|
|
142
|
+
}
|
|
143
|
+
const curValue = arr[index];
|
|
144
|
+
const newValue = f(curValue);
|
|
145
|
+
if (Object.is(newValue, curValue)) {
|
|
146
|
+
return arr;
|
|
147
|
+
}
|
|
98
148
|
const newArr = arr.slice();
|
|
99
149
|
newArr[index] = newValue;
|
|
100
150
|
return newArr;
|
|
101
151
|
}
|
|
102
|
-
// Returns a copy of the array where at given index
|
|
103
|
-
|
|
152
|
+
// Returns a copy of the array where the element at given index is replaced by applying given function.
|
|
153
|
+
// If the new element is the same as the old element, the original array is returned
|
|
154
|
+
export const mod = `with` in Array.prototype ? _modNew : _modOld;
|
|
155
|
+
export function _insertNew(arr, index, value) {
|
|
156
|
+
return arr.toSpliced(index, 0, value);
|
|
157
|
+
}
|
|
158
|
+
export function _insertOld(arr, index, value) {
|
|
104
159
|
const clone = arr.slice();
|
|
105
160
|
clone.splice(index, 0, value);
|
|
106
161
|
return clone;
|
|
107
162
|
}
|
|
163
|
+
// Returns a copy of the array where at given index the given value is inserted
|
|
164
|
+
export const insert = `toSpliced` in Array.prototype ? _insertNew : _insertOld;
|
|
108
165
|
// Returns a copy of the array, without its first element
|
|
109
166
|
export function tail(arr) {
|
|
110
167
|
return arr.slice(1);
|
|
@@ -113,12 +170,16 @@ export function tail(arr) {
|
|
|
113
170
|
export function init(arr) {
|
|
114
171
|
return arr.slice(0, arr.length - 1);
|
|
115
172
|
}
|
|
116
|
-
|
|
117
|
-
|
|
173
|
+
export function _spliceNew(arr, start, deleteCount, ...items) {
|
|
174
|
+
return arr.toSpliced(start, deleteCount, ...items);
|
|
175
|
+
}
|
|
176
|
+
export function _spliceOld(arr, start, deleteCount, ...items) {
|
|
118
177
|
const clone = arr.slice();
|
|
119
178
|
clone.splice(start, deleteCount, ...items);
|
|
120
179
|
return clone;
|
|
121
180
|
}
|
|
181
|
+
// Immutable version of the array .splice command, always returns a new array
|
|
182
|
+
export const splice = `toSpliced` in Array.prototype ? _spliceNew : _spliceOld;
|
|
122
183
|
// Returns a copy of the array, where its 'sparse' property is kept (sparse = not all indices have a value)
|
|
123
184
|
export function copySparse(arr) {
|
|
124
185
|
const clone = [];
|
package/dist/esm/arr.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arr.mjs","sourceRoot":"","sources":["../../src/arr.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"arr.mjs","sourceRoot":"","sources":["../../src/arr.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matches any type of function
|
|
3
|
+
*/
|
|
4
|
+
export type AnyFunc = (...args: any[]) => any;
|
|
5
|
+
/**
|
|
6
|
+
* Gives true if the given type T is a function, false otherwise.
|
|
7
|
+
* @typeparam T - the input type
|
|
8
|
+
*/
|
|
9
|
+
export type IsAnyFunc<T> = AnyFunc extends T ? true : false;
|
|
10
|
+
/**
|
|
11
|
+
* A predicate type for any record that resolves to true if any of the record
|
|
12
|
+
* properties is a function, false otherwise.
|
|
13
|
+
* This is useful to have a coarse discrimination between pure data objects and class instances.
|
|
14
|
+
* @typeparam T - the input type
|
|
15
|
+
*/
|
|
16
|
+
export type IsObjWithoutFunctions<T> = AnyFunc extends T[keyof T] ? false : true;
|
|
17
|
+
/**
|
|
18
|
+
* A predicate type that resolves to true if the given type satisfies:
|
|
19
|
+
* - it is an object type (not a primitive)
|
|
20
|
+
* - it is not a function
|
|
21
|
+
* - it is not iterable
|
|
22
|
+
* - it does not have any properties that are functions
|
|
23
|
+
* Otherwise, it resolves to false
|
|
24
|
+
* @typeparam T - the input type
|
|
25
|
+
*/
|
|
26
|
+
export type IsPlainObj<T> = T extends null | undefined | number | string | boolean | bigint | symbol | AnyFunc | Iterable<any> | AsyncIterable<any> ? false : IsObjWithoutFunctions<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Utility type that will only accept objects that are considered 'plain objects' according
|
|
29
|
+
* to the `IsPlainObj` predicate type.
|
|
30
|
+
* @typeparam T - the value type to test
|
|
31
|
+
*/
|
|
32
|
+
export type PlainObj<T> = IsPlainObj<T> extends true ? T : never;
|
|
33
|
+
/**
|
|
34
|
+
* Utility type that will only return true if the input type T is equal to `any`.
|
|
35
|
+
* @typeparam T - the value type to test
|
|
36
|
+
*/
|
|
37
|
+
export type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
38
|
+
/**
|
|
39
|
+
* Utility type that will only return true if the input type T is a (readonly) array.
|
|
40
|
+
* @typeparm T - the value type to test
|
|
41
|
+
*/
|
|
42
|
+
export type IsArray<T> = T extends readonly any[] ? true : false;
|
|
43
|
+
/**
|
|
44
|
+
* Utility type to exclude any types that are iterable. Useful in cases where
|
|
45
|
+
* plain objects are required as inputs but not arrays.
|
|
46
|
+
*/
|
|
47
|
+
export type NotIterable = {
|
|
48
|
+
[Symbol.iterator]?: never;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Companion function to the `IsRecord<T>` type that checks whether the given object is a pure
|
|
52
|
+
* data object.
|
|
53
|
+
* @param obj - the object to check
|
|
54
|
+
* @returns true if the given object is a pure data object
|
|
55
|
+
* @note does not check whether a record's properties are not functions
|
|
56
|
+
*/
|
|
57
|
+
export declare function isPlainObj(obj: any): obj is object;
|
|
58
|
+
/**
|
|
59
|
+
* Returns true if the given object is Iterable
|
|
60
|
+
* @param obj - the object to check
|
|
61
|
+
*/
|
|
62
|
+
export declare function isIterable(obj: any): obj is Iterable<unknown>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ErrBase } from '@rimbu/common';
|
|
2
|
+
export declare class EmptyCollectionAssumedNonEmptyError extends ErrBase.CustomError {
|
|
3
|
+
constructor();
|
|
4
|
+
}
|
|
5
|
+
export declare class ModifiedBuilderWhileLoopingOverItError extends ErrBase.CustomError {
|
|
6
|
+
constructor();
|
|
7
|
+
}
|
|
8
|
+
export declare class InvalidStateError extends ErrBase.CustomError {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
11
|
+
export declare class InvalidUsageError extends ErrBase.CustomError {
|
|
12
|
+
}
|
|
13
|
+
export declare function throwEmptyCollectionAssumedNonEmptyError(): never;
|
|
14
|
+
export declare function throwModifiedBuilderWhileLoopingOverItError(): never;
|
|
15
|
+
export declare function throwInvalidStateError(): never;
|
|
16
|
+
export declare function throwInvalidUsageError(msg: string): never;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rimbu/base",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Utilities to implement Rimbu collections",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"array",
|
|
@@ -29,14 +29,18 @@
|
|
|
29
29
|
"type": "module",
|
|
30
30
|
"main": "./dist/cjs/index.cjs",
|
|
31
31
|
"module": "./dist/esm/index.mjs",
|
|
32
|
-
"types": "./dist/
|
|
32
|
+
"types": "./dist/cjs/index.d.cts",
|
|
33
33
|
"exports": {
|
|
34
34
|
".": {
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
35
|
+
"import": {
|
|
36
|
+
"types": "./dist/esm/index.d.mts",
|
|
37
|
+
"default": "./dist/esm/index.mjs"
|
|
38
|
+
},
|
|
39
|
+
"require": {
|
|
40
|
+
"types": "./dist/cjs/index.d.cts",
|
|
41
|
+
"default": "./dist/cjs/index.cjs"
|
|
42
|
+
},
|
|
43
|
+
"bun": "./dist/bun/main/index.mts"
|
|
40
44
|
}
|
|
41
45
|
},
|
|
42
46
|
"files": [
|
|
@@ -46,15 +50,17 @@
|
|
|
46
50
|
"scripts": {
|
|
47
51
|
"build": "yarn clean && yarn bundle",
|
|
48
52
|
"build:deno": "yarn bundle:deno-prepare && yarn bundle:deno-convert && yarn bundle:deno-move && yarn bundle:deno-clean",
|
|
49
|
-
"bundle": "yarn bundle:cjs && yarn bundle:esm && yarn bundle:
|
|
50
|
-
"bundle:bun": "node ../../config/bunnify.mjs",
|
|
51
|
-
"bundle:cjs": "
|
|
53
|
+
"bundle": "yarn bundle:cjs && yarn bundle:esm && yarn bundle:bun",
|
|
54
|
+
"bundle:bun": "node ../../config/bunnify.mjs -mode bun",
|
|
55
|
+
"bundle:cjs": "yarn bundle:cjs-prepare && yarn bundle:cjs-build && yarn bundle:cjs-clean",
|
|
56
|
+
"bundle:cjs-prepare": "node ../../config/bunnify.mjs -mode cjs",
|
|
57
|
+
"bundle:cjs-build": "tsc -p tsconfig.cjs.json",
|
|
58
|
+
"bundle:cjs-clean": "rimraf _cjs_prepare",
|
|
52
59
|
"bundle:deno-prepare": "node ../../config/prepare-denoify.mjs",
|
|
53
60
|
"bundle:deno-convert": "denoify --src _deno_prepare/src",
|
|
54
61
|
"bundle:deno-move": "rimraf ../../deno_dist/base && mv deno_dist ../../deno_dist/base",
|
|
55
62
|
"bundle:deno-clean": "rimraf _deno_prepare",
|
|
56
63
|
"bundle:esm": "tsc --p tsconfig.esm.json",
|
|
57
|
-
"bundle:types": "tsc --p tsconfig.types.json",
|
|
58
64
|
"clean": "rimraf dist",
|
|
59
65
|
"format": "yarn format:base --write",
|
|
60
66
|
"format:base": "prettier \"{!CHANGELOG.md}|**/**/*.{ts,tsx,js,mts,mjs,json,md}\"",
|
|
@@ -67,11 +73,10 @@
|
|
|
67
73
|
"typecheck": "tsc"
|
|
68
74
|
},
|
|
69
75
|
"dependencies": {
|
|
70
|
-
"@rimbu/common": "^
|
|
71
|
-
"tslib": "^2.6.1"
|
|
76
|
+
"@rimbu/common": "^2.0.1"
|
|
72
77
|
},
|
|
73
78
|
"publishConfig": {
|
|
74
79
|
"access": "public"
|
|
75
80
|
},
|
|
76
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "b7ed656d2c55d1a715d6a3f52e364e68cb98c759"
|
|
77
82
|
}
|