@warlock.js/cascade 1.0.5 → 1.0.7

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 (280) hide show
  1. package/cjs/aggregate/DeselectPipeline.d.ts +10 -0
  2. package/cjs/aggregate/DeselectPipeline.d.ts.map +1 -0
  3. package/cjs/aggregate/DeselectPipeline.js +17 -0
  4. package/cjs/aggregate/DeselectPipeline.js.map +1 -0
  5. package/cjs/aggregate/GeoNearPipeline.d.ts +34 -0
  6. package/cjs/aggregate/GeoNearPipeline.d.ts.map +1 -0
  7. package/cjs/aggregate/GeoNearPipeline.js +44 -0
  8. package/cjs/aggregate/GeoNearPipeline.js.map +1 -0
  9. package/cjs/aggregate/GroupByPipeline.d.ts +12 -0
  10. package/cjs/aggregate/GroupByPipeline.d.ts.map +1 -0
  11. package/cjs/aggregate/GroupByPipeline.js +28 -0
  12. package/cjs/aggregate/GroupByPipeline.js.map +1 -0
  13. package/cjs/aggregate/LimitPipeline.d.ts +10 -0
  14. package/cjs/aggregate/LimitPipeline.d.ts.map +1 -0
  15. package/cjs/aggregate/LimitPipeline.js +14 -0
  16. package/cjs/aggregate/LimitPipeline.js.map +1 -0
  17. package/cjs/aggregate/LookupPipeline.d.ts +19 -0
  18. package/cjs/aggregate/LookupPipeline.d.ts.map +1 -0
  19. package/cjs/aggregate/LookupPipeline.js +19 -0
  20. package/cjs/aggregate/LookupPipeline.js.map +1 -0
  21. package/cjs/aggregate/OrWherePipeline.d.ts +23 -0
  22. package/cjs/aggregate/OrWherePipeline.d.ts.map +1 -0
  23. package/cjs/aggregate/OrWherePipeline.js +42 -0
  24. package/cjs/aggregate/OrWherePipeline.js.map +1 -0
  25. package/cjs/aggregate/SelectPipeline.d.ts +10 -0
  26. package/cjs/aggregate/SelectPipeline.d.ts.map +1 -0
  27. package/cjs/aggregate/SelectPipeline.js +26 -0
  28. package/cjs/aggregate/SelectPipeline.js.map +1 -0
  29. package/cjs/aggregate/SkipPipeline.d.ts +10 -0
  30. package/cjs/aggregate/SkipPipeline.d.ts.map +1 -0
  31. package/cjs/aggregate/SkipPipeline.js +14 -0
  32. package/cjs/aggregate/SkipPipeline.js.map +1 -0
  33. package/cjs/aggregate/SortByPipeline.d.ts +10 -0
  34. package/cjs/aggregate/SortByPipeline.d.ts.map +1 -0
  35. package/cjs/aggregate/SortByPipeline.js +18 -0
  36. package/cjs/aggregate/SortByPipeline.js.map +1 -0
  37. package/cjs/aggregate/SortPipeline.d.ts +11 -0
  38. package/cjs/aggregate/SortPipeline.d.ts.map +1 -0
  39. package/cjs/aggregate/SortPipeline.js +18 -0
  40. package/cjs/aggregate/SortPipeline.js.map +1 -0
  41. package/cjs/aggregate/SortRandomPipeline.d.ts +10 -0
  42. package/cjs/aggregate/SortRandomPipeline.d.ts.map +1 -0
  43. package/cjs/aggregate/SortRandomPipeline.js +16 -0
  44. package/cjs/aggregate/SortRandomPipeline.js.map +1 -0
  45. package/cjs/aggregate/UnwindPipeline.d.ts +14 -0
  46. package/cjs/aggregate/UnwindPipeline.d.ts.map +1 -0
  47. package/cjs/aggregate/UnwindPipeline.js +19 -0
  48. package/cjs/aggregate/UnwindPipeline.js.map +1 -0
  49. package/cjs/aggregate/WhereExpression.d.ts +17 -0
  50. package/cjs/aggregate/WhereExpression.d.ts.map +1 -0
  51. package/cjs/aggregate/WhereExpression.js +149 -0
  52. package/cjs/aggregate/WhereExpression.js.map +1 -0
  53. package/cjs/aggregate/WhereExpressionPipeline.d.ts +10 -0
  54. package/cjs/aggregate/WhereExpressionPipeline.d.ts.map +1 -0
  55. package/cjs/aggregate/WhereExpressionPipeline.js +15 -0
  56. package/cjs/aggregate/WhereExpressionPipeline.js.map +1 -0
  57. package/cjs/aggregate/WherePipeline.d.ts +13 -0
  58. package/cjs/aggregate/WherePipeline.d.ts.map +1 -0
  59. package/cjs/aggregate/WherePipeline.js +12 -0
  60. package/cjs/aggregate/WherePipeline.js.map +1 -0
  61. package/cjs/aggregate/aggregate.d.ts +358 -0
  62. package/cjs/aggregate/aggregate.d.ts.map +1 -0
  63. package/cjs/aggregate/aggregate.js +680 -0
  64. package/cjs/aggregate/aggregate.js.map +1 -0
  65. package/cjs/aggregate/expressions.d.ts +361 -0
  66. package/cjs/aggregate/expressions.d.ts.map +1 -0
  67. package/cjs/aggregate/expressions.js +536 -0
  68. package/cjs/aggregate/expressions.js.map +1 -0
  69. package/cjs/aggregate/index.d.ts +21 -0
  70. package/cjs/aggregate/index.d.ts.map +1 -0
  71. package/cjs/aggregate/parsePipelines.d.ts +5 -0
  72. package/cjs/aggregate/parsePipelines.d.ts.map +1 -0
  73. package/cjs/aggregate/parsePipelines.js +6 -0
  74. package/cjs/aggregate/parsePipelines.js.map +1 -0
  75. package/cjs/aggregate/pipeline.d.ts +31 -0
  76. package/cjs/aggregate/pipeline.d.ts.map +1 -0
  77. package/cjs/aggregate/pipeline.js +42 -0
  78. package/cjs/aggregate/pipeline.js.map +1 -0
  79. package/cjs/aggregate/types.d.ts +8 -0
  80. package/cjs/aggregate/types.d.ts.map +1 -0
  81. package/cjs/aggregate/types.js +31 -0
  82. package/cjs/aggregate/types.js.map +1 -0
  83. package/cjs/blueprint/blueprint-column.d.ts +82 -0
  84. package/cjs/blueprint/blueprint-column.d.ts.map +1 -0
  85. package/cjs/blueprint/blueprint.d.ts +162 -0
  86. package/cjs/blueprint/blueprint.d.ts.map +1 -0
  87. package/cjs/blueprint/blueprint.js +340 -0
  88. package/cjs/blueprint/blueprint.js.map +1 -0
  89. package/cjs/blueprint/index.d.ts +3 -0
  90. package/cjs/blueprint/index.d.ts.map +1 -0
  91. package/cjs/blueprint/model-blueprint.d.ts +15 -0
  92. package/cjs/blueprint/model-blueprint.d.ts.map +1 -0
  93. package/cjs/blueprint/model-blueprint.js +16 -0
  94. package/cjs/blueprint/model-blueprint.js.map +1 -0
  95. package/cjs/casts/arrayOf.d.ts +5 -0
  96. package/cjs/casts/arrayOf.d.ts.map +1 -0
  97. package/cjs/casts/arrayOf.js +18 -0
  98. package/cjs/casts/arrayOf.js.map +1 -0
  99. package/cjs/casts/cast-email.d.ts +2 -0
  100. package/cjs/casts/cast-email.d.ts.map +1 -0
  101. package/cjs/casts/cast-email.js +5 -0
  102. package/cjs/casts/cast-email.js.map +1 -0
  103. package/cjs/casts/castModel.d.ts +3 -0
  104. package/cjs/casts/castModel.d.ts.map +1 -0
  105. package/cjs/casts/castModel.js +49 -0
  106. package/cjs/casts/castModel.js.map +1 -0
  107. package/cjs/casts/expiresAfter.d.ts +3 -0
  108. package/cjs/casts/expiresAfter.d.ts.map +1 -0
  109. package/cjs/casts/expiresAfter.js +5 -0
  110. package/cjs/casts/expiresAfter.js.map +1 -0
  111. package/cjs/casts/index.d.ts +9 -0
  112. package/cjs/casts/index.d.ts.map +1 -0
  113. package/cjs/casts/oneOf.d.ts +3 -0
  114. package/cjs/casts/oneOf.d.ts.map +1 -0
  115. package/cjs/casts/oneOf.js +22 -0
  116. package/cjs/casts/oneOf.js.map +1 -0
  117. package/cjs/casts/random-string.d.ts +2 -0
  118. package/cjs/casts/random-string.d.ts.map +1 -0
  119. package/cjs/casts/random-string.js +5 -0
  120. package/cjs/casts/random-string.js.map +1 -0
  121. package/cjs/casts/randomInteger.d.ts +2 -0
  122. package/cjs/casts/randomInteger.d.ts.map +1 -0
  123. package/cjs/casts/randomInteger.js +7 -0
  124. package/cjs/casts/randomInteger.js.map +1 -0
  125. package/cjs/casts/shapedArray.d.ts +26 -0
  126. package/cjs/casts/shapedArray.d.ts.map +1 -0
  127. package/cjs/casts/shapedArray.js +100 -0
  128. package/cjs/casts/shapedArray.js.map +1 -0
  129. package/cjs/config.d.ts +4 -0
  130. package/cjs/config.d.ts.map +1 -0
  131. package/cjs/config.js +10 -0
  132. package/cjs/config.js.map +1 -0
  133. package/cjs/connection.d.ts +45 -0
  134. package/cjs/connection.d.ts.map +1 -0
  135. package/cjs/connection.js +98 -0
  136. package/cjs/connection.js.map +1 -0
  137. package/cjs/database.d.ts +49 -0
  138. package/cjs/database.d.ts.map +1 -0
  139. package/cjs/database.js +85 -0
  140. package/cjs/database.js.map +1 -0
  141. package/cjs/index.d.ts +11 -1
  142. package/cjs/index.d.ts.map +1 -1
  143. package/cjs/index.js +1 -5
  144. package/cjs/index.js.map +1 -1
  145. package/cjs/migration/index.d.ts +4 -0
  146. package/cjs/migration/index.d.ts.map +1 -0
  147. package/cjs/migration/migrate.d.ts +13 -0
  148. package/cjs/migration/migrate.d.ts.map +1 -0
  149. package/cjs/migration/migrate.js +72 -0
  150. package/cjs/migration/migrate.js.map +1 -0
  151. package/cjs/migration/migration-office.d.ts +21 -0
  152. package/cjs/migration/migration-office.d.ts.map +1 -0
  153. package/cjs/migration/migration-office.js +40 -0
  154. package/cjs/migration/migration-office.js.map +1 -0
  155. package/cjs/migration/migration-officer.d.ts +33 -0
  156. package/cjs/migration/migration-officer.d.ts.map +1 -0
  157. package/cjs/migration/migration-officer.js +55 -0
  158. package/cjs/migration/migration-officer.js.map +1 -0
  159. package/cjs/migration/types.d.ts +34 -0
  160. package/cjs/migration/types.d.ts.map +1 -0
  161. package/cjs/model/ModelAggregate.d.ts +84 -0
  162. package/cjs/model/ModelAggregate.d.ts.map +1 -0
  163. package/cjs/model/ModelAggregate.js +164 -0
  164. package/cjs/model/ModelAggregate.js.map +1 -0
  165. package/cjs/model/ModelSync.d.ts +74 -0
  166. package/cjs/model/ModelSync.d.ts.map +1 -0
  167. package/cjs/model/ModelSync.js +215 -0
  168. package/cjs/model/ModelSync.js.map +1 -0
  169. package/cjs/model/RelationshipWithMany.d.ts +24 -0
  170. package/cjs/model/RelationshipWithMany.d.ts.map +1 -0
  171. package/cjs/model/RelationshipWithMany.js +42 -0
  172. package/cjs/model/RelationshipWithMany.js.map +1 -0
  173. package/cjs/model/base-model.d.ts +155 -0
  174. package/cjs/model/base-model.d.ts.map +1 -0
  175. package/cjs/model/base-model.js +230 -0
  176. package/cjs/model/base-model.js.map +1 -0
  177. package/cjs/model/crud-model.d.ts +117 -0
  178. package/cjs/model/crud-model.d.ts.map +1 -0
  179. package/cjs/model/crud-model.js +352 -0
  180. package/cjs/model/crud-model.js.map +1 -0
  181. package/cjs/model/index.d.ts +10 -0
  182. package/cjs/model/index.d.ts.map +1 -0
  183. package/cjs/model/joinable.d.ts +87 -0
  184. package/cjs/model/joinable.d.ts.map +1 -0
  185. package/cjs/model/joinable.js +155 -0
  186. package/cjs/model/joinable.js.map +1 -0
  187. package/cjs/model/master-mind.d.ts +44 -0
  188. package/cjs/model/master-mind.d.ts.map +1 -0
  189. package/cjs/model/master-mind.js +129 -0
  190. package/cjs/model/master-mind.js.map +1 -0
  191. package/cjs/model/model-events.d.ts +57 -0
  192. package/cjs/model/model-events.d.ts.map +1 -0
  193. package/cjs/model/model-events.js +102 -0
  194. package/cjs/model/model-events.js.map +1 -0
  195. package/cjs/model/model.d.ts +401 -0
  196. package/cjs/model/model.d.ts.map +1 -0
  197. package/cjs/model/model.js +1028 -0
  198. package/cjs/model/model.js.map +1 -0
  199. package/cjs/model/types.d.ts +113 -0
  200. package/cjs/model/types.d.ts.map +1 -0
  201. package/cjs/model/types.js +11 -0
  202. package/cjs/model/types.js.map +1 -0
  203. package/cjs/query/index.d.ts +2 -0
  204. package/cjs/query/index.d.ts.map +1 -0
  205. package/cjs/query/query.d.ts +228 -0
  206. package/cjs/query/query.d.ts.map +1 -0
  207. package/cjs/query/query.js +675 -0
  208. package/cjs/query/query.js.map +1 -0
  209. package/cjs/query/types.d.ts +56 -0
  210. package/cjs/query/types.d.ts.map +1 -0
  211. package/cjs/types.d.ts +62 -0
  212. package/cjs/types.d.ts.map +1 -0
  213. package/cjs/utils/connectToDatabase.d.ts +3 -0
  214. package/cjs/utils/connectToDatabase.d.ts.map +1 -0
  215. package/cjs/utils/connectToDatabase.js +3 -0
  216. package/cjs/utils/connectToDatabase.js.map +1 -0
  217. package/cjs/utils/deep-diff.d.ts +9 -0
  218. package/cjs/utils/deep-diff.d.ts.map +1 -0
  219. package/cjs/utils/deep-diff.js +44 -0
  220. package/cjs/utils/deep-diff.js.map +1 -0
  221. package/cjs/utils/dropAllDatabaseIndexes.d.ts +2 -0
  222. package/cjs/utils/dropAllDatabaseIndexes.d.ts.map +1 -0
  223. package/cjs/utils/dropAllDatabaseIndexes.js +10 -0
  224. package/cjs/utils/dropAllDatabaseIndexes.js.map +1 -0
  225. package/cjs/utils/index.d.ts +5 -0
  226. package/cjs/utils/index.d.ts.map +1 -0
  227. package/cjs/utils/joinable-proxy.d.ts +3 -0
  228. package/cjs/utils/joinable-proxy.d.ts.map +1 -0
  229. package/cjs/utils/joinable-proxy.js +14 -0
  230. package/cjs/utils/joinable-proxy.js.map +1 -0
  231. package/cjs/utils/listDatabaseIndexes.d.ts +4 -0
  232. package/cjs/utils/listDatabaseIndexes.d.ts.map +1 -0
  233. package/cjs/utils/listDatabaseIndexes.js +101 -0
  234. package/cjs/utils/listDatabaseIndexes.js.map +1 -0
  235. package/cjs/utils/onceConnected.d.ts +2 -0
  236. package/cjs/utils/onceConnected.d.ts.map +1 -0
  237. package/cjs/utils/onceConnected.js +8 -0
  238. package/cjs/utils/onceConnected.js.map +1 -0
  239. package/esm/connection.js +1 -1
  240. package/esm/connection.js.map +1 -1
  241. package/esm/utils/deep-diff.d.ts.map +1 -1
  242. package/esm/utils/deep-diff.js +5 -3
  243. package/esm/utils/deep-diff.js.map +1 -1
  244. package/package.json +1 -1
  245. package/cjs/commands/create-new-app/get-app-path.d.ts +0 -2
  246. package/cjs/commands/create-new-app/get-app-path.d.ts.map +0 -1
  247. package/cjs/commands/create-new-app/get-app-path.js +0 -8
  248. package/cjs/commands/create-new-app/get-app-path.js.map +0 -1
  249. package/cjs/commands/create-new-app/index.d.ts +0 -2
  250. package/cjs/commands/create-new-app/index.d.ts.map +0 -1
  251. package/cjs/commands/create-new-app/index.js +0 -44
  252. package/cjs/commands/create-new-app/index.js.map +0 -1
  253. package/cjs/commands/create-new-app/select-app-type.d.ts +0 -2
  254. package/cjs/commands/create-new-app/select-app-type.d.ts.map +0 -1
  255. package/cjs/commands/create-new-app/types.d.ts +0 -9
  256. package/cjs/commands/create-new-app/types.d.ts.map +0 -1
  257. package/cjs/commands/create-warlock-app/index.d.ts +0 -3
  258. package/cjs/commands/create-warlock-app/index.d.ts.map +0 -1
  259. package/cjs/commands/create-warlock-app/index.js +0 -18
  260. package/cjs/commands/create-warlock-app/index.js.map +0 -1
  261. package/cjs/helpers/app.d.ts +0 -51
  262. package/cjs/helpers/app.d.ts.map +0 -1
  263. package/cjs/helpers/app.js +0 -127
  264. package/cjs/helpers/app.js.map +0 -1
  265. package/cjs/helpers/exec.d.ts +0 -10
  266. package/cjs/helpers/exec.d.ts.map +0 -1
  267. package/cjs/helpers/exec.js +0 -69
  268. package/cjs/helpers/exec.js.map +0 -1
  269. package/cjs/helpers/package-manager.d.ts +0 -6
  270. package/cjs/helpers/package-manager.d.ts.map +0 -1
  271. package/cjs/helpers/package-manager.js +0 -22
  272. package/cjs/helpers/package-manager.js.map +0 -1
  273. package/cjs/helpers/paths.d.ts +0 -4
  274. package/cjs/helpers/paths.d.ts.map +0 -1
  275. package/cjs/helpers/paths.js +0 -8
  276. package/cjs/helpers/paths.js.map +0 -1
  277. package/cjs/helpers/project-builder-helpers.d.ts +0 -7
  278. package/cjs/helpers/project-builder-helpers.d.ts.map +0 -1
  279. package/cjs/helpers/project-builder-helpers.js +0 -44
  280. package/cjs/helpers/project-builder-helpers.js.map +0 -1
