@wxn0brp/db 0.0.5 → 0.0.6

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 (226) hide show
  1. package/README.md +3 -0
  2. package/dist/cjs/CollectionManager.d.ts +43 -0
  3. package/dist/cjs/CollectionManager.js +59 -0
  4. package/dist/cjs/action.d.ts +71 -0
  5. package/dist/cjs/action.js +199 -0
  6. package/dist/cjs/database.d.ts +77 -0
  7. package/dist/cjs/database.js +118 -0
  8. package/dist/cjs/executor.d.ts +28 -0
  9. package/{executor.js → dist/cjs/executor.js} +47 -54
  10. package/dist/cjs/file/find.d.ts +11 -0
  11. package/dist/cjs/file/find.js +80 -0
  12. package/dist/cjs/file/index.d.ts +3 -0
  13. package/dist/cjs/file/index.js +25 -0
  14. package/dist/cjs/file/remove.d.ts +7 -0
  15. package/dist/cjs/file/remove.js +61 -0
  16. package/dist/cjs/file/update.d.ts +7 -0
  17. package/dist/cjs/file/update.js +68 -0
  18. package/dist/cjs/file/utils.d.ts +8 -0
  19. package/dist/cjs/file/utils.js +23 -0
  20. package/dist/cjs/format.d.ts +18 -0
  21. package/dist/cjs/format.js +36 -0
  22. package/dist/cjs/gen.d.ts +5 -0
  23. package/dist/cjs/gen.js +78 -0
  24. package/dist/cjs/graph.d.ts +47 -0
  25. package/dist/cjs/graph.js +90 -0
  26. package/{index.d.ts → dist/cjs/index.d.ts} +2 -2
  27. package/dist/cjs/index.js +18 -0
  28. package/dist/cjs/relation.d.ts +64 -0
  29. package/{relation.js → dist/cjs/relation.js} +26 -45
  30. package/dist/cjs/remote/client/database.d.ts +71 -0
  31. package/dist/cjs/remote/client/database.js +145 -0
  32. package/dist/cjs/remote/client/function.d.ts +5 -0
  33. package/dist/cjs/remote/client/function.js +32 -0
  34. package/dist/cjs/remote/client/graph.d.ts +54 -0
  35. package/dist/cjs/remote/client/graph.js +93 -0
  36. package/dist/cjs/remote/client/remote.d.ts +16 -0
  37. package/dist/cjs/remote/client/remote.js +2 -0
  38. package/dist/cjs/remote/server/auth.d.ts +31 -0
  39. package/dist/cjs/remote/server/auth.js +99 -0
  40. package/dist/cjs/remote/server/db.d.ts +2 -0
  41. package/dist/cjs/remote/server/db.js +223 -0
  42. package/dist/cjs/remote/server/function.d.ts +2 -0
  43. package/dist/cjs/remote/server/function.js +89 -0
  44. package/dist/cjs/remote/server/graph.d.ts +2 -0
  45. package/dist/cjs/remote/server/graph.js +145 -0
  46. package/dist/cjs/remote/server/index.d.ts +1 -0
  47. package/dist/cjs/remote/server/index.js +66 -0
  48. package/dist/cjs/remote/server/initDataBases.d.ts +1 -0
  49. package/dist/cjs/remote/server/initDataBases.js +25 -0
  50. package/dist/cjs/remote/server/pathUtils.d.ts +1 -0
  51. package/dist/cjs/remote/server/pathUtils.js +12 -0
  52. package/dist/cjs/remote/server/secret.d.ts +1 -0
  53. package/dist/cjs/remote/server/secret.js +25 -0
  54. package/dist/cjs/remote/serverMgmt/index.d.ts +1 -0
  55. package/dist/cjs/remote/serverMgmt/index.js +87 -0
  56. package/dist/cjs/types/Id.d.ts +3 -0
  57. package/dist/cjs/types/Id.js +2 -0
  58. package/dist/cjs/types/arg.d.ts +6 -0
  59. package/dist/cjs/types/arg.js +2 -0
  60. package/dist/cjs/types/data.d.ts +4 -0
  61. package/dist/cjs/types/data.js +2 -0
  62. package/dist/cjs/types/options.d.ts +12 -0
  63. package/dist/cjs/types/options.js +2 -0
  64. package/dist/cjs/types/searchOpts.d.ts +61 -0
  65. package/dist/cjs/types/searchOpts.js +8 -0
  66. package/dist/cjs/types/types.d.ts +6 -0
  67. package/dist/cjs/types/types.js +2 -0
  68. package/dist/cjs/utils/hasFields.d.ts +8 -0
  69. package/dist/cjs/utils/hasFields.js +22 -0
  70. package/dist/cjs/utils/hasFieldsAdvanced.d.ts +5 -0
  71. package/dist/cjs/utils/hasFieldsAdvanced.js +182 -0
  72. package/dist/cjs/utils/updateFindObject.d.ts +11 -0
  73. package/dist/cjs/utils/updateFindObject.js +32 -0
  74. package/dist/cjs/utils/updateObject.d.ts +8 -0
  75. package/dist/cjs/utils/updateObject.js +18 -0
  76. package/dist/esm/CollectionManager.d.ts +43 -0
  77. package/dist/esm/CollectionManager.js +57 -0
  78. package/dist/esm/action.d.ts +71 -0
  79. package/dist/esm/action.js +194 -0
  80. package/dist/esm/database.d.ts +77 -0
  81. package/dist/esm/database.js +113 -0
  82. package/dist/esm/executor.d.ts +28 -0
  83. package/dist/esm/executor.js +45 -0
  84. package/dist/esm/file/find.d.ts +11 -0
  85. package/dist/esm/file/find.js +73 -0
  86. package/dist/esm/file/index.d.ts +3 -0
  87. package/{file → dist/esm/file}/index.js +1 -1
  88. package/dist/esm/file/remove.d.ts +7 -0
  89. package/dist/esm/file/remove.js +56 -0
  90. package/dist/esm/file/update.d.ts +7 -0
  91. package/dist/esm/file/update.js +63 -0
  92. package/dist/esm/file/utils.d.ts +8 -0
  93. package/{file → dist/esm/file}/utils.js +3 -11
  94. package/dist/esm/format.d.ts +18 -0
  95. package/{format.js → dist/esm/format.js} +29 -29
  96. package/dist/esm/gen.d.ts +5 -0
  97. package/dist/esm/gen.js +75 -0
  98. package/dist/esm/graph.d.ts +47 -0
  99. package/dist/esm/graph.js +85 -0
  100. package/dist/esm/index.d.ts +7 -0
  101. package/{index.js → dist/esm/index.js} +1 -9
  102. package/dist/esm/relation.d.ts +64 -0
  103. package/dist/esm/relation.js +65 -0
  104. package/dist/esm/remote/client/database.d.ts +71 -0
  105. package/dist/esm/remote/client/database.js +140 -0
  106. package/dist/esm/remote/client/function.d.ts +5 -0
  107. package/dist/esm/remote/client/function.js +30 -0
  108. package/dist/esm/remote/client/graph.d.ts +54 -0
  109. package/dist/esm/remote/client/graph.js +88 -0
  110. package/dist/esm/remote/client/remote.d.ts +16 -0
  111. package/dist/esm/remote/client/remote.js +1 -0
  112. package/dist/esm/remote/server/auth.d.ts +31 -0
  113. package/{remote → dist/esm/remote}/server/auth.js +31 -44
  114. package/dist/esm/remote/server/db.d.ts +2 -0
  115. package/dist/esm/remote/server/db.js +218 -0
  116. package/dist/esm/remote/server/function.d.ts +2 -0
  117. package/dist/esm/remote/server/function.js +87 -0
  118. package/dist/esm/remote/server/graph.d.ts +2 -0
  119. package/{remote → dist/esm/remote}/server/graph.js +62 -55
  120. package/dist/esm/remote/server/gui/css/main.css +130 -0
  121. package/dist/esm/remote/server/gui/css/scrool.css +81 -0
  122. package/dist/esm/remote/server/gui/css/style.css +61 -0
  123. package/dist/esm/remote/server/gui/favicon.svg +12 -0
  124. package/dist/esm/remote/server/gui/html/data.html +15 -0
  125. package/dist/esm/remote/server/gui/html/main.html +46 -0
  126. package/dist/esm/remote/server/gui/html/nav.html +25 -0
  127. package/dist/esm/remote/server/gui/html/popup.html +51 -0
  128. package/dist/esm/remote/server/gui/index.html +49 -0
  129. package/dist/esm/remote/server/gui/js/api.js +166 -0
  130. package/dist/esm/remote/server/gui/js/index.js +17 -0
  131. package/dist/esm/remote/server/gui/js/loadHTML.js +16 -0
  132. package/dist/esm/remote/server/gui/js/popUp.js +72 -0
  133. package/dist/esm/remote/server/gui/js/queryApi.js +51 -0
  134. package/dist/esm/remote/server/gui/js/queryDb.js +79 -0
  135. package/dist/esm/remote/server/gui/js/queryGraph.js +144 -0
  136. package/dist/esm/remote/server/gui/js/render.js +64 -0
  137. package/dist/esm/remote/server/gui/js/templates.js +31 -0
  138. package/dist/esm/remote/server/gui/js/utils.js +36 -0
  139. package/dist/esm/remote/server/gui/js/vars.js +9 -0
  140. package/dist/esm/remote/server/gui/libs/core.js +176 -0
  141. package/dist/esm/remote/server/gui/libs/d3.v7.min.js +2 -0
  142. package/dist/esm/remote/server/gui/libs/handlebars.min.js +29 -0
  143. package/dist/esm/remote/server/gui/libs/json5.min.js +1 -0
  144. package/dist/esm/remote/server/index.d.ts +1 -0
  145. package/dist/esm/remote/server/index.js +61 -0
  146. package/dist/esm/remote/server/initDataBases.d.ts +1 -0
  147. package/dist/esm/remote/server/initDataBases.js +20 -0
  148. package/dist/esm/remote/server/pathUtils.d.ts +1 -0
  149. package/{remote → dist/esm/remote}/server/pathUtils.js +2 -3
  150. package/dist/esm/remote/server/secret.d.ts +1 -0
  151. package/{remote → dist/esm/remote}/server/secret.js +3 -7
  152. package/dist/esm/remote/serverMgmt/index.d.ts +1 -0
  153. package/{remote → dist/esm/remote}/serverMgmt/index.js +27 -31
  154. package/dist/esm/types/Id.d.ts +3 -0
  155. package/dist/esm/types/Id.js +1 -0
  156. package/dist/esm/types/arg.d.ts +6 -0
  157. package/dist/esm/types/arg.js +1 -0
  158. package/dist/esm/types/data.d.ts +4 -0
  159. package/dist/esm/types/data.js +1 -0
  160. package/dist/esm/types/options.d.ts +12 -0
  161. package/dist/esm/types/options.js +1 -0
  162. package/dist/esm/types/searchOpts.d.ts +61 -0
  163. package/dist/esm/types/searchOpts.js +7 -0
  164. package/dist/esm/types/types.d.ts +6 -0
  165. package/dist/esm/types/types.js +1 -0
  166. package/dist/esm/utils/hasFields.d.ts +8 -0
  167. package/{utils → dist/esm/utils}/hasFields.js +4 -4
  168. package/dist/esm/utils/hasFieldsAdvanced.d.ts +5 -0
  169. package/dist/esm/utils/hasFieldsAdvanced.js +176 -0
  170. package/dist/esm/utils/updateFindObject.d.ts +11 -0
  171. package/{utils → dist/esm/utils}/updateFindObject.js +11 -16
  172. package/dist/esm/utils/updateObject.d.ts +8 -0
  173. package/{utils → dist/esm/utils}/updateObject.js +4 -4
  174. package/package.json +55 -36
  175. package/CollectionManager.js +0 -119
  176. package/action.js +0 -258
  177. package/database.d.ts +0 -44
  178. package/database.js +0 -203
  179. package/docs/database.md +0 -140
  180. package/docs/graph.md +0 -86
  181. package/docs/relation.md +0 -51
  182. package/docs/remote.md +0 -30
  183. package/docs/remote_server.md +0 -35
  184. package/docs/search_opts.md +0 -227
  185. package/file/find.js +0 -89
  186. package/file/remove.js +0 -74
  187. package/file/update.js +0 -83
  188. package/gen.d.ts +0 -1
  189. package/gen.js +0 -97
  190. package/graph.d.ts +0 -27
  191. package/graph.js +0 -140
  192. package/relation.d.ts +0 -23
  193. package/remote/client/database.d.ts +0 -41
  194. package/remote/client/database.js +0 -228
  195. package/remote/client/graph.d.ts +0 -31
  196. package/remote/client/graph.js +0 -148
  197. package/remote/server/db.js +0 -197
  198. package/remote/server/function.js +0 -43
  199. package/remote/server/index.js +0 -63
  200. package/remote/server/initDataBases.js +0 -20
  201. package/test/hasFieldsAdvanced.test.js +0 -70
  202. package/utils/hasFieldsAdvanced.js +0 -184
  203. /package/{remote → dist/cjs/remote}/server/gui/css/main.css +0 -0
  204. /package/{remote → dist/cjs/remote}/server/gui/css/scrool.css +0 -0
  205. /package/{remote → dist/cjs/remote}/server/gui/css/style.css +0 -0
  206. /package/{remote → dist/cjs/remote}/server/gui/favicon.svg +0 -0
  207. /package/{remote → dist/cjs/remote}/server/gui/html/data.html +0 -0
  208. /package/{remote → dist/cjs/remote}/server/gui/html/main.html +0 -0
  209. /package/{remote → dist/cjs/remote}/server/gui/html/nav.html +0 -0
  210. /package/{remote → dist/cjs/remote}/server/gui/html/popup.html +0 -0
  211. /package/{remote → dist/cjs/remote}/server/gui/index.html +0 -0
  212. /package/{remote → dist/cjs/remote}/server/gui/js/api.js +0 -0
  213. /package/{remote → dist/cjs/remote}/server/gui/js/index.js +0 -0
  214. /package/{remote → dist/cjs/remote}/server/gui/js/loadHTML.js +0 -0
  215. /package/{remote → dist/cjs/remote}/server/gui/js/popUp.js +0 -0
  216. /package/{remote → dist/cjs/remote}/server/gui/js/queryApi.js +0 -0
  217. /package/{remote → dist/cjs/remote}/server/gui/js/queryDb.js +0 -0
  218. /package/{remote → dist/cjs/remote}/server/gui/js/queryGraph.js +0 -0
  219. /package/{remote → dist/cjs/remote}/server/gui/js/render.js +0 -0
  220. /package/{remote → dist/cjs/remote}/server/gui/js/templates.js +0 -0
  221. /package/{remote → dist/cjs/remote}/server/gui/js/utils.js +0 -0
  222. /package/{remote → dist/cjs/remote}/server/gui/js/vars.js +0 -0
  223. /package/{remote → dist/cjs/remote}/server/gui/libs/core.js +0 -0
  224. /package/{remote → dist/cjs/remote}/server/gui/libs/d3.v7.min.js +0 -0
  225. /package/{remote → dist/cjs/remote}/server/gui/libs/handlebars.min.js +0 -0
  226. /package/{remote → dist/cjs/remote}/server/gui/libs/json5.min.js +0 -0
