@wxn0brp/db-core 0.0.1 → 0.0.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.
Files changed (43) hide show
  1. package/README.md +15 -3
  2. package/dist/db/memory.d.ts +2 -4
  3. package/dist/db/memory.js +4 -19
  4. package/dist/utils/action.d.ts +4 -0
  5. package/dist/utils/action.js +50 -0
  6. package/dist/version.js +1 -1
  7. package/package.json +10 -1
  8. package/.github/workflows/build-relase.yml +0 -25
  9. package/.github/workflows/build.yml +0 -20
  10. package/.github/workflows/types.yml +0 -89
  11. package/CHANGELOG.md +0 -9
  12. package/src/base/actions.ts +0 -71
  13. package/src/base/db.ts +0 -75
  14. package/src/customFileCpu.ts +0 -100
  15. package/src/db/memory.ts +0 -177
  16. package/src/db/valthera.ts +0 -132
  17. package/src/helpers/CollectionManager.ts +0 -67
  18. package/src/helpers/eventEmiter.ts +0 -73
  19. package/src/helpers/executor.ts +0 -55
  20. package/src/helpers/gen.ts +0 -154
  21. package/src/helpers/relation.ts +0 -192
  22. package/src/helpers/updateOneOrAdd.ts +0 -24
  23. package/src/index.ts +0 -25
  24. package/src/types/Id.ts +0 -3
  25. package/src/types/arg.ts +0 -15
  26. package/src/types/data.ts +0 -4
  27. package/src/types/export.ts +0 -13
  28. package/src/types/fileCpu.ts +0 -78
  29. package/src/types/options.ts +0 -22
  30. package/src/types/query.ts +0 -16
  31. package/src/types/relation.ts +0 -34
  32. package/src/types/searchOpts.ts +0 -78
  33. package/src/types/types.ts +0 -3
  34. package/src/types/updater.ts +0 -33
  35. package/src/types/valthera.ts +0 -38
  36. package/src/utils/hasFields.ts +0 -18
  37. package/src/utils/hasFieldsAdvanced.ts +0 -181
  38. package/src/utils/sort.ts +0 -25
  39. package/src/utils/updateFindObject.ts +0 -35
  40. package/src/utils/updateObject.ts +0 -156
  41. package/src/version.ts +0 -1
  42. package/suglite.json +0 -10
  43. package/tsconfig.json +0 -22
