@dereekb/util 0.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/README.md +7 -0
- package/package.json +10 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/lib/array/array.boolean.d.ts +28 -0
- package/src/lib/array/array.boolean.js +59 -0
- package/src/lib/array/array.boolean.js.map +1 -0
- package/src/lib/array/array.d.ts +60 -0
- package/src/lib/array/array.filter.d.ts +13 -0
- package/src/lib/array/array.filter.js +48 -0
- package/src/lib/array/array.filter.js.map +1 -0
- package/src/lib/array/array.js +149 -0
- package/src/lib/array/array.js.map +1 -0
- package/src/lib/array/array.limit.d.ts +13 -0
- package/src/lib/array/array.limit.js +19 -0
- package/src/lib/array/array.limit.js.map +1 -0
- package/src/lib/array/array.map.d.ts +18 -0
- package/src/lib/array/array.map.js +26 -0
- package/src/lib/array/array.map.js.map +1 -0
- package/src/lib/array/array.number.d.ts +21 -0
- package/src/lib/array/array.number.js +58 -0
- package/src/lib/array/array.number.js.map +1 -0
- package/src/lib/array/array.set.d.ts +20 -0
- package/src/lib/array/array.set.js +64 -0
- package/src/lib/array/array.set.js.map +1 -0
- package/src/lib/array/array.string.d.ts +8 -0
- package/src/lib/array/array.string.js +36 -0
- package/src/lib/array/array.string.js.map +1 -0
- package/src/lib/array/array.unique.d.ts +6 -0
- package/src/lib/array/array.unique.js +29 -0
- package/src/lib/array/array.unique.js.map +1 -0
- package/src/lib/array/array.value.d.ts +3 -0
- package/src/lib/array/array.value.js +17 -0
- package/src/lib/array/array.value.js.map +1 -0
- package/src/lib/array/index.d.ts +10 -0
- package/src/lib/array/index.js +14 -0
- package/src/lib/array/index.js.map +1 -0
- package/src/lib/assertion/assert.d.ts +15 -0
- package/src/lib/assertion/assert.error.d.ts +32 -0
- package/src/lib/assertion/assert.error.js +43 -0
- package/src/lib/assertion/assert.error.js.map +1 -0
- package/src/lib/assertion/assert.js +3 -0
- package/src/lib/assertion/assert.js.map +1 -0
- package/src/lib/assertion/assertion.d.ts +18 -0
- package/src/lib/assertion/assertion.generic.d.ts +3 -0
- package/src/lib/assertion/assertion.generic.js +10 -0
- package/src/lib/assertion/assertion.generic.js.map +1 -0
- package/src/lib/assertion/assertion.js +40 -0
- package/src/lib/assertion/assertion.js.map +1 -0
- package/src/lib/assertion/assertion.number.d.ts +3 -0
- package/src/lib/assertion/assertion.number.js +20 -0
- package/src/lib/assertion/assertion.number.js.map +1 -0
- package/src/lib/assertion/index.d.ts +5 -0
- package/src/lib/assertion/index.js +9 -0
- package/src/lib/assertion/index.js.map +1 -0
- package/src/lib/boolean.d.ts +5 -0
- package/src/lib/boolean.js +30 -0
- package/src/lib/boolean.js.map +1 -0
- package/src/lib/contact/domain.d.ts +16 -0
- package/src/lib/contact/domain.js +45 -0
- package/src/lib/contact/domain.js.map +1 -0
- package/src/lib/contact/email.d.ts +17 -0
- package/src/lib/contact/email.js +32 -0
- package/src/lib/contact/email.js.map +1 -0
- package/src/lib/contact/index.d.ts +3 -0
- package/src/lib/contact/index.js +7 -0
- package/src/lib/contact/index.js.map +1 -0
- package/src/lib/contact/phone.d.ts +8 -0
- package/src/lib/contact/phone.js +3 -0
- package/src/lib/contact/phone.js.map +1 -0
- package/src/lib/context/context.d.ts +1 -0
- package/src/lib/context/context.js +6 -0
- package/src/lib/context/context.js.map +1 -0
- package/src/lib/context/index.d.ts +0 -0
- package/src/lib/context/index.js +2 -0
- package/src/lib/context/index.js.map +1 -0
- package/src/lib/date/date.d.ts +52 -0
- package/src/lib/date/date.js +12 -0
- package/src/lib/date/date.js.map +1 -0
- package/src/lib/date/date.time.d.ts +29 -0
- package/src/lib/date/date.time.js +27 -0
- package/src/lib/date/date.time.js.map +1 -0
- package/src/lib/date/index.d.ts +2 -0
- package/src/lib/date/index.js +6 -0
- package/src/lib/date/index.js.map +1 -0
- package/src/lib/error/error.d.ts +30 -0
- package/src/lib/error/error.js +36 -0
- package/src/lib/error/error.js.map +1 -0
- package/src/lib/error/error.server.d.ts +37 -0
- package/src/lib/error/error.server.js +22 -0
- package/src/lib/error/error.server.js.map +1 -0
- package/src/lib/error/index.d.ts +2 -0
- package/src/lib/error/index.js +6 -0
- package/src/lib/error/index.js.map +1 -0
- package/src/lib/filter/filter.d.ts +5 -0
- package/src/lib/filter/filter.js +3 -0
- package/src/lib/filter/filter.js.map +1 -0
- package/src/lib/filter/index.d.ts +1 -0
- package/src/lib/filter/index.js +5 -0
- package/src/lib/filter/index.js.map +1 -0
- package/src/lib/getter.d.ts +16 -0
- package/src/lib/getter.js +19 -0
- package/src/lib/getter.js.map +1 -0
- package/src/lib/grouping.d.ts +98 -0
- package/src/lib/grouping.js +164 -0
- package/src/lib/grouping.js.map +1 -0
- package/src/lib/hash.d.ts +5 -0
- package/src/lib/hash.js +21 -0
- package/src/lib/hash.js.map +1 -0
- package/src/lib/index.d.ts +26 -0
- package/src/lib/index.js +31 -0
- package/src/lib/index.js.map +1 -0
- package/src/lib/iterate.d.ts +6 -0
- package/src/lib/iterate.js +16 -0
- package/src/lib/iterate.js.map +1 -0
- package/src/lib/key.d.ts +11 -0
- package/src/lib/key.js +3 -0
- package/src/lib/key.js.map +1 -0
- package/src/lib/lifecycle.d.ts +12 -0
- package/src/lib/lifecycle.js +3 -0
- package/src/lib/lifecycle.js.map +1 -0
- package/src/lib/map.d.ts +2 -0
- package/src/lib/map.js +3 -0
- package/src/lib/map.js.map +1 -0
- package/src/lib/model.d.ts +74 -0
- package/src/lib/model.js +138 -0
- package/src/lib/model.js.map +1 -0
- package/src/lib/number.d.ts +18 -0
- package/src/lib/number.js +29 -0
- package/src/lib/number.js.map +1 -0
- package/src/lib/object/index.d.ts +3 -0
- package/src/lib/object/index.js +7 -0
- package/src/lib/object/index.js.map +1 -0
- package/src/lib/object/object.array.d.ts +9 -0
- package/src/lib/object/object.array.js +35 -0
- package/src/lib/object/object.array.js.map +1 -0
- package/src/lib/object/object.d.ts +12 -0
- package/src/lib/object/object.equal.d.ts +4 -0
- package/src/lib/object/object.equal.js +12 -0
- package/src/lib/object/object.equal.js.map +1 -0
- package/src/lib/object/object.js +38 -0
- package/src/lib/object/object.js.map +1 -0
- package/src/lib/page/index.d.ts +3 -0
- package/src/lib/page/index.js +7 -0
- package/src/lib/page/index.js.map +1 -0
- package/src/lib/page/page.calculator.d.ts +24 -0
- package/src/lib/page/page.calculator.js +37 -0
- package/src/lib/page/page.calculator.js.map +1 -0
- package/src/lib/page/page.d.ts +28 -0
- package/src/lib/page/page.filter.d.ts +54 -0
- package/src/lib/page/page.filter.js +68 -0
- package/src/lib/page/page.filter.js.map +1 -0
- package/src/lib/page/page.js +30 -0
- package/src/lib/page/page.js.map +1 -0
- package/src/lib/promise/index.d.ts +2 -0
- package/src/lib/promise/index.js +6 -0
- package/src/lib/promise/index.js.map +1 -0
- package/src/lib/promise/promise.d.ts +42 -0
- package/src/lib/promise/promise.js +117 -0
- package/src/lib/promise/promise.js.map +1 -0
- package/src/lib/promise/promise.loop.d.ts +12 -0
- package/src/lib/promise/promise.loop.js +30 -0
- package/src/lib/promise/promise.loop.js.map +1 -0
- package/src/lib/relation/index.d.ts +1 -0
- package/src/lib/relation/index.js +5 -0
- package/src/lib/relation/index.js.map +1 -0
- package/src/lib/relation/relation.d.ts +95 -0
- package/src/lib/relation/relation.js +209 -0
- package/src/lib/relation/relation.js.map +1 -0
- package/src/lib/set.d.ts +0 -0
- package/src/lib/set.hashset.d.ts +28 -0
- package/src/lib/set.hashset.js +66 -0
- package/src/lib/set.hashset.js.map +1 -0
- package/src/lib/set.js +2 -0
- package/src/lib/set.js.map +1 -0
- package/src/lib/sort.d.ts +45 -0
- package/src/lib/sort.js +25 -0
- package/src/lib/sort.js.map +1 -0
- package/src/lib/storage/index.d.ts +4 -0
- package/src/lib/storage/index.js +8 -0
- package/src/lib/storage/index.js.map +1 -0
- package/src/lib/storage/storage.d.ts +11 -0
- package/src/lib/storage/storage.error.d.ts +12 -0
- package/src/lib/storage/storage.error.js +20 -0
- package/src/lib/storage/storage.error.js.map +1 -0
- package/src/lib/storage/storage.js +3 -0
- package/src/lib/storage/storage.js.map +1 -0
- package/src/lib/storage/storage.memory.d.ts +14 -0
- package/src/lib/storage/storage.memory.js +47 -0
- package/src/lib/storage/storage.memory.js.map +1 -0
- package/src/lib/storage/storage.object.d.ts +32 -0
- package/src/lib/storage/storage.object.js +39 -0
- package/src/lib/storage/storage.object.js.map +1 -0
- package/src/lib/string.d.ts +19 -0
- package/src/lib/string.js +27 -0
- package/src/lib/string.js.map +1 -0
- package/src/lib/type.d.ts +9 -0
- package/src/lib/type.js +3 -0
- package/src/lib/type.js.map +1 -0
- package/src/lib/value.d.ts +43 -0
- package/src/lib/value.js +28 -0
- package/src/lib/value.js.map +1 -0
- package/src/test/index.d.ts +2 -0
- package/src/test/index.js +6 -0
- package/src/test/index.js.map +1 -0
- package/src/test/jest.d.ts +80 -0
- package/src/test/jest.js +80 -0
- package/src/test/jest.js.map +1 -0
- package/src/test/jest.wrap.d.ts +61 -0
- package/src/test/jest.wrap.js +66 -0
- package/src/test/jest.wrap.js.map +1 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeValuesGroupMap = exports.groupValues = exports.separateValues = exports.makeKeyPairs = exports.pairGroupValues = exports.arrayContentsDiffer = exports.restoreOrder = exports.restoreOrderWithValues = exports.batch = void 0;
|
|
4
|
+
const object_1 = require("./object");
|
|
5
|
+
// MARK: Functions
|
|
6
|
+
/**
|
|
7
|
+
* Batches items from the input array into several batches of a maximum size.
|
|
8
|
+
*
|
|
9
|
+
* @param array
|
|
10
|
+
* @param batchSize
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
function batch(array, batchSize) {
|
|
14
|
+
array = [].concat(array); // Copy array before splicing it.
|
|
15
|
+
const batch = [];
|
|
16
|
+
while (array.length > 0) {
|
|
17
|
+
batch.push(array.splice(0, batchSize));
|
|
18
|
+
}
|
|
19
|
+
return batch;
|
|
20
|
+
}
|
|
21
|
+
exports.batch = batch;
|
|
22
|
+
/**
|
|
23
|
+
* Convenience function for calling restoreOrder with two arrays of values, instead of an array of keys and array of values.
|
|
24
|
+
*
|
|
25
|
+
* @param orderValues
|
|
26
|
+
* @param values
|
|
27
|
+
* @param params
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
function restoreOrderWithValues(orderValues, values, params) {
|
|
31
|
+
const { readKey } = params;
|
|
32
|
+
const orderKeys = orderValues.map(x => readKey(x));
|
|
33
|
+
return restoreOrder(orderKeys, values, params);
|
|
34
|
+
}
|
|
35
|
+
exports.restoreOrderWithValues = restoreOrderWithValues;
|
|
36
|
+
/**
|
|
37
|
+
* Restores the order to the input values based on their keys.
|
|
38
|
+
*
|
|
39
|
+
* Duplicate values are passed to the chooseRetainedValue function past. When no function is provided, duplicates are ignored.
|
|
40
|
+
*/
|
|
41
|
+
function restoreOrder(orderKeys, values, { readKey, chooseRetainedValue = (values) => values[0], excludeNewItems = false }) {
|
|
42
|
+
const valuesMap = makeValuesGroupMap(values, readKey);
|
|
43
|
+
const orderKeysMap = new Map(orderKeys.map((x, i) => [x, i]));
|
|
44
|
+
const restoredOrder = new Array();
|
|
45
|
+
const newItems = [];
|
|
46
|
+
valuesMap.forEach((values, key) => {
|
|
47
|
+
const index = orderKeysMap.get(key);
|
|
48
|
+
function getValue() {
|
|
49
|
+
return (values.length > 1) ? chooseRetainedValue(values) : values[0];
|
|
50
|
+
}
|
|
51
|
+
if (index != null) {
|
|
52
|
+
restoredOrder[index] = getValue();
|
|
53
|
+
}
|
|
54
|
+
else if (!excludeNewItems) {
|
|
55
|
+
newItems.push(getValue());
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const result = [...restoredOrder, ...newItems].filter(x => x !== undefined); // Allow null to be passed.
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
exports.restoreOrder = restoreOrder;
|
|
62
|
+
/**
|
|
63
|
+
* Returns true if the input differs from eachother.
|
|
64
|
+
*
|
|
65
|
+
* Input items are uniquely keyed in some fashion. The same items are paired up.
|
|
66
|
+
*/
|
|
67
|
+
function arrayContentsDiffer(a = [], b = [], { groupKeyFn, isEqual }) {
|
|
68
|
+
let areDifferent = false;
|
|
69
|
+
if (a.length === b.length) {
|
|
70
|
+
const pairs = pairGroupValues([...a, ...b], groupKeyFn);
|
|
71
|
+
if (pairs.unpaired) {
|
|
72
|
+
// Any unpaired items means there is a difference.
|
|
73
|
+
areDifferent = true;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (const [aa, bb] of pairs.pairs) {
|
|
77
|
+
// If any item is not the same, break.
|
|
78
|
+
if (!isEqual(aa, bb)) {
|
|
79
|
+
areDifferent = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
areDifferent = true; // Different lengths, different content.
|
|
87
|
+
}
|
|
88
|
+
return areDifferent;
|
|
89
|
+
}
|
|
90
|
+
exports.arrayContentsDiffer = arrayContentsDiffer;
|
|
91
|
+
function pairGroupValues(values, groupKeyFn) {
|
|
92
|
+
const map = makeValuesGroupMap(values, groupKeyFn);
|
|
93
|
+
const pairs = [];
|
|
94
|
+
const unpaired = [];
|
|
95
|
+
map.forEach((x, key) => {
|
|
96
|
+
if (x.length === 1) {
|
|
97
|
+
unpaired.push(x[0]);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
pairs.push(x);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
pairs,
|
|
105
|
+
unpaired
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
exports.pairGroupValues = pairGroupValues;
|
|
109
|
+
/**
|
|
110
|
+
* Creates a tuples array of key and value pairs.
|
|
111
|
+
*
|
|
112
|
+
* @param values
|
|
113
|
+
* @param keyFn
|
|
114
|
+
* @returns
|
|
115
|
+
*/
|
|
116
|
+
function makeKeyPairs(values, keyFn) {
|
|
117
|
+
return values.map(x => ([keyFn(x), x]));
|
|
118
|
+
}
|
|
119
|
+
exports.makeKeyPairs = makeKeyPairs;
|
|
120
|
+
/**
|
|
121
|
+
* Separates the input values into an included and excluded group.
|
|
122
|
+
*
|
|
123
|
+
* @param values
|
|
124
|
+
* @param checkInclusion
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
function separateValues(values, checkInclusion) {
|
|
128
|
+
const result = groupValues(values, (x) => {
|
|
129
|
+
return (checkInclusion(x)) ? 'in' : 'out';
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
included: result.in || [],
|
|
133
|
+
excluded: result.out || []
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
exports.separateValues = separateValues;
|
|
137
|
+
function groupValues(values, groupKeyFn) {
|
|
138
|
+
const map = makeValuesGroupMap(values, groupKeyFn);
|
|
139
|
+
return (0, object_1.mapToObject)(map);
|
|
140
|
+
}
|
|
141
|
+
exports.groupValues = groupValues;
|
|
142
|
+
/**
|
|
143
|
+
* Reads keys from the values in the arrays, and groups them together into a Map.
|
|
144
|
+
*
|
|
145
|
+
* @param values
|
|
146
|
+
* @param groupKeyFn
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
function makeValuesGroupMap(values, groupKeyFn) {
|
|
150
|
+
const map = new Map();
|
|
151
|
+
values.forEach((x) => {
|
|
152
|
+
const key = groupKeyFn(x);
|
|
153
|
+
let array = map.get(key);
|
|
154
|
+
if (array != null) {
|
|
155
|
+
array.push(x);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
map.set(key, [x]);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return map;
|
|
162
|
+
}
|
|
163
|
+
exports.makeValuesGroupMap = makeValuesGroupMap;
|
|
164
|
+
//# sourceMappingURL=grouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/grouping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare type HashSalt = string;
|
|
2
|
+
export declare type HashDecodeMap<H extends string = string, V extends string = string> = Map<H, V>;
|
|
3
|
+
export declare function decodeHashedValues(hashedValues: string[], decodeValues: string[], hashFn: (value: string) => string): string[];
|
|
4
|
+
export declare function makeHashDecodeMap(decodeValues: string[], hashFn: (value: string) => string): HashDecodeMap;
|
|
5
|
+
export declare function decodeHashedValuesWithDecodeMap(hashedValues: string[], decodeMap: HashDecodeMap): string[];
|
package/src/lib/hash.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeHashedValuesWithDecodeMap = exports.makeHashDecodeMap = exports.decodeHashedValues = void 0;
|
|
4
|
+
const array_1 = require("./array");
|
|
5
|
+
function decodeHashedValues(hashedValues, decodeValues, hashFn) {
|
|
6
|
+
const hashDecodeMap = makeHashDecodeMap(decodeValues, hashFn);
|
|
7
|
+
return decodeHashedValuesWithDecodeMap(hashedValues, hashDecodeMap);
|
|
8
|
+
}
|
|
9
|
+
exports.decodeHashedValues = decodeHashedValues;
|
|
10
|
+
function makeHashDecodeMap(decodeValues, hashFn) {
|
|
11
|
+
const keyValuePairs = decodeValues.map(x => [hashFn(x), x]);
|
|
12
|
+
const map = new Map(keyValuePairs);
|
|
13
|
+
return map;
|
|
14
|
+
}
|
|
15
|
+
exports.makeHashDecodeMap = makeHashDecodeMap;
|
|
16
|
+
function decodeHashedValuesWithDecodeMap(hashedValues, decodeMap) {
|
|
17
|
+
const values = hashedValues.map(x => decodeMap.get(x));
|
|
18
|
+
return (0, array_1.filterMaybeValues)(values);
|
|
19
|
+
}
|
|
20
|
+
exports.decodeHashedValuesWithDecodeMap = decodeHashedValuesWithDecodeMap;
|
|
21
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/hash.ts"],"names":[],"mappings":";;;AAAA,mCAA4C;AAM5C,SAAgB,kBAAkB,CAAC,YAAsB,EAAE,YAAsB,EAAE,MAAiC;IAClH,MAAM,aAAa,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,+BAA+B,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACtE,CAAC;AAHD,gDAGC;AAED,SAAgB,iBAAiB,CAAC,YAAsB,EAAE,MAAiC;IACzF,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC,CAAC;IAChF,MAAM,GAAG,GAAkB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAJD,8CAIC;AAED,SAAgB,+BAA+B,CAAC,YAAsB,EAAE,SAAwB;IAC9F,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAHD,0EAGC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export * from './array';
|
|
2
|
+
export * from './assertion';
|
|
3
|
+
export * from './contact';
|
|
4
|
+
export * from './error';
|
|
5
|
+
export * from './filter';
|
|
6
|
+
export * from './promise';
|
|
7
|
+
export * from './relation';
|
|
8
|
+
export * from './storage';
|
|
9
|
+
export * from './boolean';
|
|
10
|
+
export * from './date';
|
|
11
|
+
export * from './lifecycle';
|
|
12
|
+
export * from './getter';
|
|
13
|
+
export * from './grouping';
|
|
14
|
+
export * from './hash';
|
|
15
|
+
export * from './iterate';
|
|
16
|
+
export * from './key';
|
|
17
|
+
export * from './map';
|
|
18
|
+
export * from './model';
|
|
19
|
+
export * from './number';
|
|
20
|
+
export * from './object';
|
|
21
|
+
export * from './page';
|
|
22
|
+
export * from './set.hashset';
|
|
23
|
+
export * from './sort';
|
|
24
|
+
export * from './string';
|
|
25
|
+
export * from './type';
|
|
26
|
+
export * from './value';
|
package/src/lib/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./array"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./assertion"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./contact"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./error"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./filter"), exports);
|
|
9
|
+
(0, tslib_1.__exportStar)(require("./promise"), exports);
|
|
10
|
+
(0, tslib_1.__exportStar)(require("./relation"), exports);
|
|
11
|
+
(0, tslib_1.__exportStar)(require("./storage"), exports);
|
|
12
|
+
(0, tslib_1.__exportStar)(require("./boolean"), exports);
|
|
13
|
+
(0, tslib_1.__exportStar)(require("./date"), exports);
|
|
14
|
+
(0, tslib_1.__exportStar)(require("./lifecycle"), exports);
|
|
15
|
+
(0, tslib_1.__exportStar)(require("./getter"), exports);
|
|
16
|
+
(0, tslib_1.__exportStar)(require("./grouping"), exports);
|
|
17
|
+
(0, tslib_1.__exportStar)(require("./hash"), exports);
|
|
18
|
+
(0, tslib_1.__exportStar)(require("./iterate"), exports);
|
|
19
|
+
(0, tslib_1.__exportStar)(require("./key"), exports);
|
|
20
|
+
(0, tslib_1.__exportStar)(require("./map"), exports);
|
|
21
|
+
(0, tslib_1.__exportStar)(require("./model"), exports);
|
|
22
|
+
(0, tslib_1.__exportStar)(require("./number"), exports);
|
|
23
|
+
(0, tslib_1.__exportStar)(require("./object"), exports);
|
|
24
|
+
(0, tslib_1.__exportStar)(require("./page"), exports);
|
|
25
|
+
(0, tslib_1.__exportStar)(require("./set.hashset"), exports);
|
|
26
|
+
// export * from './lib/set';
|
|
27
|
+
(0, tslib_1.__exportStar)(require("./sort"), exports);
|
|
28
|
+
(0, tslib_1.__exportStar)(require("./string"), exports);
|
|
29
|
+
(0, tslib_1.__exportStar)(require("./type"), exports);
|
|
30
|
+
(0, tslib_1.__exportStar)(require("./value"), exports);
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,uDAAwB;AACxB,2DAA4B;AAC5B,yDAA0B;AAC1B,uDAAwB;AACxB,wDAAyB;AACzB,yDAA0B;AAC1B,0DAA2B;AAC3B,yDAA0B;AAC1B,yDAA0B;AAC1B,sDAAuB;AACvB,2DAA4B;AAC5B,wDAAyB;AACzB,0DAA2B;AAC3B,sDAAuB;AACvB,yDAA0B;AAC1B,qDAAsB;AACtB,qDAAsB;AACtB,uDAAwB;AACxB,wDAAyB;AACzB,wDAAyB;AACzB,sDAAuB;AACvB,6DAA8B;AAC9B,6BAA6B;AAC7B,sDAAuB;AACvB,wDAAyB;AACzB,sDAAuB;AACvB,uDAAwB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare type IterateFn<T> = (value: T) => void | Promise<void>;
|
|
2
|
+
export declare type IteratePageFn<T> = (values: T[]) => void | Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Async iteration over the input values in-order.
|
|
5
|
+
*/
|
|
6
|
+
export declare function iterate<T>(values: T[], useFn: IterateFn<T>): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.iterate = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Async iteration over the input values in-order.
|
|
7
|
+
*/
|
|
8
|
+
function iterate(values, useFn) {
|
|
9
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
10
|
+
for (let i = 0; i < values.length; i += 1) {
|
|
11
|
+
yield useFn(values[i]);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
exports.iterate = iterate;
|
|
16
|
+
//# sourceMappingURL=iterate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/iterate.ts"],"names":[],"mappings":";;;;AAIA;;GAEG;AACH,SAAsB,OAAO,CAAI,MAAW,EAAE,KAAmB;;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;CAAA;AAJD,0BAIC"}
|
package/src/lib/key.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Maybe } from "./value";
|
|
2
|
+
/**
|
|
3
|
+
* A key made up of either a string or number value.
|
|
4
|
+
*/
|
|
5
|
+
export declare type PrimativeKey = string | number;
|
|
6
|
+
/**
|
|
7
|
+
* A key of a type.
|
|
8
|
+
*/
|
|
9
|
+
export declare type FieldOfType<T> = keyof T;
|
|
10
|
+
export declare type ReadKeyFunction<T, K extends PrimativeKey = PrimativeKey> = (model: T) => Maybe<K>;
|
|
11
|
+
export declare type ReadKeysFunction<T, K extends PrimativeKey = PrimativeKey> = (model: T) => K[];
|
package/src/lib/key.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/key.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/lifecycle.ts"],"names":[],"mappings":""}
|
package/src/lib/map.d.ts
ADDED
package/src/lib/map.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/map.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ReadKeyFunction, ReadKeysFunction } from './key';
|
|
2
|
+
import { Maybe } from './value';
|
|
3
|
+
/**
|
|
4
|
+
* A string model key
|
|
5
|
+
*/
|
|
6
|
+
export declare type ModelKey = string;
|
|
7
|
+
/**
|
|
8
|
+
* Arbitrary model type.
|
|
9
|
+
*/
|
|
10
|
+
export declare type ModelTypeString = string;
|
|
11
|
+
/**
|
|
12
|
+
* A model with an identifier on the "id" key.
|
|
13
|
+
*/
|
|
14
|
+
export interface UniqueModel {
|
|
15
|
+
id?: ModelKey;
|
|
16
|
+
}
|
|
17
|
+
export interface NamedUniqueModel extends UniqueModel {
|
|
18
|
+
name?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare type ModelOrKey<T extends UniqueModel> = T | ModelKey;
|
|
21
|
+
export interface ModelKeyTypePair {
|
|
22
|
+
key: ModelKey;
|
|
23
|
+
type: ModelTypeString;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An encoded ModelKeyTypePair.
|
|
27
|
+
*/
|
|
28
|
+
export declare type ModelKeyTypePairString = string;
|
|
29
|
+
export interface ModelKeyNamePair extends Pick<ModelKeyTypePair, 'key'> {
|
|
30
|
+
name?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ModelKeyTypeNamePair extends ModelKeyNamePair, ModelKeyTypePair {
|
|
33
|
+
}
|
|
34
|
+
export interface ReadModelKeyParams<T> {
|
|
35
|
+
required?: boolean;
|
|
36
|
+
read: ReadModelKeyFunction<T>;
|
|
37
|
+
}
|
|
38
|
+
export declare type ReadModelKeyFunction<T> = ReadKeyFunction<T, ModelKey>;
|
|
39
|
+
export declare type ReadRelationKeysFunction<T> = ReadKeysFunction<T, ModelKey>;
|
|
40
|
+
export declare type MultiModelKeyMap<T> = Map<string, T>;
|
|
41
|
+
export declare const readUniqueModelKey: (model: UniqueModel) => string | undefined;
|
|
42
|
+
export declare abstract class AbstractUniqueModel {
|
|
43
|
+
id?: ModelKey;
|
|
44
|
+
constructor(template: Partial<AbstractUniqueModel>);
|
|
45
|
+
}
|
|
46
|
+
export declare function uniqueKeys(keys: ModelKey[]): ModelKey[];
|
|
47
|
+
export declare function uniqueModels<T extends UniqueModel>(models: T[], readKey?: ReadModelKeyFunction<T>): T[];
|
|
48
|
+
export declare function uniqueModels<T>(models: T[], readKey: ReadModelKeyFunction<T>): T[];
|
|
49
|
+
export declare function readModelKeysFromObjects<T extends UniqueModel>(input: T[], required?: boolean, read?: ReadModelKeyFunction<T>): Maybe<ModelKey>[];
|
|
50
|
+
export declare function readModelKeysFromObjects<T extends UniqueModel>(input: T[], required: true, read?: ReadModelKeyFunction<T>): ModelKey[];
|
|
51
|
+
export declare function symmetricDifferenceWithModels<T extends UniqueModel>(a: ModelOrKey<T>[], b: ModelOrKey<T>[], required?: boolean, read?: ReadModelKeyFunction<T>): Maybe<ModelKey>[];
|
|
52
|
+
export declare function removeModelsWithSameKey<T>(input: T[], model: T, read: ReadModelKeyFunction<T>): T[];
|
|
53
|
+
export declare function removeModelsWithKey<T extends UniqueModel>(input: T[], key: Maybe<ModelKey>, read?: ReadModelKeyFunction<T>): T[];
|
|
54
|
+
export declare function removeModelsWithKey<T>(input: T[], key: Maybe<ModelKey>, read: ReadModelKeyFunction<T>): T[];
|
|
55
|
+
export declare function makeModelMap<T extends UniqueModel>(input: T[], read?: ReadModelKeyFunction<T>): Map<Maybe<ModelKey>, T>;
|
|
56
|
+
export declare function makeModelMap<T>(input: T[], read: ReadModelKeyFunction<T>): Map<Maybe<ModelKey>, T>;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a UniqueRelationsMap
|
|
59
|
+
*/
|
|
60
|
+
export declare function makeMultiModelKeyMap<T>(input: T[], read: ReadRelationKeysFunction<T>): MultiModelKeyMap<T>;
|
|
61
|
+
export declare function useModelOrKey<O, T extends UniqueModel>(input: ModelOrKey<T>, { useModel, useKey, required }: {
|
|
62
|
+
useModel?: (model: T) => O;
|
|
63
|
+
useKey: (key: Maybe<ModelKey>) => O;
|
|
64
|
+
required?: boolean;
|
|
65
|
+
}): Maybe<O>;
|
|
66
|
+
export declare function readModelKeys<T extends UniqueModel>(input: (ModelOrKey<T> | undefined)[], required?: boolean, read?: ReadModelKeyFunction<T>): Maybe<ModelKey>[];
|
|
67
|
+
export declare function requireModelKey<T extends UniqueModel>(input: ModelOrKey<T> | undefined): Maybe<ModelKey>;
|
|
68
|
+
export declare function readModelKey<T>(input: ModelOrKey<any> | undefined, params: ReadModelKeyParams<T>): Maybe<ModelKey>;
|
|
69
|
+
export declare function readModelKey<T extends UniqueModel>(input: ModelOrKey<T> | undefined, params?: Partial<ReadModelKeyParams<T>>): Maybe<ModelKey>;
|
|
70
|
+
export declare function readModelKeyFromObject<T extends UniqueModel>(input: T, required?: boolean, read?: ReadModelKeyFunction<T>): Maybe<ModelKey>;
|
|
71
|
+
export declare function isModelKey<T extends UniqueModel>(input: ModelOrKey<T>): input is ModelKey;
|
|
72
|
+
export declare function throwKeyIsRequired(): void;
|
|
73
|
+
export declare function encodeModelKeyTypePair(pair: ModelKeyTypePair): ModelKey;
|
|
74
|
+
export declare function decodeModelKeyTypePair(linkKey: ModelKey): ModelKeyTypePair;
|
package/src/lib/model.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeModelKeyTypePair = exports.encodeModelKeyTypePair = exports.throwKeyIsRequired = exports.isModelKey = exports.readModelKeyFromObject = exports.readModelKey = exports.requireModelKey = exports.readModelKeys = exports.useModelOrKey = exports.makeMultiModelKeyMap = exports.makeModelMap = exports.removeModelsWithKey = exports.removeModelsWithSameKey = exports.symmetricDifferenceWithModels = exports.readModelKeysFromObjects = exports.uniqueModels = exports.uniqueKeys = exports.AbstractUniqueModel = exports.readUniqueModelKey = void 0;
|
|
4
|
+
const array_set_1 = require("./array/array.set");
|
|
5
|
+
const array_unique_1 = require("./array/array.unique");
|
|
6
|
+
const readUniqueModelKey = (model) => model.id;
|
|
7
|
+
exports.readUniqueModelKey = readUniqueModelKey;
|
|
8
|
+
class AbstractUniqueModel {
|
|
9
|
+
constructor(template) {
|
|
10
|
+
if (template) {
|
|
11
|
+
this.id = template.id;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.AbstractUniqueModel = AbstractUniqueModel;
|
|
16
|
+
function uniqueKeys(keys) {
|
|
17
|
+
return Array.from(new Set(keys));
|
|
18
|
+
}
|
|
19
|
+
exports.uniqueKeys = uniqueKeys;
|
|
20
|
+
function uniqueModels(models, readKey = exports.readUniqueModelKey) {
|
|
21
|
+
return (0, array_unique_1.findUnique)(models, readKey);
|
|
22
|
+
}
|
|
23
|
+
exports.uniqueModels = uniqueModels;
|
|
24
|
+
function readModelKeysFromObjects(input, required, read) {
|
|
25
|
+
return input.map(x => readModelKeyFromObject(x, required, read));
|
|
26
|
+
}
|
|
27
|
+
exports.readModelKeysFromObjects = readModelKeysFromObjects;
|
|
28
|
+
function symmetricDifferenceWithModels(a, b, required, read) {
|
|
29
|
+
return (0, array_set_1.symmetricDifferenceKeys)(readModelKeys(a, required, read), readModelKeys(b, required, read));
|
|
30
|
+
}
|
|
31
|
+
exports.symmetricDifferenceWithModels = symmetricDifferenceWithModels;
|
|
32
|
+
function removeModelsWithSameKey(input, model, read) {
|
|
33
|
+
const targetKey = read(model);
|
|
34
|
+
return removeModelsWithKey(input, targetKey, read);
|
|
35
|
+
}
|
|
36
|
+
exports.removeModelsWithSameKey = removeModelsWithSameKey;
|
|
37
|
+
function removeModelsWithKey(input, key, read = exports.readUniqueModelKey) {
|
|
38
|
+
return input.filter(x => read(x) !== key);
|
|
39
|
+
}
|
|
40
|
+
exports.removeModelsWithKey = removeModelsWithKey;
|
|
41
|
+
function makeModelMap(input, read) {
|
|
42
|
+
const map = new Map();
|
|
43
|
+
if (input) {
|
|
44
|
+
input.forEach((x) => map.set(readModelKey(x, { required: false, read }), x));
|
|
45
|
+
}
|
|
46
|
+
return map;
|
|
47
|
+
}
|
|
48
|
+
exports.makeModelMap = makeModelMap;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a UniqueRelationsMap
|
|
51
|
+
*/
|
|
52
|
+
function makeMultiModelKeyMap(input, read) {
|
|
53
|
+
const map = new Map();
|
|
54
|
+
input.forEach((x) => {
|
|
55
|
+
var _a;
|
|
56
|
+
const keys = (_a = read(x)) !== null && _a !== void 0 ? _a : [];
|
|
57
|
+
keys.forEach((key) => map.set(key, x));
|
|
58
|
+
});
|
|
59
|
+
return map;
|
|
60
|
+
}
|
|
61
|
+
exports.makeMultiModelKeyMap = makeMultiModelKeyMap;
|
|
62
|
+
function useModelOrKey(input, { useModel, useKey, required = false }) {
|
|
63
|
+
let result;
|
|
64
|
+
if (input != null) {
|
|
65
|
+
if (isModelKey(input)) {
|
|
66
|
+
result = useKey(input);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
result = (useModel) ? useModel(input) : useKey(readModelKey(input));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (required) {
|
|
73
|
+
throwKeyIsRequired();
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
exports.useModelOrKey = useModelOrKey;
|
|
78
|
+
function readModelKeys(input, required, read) {
|
|
79
|
+
return input.map(x => readModelKey(x, { required, read }));
|
|
80
|
+
}
|
|
81
|
+
exports.readModelKeys = readModelKeys;
|
|
82
|
+
function requireModelKey(input) {
|
|
83
|
+
return readModelKey(input);
|
|
84
|
+
}
|
|
85
|
+
exports.requireModelKey = requireModelKey;
|
|
86
|
+
function readModelKey(input, { required = false, read = (x) => x.id } = {}) {
|
|
87
|
+
let key;
|
|
88
|
+
switch (typeof input) {
|
|
89
|
+
case 'string':
|
|
90
|
+
key = input;
|
|
91
|
+
break;
|
|
92
|
+
case 'object':
|
|
93
|
+
key = read(input);
|
|
94
|
+
break;
|
|
95
|
+
case 'undefined':
|
|
96
|
+
default:
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (!key && required) {
|
|
100
|
+
throwKeyIsRequired();
|
|
101
|
+
}
|
|
102
|
+
return key;
|
|
103
|
+
}
|
|
104
|
+
exports.readModelKey = readModelKey;
|
|
105
|
+
function readModelKeyFromObject(input, required = false, read = (x) => x.id) {
|
|
106
|
+
const key = read(input);
|
|
107
|
+
if (!key && required) {
|
|
108
|
+
throwKeyIsRequired();
|
|
109
|
+
}
|
|
110
|
+
return key;
|
|
111
|
+
}
|
|
112
|
+
exports.readModelKeyFromObject = readModelKeyFromObject;
|
|
113
|
+
function isModelKey(input) {
|
|
114
|
+
switch (typeof input) {
|
|
115
|
+
case 'string':
|
|
116
|
+
return true;
|
|
117
|
+
default:
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.isModelKey = isModelKey;
|
|
122
|
+
function throwKeyIsRequired() {
|
|
123
|
+
throw new Error('Key was required.');
|
|
124
|
+
}
|
|
125
|
+
exports.throwKeyIsRequired = throwKeyIsRequired;
|
|
126
|
+
function encodeModelKeyTypePair(pair) {
|
|
127
|
+
return `${pair.type}_${pair.key}`;
|
|
128
|
+
}
|
|
129
|
+
exports.encodeModelKeyTypePair = encodeModelKeyTypePair;
|
|
130
|
+
function decodeModelKeyTypePair(linkKey) {
|
|
131
|
+
const split = linkKey.split('_');
|
|
132
|
+
return {
|
|
133
|
+
type: split[0],
|
|
134
|
+
key: split[1]
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
exports.decodeModelKeyTypePair = decodeModelKeyTypePair;
|
|
138
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rounds the input number to the given precision.
|
|
3
|
+
*
|
|
4
|
+
* @param value
|
|
5
|
+
* @param precision
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare function roundToPrecision(value: number, precision: number): number;
|
|
9
|
+
/**
|
|
10
|
+
* Rounds the number up to a specific "step" that contains it.
|
|
11
|
+
*
|
|
12
|
+
* For example, with the value of 2, and a step size of 5, the value will be rounded up to 1.
|
|
13
|
+
*
|
|
14
|
+
* @param value Input value.
|
|
15
|
+
* @param step Step size.
|
|
16
|
+
* @returns Step that contains the value.
|
|
17
|
+
*/
|
|
18
|
+
export declare function roundNumberUpToStep(value: number, step: number): number;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.roundNumberUpToStep = exports.roundToPrecision = void 0;
|
|
4
|
+
// MARK: Number/Math
|
|
5
|
+
/**
|
|
6
|
+
* Rounds the input number to the given precision.
|
|
7
|
+
*
|
|
8
|
+
* @param value
|
|
9
|
+
* @param precision
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
function roundToPrecision(value, precision) {
|
|
13
|
+
return +(Math.round(Number(value + 'e+' + precision)) + 'e-' + precision);
|
|
14
|
+
}
|
|
15
|
+
exports.roundToPrecision = roundToPrecision;
|
|
16
|
+
/**
|
|
17
|
+
* Rounds the number up to a specific "step" that contains it.
|
|
18
|
+
*
|
|
19
|
+
* For example, with the value of 2, and a step size of 5, the value will be rounded up to 1.
|
|
20
|
+
*
|
|
21
|
+
* @param value Input value.
|
|
22
|
+
* @param step Step size.
|
|
23
|
+
* @returns Step that contains the value.
|
|
24
|
+
*/
|
|
25
|
+
function roundNumberUpToStep(value, step) {
|
|
26
|
+
return Math.ceil(value / step) * step;
|
|
27
|
+
}
|
|
28
|
+
exports.roundNumberUpToStep = roundNumberUpToStep;
|
|
29
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../../../packages/util/src/lib/number.ts"],"names":[],"mappings":";;;AACA,oBAAoB;AACpB;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAC5E,CAAC;AAFD,4CAEC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAC,KAAa,EAAE,IAAY;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACxC,CAAC;AAFD,kDAEC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./object.array"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./object.equal"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./object"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/util/src/lib/object/index.ts"],"names":[],"mappings":";;;AAAA,8DAA+B;AAC/B,8DAA+B;AAC/B,wDAAyB"}
|