@wxn0brp/db-core 0.11.1 → 0.11.3
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/types/searchOpts.d.ts +12 -0
- package/dist/types/updater.d.ts +16 -2
- package/dist/utils/action.js +2 -0
- package/dist/utils/hasFieldsAdvanced.js +33 -34
- package/dist/utils/updateObject.js +15 -14
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -57,10 +57,22 @@ export type TypeAndExistenceOperators<T = any> = {
|
|
|
57
57
|
/** Array Operators with nested support */
|
|
58
58
|
export type ArrayOperators<T = any> = {
|
|
59
59
|
/** [1, 2, 3] includes 2 */
|
|
60
|
+
$arrInc?: {
|
|
61
|
+
[K in keyof T]?: T[K] extends any[] ? T[K][number][] : T[K][];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* @deprecated Use $arrInc instead.
|
|
65
|
+
*/
|
|
60
66
|
$arrinc?: {
|
|
61
67
|
[K in keyof T]?: T[K] extends any[] ? T[K][number][] : T[K][];
|
|
62
68
|
};
|
|
63
69
|
/** [1, 2, 3] array includes all elements e.g. [1, 2] */
|
|
70
|
+
$arrIncAll?: {
|
|
71
|
+
[K in keyof T]?: T[K] extends any[] ? T[K][number][] : T[K][];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* @deprecated Use $arrIncAll instead.
|
|
75
|
+
*/
|
|
64
76
|
$arrincall?: {
|
|
65
77
|
[K in keyof T]?: T[K] extends any[] ? T[K][number][] : T[K][];
|
|
66
78
|
};
|
package/dist/types/updater.d.ts
CHANGED
|
@@ -3,11 +3,25 @@ import { DeepPartial, NestedValue } from "./utils.js";
|
|
|
3
3
|
export type ArrayUpdater<T = any> = {
|
|
4
4
|
/** [1,2] -> $push 3 -> [1,2,3] */
|
|
5
5
|
$push?: NestedValue<T, any>;
|
|
6
|
-
/** [1,2] -> $
|
|
6
|
+
/** [1,2] -> $pushSet 2,3 -> [1,2,3] */
|
|
7
|
+
$pushSet?: NestedValue<T, any>;
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated Use $pushSet instead.
|
|
10
|
+
*/
|
|
7
11
|
$pushset?: NestedValue<T, any>;
|
|
12
|
+
/** [1,2,3] -> $pushAll [2,3] -> [1,2,3] */
|
|
13
|
+
$pushAll?: NestedValue<T, any>;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use $pushAll instead.
|
|
16
|
+
*/
|
|
17
|
+
$pushall?: NestedValue<T, any>;
|
|
8
18
|
/** [1,2,3] -> $pull 2 -> [1,3] */
|
|
9
19
|
$pull?: NestedValue<T, any>;
|
|
10
|
-
/** [1,2,2,3] -> $
|
|
20
|
+
/** [1,2,2,3] -> $pullAll [2] -> [1,3] */
|
|
21
|
+
$pullAll?: NestedValue<T, any>;
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use $pullAll instead.
|
|
24
|
+
*/
|
|
11
25
|
$pullall?: NestedValue<T, any>;
|
|
12
26
|
};
|
|
13
27
|
/** Objects */
|
package/dist/utils/action.js
CHANGED
|
@@ -7,6 +7,8 @@ export async function findUtil(query, fileCpuOrData, files, fileCpuOpts) {
|
|
|
7
7
|
let skippedEntries = 0;
|
|
8
8
|
if (Array.isArray(fileCpuOrData)) {
|
|
9
9
|
datas = [...fileCpuOrData];
|
|
10
|
+
if (reverse && !sortBy)
|
|
11
|
+
datas.reverse();
|
|
10
12
|
if (!needsAllData) {
|
|
11
13
|
if (offset > 0 || limit !== -1) {
|
|
12
14
|
const start = offset;
|
|
@@ -9,12 +9,6 @@ export function hasFieldsAdvanced(obj, fields) {
|
|
|
9
9
|
}
|
|
10
10
|
if (Object.keys(fields).length === 0)
|
|
11
11
|
return true;
|
|
12
|
-
if ("$and" in fields) {
|
|
13
|
-
return fields["$and"].every((subFields) => hasFieldsAdvanced(obj, subFields));
|
|
14
|
-
}
|
|
15
|
-
if ("$or" in fields) {
|
|
16
|
-
return fields["$or"].some((subFields) => hasFieldsAdvanced(obj, subFields));
|
|
17
|
-
}
|
|
18
12
|
const $fields = {};
|
|
19
13
|
const subsetFields = {};
|
|
20
14
|
Object.keys(fields).forEach(key => {
|
|
@@ -23,16 +17,27 @@ export function hasFieldsAdvanced(obj, fields) {
|
|
|
23
17
|
else
|
|
24
18
|
subsetFields[key] = fields[key];
|
|
25
19
|
});
|
|
26
|
-
|
|
20
|
+
// Shallow fields first
|
|
21
|
+
if (Object.keys(subsetFields).length && !hasFields(obj, subsetFields))
|
|
27
22
|
return false;
|
|
28
|
-
|
|
23
|
+
// Direct fields only
|
|
24
|
+
if (Object.keys($fields).length === 0)
|
|
29
25
|
return true;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
// Subset check
|
|
27
|
+
if ("$subset" in $fields && !hasFields(obj, $fields["$subset"]))
|
|
28
|
+
return false;
|
|
29
|
+
// Advanced operators
|
|
30
|
+
if (!mainCheck(obj, $fields))
|
|
31
|
+
return false;
|
|
32
|
+
if (!checkNot(obj, $fields))
|
|
33
|
+
return false;
|
|
34
|
+
if ("$and" in $fields) {
|
|
35
|
+
return $fields["$and"].every((subFields) => hasFieldsAdvanced(obj, subFields));
|
|
36
|
+
}
|
|
37
|
+
if ("$or" in $fields) {
|
|
38
|
+
return $fields["$or"].some((subFields) => hasFieldsAdvanced(obj, subFields));
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
36
41
|
}
|
|
37
42
|
function mainCheck(obj, fields) {
|
|
38
43
|
return _for(fields, obj, {
|
|
@@ -79,27 +84,21 @@ function checkNot(obj, fields) {
|
|
|
79
84
|
}
|
|
80
85
|
return true;
|
|
81
86
|
}
|
|
82
|
-
function checkSubset(obj, fields) {
|
|
83
|
-
if ("$subset" in fields) {
|
|
84
|
-
const setFields = fields["$subset"];
|
|
85
|
-
return hasFields(obj, setFields);
|
|
86
|
-
}
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
87
|
function _for(fields, obj, opts) {
|
|
90
|
-
for (const [
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
88
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
89
|
+
const fieldRaw = field.slice(1);
|
|
90
|
+
const fieldFn = opts[fieldRaw];
|
|
91
|
+
if (!fieldFn)
|
|
92
|
+
continue;
|
|
93
|
+
for (const [key, val] of Object.entries(value)) {
|
|
94
|
+
const targetValue = obj?.[key];
|
|
95
|
+
if (typeof val === "object" && val !== null && !Array.isArray(val)) {
|
|
96
|
+
if (!deepCheck(val, targetValue, fieldFn))
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
if (!fieldFn(targetValue, val, key))
|
|
101
|
+
return false;
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
}
|
|
@@ -110,20 +110,21 @@ function updateObject(obj, newVal) {
|
|
|
110
110
|
return obj;
|
|
111
111
|
}
|
|
112
112
|
function _for(fields, obj, opts) {
|
|
113
|
-
for (const [
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
113
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
114
|
+
const fieldRaw = field.slice(1);
|
|
115
|
+
const fieldFn = opts[fieldRaw];
|
|
116
|
+
if (!fieldFn)
|
|
117
|
+
continue;
|
|
118
|
+
for (const [key, val] of Object.entries(value)) {
|
|
119
|
+
if (typeof val === "object" && val !== null && !Array.isArray(val)) {
|
|
120
|
+
if (!obj[key])
|
|
121
|
+
obj[key] = {};
|
|
122
|
+
deepUpdateCheck(val, obj[key], fieldFn);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const res = fieldFn(obj?.[key], val, key, obj);
|
|
126
|
+
if (res !== undefined)
|
|
127
|
+
obj[key] = res;
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
}
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "0.11.
|
|
1
|
+
export const version = "0.11.3";
|