@@ -1,181 +0,0 @@
1
- import { Arg } from "../types/arg";
2
- import hasFields from "./hasFields";
3
-
4
- /**
5
- * Checks if an object meets the criteria specified in the fields with operators.
6
- */
7
- export default function hasFieldsAdvanced(obj: Object, fields: Arg) {
8
- if (typeof fields !== "object" || fields === null) {
9
- throw new Error("Fields must be an object");
10
- }
11
-
12
- if ("$and" in fields) {
13
- return fields["$and"].every(subFields => hasFieldsAdvanced(obj, subFields));
14
- }
15
-
16
- if ("$or" in fields) {
17
- return fields["$or"].some(subFields => hasFieldsAdvanced(obj, subFields));
18
- }
19
-
20
- // Check various conditions
21
- if (!checkConditions(obj, fields)) return false;
22
- const fieldsSubset = removeAdvancedOperators({ ...fields });
23
- return hasFields(obj, fieldsSubset);
24
- }
25
-
26
- function removeAdvancedOperators(fields: Object) {
27
- const advancedOperators = [
28
- "and", "or",
29
- "gt", "lt", "gte", "lte", "in", "nin",
30
- "exists",
31
- "type",
32
- "regex",
33
- "arrinc", "arrincall", "size",
34
- "startsWith", "endsWith",
35
- "between",
36
- "not",
37
- "subset"
38
- ].map(operator => "$" + operator);
39
- advancedOperators.forEach(operator => delete fields[operator]);
40
- return fields;
41
- }
42
-
43
- function checkConditions(obj: Object, fields: Object) {
44
- return (
45
- checkComparison(obj, fields) &&
46
- checkExistence(obj, fields) &&
47
- checkType(obj, fields) &&
48
- checkRegex(obj, fields) &&
49
- checkArrayConditions(obj, fields) &&
50
- checkStringConditions(obj, fields) &&
51
- checkBetween(obj, fields) &&
52
- checkNot(obj, fields) &&
53
- checkSubset(obj, fields)
54
- );
55
- }
56
-
57
- function checkComparison(obj: Object, fields: Object) {
58
- const comparisonOperators = ["$gt", "$lt", "$gte", "$lte", "$in", "$nin"];
59
- for (const operator of comparisonOperators) {
60
- if (operator in fields) {
61
- for (const entries of Object.entries(fields[operator])) {
62
- const [key, value]: [string, any] = entries;
63
- switch (operator) {
64
- case "$gt":
65
- if (!(obj[key] > value)) return false;
66
- break;
67
- case "$lt":
68
- if (!(obj[key] < value)) return false;
69
- break;
70
- case "$gte":
71
- if (!(obj[key] >= value)) return false;
72
- break;
73
- case "$lte":
74
- if (!(obj[key] <= value)) return false;
75
- break;
76
- case "$in":
77
- if (!value.includes(obj[key])) return false;
78
- break;
79
- case "$nin":
80
- if (value.includes(obj[key])) return false;
81
- break;
82
- }
83
- }
84
- }
85
- }
86
- return true;
87
- }
88
-
89
- function checkExistence(obj: Object, fields: Object) {
90
- if ("$exists" in fields) {
91
- for (const [key, shouldExist] of Object.entries(fields["$exists"])) {
92
- if (shouldExist && !(key in obj)) return false;
93
- if (!shouldExist && (key in obj)) return false;
94
- }
95
- }
96
- return true;
97
- }
98
-
99
- function checkType(obj: Object, fields: Object) {
100
- if ("$type" in fields) {
101
- for (const [key, type] of Object.entries(fields["$type"])) {
102
- if (typeof obj[key] !== type) return false;
103
- }
104
- }
105
- return true;
106
- }
107
-
108
- function checkRegex(obj: Object, fields: Object) {
109
- if ("$regex" in fields) {
110
- for (const [key, regex] of Object.entries(fields["$regex"])) {
111
- if (!regex.test(obj[key])) return false;
112
- }
113
- }
114
- return true;
115
- }
116
-
117
- function checkArrayConditions(obj: Object, fields: Object) {
118
- if ("$arrinc" in fields) {
119
- for (const [key, values] of Object.entries(fields["$arrinc"])) {
120
- if (!Array.isArray(obj[key]) || !values.some(val => obj[key].includes(val))) return false;
121
- }
122
- }
123
-
124
- if ("$arrincall" in fields) {
125
- for (const [key, values] of Object.entries(fields["$arrincall"])) {
126
- if (!Array.isArray(obj[key]) || !values.every(val => obj[key].includes(val))) return false;
127
- }
128
- }
129
-
130
- if ("$size" in fields) {
131
- for (const [key, size] of Object.entries(fields["$size"])) {
132
- if (Array.isArray(obj[key]) || typeof obj[key] === "string") {
133
- if (obj[key].length !== size) return false;
134
- } else {
135
- return false;
136
- }
137
- }
138
- }
139
-
140
- return true;
141
- }
142
-
143
- function checkStringConditions(obj: Object, fields: Object) {
144
- if ("$startsWith" in fields) {
145
- for (const [key, value] of Object.entries(fields["$startsWith"])) {
146
- if (typeof obj[key] !== "string" || !obj[key].startsWith(value)) return false;
147
- }
148
- }
149
-
150
- if ("$endsWith" in fields) {
151
- for (const [key, value] of Object.entries(fields["$endsWith"])) {
152
- if (typeof obj[key] !== "string" || !obj[key].endsWith(value)) return false;
153
- }
154
- }
155
-
156
- return true;
157
- }
158
-
159
- function checkBetween(obj: Object, fields: Object) {
160
- if ("$between" in fields) {
161
- for (const [key, [min, max]] of Object.entries(fields["$between"])) {
162
- if (typeof obj[key] !== "number" || obj[key] < min || obj[key] > max) return false;
163
- }
164
- }
165
- return true;
166
- }
167
-
168
- function checkNot(obj: Object, fields: Object) {
169
- if ("$not" in fields) {
170
- return !hasFieldsAdvanced(obj, fields["$not"]);
171
- }
172
- return true;
173
- }
174
-
175
- function checkSubset(obj: Object, fields: Object) {
176
- if ("$subset" in fields) {
177
- const setFields = fields["$subset"];
178
- return hasFields(obj, setFields);
179
- }
180
- return true;
181
- }
package/src/utils/sort.ts DELETED
@@ -1,25 +0,0 @@
1
- export function compareSafe(a: any, b: any): -1 | 0 | 1 {
2
- // Null/undefined at the end
3
- if (a == null && b != null) return 1;
4
- if (a != null && b == null) return -1;
5
- if (a == null && b == null) return 0;
6
-
7
- // Compare primitives and Date
8
- const typeA = typeof a;
9
- const typeB = typeof b;
10
-
11
- if (typeA === "string" && typeB === "string") {
12
- return a.localeCompare(b);
13
- }
14
-
15
- if ((typeA === "number" || a instanceof Date) && (typeB === "number" || b instanceof Date)) {
16
- return (a < b) ? -1 : (a > b) ? 1 : 0;
17
- }
18
-
19
- if (typeA === "boolean" && typeB === "boolean") {
20
- return (a === b) ? 0 : a ? 1 : -1;
21
- }
22
-
23
- // fallback: if both are objects/arrays or different types, consider equal
24
- return 0;
25
- }
@@ -1,35 +0,0 @@
1
- import { FindOpts } from "../types/options";
2
-
3
- /**
4
- * Updates an object with new values from a findOpts object.
5
- * @param obj - The object to update.
6
- * @param findOpts - An object containing options to update the target object.
7
- * @param [findOpts.transform] - A function to transform the object before applying the other options.
8
- * @param [findOpts.select] - An array of fields to select from the target object.
9
- * @param [findOpts.exclude] - An array of fields to exclude from the target object.
10
- * @returns The updated object.
11
- */
12
- export default function updateFindObject(obj: Object, findOpts: FindOpts) {
13
- const {
14
- transform,
15
- select,
16
- exclude,
17
- } = findOpts;
18
-
19
- if (typeof transform === "function") obj = transform(obj);
20
-
21
- if (Array.isArray(exclude)) {
22
- exclude.forEach(field => {
23
- if (obj.hasOwnProperty(field)) delete obj[field];
24
- });
25
- }
26
-
27
- if (Array.isArray(select)) {
28
- obj = select.reduce((acc, field) => {
29
- if (obj.hasOwnProperty(field)) acc[field] = obj[field];
30
- return acc;
31
- }, {});
32
- }
33
-
34
- return obj;
35
- }
@@ -1,156 +0,0 @@
1
- import { UpdaterArg } from "../types/updater";
2
-
3
- /**
4
- * Updates an object with new values.
5
- * @param obj - The object to update.
6
- * @param fields - An object containing new values to update in the target object.
7
- */
8
- export default function updateObjectAdvanced(obj: Object, fields: UpdaterArg | UpdaterArg[]) {
9
- if (typeof fields !== "object" || fields === null) {
10
- throw new Error("Fields must be an object or object array");
11
- }
12
-
13
- const fieldsArray = Array.isArray(fields) ? fields : [fields];
14
-
15
- for (const field of fieldsArray) {
16
- if (typeof field !== "object" || field === null) {
17
- throw new Error("Fields must be an object or object array");
18
- }
19
-
20
- updateAdvanced(obj, field);
21
- const fieldsSubset = removeAdvancedOperators({ ...field });
22
- updateObject(obj, fieldsSubset);
23
- }
24
-
25
- return obj;
26
- }
27
-
28
- function updateAdvanced(obj: Object, fields: UpdaterArg) {
29
- updateArray(obj, fields);
30
- updateNested(obj, fields);
31
- updateIncrement(obj, fields);
32
- updateUnset(obj, fields);
33
- updateRename(obj, fields);
34
- }
35
-
36
- function removeAdvancedOperators(fields: Object) {
37
- const advancedOperators = [
38
- "push", "pushset", "pull", "pullall",
39
- "inc", "dec",
40
- "unset",
41
- "merge",
42
- "rename"
43
- ].map(operator => "$" + operator);
44
- advancedOperators.forEach(operator => delete fields[operator]);
45
- return fields;
46
- }
47
-
48
- function updateArray(obj: Object, fields: UpdaterArg) {
49
- if ("$push" in fields) {
50
- for (const [key, value] of Object.entries(fields["$push"])) {
51
- if (Array.isArray(obj[key])) {
52
- obj[key].push(value);
53
- } else {
54
- obj[key] = [value];
55
- }
56
- }
57
- }
58
-
59
- if ("$pushset" in fields) {
60
- for (const [key, value] of Object.entries(fields["$pushset"])) {
61
- if (Array.isArray(obj[key])) {
62
- obj[key].push(value);
63
- } else {
64
- obj[key] = [value];
65
- }
66
- obj[key] = [...new Set(obj[key])];
67
- }
68
- }
69
-
70
- if ("$pull" in fields) {
71
- for (const [key, value] of Object.entries(fields["$pull"])) {
72
- if (Array.isArray(obj[key])) {
73
- obj[key] = obj[key].filter(item => item !== value);
74
- }
75
- }
76
- }
77
-
78
- if ("$pullall" in fields) {
79
- for (const [key, values] of Object.entries(fields["$pullall"])) {
80
- if (Array.isArray(obj[key])) {
81
- obj[key] = obj[key].filter(item => !(values as string[]).includes(item));
82
- }
83
- }
84
- }
85
- }
86
-
87
- function updateNested(obj: Object, fields: UpdaterArg) {
88
- if ("$merge" in fields) {
89
- for (const [key, value] of Object.entries(fields["$merge"])) {
90
- if (typeof obj[key] === "object" && typeof value === "object") {
91
- obj[key] = { ...obj[key], ...value };
92
- } else {
93
- obj[key] = value;
94
- }
95
- }
96
- }
97
- }
98
-
99
- function updateIncrement(obj: Object, fields: UpdaterArg) {
100
- if ("$inc" in fields) {
101
- for (const [key, value] of Object.entries(fields["$inc"])) {
102
- if (typeof obj[key] === "number" && typeof value === "number") {
103
- obj[key] += value;
104
- } else if (!(key in obj)) {
105
- obj[key] = value;
106
- } else {
107
- throw new Error(`Cannot increment non-numeric value at key: ${key}`);
108
- }
109
- }
110
- }
111
-
112
- if ("$dec" in fields) {
113
- for (const [key, value] of Object.entries(fields["$dec"])) {
114
- if (typeof obj[key] === "number" && typeof value === "number") {
115
- obj[key] -= value;
116
- } else if (!(key in obj)) {
117
- obj[key] = value;
118
- } else {
119
- throw new Error(`Cannot decrement non-numeric value at key: ${key}`);
120
- }
121
- }
122
- }
123
- }
124
-
125
- function updateUnset(obj: Object, fields: UpdaterArg) {
126
- if ("$unset" in fields) {
127
- for (const key of Object.keys(fields["$unset"])) {
128
- delete obj[key];
129
- }
130
- }
131
- }
132
-
133
- function updateRename(obj: Object, fields: UpdaterArg) {
134
- if ("$rename" in fields) {
135
- for (const [oldKey, newKey] of Object.entries(fields["$rename"])) {
136
- if (oldKey in obj) {
137
- obj[newKey as string] = obj[oldKey];
138
- delete obj[oldKey];
139
- }
140
- }
141
- }
142
- }
143
-
144
- /**
145
- * Updates an object with new values.
146
- * @param obj - The object to update.
147
- * @param newVal - An object containing new values to update in the target object.
148
- */
149
- function updateObject(obj: Object, newVal: UpdaterArg) {
150
- for (let key in newVal) {
151
- if (newVal.hasOwnProperty(key)) {
152
- obj[key] = newVal[key];
153
- }
154
- }
155
- return obj;
156
- }
package/src/version.ts DELETED
@@ -1 +0,0 @@
1
- export const version = "0.0.1";
package/suglite.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "cmd": "yarn build",
3
- "watch": [
4
- "src"
5
- ],
6
- "restart_cmd": "clear",
7
- "events": {
8
- "rs": "clear"
9
- }
10
- }
package/tsconfig.json DELETED
@@ -1,22 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "ES2022",
4
- "target": "ES2022",
5
- "moduleResolution": "bundler",
6
- "paths": {},
7
- "esModuleInterop": true,
8
- "skipLibCheck": true,
9
- "outDir": "./dist",
10
- "declaration": true
11
- },
12
- "include": [
13
- "./src"
14
- ],
15
- "exclude": [
16
- "node_modules"
17
- ],
18
- "tsc-alias": {
19
- "resolveFullPaths": true,
20
- "verbose": false
21
- }
22
- }