@dereekb/util 7.0.1 → 7.3.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/CHANGELOG.md +28 -0
- package/package.json +1 -1
- package/src/lib/array/array.boolean.d.ts +1 -1
- package/src/lib/array/array.d.ts +1 -1
- package/src/lib/array/array.index.d.ts +1 -1
- package/src/lib/array/array.js +1 -1
- package/src/lib/array/array.js.map +1 -1
- package/src/lib/array/array.limit.d.ts +1 -1
- package/src/lib/array/array.map.d.ts +1 -1
- package/src/lib/array/array.string.d.ts +30 -0
- package/src/lib/array/array.string.js +28 -1
- package/src/lib/array/array.string.js.map +1 -1
- package/src/lib/array/array.unique.d.ts +13 -1
- package/src/lib/array/array.unique.js +12 -1
- package/src/lib/array/array.unique.js.map +1 -1
- package/src/lib/array/array.value.d.ts +14 -2
- package/src/lib/array/array.value.js +24 -6
- package/src/lib/array/array.value.js.map +1 -1
- package/src/lib/auth/auth.role.claims.d.ts +1 -1
- package/src/lib/auth/auth.role.claims.js +13 -10
- package/src/lib/auth/auth.role.claims.js.map +1 -1
- package/src/lib/auth/auth.role.d.ts +1 -1
- package/src/lib/date/date.d.ts +1 -1
- package/src/lib/date/date.time.d.ts +1 -1
- package/src/lib/error/error.d.ts +1 -1
- package/src/lib/error/error.server.d.ts +1 -1
- package/src/lib/filter/filter.d.ts +3 -0
- package/src/lib/filter/filter.js.map +1 -1
- package/src/lib/grouping.d.ts +1 -1
- package/src/lib/iterable/iterable.d.ts +8 -1
- package/src/lib/iterable/iterable.js +14 -1
- package/src/lib/iterable/iterable.js.map +1 -1
- package/src/lib/key.d.ts +1 -1
- package/src/lib/misc/host.d.ts +1 -1
- package/src/lib/model/index.d.ts +1 -0
- package/src/lib/model/index.js +1 -0
- package/src/lib/model/index.js.map +1 -1
- package/src/lib/model/model.conversion.d.ts +11 -5
- package/src/lib/model/model.conversion.js +7 -6
- package/src/lib/model/model.conversion.js.map +1 -1
- package/src/lib/model/model.copy.d.ts +1 -1
- package/src/lib/model/model.d.ts +1 -1
- package/src/lib/model/model.modify.d.ts +47 -0
- package/src/lib/model/model.modify.js +51 -0
- package/src/lib/model/model.modify.js.map +1 -0
- package/src/lib/object/index.d.ts +3 -0
- package/src/lib/object/index.js +3 -0
- package/src/lib/object/index.js.map +1 -1
- package/src/lib/object/object.d.ts +4 -112
- package/src/lib/object/object.empty.d.ts +7 -0
- package/src/lib/object/object.empty.js +27 -0
- package/src/lib/object/object.empty.js.map +1 -0
- package/src/lib/object/object.filter.pojo.d.ts +154 -0
- package/src/lib/object/object.filter.pojo.js +235 -0
- package/src/lib/object/object.filter.pojo.js.map +1 -0
- package/src/lib/object/object.filter.tuple.d.ts +64 -0
- package/src/lib/object/object.filter.tuple.js +120 -0
- package/src/lib/object/object.filter.tuple.js.map +1 -0
- package/src/lib/object/object.js +6 -224
- package/src/lib/object/object.js.map +1 -1
- package/src/lib/object/object.map.d.ts +23 -1
- package/src/lib/object/object.map.js +26 -4
- package/src/lib/object/object.map.js.map +1 -1
- package/src/lib/page/page.d.ts +1 -1
- package/src/lib/promise/promise.d.ts +1 -1
- package/src/lib/promise/promise.loop.d.ts +1 -1
- package/src/lib/relation/relation.d.ts +8 -7
- package/src/lib/relation/relation.js +2 -1
- package/src/lib/relation/relation.js.map +1 -1
- package/src/lib/service/typed.service.js +2 -2
- package/src/lib/service/typed.service.js.map +1 -1
- package/src/lib/set/set.allowed.d.ts +1 -1
- package/src/lib/set/set.d.ts +1 -1
- package/src/lib/set/set.hashset.d.ts +1 -1
- package/src/lib/set/set.maybe.d.ts +1 -1
- package/src/lib/storage/storage.memory.d.ts +1 -1
- package/src/lib/storage/storage.object.d.ts +1 -1
- package/src/lib/storage/storage.object.js +4 -3
- package/src/lib/storage/storage.object.js.map +1 -1
- package/src/lib/string.d.ts +1 -1
- package/src/lib/tree/tree.expand.d.ts +1 -1
- package/src/lib/value/index.d.ts +1 -0
- package/src/lib/value/index.js +1 -0
- package/src/lib/value/index.js.map +1 -1
- package/src/lib/value/map.d.ts +5 -1
- package/src/lib/value/map.js +11 -1
- package/src/lib/value/map.js.map +1 -1
- package/src/lib/value/maybe.d.ts +16 -41
- package/src/lib/value/maybe.js +57 -4
- package/src/lib/value/maybe.js.map +1 -1
- package/src/lib/value/maybe.type.d.ts +19 -0
- package/src/lib/value/maybe.type.js +3 -0
- package/src/lib/value/maybe.type.js.map +1 -0
- package/src/lib/value/modifier.d.ts +23 -6
- package/src/lib/value/modifier.js +43 -7
- package/src/lib/value/modifier.js.map +1 -1
- package/test/CHANGELOG.md +12 -0
- package/test/package.json +2 -2
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.forEachKeyValueOnPOJOFunction = exports.valuesFromPOJOFunction = exports.valuesFromPOJO = exports.assignValuesToPOJOFunction = exports.assignValuesToPOJO = exports.defaultFilterFromPOJOFunctionNoCopy = exports.filterFromPOJOFunction = exports.filterFromPOJO = exports.countPOJOKeysFunction = exports.countPOJOKeys = exports.findPOJOKeysFunction = exports.findPOJOKeys = exports.allMaybeSoKeys = exports.allNonUndefinedKeys = exports.filterNullAndUndefinedValues = exports.filterOnlyUndefinedValues = exports.filterUndefinedValues = exports.mergeObjectsFunction = exports.mergeObjects = exports.overrideInObjectFunctionFactory = exports.overrideInObject = void 0;
|
|
4
|
+
const array_value_1 = require("../array/array.value");
|
|
5
|
+
const object_filter_tuple_1 = require("./object.filter.tuple");
|
|
6
|
+
const getter_1 = require("../getter");
|
|
7
|
+
const object_1 = require("./object");
|
|
8
|
+
// MARK: Object Merging/Overriding
|
|
9
|
+
/**
|
|
10
|
+
* Assigns all undefined values from one or more objects into the target object.
|
|
11
|
+
*
|
|
12
|
+
* @param object
|
|
13
|
+
*/
|
|
14
|
+
function overrideInObject(target, { copy = false, from, filter }) {
|
|
15
|
+
return overrideInObjectFunctionFactory({
|
|
16
|
+
copy,
|
|
17
|
+
filter,
|
|
18
|
+
dynamic: true // using only once, so no need to use the cache
|
|
19
|
+
})(from)(target);
|
|
20
|
+
}
|
|
21
|
+
exports.overrideInObject = overrideInObject;
|
|
22
|
+
function overrideInObjectFunctionFactory({ filter, copy, dynamic = false }) {
|
|
23
|
+
const filterToRelevantValuesObject = filter != null ? filterFromPOJOFunction({ filter, copy: false }) : exports.defaultFilterFromPOJOFunctionNoCopy;
|
|
24
|
+
return (from) => {
|
|
25
|
+
const rebuildTemplate = () => {
|
|
26
|
+
const template = {};
|
|
27
|
+
from.forEach((x) => {
|
|
28
|
+
const relevantValues = filterToRelevantValuesObject(Object.assign({}, x));
|
|
29
|
+
Object.assign(template, relevantValues);
|
|
30
|
+
});
|
|
31
|
+
return template;
|
|
32
|
+
};
|
|
33
|
+
const templateGetter = dynamic ? rebuildTemplate : (0, getter_1.cachedGetter)(rebuildTemplate);
|
|
34
|
+
return (target) => {
|
|
35
|
+
const template = templateGetter();
|
|
36
|
+
if (copy) {
|
|
37
|
+
target = (0, object_1.copyObject)(target);
|
|
38
|
+
}
|
|
39
|
+
Object.assign(target, template);
|
|
40
|
+
return target;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
exports.overrideInObjectFunctionFactory = overrideInObjectFunctionFactory;
|
|
45
|
+
/**
|
|
46
|
+
* Merges all input objects into one. The order of overrides is kept, so the right-most item in the array will have priority over all objects before it.
|
|
47
|
+
*
|
|
48
|
+
* @param objects
|
|
49
|
+
*/
|
|
50
|
+
function mergeObjects(objects, filter) {
|
|
51
|
+
return mergeObjectsFunction(filter)(objects);
|
|
52
|
+
}
|
|
53
|
+
exports.mergeObjects = mergeObjects;
|
|
54
|
+
function mergeObjectsFunction(filter) {
|
|
55
|
+
const overrideFn = overrideInObjectFunctionFactory({
|
|
56
|
+
filter,
|
|
57
|
+
copy: false,
|
|
58
|
+
dynamic: true // no need to use cache, as cache won't be used.
|
|
59
|
+
});
|
|
60
|
+
return (objects) => overrideFn((0, array_value_1.filterMaybeValues)(objects))({});
|
|
61
|
+
}
|
|
62
|
+
exports.mergeObjectsFunction = mergeObjectsFunction;
|
|
63
|
+
// MARK: POJO
|
|
64
|
+
/**
|
|
65
|
+
* Returns a copy of the input object with all undefined (and null values if filterNull=true) values filtered/removed from it.
|
|
66
|
+
*
|
|
67
|
+
* @param obj
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
function filterUndefinedValues(obj, filterNull = false) {
|
|
71
|
+
const filterFn = filterNull ? exports.filterNullAndUndefinedValues : exports.filterOnlyUndefinedValues;
|
|
72
|
+
return filterFn(obj);
|
|
73
|
+
}
|
|
74
|
+
exports.filterUndefinedValues = filterUndefinedValues;
|
|
75
|
+
/**
|
|
76
|
+
* Returns a copy of the input object with all undefined values filtered from it.
|
|
77
|
+
*
|
|
78
|
+
* @param obj
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
exports.filterOnlyUndefinedValues = filterFromPOJOFunction({ copy: true, filter: { valueFilter: object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED } });
|
|
82
|
+
/**
|
|
83
|
+
* Returns a copy of the input object with all null and undefined values filtered from it.
|
|
84
|
+
*
|
|
85
|
+
* @param obj
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
exports.filterNullAndUndefinedValues = filterFromPOJOFunction({ copy: true, filter: { valueFilter: object_filter_tuple_1.KeyValueTypleValueFilter.NULL } });
|
|
89
|
+
/**
|
|
90
|
+
* Returns all keys that are not associated with an undefined value.
|
|
91
|
+
*
|
|
92
|
+
* @param obj
|
|
93
|
+
* @returns
|
|
94
|
+
*/
|
|
95
|
+
exports.allNonUndefinedKeys = findPOJOKeysFunction({ valueFilter: object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED });
|
|
96
|
+
/**
|
|
97
|
+
* Returns all keys that are not associated with a null/undefined value.
|
|
98
|
+
*
|
|
99
|
+
* @param obj
|
|
100
|
+
* @returns
|
|
101
|
+
*/
|
|
102
|
+
exports.allMaybeSoKeys = findPOJOKeysFunction({ valueFilter: object_filter_tuple_1.KeyValueTypleValueFilter.NULL });
|
|
103
|
+
// MARK: FindPOJOKeys
|
|
104
|
+
/**
|
|
105
|
+
* Finds keys from the POJO that meet the filter.
|
|
106
|
+
*
|
|
107
|
+
* @param obj
|
|
108
|
+
* @param filter
|
|
109
|
+
* @returns
|
|
110
|
+
*/
|
|
111
|
+
function findPOJOKeys(obj, filter) {
|
|
112
|
+
return findPOJOKeysFunction(filter)(obj);
|
|
113
|
+
}
|
|
114
|
+
exports.findPOJOKeys = findPOJOKeys;
|
|
115
|
+
function findPOJOKeysFunction(filter) {
|
|
116
|
+
const findEachMatchingKeyOnTarget = forEachKeyValueOnPOJOFunction({
|
|
117
|
+
filter,
|
|
118
|
+
forEach: ([key], i, obj, context) => {
|
|
119
|
+
context.keys.push(key);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return (obj) => {
|
|
123
|
+
const context = { keys: [] };
|
|
124
|
+
findEachMatchingKeyOnTarget(obj, context);
|
|
125
|
+
return context.keys;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
exports.findPOJOKeysFunction = findPOJOKeysFunction;
|
|
129
|
+
// MARK: CountPOJOKeys
|
|
130
|
+
/**
|
|
131
|
+
* Finds and counts the number of keys from the POJO that meet the filter.
|
|
132
|
+
*
|
|
133
|
+
* @param obj
|
|
134
|
+
* @param filter
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
function countPOJOKeys(obj, filter = object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED) {
|
|
138
|
+
return countPOJOKeysFunction(filter)(obj);
|
|
139
|
+
}
|
|
140
|
+
exports.countPOJOKeys = countPOJOKeys;
|
|
141
|
+
function countPOJOKeysFunction(filter = object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED) {
|
|
142
|
+
const countEachMatchingKeyOnTarget = forEachKeyValueOnPOJOFunction({
|
|
143
|
+
filter,
|
|
144
|
+
forEach: (x, i, obj, context) => {
|
|
145
|
+
context.count += 1;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return (obj) => {
|
|
149
|
+
const context = { count: 0 };
|
|
150
|
+
countEachMatchingKeyOnTarget(obj, context);
|
|
151
|
+
return context.count;
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
exports.countPOJOKeysFunction = countPOJOKeysFunction;
|
|
155
|
+
/**
|
|
156
|
+
* Removes values, per the the filter config, from the input object.
|
|
157
|
+
*
|
|
158
|
+
* @param obj POJO to remove undefined values from.
|
|
159
|
+
* @param copy Whether or not to return a copy of the input object. Default is true.
|
|
160
|
+
*/
|
|
161
|
+
function filterFromPOJO(obj, config = {}) {
|
|
162
|
+
return filterFromPOJOFunction(config)(obj);
|
|
163
|
+
}
|
|
164
|
+
exports.filterFromPOJO = filterFromPOJO;
|
|
165
|
+
function filterFromPOJOFunction({ copy = false, filter: inputFilter = { valueFilter: object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED } } = {}) {
|
|
166
|
+
const filter = (0, object_filter_tuple_1.filterKeyValueTuplesInputToFilter)(inputFilter);
|
|
167
|
+
filter.invertFilter = !filter.invertFilter; // use the inversion of the filter to retain values
|
|
168
|
+
const forEachFn = forEachKeyValueOnPOJOFunction({
|
|
169
|
+
filter,
|
|
170
|
+
forEach: ([key], i, object) => {
|
|
171
|
+
delete object[key];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
return (obj) => {
|
|
175
|
+
if (copy) {
|
|
176
|
+
obj = Object.assign({}, obj);
|
|
177
|
+
}
|
|
178
|
+
forEachFn(obj);
|
|
179
|
+
return obj;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
exports.filterFromPOJOFunction = filterFromPOJOFunction;
|
|
183
|
+
/**
|
|
184
|
+
* Convenience function from filterFromPOJOFunction with copy set to false and using the default filter.
|
|
185
|
+
*/
|
|
186
|
+
exports.defaultFilterFromPOJOFunctionNoCopy = filterFromPOJOFunction({ copy: false });
|
|
187
|
+
// MARK: AssignValuesToPOJO
|
|
188
|
+
function assignValuesToPOJO(target, obj, filter) {
|
|
189
|
+
return assignValuesToPOJOFunction(filter)(target, obj);
|
|
190
|
+
}
|
|
191
|
+
exports.assignValuesToPOJO = assignValuesToPOJO;
|
|
192
|
+
function assignValuesToPOJOFunction(filter = object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED) {
|
|
193
|
+
const assignEachValueToTarget = forEachKeyValueOnPOJOFunction({
|
|
194
|
+
filter,
|
|
195
|
+
forEach: ([key, value], i, object, target) => {
|
|
196
|
+
target[key] = value;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
return (target, obj) => {
|
|
200
|
+
assignEachValueToTarget(obj, target);
|
|
201
|
+
return obj;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
exports.assignValuesToPOJOFunction = assignValuesToPOJOFunction;
|
|
205
|
+
// MARK: ValuesFromPOJO
|
|
206
|
+
/**
|
|
207
|
+
* Reads values from matching keys based on the filter and puts them into an array.
|
|
208
|
+
*/
|
|
209
|
+
function valuesFromPOJO(target, filter = object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED) {
|
|
210
|
+
return valuesFromPOJOFunction(filter)(target);
|
|
211
|
+
}
|
|
212
|
+
exports.valuesFromPOJO = valuesFromPOJO;
|
|
213
|
+
function valuesFromPOJOFunction(filter = object_filter_tuple_1.KeyValueTypleValueFilter.UNDEFINED) {
|
|
214
|
+
const addValuesFromObjectToContext = forEachKeyValueOnPOJOFunction({
|
|
215
|
+
filter,
|
|
216
|
+
forEach: ([, value], i, obj, context) => {
|
|
217
|
+
context.values.push(value);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return (obj) => {
|
|
221
|
+
const context = { values: [] };
|
|
222
|
+
addValuesFromObjectToContext(obj, context);
|
|
223
|
+
return context.values;
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
exports.valuesFromPOJOFunction = valuesFromPOJOFunction;
|
|
227
|
+
function forEachKeyValueOnPOJOFunction({ forEach, filter }) {
|
|
228
|
+
const filterKeyValues = (0, object_filter_tuple_1.filterKeyValueTuplesFunction)(filter);
|
|
229
|
+
return ((obj, context) => {
|
|
230
|
+
const keyValues = filterKeyValues(obj);
|
|
231
|
+
keyValues.forEach((x, i) => forEach(x, i, obj, context));
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
exports.forEachKeyValueOnPOJOFunction = forEachKeyValueOnPOJOFunction;
|
|
235
|
+
//# sourceMappingURL=object.filter.pojo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.filter.pojo.js","sourceRoot":"","sources":["../../../../../../packages/util/src/lib/object/object.filter.pojo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { FilterFunction } from '../filter/filter';
|
|
2
|
+
export declare type ForEachKeyValueTupleFunction<T extends object = object, K extends keyof T = keyof T> = (tuple: KeyValueTuple<T, K>, index: number) => void;
|
|
3
|
+
export interface ForEachKeyValue<T extends object = object, K extends keyof T = keyof T> {
|
|
4
|
+
filter?: FilterKeyValueTuplesInput<T, K>;
|
|
5
|
+
forEach: ForEachKeyValueTupleFunction<T, K>;
|
|
6
|
+
}
|
|
7
|
+
export declare function forEachKeyValue<T extends object = object, K extends keyof T = keyof T>(obj: T, { forEach, filter }: ForEachKeyValue<T, K>): void;
|
|
8
|
+
export declare function filterKeyValueTuples<T extends object = object, K extends keyof T = keyof T>(obj: T, filter?: FilterKeyValueTuplesInput<T, K>): KeyValueTuple<T, K>[];
|
|
9
|
+
/**
|
|
10
|
+
* A Key-Value pair within an Tuple array value.
|
|
11
|
+
*/
|
|
12
|
+
export declare type KeyValueTuple<T extends object = object, K extends keyof T = keyof T> = [K, T[K]];
|
|
13
|
+
export declare type FilterKeyValueTuplesFunction<T extends object = object, K extends keyof T = keyof T> = (obj: T) => KeyValueTuple<T, K>[];
|
|
14
|
+
export declare function filterKeyValueTuplesFunction<T extends object = object, K extends keyof T = keyof T>(filter?: FilterKeyValueTuplesInput<T, K>): FilterKeyValueTuplesFunction<T, K>;
|
|
15
|
+
export declare function allKeyValueTuples<T extends object = object, K extends keyof T = keyof T>(obj: T): KeyValueTuple<T, K>[];
|
|
16
|
+
export declare type FilterKeyValueTuplesInput<T extends object = object, K extends keyof T = keyof T> = KeyValueTypleValueFilter | KeyValueTupleFilter<T, K>;
|
|
17
|
+
export declare enum KeyValueTypleValueFilter {
|
|
18
|
+
/**
|
|
19
|
+
* No filter
|
|
20
|
+
*/
|
|
21
|
+
NONE = 0,
|
|
22
|
+
/**
|
|
23
|
+
* Only undefined values.
|
|
24
|
+
*/
|
|
25
|
+
UNDEFINED = 1,
|
|
26
|
+
/**
|
|
27
|
+
* All values that are null or undefined.
|
|
28
|
+
*/
|
|
29
|
+
NULL = 2,
|
|
30
|
+
/**
|
|
31
|
+
* All values that are falsy.
|
|
32
|
+
*/
|
|
33
|
+
FALSY = 3,
|
|
34
|
+
/**
|
|
35
|
+
* All values that are empty.
|
|
36
|
+
*/
|
|
37
|
+
EMPTY = 4,
|
|
38
|
+
/**
|
|
39
|
+
* All values that are empty. Objects that have no keys are considered empty too.
|
|
40
|
+
*/
|
|
41
|
+
EMPTY_STRICT = 5,
|
|
42
|
+
/**
|
|
43
|
+
* All values that are falsy or empty.
|
|
44
|
+
*/
|
|
45
|
+
FALSY_AND_EMPTY = 6,
|
|
46
|
+
/**
|
|
47
|
+
* All values that are falsy or empty or an empty objects.
|
|
48
|
+
*/
|
|
49
|
+
FALSY_AND_EMPTY_STRICT = 7
|
|
50
|
+
}
|
|
51
|
+
export interface KeyValueTupleFilter<T extends object = object, K extends keyof T = keyof T> {
|
|
52
|
+
valueFilter?: KeyValueTypleValueFilter;
|
|
53
|
+
invertFilter?: boolean;
|
|
54
|
+
keysFilter?: K[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Converts an input FilterKeyValueTuplesInput to a KeyValueTupleFilter.
|
|
58
|
+
*
|
|
59
|
+
* @param input
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
export declare function filterKeyValueTuplesInputToFilter<T extends object = object, K extends keyof T = keyof T>(input: FilterKeyValueTuplesInput<T, K>): KeyValueTupleFilter<T, K>;
|
|
63
|
+
export declare type FilterKeyValueTupleFunction<T extends object = object, K extends keyof T = keyof T> = FilterFunction<KeyValueTuple<T, K>>;
|
|
64
|
+
export declare function filterKeyValueTupleFunction<T extends object = object, K extends keyof T = keyof T>(inputFilter: FilterKeyValueTuplesInput<T, K>): FilterKeyValueTupleFunction<T, K>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterKeyValueTupleFunction = exports.filterKeyValueTuplesInputToFilter = exports.KeyValueTypleValueFilter = exports.allKeyValueTuples = exports.filterKeyValueTuplesFunction = exports.filterKeyValueTuples = exports.forEachKeyValue = void 0;
|
|
4
|
+
const filter_1 = require("../filter/filter");
|
|
5
|
+
const maybe_1 = require("../value/maybe");
|
|
6
|
+
function forEachKeyValue(obj, { forEach, filter }) {
|
|
7
|
+
const keyValues = filterKeyValueTuples(obj, filter);
|
|
8
|
+
keyValues.forEach(forEach);
|
|
9
|
+
}
|
|
10
|
+
exports.forEachKeyValue = forEachKeyValue;
|
|
11
|
+
function filterKeyValueTuples(obj, filter) {
|
|
12
|
+
return filterKeyValueTuplesFunction(filter)(obj);
|
|
13
|
+
}
|
|
14
|
+
exports.filterKeyValueTuples = filterKeyValueTuples;
|
|
15
|
+
function filterKeyValueTuplesFunction(filter) {
|
|
16
|
+
if (filter != null) {
|
|
17
|
+
const filterFn = filterKeyValueTupleFunction(filter);
|
|
18
|
+
return (obj) => {
|
|
19
|
+
return allKeyValueTuples(obj).filter(filterFn);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return allKeyValueTuples;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.filterKeyValueTuplesFunction = filterKeyValueTuplesFunction;
|
|
27
|
+
function allKeyValueTuples(obj) {
|
|
28
|
+
return Object.entries(obj);
|
|
29
|
+
}
|
|
30
|
+
exports.allKeyValueTuples = allKeyValueTuples;
|
|
31
|
+
var KeyValueTypleValueFilter;
|
|
32
|
+
(function (KeyValueTypleValueFilter) {
|
|
33
|
+
/**
|
|
34
|
+
* No filter
|
|
35
|
+
*/
|
|
36
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["NONE"] = 0] = "NONE";
|
|
37
|
+
/**
|
|
38
|
+
* Only undefined values.
|
|
39
|
+
*/
|
|
40
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["UNDEFINED"] = 1] = "UNDEFINED";
|
|
41
|
+
/**
|
|
42
|
+
* All values that are null or undefined.
|
|
43
|
+
*/
|
|
44
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["NULL"] = 2] = "NULL";
|
|
45
|
+
/**
|
|
46
|
+
* All values that are falsy.
|
|
47
|
+
*/
|
|
48
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["FALSY"] = 3] = "FALSY";
|
|
49
|
+
/**
|
|
50
|
+
* All values that are empty.
|
|
51
|
+
*/
|
|
52
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["EMPTY"] = 4] = "EMPTY";
|
|
53
|
+
/**
|
|
54
|
+
* All values that are empty. Objects that have no keys are considered empty too.
|
|
55
|
+
*/
|
|
56
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["EMPTY_STRICT"] = 5] = "EMPTY_STRICT";
|
|
57
|
+
/**
|
|
58
|
+
* All values that are falsy or empty.
|
|
59
|
+
*/
|
|
60
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["FALSY_AND_EMPTY"] = 6] = "FALSY_AND_EMPTY";
|
|
61
|
+
/**
|
|
62
|
+
* All values that are falsy or empty or an empty objects.
|
|
63
|
+
*/
|
|
64
|
+
KeyValueTypleValueFilter[KeyValueTypleValueFilter["FALSY_AND_EMPTY_STRICT"] = 7] = "FALSY_AND_EMPTY_STRICT";
|
|
65
|
+
})(KeyValueTypleValueFilter = exports.KeyValueTypleValueFilter || (exports.KeyValueTypleValueFilter = {}));
|
|
66
|
+
/**
|
|
67
|
+
* Converts an input FilterKeyValueTuplesInput to a KeyValueTupleFilter.
|
|
68
|
+
*
|
|
69
|
+
* @param input
|
|
70
|
+
* @returns
|
|
71
|
+
*/
|
|
72
|
+
function filterKeyValueTuplesInputToFilter(input) {
|
|
73
|
+
if (typeof input === 'object') {
|
|
74
|
+
return input;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return { valueFilter: input };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.filterKeyValueTuplesInputToFilter = filterKeyValueTuplesInputToFilter;
|
|
81
|
+
function filterKeyValueTupleFunction(inputFilter) {
|
|
82
|
+
const filter = filterKeyValueTuplesInputToFilter(inputFilter);
|
|
83
|
+
const { valueFilter: type, invertFilter: inverseFilter = false, keysFilter } = filter;
|
|
84
|
+
let filterFn;
|
|
85
|
+
switch (type) {
|
|
86
|
+
case KeyValueTypleValueFilter.UNDEFINED:
|
|
87
|
+
filterFn = ([, x]) => x !== undefined;
|
|
88
|
+
break;
|
|
89
|
+
case KeyValueTypleValueFilter.NULL:
|
|
90
|
+
filterFn = ([, x]) => x != null;
|
|
91
|
+
break;
|
|
92
|
+
case KeyValueTypleValueFilter.FALSY:
|
|
93
|
+
filterFn = ([, x]) => Boolean(x);
|
|
94
|
+
break;
|
|
95
|
+
case KeyValueTypleValueFilter.EMPTY:
|
|
96
|
+
filterFn = ([, x]) => (0, maybe_1.hasValueOrNotEmpty)(x);
|
|
97
|
+
break;
|
|
98
|
+
case KeyValueTypleValueFilter.EMPTY_STRICT:
|
|
99
|
+
filterFn = ([, x]) => (0, maybe_1.hasValueOrNotEmptyObject)(x);
|
|
100
|
+
break;
|
|
101
|
+
case KeyValueTypleValueFilter.FALSY_AND_EMPTY:
|
|
102
|
+
filterFn = ([, x]) => Boolean(x) && (0, maybe_1.hasValueOrNotEmpty)(x);
|
|
103
|
+
break;
|
|
104
|
+
case KeyValueTypleValueFilter.FALSY_AND_EMPTY_STRICT:
|
|
105
|
+
filterFn = ([, x]) => Boolean(x) && (0, maybe_1.hasValueOrNotEmptyObject)(x);
|
|
106
|
+
break;
|
|
107
|
+
case KeyValueTypleValueFilter.NONE:
|
|
108
|
+
default:
|
|
109
|
+
filterFn = () => true;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
if (keysFilter) {
|
|
113
|
+
const filterByTypeFn = filterFn;
|
|
114
|
+
const keysSet = new Set(keysFilter);
|
|
115
|
+
filterFn = (x, i) => filterByTypeFn(x, i) && keysSet.has(x[0]);
|
|
116
|
+
}
|
|
117
|
+
return (0, filter_1.invertFilter)(filterFn, inverseFilter);
|
|
118
|
+
}
|
|
119
|
+
exports.filterKeyValueTupleFunction = filterKeyValueTupleFunction;
|
|
120
|
+
//# sourceMappingURL=object.filter.tuple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.filter.tuple.js","sourceRoot":"","sources":["../../../../../../packages/util/src/lib/object/object.filter.tuple.ts"],"names":[],"mappings":"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"}
|
package/src/lib/object/object.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const maybe_1 = require("../value/maybe");
|
|
5
|
-
const array_value_1 = require("../array/array.value");
|
|
6
|
-
const filter_1 = require("../filter/filter");
|
|
3
|
+
exports.copyObject = exports.mapToObject = exports.applyToMultipleFields = exports.objectHasKey = exports.objectHasNoKeys = void 0;
|
|
7
4
|
function objectHasNoKeys(obj) {
|
|
8
5
|
return Object.keys(obj).length === 0;
|
|
9
6
|
}
|
|
@@ -29,228 +26,13 @@ function mapToObject(map) {
|
|
|
29
26
|
}
|
|
30
27
|
exports.mapToObject = mapToObject;
|
|
31
28
|
/**
|
|
32
|
-
*
|
|
29
|
+
* Creates a shallow copy of an object using the spread operator.
|
|
33
30
|
*
|
|
34
|
-
* @param
|
|
31
|
+
* @param input
|
|
35
32
|
* @returns
|
|
36
33
|
*/
|
|
37
|
-
function
|
|
38
|
-
return
|
|
34
|
+
function copyObject(input) {
|
|
35
|
+
return Object.assign({}, input);
|
|
39
36
|
}
|
|
40
|
-
exports.
|
|
41
|
-
/**
|
|
42
|
-
* Returns a copy of the input object with all undefined values filtered from it.
|
|
43
|
-
*
|
|
44
|
-
* @param obj
|
|
45
|
-
* @returns
|
|
46
|
-
*/
|
|
47
|
-
function filterUndefinedValues(obj, filterNull = false) {
|
|
48
|
-
return filterFromPOJO(obj, { copy: true, filter: { valueFilter: filterNull ? KeyValueTypleValueFilter.NULL : KeyValueTypleValueFilter.UNDEFINED } });
|
|
49
|
-
}
|
|
50
|
-
exports.filterUndefinedValues = filterUndefinedValues;
|
|
51
|
-
/**
|
|
52
|
-
* Returns all keys that are not associated with an undefined value.
|
|
53
|
-
*
|
|
54
|
-
* @param obj
|
|
55
|
-
* @returns
|
|
56
|
-
*/
|
|
57
|
-
function allNonUndefinedKeys(obj) {
|
|
58
|
-
return findPOJOKeys(obj, { valueFilter: KeyValueTypleValueFilter.UNDEFINED });
|
|
59
|
-
}
|
|
60
|
-
exports.allNonUndefinedKeys = allNonUndefinedKeys;
|
|
61
|
-
function allMaybeSoKeys(obj) {
|
|
62
|
-
return findPOJOKeys(obj, { valueFilter: KeyValueTypleValueFilter.NULL });
|
|
63
|
-
}
|
|
64
|
-
exports.allMaybeSoKeys = allMaybeSoKeys;
|
|
65
|
-
/**
|
|
66
|
-
* Finds keys from the POJO that meet the filter.
|
|
67
|
-
*
|
|
68
|
-
* @param obj
|
|
69
|
-
* @param filter
|
|
70
|
-
* @returns
|
|
71
|
-
*/
|
|
72
|
-
function findPOJOKeys(obj, filter) {
|
|
73
|
-
const keys = [];
|
|
74
|
-
forEachKeyValue(obj, {
|
|
75
|
-
filter,
|
|
76
|
-
forEach: ([key]) => {
|
|
77
|
-
keys.push(key);
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
return keys;
|
|
81
|
-
}
|
|
82
|
-
exports.findPOJOKeys = findPOJOKeys;
|
|
83
|
-
/**
|
|
84
|
-
* Finds and counts the number of keys from the POJO that meet the filter.
|
|
85
|
-
*
|
|
86
|
-
* @param obj
|
|
87
|
-
* @param filter
|
|
88
|
-
* @returns
|
|
89
|
-
*/
|
|
90
|
-
function countPOJOKeys(obj, filter = KeyValueTypleValueFilter.UNDEFINED) {
|
|
91
|
-
let count = 0;
|
|
92
|
-
forEachKeyValue(obj, {
|
|
93
|
-
filter,
|
|
94
|
-
forEach: () => (count += 1)
|
|
95
|
-
});
|
|
96
|
-
return count;
|
|
97
|
-
}
|
|
98
|
-
exports.countPOJOKeys = countPOJOKeys;
|
|
99
|
-
/**
|
|
100
|
-
* Removes values, per the the filter config, from the input object.
|
|
101
|
-
*
|
|
102
|
-
* @param obj POJO to remove undefined values from.
|
|
103
|
-
* @param copy Whether or not to return a copy of the input object. Default is true.
|
|
104
|
-
*/
|
|
105
|
-
function filterFromPOJO(obj, { copy = false, filter = { valueFilter: KeyValueTypleValueFilter.UNDEFINED } } = {}) {
|
|
106
|
-
if (copy) {
|
|
107
|
-
obj = Object.assign({}, obj);
|
|
108
|
-
}
|
|
109
|
-
forEachKeyValue(obj, {
|
|
110
|
-
filter: Object.assign(Object.assign({}, filter), { invertFilter: !filter.invertFilter }),
|
|
111
|
-
forEach: ([key]) => {
|
|
112
|
-
delete obj[key];
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
return obj;
|
|
116
|
-
}
|
|
117
|
-
exports.filterFromPOJO = filterFromPOJO;
|
|
118
|
-
function assignValuesToPOJO(target, obj, filter = KeyValueTypleValueFilter.UNDEFINED) {
|
|
119
|
-
forEachKeyValue(obj, {
|
|
120
|
-
filter,
|
|
121
|
-
forEach: ([key, value]) => {
|
|
122
|
-
target[key] = value;
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
return obj;
|
|
126
|
-
}
|
|
127
|
-
exports.assignValuesToPOJO = assignValuesToPOJO;
|
|
128
|
-
/**
|
|
129
|
-
* Reads all values from the pojo based on the filter and puts them into an array.
|
|
130
|
-
*
|
|
131
|
-
* @param target
|
|
132
|
-
* @param filter
|
|
133
|
-
* @returns
|
|
134
|
-
*/
|
|
135
|
-
function valuesFromPOJO(target, filter = KeyValueTypleValueFilter.UNDEFINED) {
|
|
136
|
-
const values = [];
|
|
137
|
-
forEachKeyValue(target, {
|
|
138
|
-
filter,
|
|
139
|
-
forEach: ([, value]) => {
|
|
140
|
-
values.push(value);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
return values;
|
|
144
|
-
}
|
|
145
|
-
exports.valuesFromPOJO = valuesFromPOJO;
|
|
146
|
-
function allKeyValueTuples(obj) {
|
|
147
|
-
return Object.entries(obj);
|
|
148
|
-
}
|
|
149
|
-
exports.allKeyValueTuples = allKeyValueTuples;
|
|
150
|
-
var KeyValueTypleValueFilter;
|
|
151
|
-
(function (KeyValueTypleValueFilter) {
|
|
152
|
-
/**
|
|
153
|
-
* No filter
|
|
154
|
-
*/
|
|
155
|
-
KeyValueTypleValueFilter[KeyValueTypleValueFilter["NONE"] = 0] = "NONE";
|
|
156
|
-
/**
|
|
157
|
-
* Only undefined values.
|
|
158
|
-
*/
|
|
159
|
-
KeyValueTypleValueFilter[KeyValueTypleValueFilter["UNDEFINED"] = 1] = "UNDEFINED";
|
|
160
|
-
/**
|
|
161
|
-
* All values that are null or undefined.
|
|
162
|
-
*/
|
|
163
|
-
KeyValueTypleValueFilter[KeyValueTypleValueFilter["NULL"] = 2] = "NULL";
|
|
164
|
-
/**
|
|
165
|
-
* All values that are falsy.
|
|
166
|
-
*/
|
|
167
|
-
KeyValueTypleValueFilter[KeyValueTypleValueFilter["FALSY"] = 3] = "FALSY";
|
|
168
|
-
})(KeyValueTypleValueFilter = exports.KeyValueTypleValueFilter || (exports.KeyValueTypleValueFilter = {}));
|
|
169
|
-
function forEachKeyValue(obj, { forEach, filter }) {
|
|
170
|
-
const keyValues = filterKeyValueTuples(obj, filter);
|
|
171
|
-
keyValues.forEach(forEach);
|
|
172
|
-
}
|
|
173
|
-
exports.forEachKeyValue = forEachKeyValue;
|
|
174
|
-
function filterKeyValueTuples(obj, filter) {
|
|
175
|
-
let pairs = allKeyValueTuples(obj);
|
|
176
|
-
if (filter) {
|
|
177
|
-
const filterFn = filterKeyValueTupleFunction(filter);
|
|
178
|
-
pairs = pairs.filter(filterFn);
|
|
179
|
-
}
|
|
180
|
-
return pairs;
|
|
181
|
-
}
|
|
182
|
-
exports.filterKeyValueTuples = filterKeyValueTuples;
|
|
183
|
-
function filterKeyValueTupleFunction(input) {
|
|
184
|
-
const filter = typeof input === 'object' ? input : { valueFilter: input };
|
|
185
|
-
const { valueFilter: type, invertFilter: inverseFilter = false, keysFilter } = filter;
|
|
186
|
-
let filterFn;
|
|
187
|
-
switch (type) {
|
|
188
|
-
case KeyValueTypleValueFilter.UNDEFINED:
|
|
189
|
-
filterFn = ([, x]) => x !== undefined;
|
|
190
|
-
break;
|
|
191
|
-
case KeyValueTypleValueFilter.NULL:
|
|
192
|
-
filterFn = ([, x]) => x != null;
|
|
193
|
-
break;
|
|
194
|
-
case KeyValueTypleValueFilter.FALSY:
|
|
195
|
-
filterFn = ([, x]) => Boolean(x);
|
|
196
|
-
break;
|
|
197
|
-
case KeyValueTypleValueFilter.NONE:
|
|
198
|
-
default:
|
|
199
|
-
filterFn = () => true;
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
if (keysFilter) {
|
|
203
|
-
const filterByTypeFn = filterFn;
|
|
204
|
-
const keysSet = new Set(keysFilter);
|
|
205
|
-
filterFn = (x, i) => filterByTypeFn(x, i) && keysSet.has(x[0]);
|
|
206
|
-
}
|
|
207
|
-
return (0, filter_1.invertFilter)(filterFn, inverseFilter);
|
|
208
|
-
}
|
|
209
|
-
exports.filterKeyValueTupleFunction = filterKeyValueTupleFunction;
|
|
210
|
-
/**
|
|
211
|
-
* Recursively function that returns true if the input is not an object or if every key on the object is empty.
|
|
212
|
-
*
|
|
213
|
-
* @param obj
|
|
214
|
-
*/
|
|
215
|
-
function objectIsEmpty(obj) {
|
|
216
|
-
if (obj != null && typeof obj === 'object') {
|
|
217
|
-
const keys = Object.keys(obj);
|
|
218
|
-
if (keys.length > 0) {
|
|
219
|
-
for (let i = 0; i < keys.length; i += 1) {
|
|
220
|
-
const key = keys[i];
|
|
221
|
-
const value = obj[key];
|
|
222
|
-
const isEmpty = typeof obj === 'object' ? objectIsEmpty(value) : !(0, maybe_1.hasValueOrNotEmpty)(value);
|
|
223
|
-
if (!isEmpty) {
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return true;
|
|
230
|
-
}
|
|
231
|
-
exports.objectIsEmpty = objectIsEmpty;
|
|
232
|
-
/**
|
|
233
|
-
* Merges all input objects into one. The order of overrides is kept, so the right-most item in the array will have priority over all objects before it.
|
|
234
|
-
*
|
|
235
|
-
* @param objects
|
|
236
|
-
*/
|
|
237
|
-
function mergeObjects(objects, filter) {
|
|
238
|
-
const object = {};
|
|
239
|
-
overrideInObject(object, { from: (0, array_value_1.filterMaybeValues)(objects), filter });
|
|
240
|
-
return object;
|
|
241
|
-
}
|
|
242
|
-
exports.mergeObjects = mergeObjects;
|
|
243
|
-
/**
|
|
244
|
-
* Assigns all undefined valeus from one or more objects into the target object.
|
|
245
|
-
*
|
|
246
|
-
* @param object
|
|
247
|
-
*/
|
|
248
|
-
function overrideInObject(target, { from, filter }) {
|
|
249
|
-
from.forEach((x) => {
|
|
250
|
-
const relevantValues = filterFromPOJO(Object.assign({}, x), { filter, copy: false });
|
|
251
|
-
Object.assign(target, relevantValues);
|
|
252
|
-
});
|
|
253
|
-
return target;
|
|
254
|
-
}
|
|
255
|
-
exports.overrideInObject = overrideInObject;
|
|
37
|
+
exports.copyObject = copyObject;
|
|
256
38
|
//# sourceMappingURL=object.js.map
|