@@ -0,0 +1,12 @@
1
+ export interface DbOpts {
2
+ maxFileSize?: number;
3
+ }
4
+ export interface DbFindOpts {
5
+ reverse?: boolean;
6
+ max?: number;
7
+ }
8
+ export interface FindOpts {
9
+ select?: string[];
10
+ exclude?: string[];
11
+ transform?: Function;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Predefined Search Options Quick Reference
3
+ *
4
+ * This module defines the types and structures for search operators used
5
+ * to validate and query data objects.
6
+ */
7
+ /** Logical Operators */
8
+ export type LogicalOperators = {
9
+ /**
10
+ * Recursively applies multiple conditions, all of which must evaluate to true.
11
+ * Can include other operators such as $gt, $exists, or nested $and/$or conditions.
12
+ */
13
+ $and?: Array<PredefinedSearchOperators>;
14
+ /**
15
+ * Recursively applies multiple conditions, at least one of which must evaluate to true.
16
+ * Can include other operators such as $lt, $type, or nested $and/$or conditions.
17
+ */
18
+ $or?: Array<PredefinedSearchOperators>;
19
+ /**
20
+ * Negates a single condition.
21
+ * Can include any other operator as its value.
22
+ */
23
+ $not?: PredefinedSearchOperators;
24
+ };
25
+ /** Comparison Operators */
26
+ export type ComparisonOperators = {
27
+ $gt?: Record<string, number>;
28
+ $lt?: Record<string, number>;
29
+ $gte?: Record<string, number>;
30
+ $lte?: Record<string, number>;
31
+ $in?: Record<string, any[]>;
32
+ $nin?: Record<string, any[]>;
33
+ $between?: Record<string, [number, number]>;
34
+ };
35
+ /** Type and Existence Operators */
36
+ export type TypeAndExistenceOperators = {
37
+ $exists?: Record<string, boolean>;
38
+ $type?: Record<string, string>;
39
+ };
40
+ /** Array Operators */
41
+ export type ArrayOperators = {
42
+ $arrinc?: Record<string, any[]>;
43
+ $arrincall?: Record<string, any[]>;
44
+ $size?: Record<string, number>;
45
+ };
46
+ /** String Operators */
47
+ export type StringOperators = {
48
+ $regex?: Record<string, RegExp>;
49
+ $startsWith?: Record<string, string>;
50
+ $endsWith?: Record<string, string>;
51
+ };
52
+ /** Other Operators */
53
+ export type OtherOperators = {
54
+ $subset?: Record<string, any>;
55
+ };
56
+ /** Predefined Search Operators */
57
+ export type PredefinedSearchOperators = LogicalOperators & ComparisonOperators & TypeAndExistenceOperators & ArrayOperators & StringOperators & OtherOperators;
58
+ /**
59
+ * SearchOptions can be either a function or an object with predefined operators.
60
+ */
61
+ export type SearchOptions = PredefinedSearchOperators | ((doc: Record<string, any>) => boolean);
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Predefined Search Options Quick Reference
3
+ *
4
+ * This module defines the types and structures for search operators used
5
+ * to validate and query data objects.
6
+ */
7
+ export {};
@@ -0,0 +1,6 @@
1
+ export interface Context {
2
+ }
3
+ export interface SortedFiles {
4
+ i: number;
5
+ f: string;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Checks if an object matches the standard field comparison.
3
+ * @function
4
+ * @param {Object} obj - The object to check.
5
+ * @param {Object} fields - Criteria to compare.
6
+ * @returns {boolean} - Whether the object matches the criteria.
7
+ */
8
+ export default function hasFields(obj: any, fields: any): any;
@@ -5,15 +5,15 @@
5
5
  * @param {Object} fields - Criteria to compare.
6
6
  * @returns {boolean} - Whether the object matches the criteria.
7
7
  */
8
- export default function hasFields(obj, fields){
8
+ export default function hasFields(obj, fields) {
9
9
  const keys = Object.keys(fields);
10
10
  return keys.every(key => {
11
- if(obj[key] !== undefined){
12
- if(typeof fields[key] === "object" && fields[key] !== null){
11
+ if (obj[key] !== undefined) {
12
+ if (typeof fields[key] === "object" && fields[key] !== null) {
13
13
  return hasFields(obj[key], fields[key]);
14
14
  }
15
15
  return obj[key] === fields[key];
16
16
  }
17
17
  return false;
18
18
  });
19
- }
19
+ }
@@ -0,0 +1,5 @@
1
+ import { Arg } from "../types/arg";
2
+ /**
3
+ * Checks if an object meets the criteria specified in the fields with operators.
4
+ */
5
+ export default function hasFieldsAdvanced(obj: Object, fields: Arg): any;
@@ -0,0 +1,176 @@
1
+ import hasFields from "./hasFields.js";
2
+ /**
3
+ * Checks if an object meets the criteria specified in the fields with operators.
4
+ */
5
+ export default function hasFieldsAdvanced(obj, fields) {
6
+ if (typeof fields !== "object" || fields === null) {
7
+ throw new Error("Fields must be an object");
8
+ }
9
+ if ("$and" in fields) {
10
+ return fields["$and"].every(subFields => hasFieldsAdvanced(obj, subFields));
11
+ }
12
+ if ("$or" in fields) {
13
+ return fields["$or"].some(subFields => hasFieldsAdvanced(obj, subFields));
14
+ }
15
+ // Check various conditions
16
+ if (!checkConditions(obj, fields))
17
+ return false;
18
+ const fieldsSubset = removeAdvancedOperators({ ...fields });
19
+ return hasFields(obj, fieldsSubset);
20
+ }
21
+ function removeAdvancedOperators(fields) {
22
+ const advancedOperators = [
23
+ "and", "or",
24
+ "gt", "lt", "gte", "lte", "in", "nin",
25
+ "exists",
26
+ "type",
27
+ "regex",
28
+ "arrinc", "arrincall", "size",
29
+ "startsWith", "endsWith",
30
+ "between",
31
+ "not",
32
+ "subset"
33
+ ].map(operator => "$" + operator);
34
+ advancedOperators.forEach(operator => delete fields[operator]);
35
+ return fields;
36
+ }
37
+ function checkConditions(obj, fields) {
38
+ return (checkComparison(obj, fields) &&
39
+ checkExistence(obj, fields) &&
40
+ checkType(obj, fields) &&
41
+ checkRegex(obj, fields) &&
42
+ checkArrayConditions(obj, fields) &&
43
+ checkStringConditions(obj, fields) &&
44
+ checkBetween(obj, fields) &&
45
+ checkNot(obj, fields) &&
46
+ checkSubset(obj, fields));
47
+ }
48
+ function checkComparison(obj, fields) {
49
+ const comparisonOperators = ["$gt", "$lt", "$gte", "$lte", "$in", "$nin"];
50
+ for (const operator of comparisonOperators) {
51
+ if (operator in fields) {
52
+ for (const entries of Object.entries(fields[operator])) {
53
+ const [key, value] = entries;
54
+ switch (operator) {
55
+ case "$gt":
56
+ if (!(obj[key] > value))
57
+ return false;
58
+ break;
59
+ case "$lt":
60
+ if (!(obj[key] < value))
61
+ return false;
62
+ break;
63
+ case "$gte":
64
+ if (!(obj[key] >= value))
65
+ return false;
66
+ break;
67
+ case "$lte":
68
+ if (!(obj[key] <= value))
69
+ return false;
70
+ break;
71
+ case "$in":
72
+ if (!value.includes(obj[key]))
73
+ return false;
74
+ break;
75
+ case "$nin":
76
+ if (value.includes(obj[key]))
77
+ return false;
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ return true;
84
+ }
85
+ function checkExistence(obj, fields) {
86
+ if ("$exists" in fields) {
87
+ for (const [key, shouldExist] of Object.entries(fields["$exists"])) {
88
+ if (shouldExist && !(key in obj))
89
+ return false;
90
+ if (!shouldExist && (key in obj))
91
+ return false;
92
+ }
93
+ }
94
+ return true;
95
+ }
96
+ function checkType(obj, fields) {
97
+ if ("$type" in fields) {
98
+ for (const [key, type] of Object.entries(fields["$type"])) {
99
+ if (typeof obj[key] !== type)
100
+ return false;
101
+ }
102
+ }
103
+ return true;
104
+ }
105
+ function checkRegex(obj, fields) {
106
+ if ("$regex" in fields) {
107
+ for (const [key, regex] of Object.entries(fields["$regex"])) {
108
+ if (!regex.test(obj[key]))
109
+ return false;
110
+ }
111
+ }
112
+ return true;
113
+ }
114
+ function checkArrayConditions(obj, fields) {
115
+ if ("$arrinc" in fields) {
116
+ for (const [key, values] of Object.entries(fields["$arrinc"])) {
117
+ if (!Array.isArray(obj[key]) || !values.some(val => obj[key].includes(val)))
118
+ return false;
119
+ }
120
+ }
121
+ if ("$arrincall" in fields) {
122
+ for (const [key, values] of Object.entries(fields["$arrincall"])) {
123
+ if (!Array.isArray(obj[key]) || !values.every(val => obj[key].includes(val)))
124
+ return false;
125
+ }
126
+ }
127
+ if ("$size" in fields) {
128
+ for (const [key, size] of Object.entries(fields["$size"])) {
129
+ if (Array.isArray(obj[key]) || typeof obj[key] === "string") {
130
+ if (obj[key].length !== size)
131
+ return false;
132
+ }
133
+ else {
134
+ return false;
135
+ }
136
+ }
137
+ }
138
+ return true;
139
+ }
140
+ function checkStringConditions(obj, fields) {
141
+ if ("$startsWith" in fields) {
142
+ for (const [key, value] of Object.entries(fields["$startsWith"])) {
143
+ if (typeof obj[key] !== "string" || !obj[key].startsWith(value))
144
+ return false;
145
+ }
146
+ }
147
+ if ("$endsWith" in fields) {
148
+ for (const [key, value] of Object.entries(fields["$endsWith"])) {
149
+ if (typeof obj[key] !== "string" || !obj[key].endsWith(value))
150
+ return false;
151
+ }
152
+ }
153
+ return true;
154
+ }
155
+ function checkBetween(obj, fields) {
156
+ if ("$between" in fields) {
157
+ for (const [key, [min, max]] of Object.entries(fields["$between"])) {
158
+ if (typeof obj[key] !== "number" || obj[key] < min || obj[key] > max)
159
+ return false;
160
+ }
161
+ }
162
+ return true;
163
+ }
164
+ function checkNot(obj, fields) {
165
+ if ("$not" in fields) {
166
+ return !hasFieldsAdvanced(obj, fields["$not"]);
167
+ }
168
+ return true;
169
+ }
170
+ function checkSubset(obj, fields) {
171
+ if ("$subset" in fields) {
172
+ const setFields = fields["$subset"];
173
+ return hasFields(obj, setFields);
174
+ }
175
+ return true;
176
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Updates an object with new values from a findOpts object.
3
+ * @function
4
+ * @param {Object} obj - The object to update.
5
+ * @param {Object} findOpts - An object containing options to update the target object.
6
+ * @param {function} [findOpts.transform] - A function to transform the object before applying the other options.
7
+ * @param {string[]} [findOpts.select] - An array of fields to select from the target object.
8
+ * @param {string[]} [findOpts.exclude] - An array of fields to exclude from the target object.
9
+ * @returns {Object} The updated object.
10
+ */
11
+ export default function updateFindObject(obj: any, findOpts: any): any;
@@ -8,27 +8,22 @@
8
8
  * @param {string[]} [findOpts.exclude] - An array of fields to exclude from the target object.
9
9
  * @returns {Object} The updated object.
10
10
  */
11
- export default function updateFindObject(obj, findOpts){
12
- const {
13
- transform,
14
- select,
15
- exclude,
16
- } = findOpts;
17
-
18
- if(typeof transform === "function") obj = transform(obj);
19
-
20
- if(Array.isArray(exclude)){
11
+ export default function updateFindObject(obj, findOpts) {
12
+ const { transform, select, exclude, } = findOpts;
13
+ if (typeof transform === "function")
14
+ obj = transform(obj);
15
+ if (Array.isArray(exclude)) {
21
16
  exclude.forEach(field => {
22
- if(obj.hasOwnProperty(field)) delete obj[field];
17
+ if (obj.hasOwnProperty(field))
18
+ delete obj[field];
23
19
  });
24
20
  }
25
-
26
- if(Array.isArray(select)){
21
+ if (Array.isArray(select)) {
27
22
  obj = select.reduce((acc, field) => {
28
- if(obj.hasOwnProperty(field)) acc[field] = obj[field];
23
+ if (obj.hasOwnProperty(field))
24
+ acc[field] = obj[field];
29
25
  return acc;
30
26
  }, {});
31
27
  }
32
-
33
28
  return obj;
34
- }
29
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Updates an object with new values.
3
+ * @function
4
+ * @param {Object} obj - The object to update.
5
+ * @param {Object} newVal - An object containing new values to update in the target object.
6
+ * @returns {Object} The updated object.
7
+ */
8
+ export default function updateObject(obj: any, newVal: any): any;
@@ -5,11 +5,11 @@
5
5
  * @param {Object} newVal - An object containing new values to update in the target object.
6
6
  * @returns {Object} The updated object.
7
7
  */
8
- export default function updateObject(obj, newVal){
9
- for(let key in newVal){
10
- if(newVal.hasOwnProperty(key)){
8
+ export default function updateObject(obj, newVal) {
9
+ for (let key in newVal) {
10
+ if (newVal.hasOwnProperty(key)) {
11
11
  obj[key] = newVal[key];
12
12
  }
13
13
  }
14
14
  return obj;
15
- }
15
+ }
package/package.json CHANGED
@@ -1,38 +1,57 @@
1
1
  {
2
- "name": "@wxn0brp/db",
3
- "version": "0.0.5",
4
- "main": "index.js",
5
- "description": "A simple file-based database management system with support for CRUD operations, custom queries, and graph structures.",
6
- "homepage": "https://github.com/wxn0brP/database",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/wxn0brP/database.git"
10
- },
11
- "keywords": [
12
- "database",
13
- "file-based",
14
- "CRUD",
15
- "graph",
16
- "query"
17
- ],
18
- "author": "wxn0brP",
19
- "license": "MIT",
20
- "type": "module",
21
- "dependencies": {
22
- "got": "^14.4.2",
23
- "json5": "^2.2.3",
24
- "readline": "^1.3.0"
25
- },
26
- "devDependencies": {
27
- "ava": "^6.2.0",
28
- "body-parser": "^1.20.3",
29
- "cors": "^2.8.5",
30
- "dotenv": "^16.4.5",
31
- "express": "^4.21.1",
32
- "jwt-simple": "^0.5.6",
33
- "node-cache": "^5.1.2"
34
- },
35
- "scripts": {
36
- "postversion": "git push && git push --tags"
37
- }
2
+ "name": "@wxn0brp/db",
3
+ "version": "0.0.6",
4
+ "main": "dist/esm/index.js",
5
+ "types": "dist/esm/index.d.ts",
6
+ "description": "A simple file-based database management system with support for CRUD operations, custom queries, and graph structures.",
7
+ "homepage": "https://github.com/wxn0brP/database",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/wxn0brP/database.git"
11
+ },
12
+ "keywords": [
13
+ "database",
14
+ "file-based",
15
+ "CRUD",
16
+ "graph",
17
+ "query"
18
+ ],
19
+ "author": "wxn0brP",
20
+ "license": "MIT",
21
+ "type": "module",
22
+ "dependencies": {
23
+ "got": "^14.4.2",
24
+ "json5": "^2.2.3",
25
+ "readline": "^1.3.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/body-parser": "^1.19.5",
29
+ "@types/got": "^9.6.12",
30
+ "@types/node": "^22.10.2",
31
+ "ava": "^6.2.0",
32
+ "body-parser": "^1.20.3",
33
+ "cors": "^2.8.5",
34
+ "dotenv": "^16.4.5",
35
+ "express": "^4.21.1",
36
+ "jwt-simple": "^0.5.6",
37
+ "node-cache": "^5.1.2",
38
+ "typescript": "^5.7.2"
39
+ },
40
+ "scripts": {
41
+ "build:esm": "tsc",
42
+ "build:cjs": "tsc --module CommonJS --outDir ./dist/cjs --declarationDir ./dist/cjs",
43
+ "build": "npm run build:esm && npm run build:cjs",
44
+ "postbuild": "node scripts/postbuild.js",
45
+ "prepare": "npm run build",
46
+ "postversion": "git push && git push --tags"
47
+ },
48
+ "files": [
49
+ "dist"
50
+ ],
51
+ "exports": {
52
+ ".": {
53
+ "import": "./dist/esm/index.js",
54
+ "require": "./dist/cjs/index.js"
55
+ }
56
+ }
38
57
  }
@@ -1,119 +0,0 @@
1
- class CollectionManager{
2
- constructor(db, collection){
3
- this.db = db;
4
- this.collection = collection;
5
- }
6
-
7
- /**
8
- * Add data to a database.
9
- *
10
- * @async
11
- * @function
12
- * @param {Object} data - The data to add.
13
- * @param {boolean} id_gen - Whether to generate an ID for the entry. Default is true.
14
- * @returns {Promise<Object>} A Promise that resolves with the added data.
15
- */
16
- async add(data, id_gen=true){
17
- return await this.db.add(this.collection, data, id_gen);
18
- }
19
-
20
- /**
21
- * Find data in a database.
22
- *
23
- * @async
24
- * @function
25
- * @param {function|Object} search - The query. It can be an object or a function.
26
- * @param {Object} context - The context object (for functions).
27
- * @param {Object} options - The options for the search.
28
- * @param {number} options.max - The maximum number of entries to return. Default is -1, meaning no limit.
29
- * @param {boolean} options.reverse - Whether to reverse the order of returned entries. Default is false.
30
- * @returns {Promise<Array<Object>>} A Promise that resolves with the matching data.
31
- */
32
- async find(search, context={}, options={}){
33
- return await this.db.find(this.collection, search, context, options);
34
- }
35
-
36
- /**
37
- * Find one data entry in a database.
38
- *
39
- * @async
40
- * @function
41
- * @param {function|Object} search - The query. It can be an object or a function.
42
- * @param {Object} context - The context object (for functions).
43
- * @returns {Promise<Object|null>} A Promise that resolves with the first matching data entry.
44
- */
45
- async findOne(search, context={}){
46
- return await this.db.findOne(this.collection, search, context);
47
- }
48
-
49
- /**
50
- * Update data in a database.
51
- *
52
- * @async
53
- * @function
54
- * @param {function|Object} search - The query. It can be an object or a function.
55
- * @param {function|Object} arg - Update arguments.
56
- * @param {Object} context - The context object (for functions).
57
- * @returns {Promise<boolean>} A Promise that resolves when the data is updated.
58
- */
59
- async update(search, arg, context={}){
60
- return await this.db.update(this.collection, search, arg, context);
61
- }
62
-
63
- /**
64
- * Update one data entry in a database.
65
- *
66
- * @async
67
- * @function
68
- * @param {function|Object} search - The query. It can be an object or a function.
69
- * @param {function|Object} arg - The query.
70
- * @param {Object} context - The context object (for functions).
71
- * @returns {Promise<boolean>} A Promise that resolves when the data entry is updated.
72
- */
73
- async updateOne(search, arg, context={}){
74
- return await this.db.updateOne(this.collection, search, arg, context);
75
- }
76
-
77
- /**
78
- * Remove data from a database.
79
- *
80
- * @async
81
- * @function
82
- * @param {function|Object} search - The query. It can be an object or a function.
83
- * @param {Object} context - The context object (for functions).
84
- * @returns {Promise<boolean>} A Promise that resolves when the data is removed.
85
- */
86
-
87
- async remove(search, context={}){
88
- return await this.db.remove(this.collection, search, context);
89
- }
90
-
91
- /**
92
- * Remove one data entry from a database.
93
- *
94
- * @async
95
- * @function
96
- * @param {function|Object} search - The query. It can be an object or a function.
97
- * @param {Object} context - The context object (for functions).
98
- * @returns {Promise<boolean>} A Promise that resolves when the data entry is removed.
99
- */
100
- async removeOne(search, context={}){
101
- return await this.db.removeOne(this.collection, search, context);
102
- }
103
-
104
- /**
105
- * Asynchronously updates one entry in a database or adds a new one if it doesn't exist.
106
- *
107
- * @param {function|Object} search - The query. It can be an object or a function.
108
- * @param {function|Object} arg - The search criteria for the update.
109
- * @param {function|Object} add_arg - The arguments to be added to the new entry.
110
- * @param {Object} context - The context object (for functions).
111
- * @param {boolean} id_gen - Whether to generate an ID for the entry. Default is true.
112
- * @return {Promise<boolean>} A Promise that resolves to `true` if the entry was updated, or `false` if it was added.
113
- */
114
- async updateOneOrAdd(search, arg, add_arg={}, context={}, id_gen=true){
115
- return await this.db.updateOneOrAdd(this.collection, search, arg, add_arg, context, id_gen);
116
- }
117
- }
118
-
119
- export default CollectionManager;