@@ -0,0 +1,352 @@
1
+ 'use strict';var mongodb=require('mongodb'),baseModel=require('./base-model.js'),types=require('./types.js');class CrudModel extends baseModel.BaseModel {
2
+ /**
3
+ * Create a new record in the database for the current model (child class of this one)
4
+ * and return a new instance of it with the created data and the new generated id
5
+ */
6
+ static async create(data) {
7
+ const model = this.self(data); // get new instance of model
8
+ // save the model, and generate the proper columns needed
9
+ await model.beforeCreating(data);
10
+ await model.save();
11
+ await model.onCreate();
12
+ return model;
13
+ }
14
+ /**
15
+ * Called before creating a new record
16
+ */
17
+ async beforeCreating(_data) {
18
+ //
19
+ }
20
+ /**
21
+ * Called after creating a new record
22
+ */
23
+ async onCreate() {
24
+ //
25
+ }
26
+ /**
27
+ * Update model by the given id
28
+ */
29
+ static async update(id, data) {
30
+ const model = (await this.find(id));
31
+ // execute the update operation
32
+ if (!model)
33
+ return null;
34
+ await model.save(data);
35
+ return model;
36
+ }
37
+ /**
38
+ * Replace the entire document for the given document id with the given new data
39
+ */
40
+ static async replace(id, data) {
41
+ const model = (await this.find(id));
42
+ if (!model)
43
+ return null;
44
+ model.replaceWith(data);
45
+ await model.save();
46
+ return model;
47
+ }
48
+ /**
49
+ * Restore the document from trash
50
+ */
51
+ static async restore(id) {
52
+ const deleteStrategy = this.deleteStrategy;
53
+ if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
54
+ const model = await this.query.first(this.collection, {
55
+ id,
56
+ });
57
+ if (!model)
58
+ return null;
59
+ model.unset("deletedAt");
60
+ await model.save();
61
+ return model;
62
+ }
63
+ // retrieve the document from trash collection
64
+ const result = await this.query.first(this.collection + "Trash", await this.prepareFilters({
65
+ [this.primaryIdColumn]: id,
66
+ }));
67
+ if (!result)
68
+ return null;
69
+ const document = result.document;
70
+ // otherwise, create a new model with it
71
+ document.restoredAt = new Date();
72
+ const model = this.self(document);
73
+ model.unset("deletedAt");
74
+ model.markAsRestored();
75
+ await model.save(); // save again in the same collection
76
+ return model;
77
+ }
78
+ /**
79
+ * Restore all documents from trash or by the given filter
80
+ */
81
+ static async restoreAll(filter) {
82
+ const deleteStrategy = this.deleteStrategy;
83
+ if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
84
+ const models = await this.query.list(this.collection, filter);
85
+ for (const model of models) {
86
+ model.unset("deletedAt");
87
+ if (model.id) {
88
+ model.set("id", Number(model.id));
89
+ }
90
+ await model.save();
91
+ }
92
+ return models;
93
+ }
94
+ if (filter) {
95
+ for (const key in filter) {
96
+ filter[`document.` + key] = filter[key];
97
+ delete filter[key];
98
+ }
99
+ }
100
+ const documents = await this.query.list(this.collection + "Trash", filter);
101
+ const models = [];
102
+ for (const document of documents) {
103
+ const model = this.self(document.document);
104
+ if (model.id) {
105
+ model.set("id", Number(model.id));
106
+ }
107
+ model.unset("deletedAt");
108
+ model.markAsRestored();
109
+ await model.save();
110
+ models.push(model);
111
+ }
112
+ return models;
113
+ }
114
+ /**
115
+ * Get deleted document by id
116
+ */
117
+ static async getDeleted(id) {
118
+ const deleteStrategy = this.deleteStrategy;
119
+ if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
120
+ const model = await this.query.first(this.collection, {
121
+ id,
122
+ });
123
+ if (!model)
124
+ return null;
125
+ return model;
126
+ }
127
+ const result = await this.query.first(this.collection + "Trash", await this.prepareFilters({
128
+ [this.primaryIdColumn]: id,
129
+ }));
130
+ if (!result)
131
+ return null;
132
+ const document = result.document;
133
+ // otherwise, create a new model with it
134
+ const model = this.self(document);
135
+ return model;
136
+ }
137
+ /**
138
+ * Get all deleted documents
139
+ */
140
+ static async getAllDeleted(filter) {
141
+ const deleteStrategy = this.deleteStrategy;
142
+ if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
143
+ return await this.query.list(this.collection, filter);
144
+ }
145
+ if (filter) {
146
+ for (const key in filter) {
147
+ filter[`document.` + key] = filter[key];
148
+ delete filter[key];
149
+ }
150
+ }
151
+ const documents = await this.query.list(this.collection + "Trash", filter);
152
+ const models = [];
153
+ for (const document of documents) {
154
+ const model = this.self(document.document);
155
+ models.push(model);
156
+ }
157
+ return models;
158
+ }
159
+ /**
160
+ * Find and update the document for the given filter with the given data or create a new document/record
161
+ * if filter has no matching
162
+ */
163
+ static async upsert(filter, data) {
164
+ filter = await this.prepareFilters(filter);
165
+ let model = (await this.first(filter));
166
+ if (!model) {
167
+ model = this.self(data);
168
+ }
169
+ else {
170
+ model.merge(data);
171
+ }
172
+ await model.save();
173
+ return model;
174
+ }
175
+ /**
176
+ * Find document by id
177
+ */
178
+ static async find(id) {
179
+ if (this.primaryIdColumn === "id") {
180
+ id = Number(id);
181
+ }
182
+ else if (this.primaryIdColumn === "_id" && typeof id === "string") {
183
+ id = new mongodb.ObjectId(id);
184
+ }
185
+ return this.findBy(this.primaryIdColumn, id);
186
+ }
187
+ /**
188
+ * Find document by the given column and value
189
+ */
190
+ static async findBy(column, value) {
191
+ const result = await this.query.first(this.collection, await this.prepareFilters({
192
+ [column]: value,
193
+ }));
194
+ return result ? this.self(result) : null;
195
+ }
196
+ /**
197
+ * Create an explain plan for the given filter
198
+ */
199
+ static async explain(filter = {}) {
200
+ return await this.query.explain(this.collection, await this.prepareFilters(filter));
201
+ }
202
+ /**
203
+ * List multiple documents based on the given filter
204
+ */
205
+ static async list(filter = {}) {
206
+ const documents = await this.query.list(this.collection, await this.prepareFilters(filter));
207
+ return documents.map(document => this.self(document));
208
+ }
209
+ /**
210
+ * Paginate records based on the given filter
211
+ */
212
+ static async paginate(filter, page = 1, limit = 15) {
213
+ filter = await this.prepareFilters(filter);
214
+ const documents = await this.query.list(this.collection, filter, query => {
215
+ query.skip((page - 1) * limit).limit(limit);
216
+ });
217
+ const totalDocumentsOfFilter = await this.query.count(this.collection, filter);
218
+ const result = {
219
+ documents: documents.map(document => this.self(document)),
220
+ paginationInfo: {
221
+ limit,
222
+ page,
223
+ result: documents.length,
224
+ total: totalDocumentsOfFilter,
225
+ pages: Math.ceil(totalDocumentsOfFilter / limit),
226
+ },
227
+ };
228
+ return result;
229
+ }
230
+ /**
231
+ * Find or create a new document based on the given filter and data
232
+ * If the document is not found, it will be created
233
+ * otherwise, just return the found document
234
+ */
235
+ static async findOrCreate(filter, data, { merge = false } = {}) {
236
+ filter = await this.prepareFilters(filter);
237
+ let model = (await this.first(filter));
238
+ if (!model) {
239
+ model = this.self({
240
+ ...(merge ? filter : {}),
241
+ ...data,
242
+ });
243
+ await model.save();
244
+ }
245
+ return model;
246
+ }
247
+ /**
248
+ * Update or create a new document based on the given filter and data
249
+ */
250
+ static async updateOrCreate(filter, data) {
251
+ filter = await this.prepareFilters(filter);
252
+ let model = (await this.first(filter));
253
+ if (!model) {
254
+ model = this.self(data);
255
+ }
256
+ else {
257
+ model.merge(data);
258
+ }
259
+ await model.save();
260
+ return model;
261
+ }
262
+ /**
263
+ * Count total documents based on the given filter
264
+ */
265
+ static async count(filter = {}) {
266
+ return await this.query.count(this.collection, await this.prepareFilters(filter));
267
+ }
268
+ /**
269
+ * Get first model for the given filter
270
+ */
271
+ static async first(filter = {}) {
272
+ const result = await this.query.first(this.collection, await this.prepareFilters(filter));
273
+ return result ? this.self(result) : null;
274
+ }
275
+ /**
276
+ * Get last model for the given filter
277
+ */
278
+ static async last(filter = {}) {
279
+ const result = await this.query.last(this.collection, await this.prepareFilters(filter));
280
+ return result ? this.self(result) : null;
281
+ }
282
+ /**
283
+ * Get latest documents
284
+ */
285
+ static async latest(filter = {}) {
286
+ const documents = await this.query.latest(this.collection, await this.prepareFilters(filter));
287
+ return documents.map(document => this.self(document));
288
+ }
289
+ /**
290
+ * Delete single document if the given filter is an ObjectId of mongodb
291
+ * Otherwise, delete multiple documents based on the given filter object
292
+ */
293
+ static async delete(filter = {}) {
294
+ if (filter instanceof mongodb.ObjectId ||
295
+ typeof filter === "string" ||
296
+ typeof filter === "number") {
297
+ return (await this.query.deleteOne(this.collection, await this.prepareFilters({
298
+ [this.primaryIdColumn]: filter,
299
+ })))
300
+ ? 1
301
+ : 0;
302
+ }
303
+ filter = await this.prepareFilters(filter);
304
+ return await this.query.delete(this.collection, filter);
305
+ }
306
+ static async chunk(limitOrFilter, callback) {
307
+ let limit = limitOrFilter;
308
+ let filter = {};
309
+ if (typeof limitOrFilter === "object") {
310
+ limit = limitOrFilter.limit;
311
+ delete limitOrFilter.limit;
312
+ filter = limitOrFilter;
313
+ }
314
+ const totalDocumentsOfFilter = await this.query.count(this.collection, filter);
315
+ const totalPages = Math.ceil(totalDocumentsOfFilter / limit);
316
+ for (let page = 1; page <= totalPages; page++) {
317
+ const result = await this.paginate(filter, page, limit);
318
+ const output = await callback(result.documents, result.paginationInfo);
319
+ if (output === false)
320
+ return;
321
+ }
322
+ }
323
+ /**
324
+ * Check if document exists for the given filter
325
+ */
326
+ static async exists(filter = {}) {
327
+ return await this.query.exists(this.collection, await this.prepareFilters(filter));
328
+ }
329
+ /**
330
+ * Get distinct values for the given column
331
+ */
332
+ static async distinct(column, filter = {}) {
333
+ return await this.query.distinct(this.collection, column, await this.prepareFilters(filter));
334
+ }
335
+ /**
336
+ * Prepare filters
337
+ */
338
+ static async prepareFilters(filters = {}) {
339
+ // if filter contains _id and it is a string, convert it to ObjectId
340
+ if (filters._id && typeof filters._id === "string") {
341
+ filters._id = new mongodb.ObjectId(filters._id);
342
+ }
343
+ const deleteStrategy = this.deleteStrategy;
344
+ if (deleteStrategy === types.ModelDeleteStrategy.softDelete &&
345
+ !filters.withDeleted) {
346
+ filters.deletedAt = null;
347
+ }
348
+ await this.events().trigger("fetching", this, filters);
349
+ await baseModel.BaseModel.events().trigger("fetching", this, filters);
350
+ return filters;
351
+ }
352
+ }exports.CrudModel=CrudModel;//# sourceMappingURL=crud-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-model.js","sources":["../../src/model/crud-model.ts"],"sourcesContent":[null],"names":["BaseModel","ModelDeleteStrategy","ObjectId"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from "../migration/migration-office";
2
+ export * from "./ModelAggregate";
3
+ export * from "./ModelSync";
4
+ export * from "./base-model";
5
+ export * from "./crud-model";
6
+ export * from "./joinable";
7
+ export * from "./master-mind";
8
+ export * from "./model";
9
+ export * from "./types";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { GenericObject } from "@mongez/reinforcements";
2
+ import type { LookupPipelineOptions, Pipeline } from "../aggregate";
3
+ import { Aggregate } from "../aggregate";
4
+ import type { Model } from "../model";
5
+ export type JoinableProxy = Joinable & Aggregate;
6
+ export type ReturnAsCallback = (data: any | any[]) => any;
7
+ export declare class Joinable {
8
+ model: typeof Model;
9
+ /**
10
+ * Lookup data
11
+ */
12
+ protected lookupData: LookupPipelineOptions;
13
+ /**
14
+ * Whether to return the data in model
15
+ */
16
+ isInModel: boolean;
17
+ /**
18
+ * Return data as callback
19
+ */
20
+ protected returnAsCallback: ReturnAsCallback;
21
+ /**
22
+ * Aggregate instance
23
+ */
24
+ query: Aggregate;
25
+ /**
26
+ * Constructor
27
+ * The Joined Model
28
+ */
29
+ constructor(model: typeof Model);
30
+ /**
31
+ * Set the return as callback
32
+ */
33
+ returnAs(callback: ReturnAsCallback): this;
34
+ /**
35
+ * Get return as callback
36
+ */
37
+ getReturnAs(): ReturnAsCallback;
38
+ /**
39
+ * Return data in model
40
+ */
41
+ inModel(inModel?: boolean): this;
42
+ /**
43
+ * Set the local field
44
+ */
45
+ localField(localField: string): this;
46
+ /**
47
+ * Get value from lookup data
48
+ */
49
+ get(key: keyof LookupPipelineOptions, defaultValue?: any): any;
50
+ /**
51
+ * Set the foreign field
52
+ */
53
+ foreignField(foreignField: string): this;
54
+ /**
55
+ * Set the as field
56
+ */
57
+ as(as: string): this;
58
+ /**
59
+ * Wether to return a single document or an array
60
+ */
61
+ single(single?: boolean): this;
62
+ /**
63
+ * Set the pipeline
64
+ */
65
+ addPipeline(pipeline: (Pipeline | GenericObject)[]): this;
66
+ /**
67
+ * Add let
68
+ */
69
+ let(letData: LookupPipelineOptions["let"]): this;
70
+ /**
71
+ * Set all lookup data
72
+ */
73
+ set(data: LookupPipelineOptions): this;
74
+ /**
75
+ * Parse the lookup data
76
+ */
77
+ parse(): Required<LookupPipelineOptions>;
78
+ /**
79
+ * Reset the pipelines
80
+ */
81
+ reset(): void;
82
+ /**
83
+ * Clone the current instance
84
+ */
85
+ clone(): Joinable;
86
+ }
87
+ //# sourceMappingURL=joinable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinable.d.ts","sourceRoot":"","sources":["../../src/model/joinable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC;AAE1D,qBAAa,QAAQ;IAuCO,KAAK,EAAE,OAAO,KAAK;IAtC7C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAMzC;IAEF;;OAEG;IACI,SAAS,UAAS;IAEzB;;OAEG;IACH,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAQ1C;IAEF;;OAEG;IACI,KAAK,EAAE,SAAS,CAAC;IAExB;;;OAGG;gBACuB,KAAK,EAAE,OAAO,KAAK;IAK7C;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,gBAAgB;IAM1C;;OAEG;IACI,WAAW;IAIlB;;OAEG;IACI,OAAO,CAAC,OAAO,UAAO;IAM7B;;OAEG;IACI,UAAU,CAAC,UAAU,EAAE,MAAM;IAMpC;;OAEG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,qBAAqB,EAAE,YAAY,CAAC,EAAE,GAAG;IAI/D;;OAEG;IACI,YAAY,CAAC,YAAY,EAAE,MAAM;IAMxC;;OAEG;IACI,EAAE,CAAC,EAAE,EAAE,MAAM;IAMpB;;OAEG;IACI,MAAM,CAAC,MAAM,UAAO;IAM3B;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,GAAG,aAAa,CAAC,EAAE;IAKzD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC;IAMhD;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,qBAAqB;IAUtC;;OAEG;IACI,KAAK;IAuBZ;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACI,KAAK;CAab"}
@@ -0,0 +1,155 @@
1
+ 'use strict';var pluralize=require('pluralize');require('@mongez/reinforcements'),require('@mongez/supportive-is'),require('@mongez/time-wizard');var aggregate=require('../aggregate/aggregate.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var pluralize__default=/*#__PURE__*/_interopDefault(pluralize);class Joinable {
2
+ model;
3
+ /**
4
+ * Lookup data
5
+ */
6
+ lookupData = {
7
+ from: "",
8
+ localField: "",
9
+ foreignField: "id",
10
+ as: "",
11
+ single: false,
12
+ };
13
+ /**
14
+ * Whether to return the data in model
15
+ */
16
+ isInModel = false;
17
+ /**
18
+ * Return data as callback
19
+ */
20
+ returnAsCallback = (data) => {
21
+ if (this.isInModel) {
22
+ return Array.isArray(data)
23
+ ? data.map(item => new this.model(item))
24
+ : new this.model(data);
25
+ }
26
+ return data;
27
+ };
28
+ /**
29
+ * Aggregate instance
30
+ */
31
+ query;
32
+ /**
33
+ * Constructor
34
+ * The Joined Model
35
+ */
36
+ constructor(model) {
37
+ this.model = model;
38
+ this.lookupData.from = model.collection;
39
+ this.query = new aggregate.Aggregate(model.collection);
40
+ }
41
+ /**
42
+ * Set the return as callback
43
+ */
44
+ returnAs(callback) {
45
+ this.returnAsCallback = callback;
46
+ return this;
47
+ }
48
+ /**
49
+ * Get return as callback
50
+ */
51
+ getReturnAs() {
52
+ return this.returnAsCallback;
53
+ }
54
+ /**
55
+ * Return data in model
56
+ */
57
+ inModel(inModel = true) {
58
+ this.isInModel = inModel;
59
+ return this;
60
+ }
61
+ /**
62
+ * Set the local field
63
+ */
64
+ localField(localField) {
65
+ this.lookupData.localField = localField;
66
+ return this;
67
+ }
68
+ /**
69
+ * Get value from lookup data
70
+ */
71
+ get(key, defaultValue) {
72
+ return this.lookupData[key] || defaultValue;
73
+ }
74
+ /**
75
+ * Set the foreign field
76
+ */
77
+ foreignField(foreignField) {
78
+ this.lookupData.foreignField = foreignField;
79
+ return this;
80
+ }
81
+ /**
82
+ * Set the as field
83
+ */
84
+ as(as) {
85
+ this.lookupData.as = as;
86
+ return this;
87
+ }
88
+ /**
89
+ * Wether to return a single document or an array
90
+ */
91
+ single(single = true) {
92
+ this.lookupData.single = single;
93
+ return this;
94
+ }
95
+ /**
96
+ * Set the pipeline
97
+ */
98
+ addPipeline(pipeline) {
99
+ this.query.addPipeline(pipeline);
100
+ return this;
101
+ }
102
+ /**
103
+ * Add let
104
+ */
105
+ let(letData) {
106
+ this.lookupData.let = letData;
107
+ return this;
108
+ }
109
+ /**
110
+ * Set all lookup data
111
+ */
112
+ set(data) {
113
+ if (!data.from) {
114
+ data.from = this.model.collection;
115
+ }
116
+ this.lookupData = data;
117
+ return this;
118
+ }
119
+ /**
120
+ * Parse the lookup data
121
+ */
122
+ parse() {
123
+ const name = this.lookupData.single
124
+ ? pluralize__default.default(this.model.collection, 1)
125
+ : pluralize__default.default(this.model.collection);
126
+ const lookupData = { ...this.lookupData };
127
+ if (!lookupData.as) {
128
+ lookupData.as = name;
129
+ }
130
+ if (!lookupData.localField) {
131
+ lookupData.localField = name + ".id";
132
+ }
133
+ lookupData.pipeline = this.query.parse();
134
+ // reset the pipelines
135
+ this.reset();
136
+ return lookupData;
137
+ }
138
+ /**
139
+ * Reset the pipelines
140
+ */
141
+ reset() {
142
+ this.query = new aggregate.Aggregate(this.model.collection);
143
+ }
144
+ /**
145
+ * Clone the current instance
146
+ */
147
+ clone() {
148
+ const clone = new Joinable(this.model);
149
+ clone.set(this.lookupData);
150
+ clone.query.addPipelines(this.query.getPipelines());
151
+ clone.isInModel = this.isInModel;
152
+ clone.returnAsCallback = this.returnAsCallback.bind(clone);
153
+ return clone;
154
+ }
155
+ }exports.Joinable=Joinable;//# sourceMappingURL=joinable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinable.js","sources":["../../src/model/joinable.ts"],"sourcesContent":[null],"names":["Aggregate","pluralize"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type ClientSession } from "mongodb";
2
+ import { type Database } from "../database";
3
+ export declare class MasterMind {
4
+ /**
5
+ * Master Mind Collection name
6
+ */
7
+ collection: string;
8
+ /**
9
+ * Connection instance
10
+ */
11
+ database: Database;
12
+ /**
13
+ * Get last id of the given collection
14
+ */
15
+ getLastId(collection: string): Promise<number>;
16
+ /**
17
+ * Set last id for the given collection
18
+ */
19
+ setLastId(collection: string, id: number, { session }?: {
20
+ session?: ClientSession;
21
+ }): Promise<void>;
22
+ /**
23
+ * Rename the given collection to the new one to keep the last id updated and not to be reset
24
+ */
25
+ renameCollection(oldCollection: string, newCollection: string, { session }?: {
26
+ session?: ClientSession;
27
+ }): Promise<void>;
28
+ /**
29
+ * Get current active session from database object
30
+ */
31
+ getCurrentSession(): ClientSession;
32
+ /**
33
+ * Update all collections by the last id of each collection in current database
34
+ */
35
+ updateAllLastId(): Promise<void>;
36
+ /**
37
+ * Generate next id for the given collection name
38
+ */
39
+ generateNextId(collection: string, incrementIdBy?: number, initialId?: number, { session }?: {
40
+ session?: ClientSession;
41
+ }): Promise<number>;
42
+ }
43
+ export declare const masterMind: MasterMind;
44
+ //# sourceMappingURL=master-mind.d.ts.map