@wxn0brp/db-core 0.11.1-alpha.2 → 0.11.2

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.
@@ -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
  };
@@ -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] -> $pushset 2,3 -> [1,2,3] */
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] -> $pullall [2] -> [1,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 */
@@ -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
- if (!checkConditions(obj, $fields))
20
+ // Shallow fields first
21
+ if (Object.keys(subsetFields).length && !hasFields(obj, subsetFields))
27
22
  return false;
28
- if (!Object.keys(subsetFields).length)
23
+ // Direct fields only
24
+ if (Object.keys($fields).length === 0)
29
25
  return true;
30
- return hasFields(obj, subsetFields);
31
- }
32
- function checkConditions(obj, fields) {
33
- return (mainCheck(obj, fields) &&
34
- checkNot(obj, fields) &&
35
- checkSubset(obj, fields));
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 [fieldRaw, fieldFn] of Object.entries(opts)) {
91
- const field = "$" + fieldRaw;
92
- if (field in fields) {
93
- for (const [key, value] of Object.entries(fields[field])) {
94
- const targetValue = obj?.[key];
95
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
96
- if (!deepCheck(value, targetValue, fieldFn))
97
- return false;
98
- }
99
- else {
100
- if (!fieldFn(targetValue, value, key))
101
- return false;
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 [fieldRaw, fieldFn] of Object.entries(opts)) {
114
- const field = "$" + fieldRaw;
115
- if (field in fields) {
116
- for (const [key, value] of Object.entries(fields[field])) {
117
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
118
- if (!obj[key])
119
- obj[key] = {};
120
- deepUpdateCheck(value, obj[key], fieldFn);
121
- }
122
- else {
123
- const res = fieldFn(obj?.[key], value, key, obj);
124
- if (res !== undefined)
125
- obj[key] = res;
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-alpha.2";
1
+ export const version = "0.11.2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wxn0brp/db-core",
3
- "version": "0.11.1-alpha.2",
3
+ "version": "0.11.2",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.js",
6
6
  "author": "wxn0brP",