dobo 2.39.0 → 2.39.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.
Files changed (160) hide show
  1. package/.bootorder +0 -0
  2. package/.github/FUNDING.yml +0 -0
  3. package/.github/workflows/repo-lockdown.yml +0 -0
  4. package/.jsdoc.conf.json +0 -0
  5. package/LICENSE +0 -0
  6. package/README.md +0 -0
  7. package/docs/Dobo.html +0 -0
  8. package/docs/DoboAction.html +0 -0
  9. package/docs/DoboAdapter.html +0 -0
  10. package/docs/DoboConnection.html +0 -0
  11. package/docs/DoboFeature.html +0 -0
  12. package/docs/DoboModel.html +0 -0
  13. package/docs/data/search.json +0 -0
  14. package/docs/extend_bajo_hook-docs.js.html +0 -0
  15. package/docs/external-Tools.html +0 -0
  16. package/docs/fonts/Inconsolata-Regular.ttf +0 -0
  17. package/docs/fonts/OpenSans-Regular.ttf +0 -0
  18. package/docs/fonts/WorkSans-Bold.ttf +0 -0
  19. package/docs/global.html +0 -0
  20. package/docs/index.html +0 -0
  21. package/docs/index.js.html +0 -0
  22. package/docs/lib_factory_action.js.html +0 -0
  23. package/docs/lib_factory_adapter.js.html +0 -0
  24. package/docs/lib_factory_connection.js.html +0 -0
  25. package/docs/lib_factory_feature.js.html +0 -0
  26. package/docs/lib_factory_model.js.html +0 -0
  27. package/docs/lib_factory_model_build.js.html +0 -0
  28. package/docs/lib_factory_model_clear-record.js.html +0 -0
  29. package/docs/lib_factory_model_count-record.js.html +0 -0
  30. package/docs/lib_factory_model_create-record.js.html +0 -0
  31. package/docs/lib_factory_model_drop.js.html +0 -0
  32. package/docs/lib_factory_model_exists.js.html +0 -0
  33. package/docs/lib_factory_model_find-all-record.js.html +0 -0
  34. package/docs/lib_factory_model_find-one-record.js.html +0 -0
  35. package/docs/lib_factory_model_find-record.js.html +0 -0
  36. package/docs/lib_factory_model_get-record.js.html +0 -0
  37. package/docs/lib_factory_model_helper.js.html +0 -0
  38. package/docs/lib_factory_model_remove-record.js.html +0 -0
  39. package/docs/lib_factory_model_sanitize-body.js.html +0 -0
  40. package/docs/lib_factory_model_sanitize-fixture.js.html +0 -0
  41. package/docs/lib_factory_model_sanitize-record.js.html +0 -0
  42. package/docs/lib_factory_model_update-record.js.html +0 -0
  43. package/docs/lib_factory_model_upsert-record.js.html +0 -0
  44. package/docs/lib_factory_model_validate.js.html +0 -0
  45. package/docs/lib_helper.js.html +0 -0
  46. package/docs/module-Helper.html +0 -0
  47. package/docs/module-Helper_Model.html +0 -0
  48. package/docs/module-Hook.html +0 -0
  49. package/docs/scripts/core.js +0 -0
  50. package/docs/scripts/core.min.js +0 -0
  51. package/docs/scripts/resize.js +0 -0
  52. package/docs/scripts/search.js +0 -0
  53. package/docs/scripts/search.min.js +5 -5
  54. package/docs/scripts/third-party/Apache-License-2.0.txt +0 -0
  55. package/docs/scripts/third-party/fuse.js +0 -0
  56. package/docs/scripts/third-party/hljs-line-num-original.js +0 -0
  57. package/docs/scripts/third-party/hljs-line-num.js +0 -0
  58. package/docs/scripts/third-party/hljs-original.js +0 -0
  59. package/docs/scripts/third-party/hljs.js +0 -0
  60. package/docs/scripts/third-party/popper.js +0 -0
  61. package/docs/scripts/third-party/tippy.js +0 -0
  62. package/docs/scripts/third-party/tocbot.js +0 -0
  63. package/docs/scripts/third-party/tocbot.min.js +0 -0
  64. package/docs/static/bitcoin.jpeg +0 -0
  65. package/docs/static/home.md +0 -0
  66. package/docs/static/logo-ecosystem.png +0 -0
  67. package/docs/static/logo.png +0 -0
  68. package/docs/styles/clean-jsdoc-theme-base.css +0 -0
  69. package/docs/styles/clean-jsdoc-theme-dark.css +0 -0
  70. package/docs/styles/clean-jsdoc-theme-light.css +0 -0
  71. package/docs/styles/clean-jsdoc-theme-scrollbar.css +0 -0
  72. package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +0 -0
  73. package/docs/styles/clean-jsdoc-theme.min.css +0 -0
  74. package/extend/bajo/hook.js +236 -236
  75. package/extend/bajo/intl/en-US.json +0 -0
  76. package/extend/bajo/intl/id.json +0 -0
  77. package/extend/bajoCli/applet/aggregate.js +0 -0
  78. package/extend/bajoCli/applet/clear-record.js +0 -0
  79. package/extend/bajoCli/applet/connection.js +0 -0
  80. package/extend/bajoCli/applet/count-record.js +0 -0
  81. package/extend/bajoCli/applet/create-record.js +0 -0
  82. package/extend/bajoCli/applet/find-record.js +0 -0
  83. package/extend/bajoCli/applet/get-record.js +0 -0
  84. package/extend/bajoCli/applet/histogram.js +0 -0
  85. package/extend/bajoCli/applet/lib/post-process.js +0 -0
  86. package/extend/bajoCli/applet/model.js +0 -0
  87. package/extend/bajoCli/applet/rebuild-model.js +0 -0
  88. package/extend/bajoCli/applet/remove-record.js +0 -0
  89. package/extend/bajoCli/applet/update-record.js +0 -0
  90. package/extend/bajoCli/applet.js +0 -0
  91. package/extend/dobo/adapter/memory.js +175 -175
  92. package/extend/dobo/feature/created-at.js +0 -0
  93. package/extend/dobo/feature/dt.js +0 -0
  94. package/extend/dobo/feature/image.js +0 -0
  95. package/extend/dobo/feature/immutable.js +0 -0
  96. package/extend/dobo/feature/removed-at.js +0 -0
  97. package/extend/dobo/feature/unique.js +0 -0
  98. package/extend/dobo/feature/updated-at.js +0 -0
  99. package/extend/waibuMpa/route/attachment/@model/@id/@field/@file.js +0 -0
  100. package/extend/waibuStatic/virtual.json +0 -0
  101. package/index.js +0 -0
  102. package/lib/factory/action.js +287 -287
  103. package/lib/factory/adapter.js +1055 -1055
  104. package/lib/factory/connection.js +109 -109
  105. package/lib/factory/feature.js +52 -52
  106. package/lib/factory/model/aggregate.js +23 -23
  107. package/lib/factory/model/build.js +25 -25
  108. package/lib/factory/model/bulk-create-record.js +36 -36
  109. package/lib/factory/model/clear-record.js +30 -30
  110. package/lib/factory/model/count-record.js +42 -42
  111. package/lib/factory/model/create-attachment.js +36 -36
  112. package/lib/factory/model/create-record.js +49 -49
  113. package/lib/factory/model/drop.js +26 -26
  114. package/lib/factory/model/exists.js +26 -26
  115. package/lib/factory/model/find-all-record.js +112 -112
  116. package/lib/factory/model/find-attachment.js +28 -28
  117. package/lib/factory/model/find-one-record.js +38 -38
  118. package/lib/factory/model/find-record.js +82 -82
  119. package/lib/factory/model/get-attachment.js +15 -15
  120. package/lib/factory/model/get-record.js +52 -52
  121. package/lib/factory/model/helper.js +578 -576
  122. package/lib/factory/model/histogram.js +23 -23
  123. package/lib/factory/model/list-attachment.js +40 -40
  124. package/lib/factory/model/load-fixtures.js +63 -63
  125. package/lib/factory/model/remove-attachment.js +24 -24
  126. package/lib/factory/model/remove-record.js +44 -44
  127. package/lib/factory/model/sanitize-body.js +57 -57
  128. package/lib/factory/model/sanitize-fixture.js +56 -56
  129. package/lib/factory/model/sanitize-record.js +80 -80
  130. package/lib/factory/model/transaction.js +15 -15
  131. package/lib/factory/model/update-attachment.js +9 -9
  132. package/lib/factory/model/update-record.js +58 -58
  133. package/lib/factory/model/upsert-record.js +71 -71
  134. package/lib/factory/model/validate.js +0 -0
  135. package/lib/factory/model.js +503 -503
  136. package/lib/helper.js +463 -463
  137. package/package.json +1 -1
  138. package/test/e2e/_run.js +12 -12
  139. package/test/e2e/e2e-factory-process.test.js +25 -25
  140. package/test/e2e/e2e-model-adapter-process.test.js +52 -52
  141. package/test/integration/aspect-01-start-connections.test.js +33 -33
  142. package/test/integration/aspect-02-query-regex.test.js +34 -34
  143. package/test/integration/aspect-03-model-adapter-flow.test.js +88 -88
  144. package/test/unit/_stub.js +244 -244
  145. package/test/unit/dobo-action.test.js +58 -58
  146. package/test/unit/dobo-connection.test.js +37 -37
  147. package/test/unit/dobo-core.test.js +136 -136
  148. package/test/unit/dobo-feature.test.js +25 -25
  149. package/test/unit/dobo-model.test.js +115 -115
  150. package/test/unit/helper-sanitize-all.test.js +40 -40
  151. package/test/unit/helper-sanitize-ref.test.js +64 -64
  152. package/wiki/APPLETS.md +0 -0
  153. package/wiki/CHANGES.md +481 -473
  154. package/wiki/CONFIG.md +0 -0
  155. package/wiki/CONTRIBUTING.md +0 -0
  156. package/wiki/DEV-GUIDE.md +0 -0
  157. package/wiki/ECOSYSTEM.md +0 -0
  158. package/wiki/GETTING-STARTED.md +0 -0
  159. package/wiki/QUERY-LANGUAGE.md +0 -0
  160. package/wiki/USER-GUIDE.md +0 -0
package/wiki/CHANGES.md CHANGED
@@ -1,474 +1,482 @@
1
- # Changes
2
-
3
- ## 2026-08-24
4
-
5
- - [2.39.0] Now use the new `app.lib.startInterval()`
6
-
7
- ## 2026-08-18
8
-
9
- - [2.38.0] Change `createAggregate()` to `aggregate()`
10
- - [2.38.0] Change `createHistogram()` to `histogram()`
11
-
12
- ## 2026-08-13
13
-
14
- - [2.37.1] Bug fix in `adapter.js` to pass options when calling `getRecord()`
15
- - [2.37.1] Bug fix in `model._simpleLookup()` to return `null` if query string is not right
16
- - [2.37.1] Bug fix in `model.sanitizeFixture()` to not sanitize value that is `null` or `undefined`
17
- - [2.37.2] Bug fix in `reviveRegexInJson()` when handling with regex
18
-
19
- ## 2026-08-06
20
-
21
- - [2.37.0] Update `memory.connect()` to use the new `app.lib.setInterval()`
22
-
23
- ## 2026-08-03
24
-
25
- - [2.36.2] Bug fix in `model.rebuildModel()`
26
-
27
- ## 2026-07-31
28
-
29
- - [2.36.0] Add test suite
30
- - [2.36.0] Add parameter `options` to `model.sanitizeRecord()`
31
- - [2.36.1] Bug fix in `model.exists()`
32
-
33
- ## 2026-07-29
34
-
35
- - [2.35.0] Add parameter `options` to `adapter.sanitizeRecord()` to allow passing additional options for sanitization
36
- - [2.35.0] Change `options.i18n` to `options.intl` in `adapter.sanitizeRecord()` for consistency with other methods
37
-
38
- ## 2026-07-28
39
-
40
- - [2.34.1] Bug fix in `adapter.sanitizeRecord()`
41
-
42
- ## 2026-07-26
43
-
44
- - [2.34.0] Add `options.i18n` to `model.sanitizeRecord()`
45
-
46
- ## 2026-07-24
47
-
48
- - [2.33.0] Change `selfBind` to `bindThis`
49
-
50
- ## 2026-07-12
51
-
52
- - [2.32.0] Change `driver` to `adapter`
53
- - [2.32.0] Change `_util.js` to `helper.js`
54
- - [2.32.0] Update documentations
55
-
56
- ## 2026-06-29
57
-
58
- - [2.31.0] Add `dobo.driver:{before|after}Any`
59
-
60
- ## 2026-06-24
61
-
62
- - [2.30.5] Bug fix in `model.sanitizeBody()`
63
- - [2.30.5] Bug fix in `model.sanitizeRecord()`
64
- - [2.30.6] Bug fix in `driver.sanitizeRecord()`
65
- - [2.30.7] Bug fix in `util.getRefs()`
66
- - [2.30.7] Bug fix in `model.sanitizeBody()`
67
- - [2.30.7] Bug fix in `model.sanitizeRecord()`
68
-
69
- ## 2026-06-16
70
-
71
- - [2.30.4] Bug fix in `model.sanitizeBody()`
72
- - [2.30.4] Bug fix in `model._prepBodyForCreate()`
73
-
74
- ## 2026-06-13
75
-
76
- - [2.30.2] Bug fix in `model.findAllRecord()`
77
- - [2.30.2] Bug fix in `memory.findAllRecord()`
78
- - [2.30.2] Bug fix in `collect-models.js`
79
- - [2.30.3] Bug fix in `memory.findRecord()`
80
-
81
- ## 2026-06-12
82
-
83
- - [2.30.0] Necessary updates to `bajo@2.18.0` specs
84
- - [2.30.0] Add `sanitizeByType()`
85
- - [2.30.0] Add `error._abortAction` to abort an action in driver level
86
- - [2.30.0] Refactor `model.sanitizeBody()` to use shared sanitizing function
87
- - [2.30.1] Bug fix in `model.sanitizeBody()`
88
-
89
- ## 2026-06-11
90
-
91
- - [2.29.1] Bug fix in `model.sanitizeBody()`
92
- - [2.29.2] Bug fix in `model.sanitizeBody()`
93
-
94
- ## 2026-06-10
95
-
96
- - [2.29.0] Feature `dobo:immutable` now using array instead of boolean
97
- - [2.29.0] Add `model.sanitizeFixture()`
98
- - [2.29.0] Options `noMagic` no without touching `noModelHook`
99
- - [2.29.0] Add `array` validator type
100
-
101
- ## 2026-06-03
102
-
103
- - [2.28.0] Property `values` can now accept a function that will be called dynamically upon used
104
- - [2.28.0] `_util.buildPropValues()` now become a new model method
105
- - [2.28.0] Bug fix in `model.sanitizeRecord()`
106
- - [2.28.0] Bug fix in `model.validate()`
107
-
108
- ## 2026-05-30
109
-
110
- - [2.27.0] Bug fix in `model.transaction()`
111
- - [2.27.0] Add `model:[before|after]RecordValidation` model hooks
112
- - [2.27.0] Bug fix in `model.countRecord()`
113
- - [2.27.0] Bug fix in `model.loadFixtures()`
114
- - [2.27.1] Bug fix in `model.sanitizeRecord()`
115
- - [2.27.2] Bug fix in `collect-models.js`
116
-
117
- ## 2026-05-29
118
-
119
- - [2.26.1] Bug fix in `model.createRecord()`
120
- - [2.26.1] Bug fix in `model.updateRecord()`
121
- - [2.26.1] Bug fix in `model.upsertRecord()`
122
- - [2.26.1] Bug fix in `model.removeRecord()`
123
- - [2.26.4] Bug fix in `model.listAttachment()`
124
-
125
- ## 2026-05-26
126
-
127
- - [2.26.0] Add loading multiple model schema as in one `model.js` file
128
- - [2.26.0] Remove caching feature of model schema
129
- - [2.26.0] Change driver hook name with this syntax: `dobo.driver:<action>`
130
- - [2.26.1] Bug fix in `memory.js`
131
- - [2.26.2] Bug fix in `driver.js`
132
-
133
- ## 2026-05-22
134
-
135
- - [2.25.0] Add `array` & `object` validator handling
136
- - [2.25.0] Change `interSite` definition to `xSite`
137
- - [2.25.0] Add `model.getNonVirtualProperties()`
138
- - [2.25.0] Bug fix in `model.loadFixtures()`
139
- - [2.25.0] Handle `array` validation schema
140
-
141
- ## 2026-05-16
142
-
143
- - [2.24.0] Change `dobo:immutable` feature, field no longer hidden
144
- - [2.24.0] Add `dobo:[before|after]driver<Action>` hook
145
- - [2.24.0] Add `dobo.<modelName>:[before|after]driver<Action>` hook
146
- - [2.24.0] Change `model._simpleLookup()`
147
- - [2.24.0] Remove `dobo:[before|after]Build[Query|Search]` hook
148
- - [2.24.0] Change `model.loadFixtures()`
149
- - [2.24.0] Bugfix in `model.sanitizeBody()`
150
- - [2.24.0] Add `dobo:afterTransaction` hook
151
- - [2.24.0] Add `dobo.<modelName>:afterTransaction` hook
152
-
153
- ## 2026-05-11
154
-
155
- - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:unique` feature
156
- - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:updatedAt` feature
157
- - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:unique` feature
158
- - [2.23.0] Add `connection.initdriver()`
159
- - [2.23.0] Move `model.file` in model definition to `model.options.file`
160
- - [2.23.0] Move `model.attachment` in model definition to `model.options.attachment`
161
- - [2.23.0] Add `model.buildStart()` and `model.buildEnd()` in model definition
162
- - [2.23.0] Add `null` driver
163
- - [2.23.0] Add `model.syncIdField()`
164
- - [2.23.0] Rename method to `model.bulkCreateRecord` instead `bulkCreateRecords`. The later name now serve only as alias
165
- - [2.23.0] Remove `getSingleRef()` and `getMultiRefs()`, use `getRefs()` instead
166
- - [2.23.0] Add reference support for `array` column type
167
- - [2.23.0] Bug fix in `model.findAllRecord()`, now use correctly hook names
168
- - [2.23.0] Bug fix in `model.sanitizeBody()`
169
- - [2.23.0] Bug fix in `model.sanitizeRecord()`
170
-
171
- ## 2026-05-03
172
-
173
- - [2.22.1] Bug fix in `dobo:image` feature
174
-
175
- ## 2026-05-02
176
-
177
- - [2.22.0] Add auto thumbnail creation when image attachment is uploaded
178
- - [2.22.0] Add feature to get the thumbnail instead of attachment file in attachment route
179
- - [2.22.0] Add `dobo:image` feature
180
- - [2.22.0] Bug fix in `model.createRecord()`
181
- - [2.22.0] Bug fix in `model.updateRecord()`
182
- - [2.22.0] Bug fix in `model.upsertRecord()`
183
- - [2.22.0] Bug fix in `model.removeRecord()`
184
- - [2.22.0] Remove attachment now also remove corresponding thumbnails
185
-
186
- ## 2026-04-28
187
-
188
- - [2.21.1] Bug fix in `collect-models.js`
189
- - [2.21.1] Bug fix in `driver._updateRecord()`
190
- - [2.21.1] Bug fix in `util.getMultiRef()`
191
- - [2.21.1] Bug fix in setting references
192
- - [2.21.1] Bug fix in `model.sanitizeRecord()`
193
-
194
- ## 2026-04-25
195
-
196
- - [2.21.0] Change `options.formatValue` to `options.fmt`
197
- - [2.21.0] Remove `options.retainOriginalValue` since it is not needed anymore
198
- - [2.21.0] Remove `formatValue` altogether
199
- - [2.21.0] Remove `record._orig`, in exchange switch the formatted value to `record._fmt`
200
- - [2.21.0] Add `property.virtual` to set property is a virtual/calculated property
201
- - [2.21.0] Add necessary safe guards for virtual property
202
- - [2.21.0] Add `model.getProperties()`
203
- - [2.21.0] Add `model.getIndexes()`
204
- - [2.21.0] Add `model.getVirtualPropertties()`
205
- - [2.21.0] Activate transaction on `loadFixtures()`
206
-
207
- ## 2026-04-23
208
-
209
- - [2.20.1] Bug fix in `collect-models.js`, now with deep merge in advance
210
-
211
- ## 2026-04-21
212
-
213
- - [2.19.1] Bug fix in `collect-models.js`, now values are sanitized with `parseObject()`
214
- - [2.19.1] Bug fix in `options.dataOnly` on all model methods
215
- - [2.19.1] Add `options.noMagic`
216
- - [2.20.0] Revert back to NOT using hooks for caching
217
-
218
- ## 2026-04-19
219
-
220
- - [2.19.0] Add `queryAny()` for query using model's scanables fields
221
- - [2.19.0] Bug fix in `reviveRegexInJson()`
222
- - [2.19.0] Bug fix in query sanitizing especially for regex existance
223
- - [2.19.0] Remove `replaceIdInQuerySearch()` in `_util.js` as it isn't needed anymore
224
-
225
- ## 2026-04-18
226
-
227
- - [2.18.2] Bug fix in `config` object
228
- - [2.18.2] Bug fix in `getDefaultValues`
229
- - [2.18.2] Bug fix in `sanitizeProp()` in `collect-models.js`
230
- - [2.18.2] Bug fix in `sanitizeRecord()` for prop with `format` set to `false`
231
-
232
- ## 2026-04-17
233
-
234
- - [2.18.1] Bug fix in `model.createAttachment()`
235
- - [2.18.1] Bug fix in `model.sanitizeBody()`
236
- - [2.18.1] Bug fix in `model.sanitizeRecord()`
237
-
238
- ## 2026-04-16
239
-
240
- - [2.18.0] Add parameter options to `sanitizeObject()`
241
- - [2.18.0] Rewrite `dobo:dt` feature to support customization
242
- - [2.18.0] Bug fix in `model.createRecord()`
243
- - [2.18.0] Changes in `model.sanitizeBody()` to throw error with payload details
244
- - [2.18.0] Changes in `model.sanitizeRecord()` to support `options.retainOriginalValue`
245
- - [2.18.0] Bug fix in `model.updateRecord()`
246
- - [2.18.0] Bug fix in `model.upsertRecord()`
247
-
248
- ## 2026-04-13
249
-
250
- - [2.17.0] Add `{ strict }` as parameter to `sanitizeObject()`
251
-
252
- ## 2026-04-11
253
-
254
- - [2.16.0] Add `format` as new model's property key
255
- - [2.16.0] Rewrite `getDefaultValues()` to base on `req.getSetting()`
256
- - [2.16.0] All inter site admins are now exempts from `immutable` row
257
- - [2.16.0] Bug fix in `collect-models.js`
258
- - [2.16.0] Bug fix in `getRefs()` and `getRefs()`
259
- - [2.16.0] Add feature to return formatted row(s) with `options.formatValue`
260
- - [2.16.0] If row is formatted, add feature to save original row in `_orig` with `options.retainOriginalValue`
261
-
262
- ## 2026-04-07
263
-
264
- - [2.15.0] Add `parseNql()`
265
- - [2.15.0] Add `parseQuery()`
266
- - [2.15.0] Add `replaceRegexInJson()`
267
- - [2.15.0] Add `reviveRegexInJson()`
268
- - [2.15.0] Change all `opts.fieldName` to `opts.field` in features
269
- - [2.15.0] Add `ref.searchField` in model reference
270
- - [2.15.0] Add `ref.labelField` in model reference
271
- - [2.15.0] Add `ref.valueField` in model reference
272
- - [2.15.0] change `ref.propName` to `ref.field` in model reference
273
-
274
- ## 2026-04-02
275
-
276
- - [2.14.1] Bug fix in `hardCap`
277
- - [2.14.1] `warnings` now can be turned off through `config` or site settings
278
-
279
- ## 2026-04-01
280
-
281
- - [2.14.0] Add `between` as custom query, since it doesn't exists in NQL
282
-
283
- ## 2026-03-30
284
-
285
- - [2.12.0] Add `.bootorder` level 10
286
- - [2.12.0] Bug fix in `model._simpleLookup()`
287
- - [2.12.0] Add model name in validation error's payload
288
- - [2.13.0] Add `hardCap` support
289
-
290
- ## 2026-03-26
291
-
292
- - [2.11.4] Exceptions thrown in `getRefs()` && `getRefs()` will be catched and are ignored
293
-
294
- ## 2026-03-25
295
-
296
- - [2.11.2] Bug fix in result sets cache
297
- - [2.11.3] Bug fix in cache handling if `bajoCache` isn't loaded
298
-
299
- ## 2026-03-17
300
-
301
- - [2.11.1] Bug fix on `model.validate()`: if `partial` is true, set `fields` from `body` keys
302
-
303
- ## 2026-03-16
304
-
305
- - [2.11.0] Attachment can now listed by its type (`image`, `video`, etc)
306
- - [2.11.0] Add `_last` to autodetect last item in list in `@id.js`
307
-
308
- ## 2026-03-12
309
-
310
- - [2.10.1] Bug fix in `model._simpleLookup()` should return `null` if query results empty value
311
-
312
- ## 2026-03-11
313
-
314
- - [2.10.0] Add `immutable` and `feature` to the list of allowed property keys
315
- - [2.10.0] Set `property.feature` to the name of feature name if property is build using `feature`
316
- - [2.10.0] Add `model._simpleLookup()`
317
- - [2.10.0] Refactor `model.loadFixtures()`
318
- - [2.10.0] Add `property.immutable` for property that can't be updated
319
-
320
- ## 2026-03-09
321
-
322
- - [2.9.3] Bug fix in `model.findAllRecord`
323
-
324
- ## 2026-03-07
325
-
326
- - [2.9.2] Bug fix in `model.loadFixtures()`
327
- - [2.9.2] Bug fix in `collect-connections.js`
328
-
329
- ## 2026-03-06
330
-
331
- - [2.9.1] Bug fix in `model.sanitizeBody()`
332
-
333
- ## 2026-03-05
334
-
335
- - [2.9.0] Add transaction support with `model.transaction()` wrapper
336
- - [2.9.0] Add property `driver.support.transaction` to indicate a driver is fully support transaction or not
337
- - [2.9.0] Add property `connection.options.connName`
338
-
339
- ## 2026-02-25
340
-
341
- - [2.8.3] Bug fix in attachment route
342
-
343
- ## 2026-02-24
344
-
345
- - [2.8.2] Bug fix in field type `textType`
346
- - [2.8.2] Bug fix in `collect-models.js` when empty model is returned
347
-
348
- ## 2026-02-23
349
-
350
- - [2.8.1] Bug fix in `memory._getCursor()`
351
- - [2.8.1] Bug fix in `model.upsertRecord()`
352
-
353
- ## 2026-02-22
354
-
355
- - [2.8.0] Add `warnings` to response object
356
- - [2.8.0] Throw error if `page` above the allowed threshold
357
-
358
- ## 2026-02-20
359
-
360
- - [2.7.0] Add `prop.values` support
361
- - [2.7.0] Add `prop.rulesMsg` support
362
- - [2.7.0] Change `buildFromDbModel()` on validation to async function
363
-
364
- ## 2026-02-17
365
-
366
- - [2.6.5] Bug fix in model extender
367
- - [2.6.5] Bug fix in trace logging
368
- - [2.6.6] Bug fix in extender indexes
369
-
370
- ## 2026-02-05
371
-
372
- - [2.6.4] Bug fix in driver options, `noCheckUnique` must be perform in `create`, `update` and `upsert`
373
-
374
- ## 2026-02-03
375
-
376
- - [2.6.3] Bug fix in `model.sanitizeRecord()`
377
-
378
- ## 2026-02-02
379
-
380
- - [2.6.2] Bug fix in query & search resolver: Do not remove old query/search, should always copied to oldQuery/oldSearch
381
-
382
- ## 2026-02-01
383
-
384
- - [2.6.0] Add `model.scanables` for fields that can participate in table scans if necessary
385
- - [2.6.0] Add `driver.support.search` for driver's fulltext search support
386
- - [2.6.0] Add model hooks `before/afterBuildQuery/Search`
387
-
388
- ## 2026-01-30
389
-
390
- - [2.5.0] Add feature to push custom `options._data`. If provided, this will be used instead of auto generated one.
391
- - [2.5.0] Remove `silent` in `options` object
392
- - [2.5.1] driver now support `this.useUtc` for database that store values in UTC string
393
- - [2.5.1] Bug fix in `driver.sanitizeRecord()`
394
-
395
- ## 2026-01-29
396
-
397
- - [2.4.0] Add `bulkCreateRecord()` on model & driver
398
- - [2.4.0] Add `execModelHook()`
399
- - [2.4.0] Bug fix in models collection
400
- - [2.4.0] Add `DoboAction` to the `app.baseClass`
401
- - [2.4.0] `findAllRecord()` can't be called as action
402
-
403
- ## 2026-01-26
404
-
405
- - [2.3.1] Bug fix if reference model isn't loaded only yield warning
406
- - [2.3.1] Bug fix in fetching multi references
407
-
408
- ## 2026-01-24
409
-
410
- - [2.3.0] Add `dynHooks` to model's options
411
- - [2.3.0] Add `dobo:unique` feature
412
- - [2.3.0] Add `noWait` handler for model's hook
413
-
414
- ## 2026-01-21
415
-
416
- - [2.2.5] Add `proto` to `connection.options`
417
-
418
- ## 2026-01-19
419
-
420
- - [2.2.4] Bug fix in route `dobo:/attachment/...`
421
-
422
- ## 2026-01-18
423
-
424
- - [2.2.2] Revert back to `mingo@6.5.1` because of bugs in `skip` operation
425
- - [2.2.3] Bug fix in driver's `sanitizeBody()`
426
-
427
- ## 2026-01-16
428
-
429
- - [2.2.1] Bug fix in model references
430
-
431
- ## 2026-01-11
432
-
433
- - [2.2.0] Any driver that support memory DB can now declare itself as in-memory DB and be handled as such
434
- - [2.2.0] `driver.init()` is removed, and driver should solely use `driver.createClient()` instead
435
- - [2.2.0] Bug fixes
436
-
437
- ## 2026-01-07
438
-
439
- - [2.2.0] Add `immutable` feature
440
- - [2.2.0] Lots of bug fixes
441
-
442
- ## 2025-12-28
443
-
444
- - [2.2.0] Add `calcAggregate()` & `calcHistogram()` for array of data objects
445
- - [2.2.0] Implement `createAggregate()` & `createHistogram()` to the built-in memory database driver
446
- - [2.2.0] If no `default` connection found, all models automatically bound to `memory` connection
447
-
448
- ## 2025-12-22
449
-
450
- - [2.2.0] Introduce Action class that enables you to work on models with chainable methods
451
- - [2.2.0] All base class definitions moved now to `this.baseClass` instead of `this.lib`
452
-
453
- ## 2025-12-16
454
-
455
- - [2.2.0] Upgrade mingo to 7.1.0
456
-
457
- ## 2025-12-14
458
-
459
- - [2.2.0] Drop Model class, replace as Model class
460
-
461
- ## 2025-12-10
462
-
463
- - [2.2.0] Rewrite the whole thing into class based modules: Connection, driver, Feature, Model. Dobo will solely serve as DB Manager in the future
464
-
465
- ## 2025-12-05
466
- - [2.2.0] Connection now saved in `this.connections` as `Connection` instance
467
-
468
- ## 2025-12-03
469
-
470
- - [2.1.0] Upgrade joi to 18.0.2
471
- - [2.1.0] Upgrade mingo to 7.0.2
472
- - [2.1.0] Feature now saved in `this.features` as `Feature` instance
473
- - [2.1.0] driver now saved in `this.drivers` as `driver` instance
1
+ # Changes
2
+
3
+ ## 2026-10-17
4
+
5
+ - [2.39.2] Bug fix in `helper.getRefs()`
6
+
7
+ ## 2026-09-06
8
+
9
+ - [2.39.1] Bug fix in `helper.getRefs()`
10
+
11
+ ## 2026-08-24
12
+
13
+ - [2.39.0] Now use the new `app.lib.startInterval()`
14
+
15
+ ## 2026-08-18
16
+
17
+ - [2.38.0] Change `createAggregate()` to `aggregate()`
18
+ - [2.38.0] Change `createHistogram()` to `histogram()`
19
+
20
+ ## 2026-08-13
21
+
22
+ - [2.37.1] Bug fix in `adapter.js` to pass options when calling `getRecord()`
23
+ - [2.37.1] Bug fix in `model._simpleLookup()` to return `null` if query string is not right
24
+ - [2.37.1] Bug fix in `model.sanitizeFixture()` to not sanitize value that is `null` or `undefined`
25
+ - [2.37.2] Bug fix in `reviveRegexInJson()` when handling with regex
26
+
27
+ ## 2026-08-06
28
+
29
+ - [2.37.0] Update `memory.connect()` to use the new `app.lib.setInterval()`
30
+
31
+ ## 2026-08-03
32
+
33
+ - [2.36.2] Bug fix in `model.rebuildModel()`
34
+
35
+ ## 2026-07-31
36
+
37
+ - [2.36.0] Add test suite
38
+ - [2.36.0] Add parameter `options` to `model.sanitizeRecord()`
39
+ - [2.36.1] Bug fix in `model.exists()`
40
+
41
+ ## 2026-07-29
42
+
43
+ - [2.35.0] Add parameter `options` to `adapter.sanitizeRecord()` to allow passing additional options for sanitization
44
+ - [2.35.0] Change `options.i18n` to `options.intl` in `adapter.sanitizeRecord()` for consistency with other methods
45
+
46
+ ## 2026-07-28
47
+
48
+ - [2.34.1] Bug fix in `adapter.sanitizeRecord()`
49
+
50
+ ## 2026-07-26
51
+
52
+ - [2.34.0] Add `options.i18n` to `model.sanitizeRecord()`
53
+
54
+ ## 2026-07-24
55
+
56
+ - [2.33.0] Change `selfBind` to `bindThis`
57
+
58
+ ## 2026-07-12
59
+
60
+ - [2.32.0] Change `driver` to `adapter`
61
+ - [2.32.0] Change `_util.js` to `helper.js`
62
+ - [2.32.0] Update documentations
63
+
64
+ ## 2026-06-29
65
+
66
+ - [2.31.0] Add `dobo.driver:{before|after}Any`
67
+
68
+ ## 2026-06-24
69
+
70
+ - [2.30.5] Bug fix in `model.sanitizeBody()`
71
+ - [2.30.5] Bug fix in `model.sanitizeRecord()`
72
+ - [2.30.6] Bug fix in `driver.sanitizeRecord()`
73
+ - [2.30.7] Bug fix in `util.getRefs()`
74
+ - [2.30.7] Bug fix in `model.sanitizeBody()`
75
+ - [2.30.7] Bug fix in `model.sanitizeRecord()`
76
+
77
+ ## 2026-06-16
78
+
79
+ - [2.30.4] Bug fix in `model.sanitizeBody()`
80
+ - [2.30.4] Bug fix in `model._prepBodyForCreate()`
81
+
82
+ ## 2026-06-13
83
+
84
+ - [2.30.2] Bug fix in `model.findAllRecord()`
85
+ - [2.30.2] Bug fix in `memory.findAllRecord()`
86
+ - [2.30.2] Bug fix in `collect-models.js`
87
+ - [2.30.3] Bug fix in `memory.findRecord()`
88
+
89
+ ## 2026-06-12
90
+
91
+ - [2.30.0] Necessary updates to `bajo@2.18.0` specs
92
+ - [2.30.0] Add `sanitizeByType()`
93
+ - [2.30.0] Add `error._abortAction` to abort an action in driver level
94
+ - [2.30.0] Refactor `model.sanitizeBody()` to use shared sanitizing function
95
+ - [2.30.1] Bug fix in `model.sanitizeBody()`
96
+
97
+ ## 2026-06-11
98
+
99
+ - [2.29.1] Bug fix in `model.sanitizeBody()`
100
+ - [2.29.2] Bug fix in `model.sanitizeBody()`
101
+
102
+ ## 2026-06-10
103
+
104
+ - [2.29.0] Feature `dobo:immutable` now using array instead of boolean
105
+ - [2.29.0] Add `model.sanitizeFixture()`
106
+ - [2.29.0] Options `noMagic` no without touching `noModelHook`
107
+ - [2.29.0] Add `array` validator type
108
+
109
+ ## 2026-06-03
110
+
111
+ - [2.28.0] Property `values` can now accept a function that will be called dynamically upon used
112
+ - [2.28.0] `_util.buildPropValues()` now become a new model method
113
+ - [2.28.0] Bug fix in `model.sanitizeRecord()`
114
+ - [2.28.0] Bug fix in `model.validate()`
115
+
116
+ ## 2026-05-30
117
+
118
+ - [2.27.0] Bug fix in `model.transaction()`
119
+ - [2.27.0] Add `model:[before|after]RecordValidation` model hooks
120
+ - [2.27.0] Bug fix in `model.countRecord()`
121
+ - [2.27.0] Bug fix in `model.loadFixtures()`
122
+ - [2.27.1] Bug fix in `model.sanitizeRecord()`
123
+ - [2.27.2] Bug fix in `collect-models.js`
124
+
125
+ ## 2026-05-29
126
+
127
+ - [2.26.1] Bug fix in `model.createRecord()`
128
+ - [2.26.1] Bug fix in `model.updateRecord()`
129
+ - [2.26.1] Bug fix in `model.upsertRecord()`
130
+ - [2.26.1] Bug fix in `model.removeRecord()`
131
+ - [2.26.4] Bug fix in `model.listAttachment()`
132
+
133
+ ## 2026-05-26
134
+
135
+ - [2.26.0] Add loading multiple model schema as in one `model.js` file
136
+ - [2.26.0] Remove caching feature of model schema
137
+ - [2.26.0] Change driver hook name with this syntax: `dobo.driver:<action>`
138
+ - [2.26.1] Bug fix in `memory.js`
139
+ - [2.26.2] Bug fix in `driver.js`
140
+
141
+ ## 2026-05-22
142
+
143
+ - [2.25.0] Add `array` & `object` validator handling
144
+ - [2.25.0] Change `interSite` definition to `xSite`
145
+ - [2.25.0] Add `model.getNonVirtualProperties()`
146
+ - [2.25.0] Bug fix in `model.loadFixtures()`
147
+ - [2.25.0] Handle `array` validation schema
148
+
149
+ ## 2026-05-16
150
+
151
+ - [2.24.0] Change `dobo:immutable` feature, field no longer hidden
152
+ - [2.24.0] Add `dobo:[before|after]driver<Action>` hook
153
+ - [2.24.0] Add `dobo.<modelName>:[before|after]driver<Action>` hook
154
+ - [2.24.0] Change `model._simpleLookup()`
155
+ - [2.24.0] Remove `dobo:[before|after]Build[Query|Search]` hook
156
+ - [2.24.0] Change `model.loadFixtures()`
157
+ - [2.24.0] Bugfix in `model.sanitizeBody()`
158
+ - [2.24.0] Add `dobo:afterTransaction` hook
159
+ - [2.24.0] Add `dobo.<modelName>:afterTransaction` hook
160
+
161
+ ## 2026-05-11
162
+
163
+ - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:unique` feature
164
+ - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:updatedAt` feature
165
+ - [2.23.0] Add `beforeBulkCreate` model hook on `dobo:unique` feature
166
+ - [2.23.0] Add `connection.initdriver()`
167
+ - [2.23.0] Move `model.file` in model definition to `model.options.file`
168
+ - [2.23.0] Move `model.attachment` in model definition to `model.options.attachment`
169
+ - [2.23.0] Add `model.buildStart()` and `model.buildEnd()` in model definition
170
+ - [2.23.0] Add `null` driver
171
+ - [2.23.0] Add `model.syncIdField()`
172
+ - [2.23.0] Rename method to `model.bulkCreateRecord` instead `bulkCreateRecords`. The later name now serve only as alias
173
+ - [2.23.0] Remove `getSingleRef()` and `getMultiRefs()`, use `getRefs()` instead
174
+ - [2.23.0] Add reference support for `array` column type
175
+ - [2.23.0] Bug fix in `model.findAllRecord()`, now use correctly hook names
176
+ - [2.23.0] Bug fix in `model.sanitizeBody()`
177
+ - [2.23.0] Bug fix in `model.sanitizeRecord()`
178
+
179
+ ## 2026-05-03
180
+
181
+ - [2.22.1] Bug fix in `dobo:image` feature
182
+
183
+ ## 2026-05-02
184
+
185
+ - [2.22.0] Add auto thumbnail creation when image attachment is uploaded
186
+ - [2.22.0] Add feature to get the thumbnail instead of attachment file in attachment route
187
+ - [2.22.0] Add `dobo:image` feature
188
+ - [2.22.0] Bug fix in `model.createRecord()`
189
+ - [2.22.0] Bug fix in `model.updateRecord()`
190
+ - [2.22.0] Bug fix in `model.upsertRecord()`
191
+ - [2.22.0] Bug fix in `model.removeRecord()`
192
+ - [2.22.0] Remove attachment now also remove corresponding thumbnails
193
+
194
+ ## 2026-04-28
195
+
196
+ - [2.21.1] Bug fix in `collect-models.js`
197
+ - [2.21.1] Bug fix in `driver._updateRecord()`
198
+ - [2.21.1] Bug fix in `util.getMultiRef()`
199
+ - [2.21.1] Bug fix in setting references
200
+ - [2.21.1] Bug fix in `model.sanitizeRecord()`
201
+
202
+ ## 2026-04-25
203
+
204
+ - [2.21.0] Change `options.formatValue` to `options.fmt`
205
+ - [2.21.0] Remove `options.retainOriginalValue` since it is not needed anymore
206
+ - [2.21.0] Remove `formatValue` altogether
207
+ - [2.21.0] Remove `record._orig`, in exchange switch the formatted value to `record._fmt`
208
+ - [2.21.0] Add `property.virtual` to set property is a virtual/calculated property
209
+ - [2.21.0] Add necessary safe guards for virtual property
210
+ - [2.21.0] Add `model.getProperties()`
211
+ - [2.21.0] Add `model.getIndexes()`
212
+ - [2.21.0] Add `model.getVirtualPropertties()`
213
+ - [2.21.0] Activate transaction on `loadFixtures()`
214
+
215
+ ## 2026-04-23
216
+
217
+ - [2.20.1] Bug fix in `collect-models.js`, now with deep merge in advance
218
+
219
+ ## 2026-04-21
220
+
221
+ - [2.19.1] Bug fix in `collect-models.js`, now values are sanitized with `parseObject()`
222
+ - [2.19.1] Bug fix in `options.dataOnly` on all model methods
223
+ - [2.19.1] Add `options.noMagic`
224
+ - [2.20.0] Revert back to NOT using hooks for caching
225
+
226
+ ## 2026-04-19
227
+
228
+ - [2.19.0] Add `queryAny()` for query using model's scanables fields
229
+ - [2.19.0] Bug fix in `reviveRegexInJson()`
230
+ - [2.19.0] Bug fix in query sanitizing especially for regex existance
231
+ - [2.19.0] Remove `replaceIdInQuerySearch()` in `_util.js` as it isn't needed anymore
232
+
233
+ ## 2026-04-18
234
+
235
+ - [2.18.2] Bug fix in `config` object
236
+ - [2.18.2] Bug fix in `getDefaultValues`
237
+ - [2.18.2] Bug fix in `sanitizeProp()` in `collect-models.js`
238
+ - [2.18.2] Bug fix in `sanitizeRecord()` for prop with `format` set to `false`
239
+
240
+ ## 2026-04-17
241
+
242
+ - [2.18.1] Bug fix in `model.createAttachment()`
243
+ - [2.18.1] Bug fix in `model.sanitizeBody()`
244
+ - [2.18.1] Bug fix in `model.sanitizeRecord()`
245
+
246
+ ## 2026-04-16
247
+
248
+ - [2.18.0] Add parameter options to `sanitizeObject()`
249
+ - [2.18.0] Rewrite `dobo:dt` feature to support customization
250
+ - [2.18.0] Bug fix in `model.createRecord()`
251
+ - [2.18.0] Changes in `model.sanitizeBody()` to throw error with payload details
252
+ - [2.18.0] Changes in `model.sanitizeRecord()` to support `options.retainOriginalValue`
253
+ - [2.18.0] Bug fix in `model.updateRecord()`
254
+ - [2.18.0] Bug fix in `model.upsertRecord()`
255
+
256
+ ## 2026-04-13
257
+
258
+ - [2.17.0] Add `{ strict }` as parameter to `sanitizeObject()`
259
+
260
+ ## 2026-04-11
261
+
262
+ - [2.16.0] Add `format` as new model's property key
263
+ - [2.16.0] Rewrite `getDefaultValues()` to base on `req.getSetting()`
264
+ - [2.16.0] All inter site admins are now exempts from `immutable` row
265
+ - [2.16.0] Bug fix in `collect-models.js`
266
+ - [2.16.0] Bug fix in `getRefs()` and `getRefs()`
267
+ - [2.16.0] Add feature to return formatted row(s) with `options.formatValue`
268
+ - [2.16.0] If row is formatted, add feature to save original row in `_orig` with `options.retainOriginalValue`
269
+
270
+ ## 2026-04-07
271
+
272
+ - [2.15.0] Add `parseNql()`
273
+ - [2.15.0] Add `parseQuery()`
274
+ - [2.15.0] Add `replaceRegexInJson()`
275
+ - [2.15.0] Add `reviveRegexInJson()`
276
+ - [2.15.0] Change all `opts.fieldName` to `opts.field` in features
277
+ - [2.15.0] Add `ref.searchField` in model reference
278
+ - [2.15.0] Add `ref.labelField` in model reference
279
+ - [2.15.0] Add `ref.valueField` in model reference
280
+ - [2.15.0] change `ref.propName` to `ref.field` in model reference
281
+
282
+ ## 2026-04-02
283
+
284
+ - [2.14.1] Bug fix in `hardCap`
285
+ - [2.14.1] `warnings` now can be turned off through `config` or site settings
286
+
287
+ ## 2026-04-01
288
+
289
+ - [2.14.0] Add `between` as custom query, since it doesn't exists in NQL
290
+
291
+ ## 2026-03-30
292
+
293
+ - [2.12.0] Add `.bootorder` level 10
294
+ - [2.12.0] Bug fix in `model._simpleLookup()`
295
+ - [2.12.0] Add model name in validation error's payload
296
+ - [2.13.0] Add `hardCap` support
297
+
298
+ ## 2026-03-26
299
+
300
+ - [2.11.4] Exceptions thrown in `getRefs()` && `getRefs()` will be catched and are ignored
301
+
302
+ ## 2026-03-25
303
+
304
+ - [2.11.2] Bug fix in result sets cache
305
+ - [2.11.3] Bug fix in cache handling if `bajoCache` isn't loaded
306
+
307
+ ## 2026-03-17
308
+
309
+ - [2.11.1] Bug fix on `model.validate()`: if `partial` is true, set `fields` from `body` keys
310
+
311
+ ## 2026-03-16
312
+
313
+ - [2.11.0] Attachment can now listed by its type (`image`, `video`, etc)
314
+ - [2.11.0] Add `_last` to autodetect last item in list in `@id.js`
315
+
316
+ ## 2026-03-12
317
+
318
+ - [2.10.1] Bug fix in `model._simpleLookup()` should return `null` if query results empty value
319
+
320
+ ## 2026-03-11
321
+
322
+ - [2.10.0] Add `immutable` and `feature` to the list of allowed property keys
323
+ - [2.10.0] Set `property.feature` to the name of feature name if property is build using `feature`
324
+ - [2.10.0] Add `model._simpleLookup()`
325
+ - [2.10.0] Refactor `model.loadFixtures()`
326
+ - [2.10.0] Add `property.immutable` for property that can't be updated
327
+
328
+ ## 2026-03-09
329
+
330
+ - [2.9.3] Bug fix in `model.findAllRecord`
331
+
332
+ ## 2026-03-07
333
+
334
+ - [2.9.2] Bug fix in `model.loadFixtures()`
335
+ - [2.9.2] Bug fix in `collect-connections.js`
336
+
337
+ ## 2026-03-06
338
+
339
+ - [2.9.1] Bug fix in `model.sanitizeBody()`
340
+
341
+ ## 2026-03-05
342
+
343
+ - [2.9.0] Add transaction support with `model.transaction()` wrapper
344
+ - [2.9.0] Add property `driver.support.transaction` to indicate a driver is fully support transaction or not
345
+ - [2.9.0] Add property `connection.options.connName`
346
+
347
+ ## 2026-02-25
348
+
349
+ - [2.8.3] Bug fix in attachment route
350
+
351
+ ## 2026-02-24
352
+
353
+ - [2.8.2] Bug fix in field type `textType`
354
+ - [2.8.2] Bug fix in `collect-models.js` when empty model is returned
355
+
356
+ ## 2026-02-23
357
+
358
+ - [2.8.1] Bug fix in `memory._getCursor()`
359
+ - [2.8.1] Bug fix in `model.upsertRecord()`
360
+
361
+ ## 2026-02-22
362
+
363
+ - [2.8.0] Add `warnings` to response object
364
+ - [2.8.0] Throw error if `page` above the allowed threshold
365
+
366
+ ## 2026-02-20
367
+
368
+ - [2.7.0] Add `prop.values` support
369
+ - [2.7.0] Add `prop.rulesMsg` support
370
+ - [2.7.0] Change `buildFromDbModel()` on validation to async function
371
+
372
+ ## 2026-02-17
373
+
374
+ - [2.6.5] Bug fix in model extender
375
+ - [2.6.5] Bug fix in trace logging
376
+ - [2.6.6] Bug fix in extender indexes
377
+
378
+ ## 2026-02-05
379
+
380
+ - [2.6.4] Bug fix in driver options, `noCheckUnique` must be perform in `create`, `update` and `upsert`
381
+
382
+ ## 2026-02-03
383
+
384
+ - [2.6.3] Bug fix in `model.sanitizeRecord()`
385
+
386
+ ## 2026-02-02
387
+
388
+ - [2.6.2] Bug fix in query & search resolver: Do not remove old query/search, should always copied to oldQuery/oldSearch
389
+
390
+ ## 2026-02-01
391
+
392
+ - [2.6.0] Add `model.scanables` for fields that can participate in table scans if necessary
393
+ - [2.6.0] Add `driver.support.search` for driver's fulltext search support
394
+ - [2.6.0] Add model hooks `before/afterBuildQuery/Search`
395
+
396
+ ## 2026-01-30
397
+
398
+ - [2.5.0] Add feature to push custom `options._data`. If provided, this will be used instead of auto generated one.
399
+ - [2.5.0] Remove `silent` in `options` object
400
+ - [2.5.1] driver now support `this.useUtc` for database that store values in UTC string
401
+ - [2.5.1] Bug fix in `driver.sanitizeRecord()`
402
+
403
+ ## 2026-01-29
404
+
405
+ - [2.4.0] Add `bulkCreateRecord()` on model & driver
406
+ - [2.4.0] Add `execModelHook()`
407
+ - [2.4.0] Bug fix in models collection
408
+ - [2.4.0] Add `DoboAction` to the `app.baseClass`
409
+ - [2.4.0] `findAllRecord()` can't be called as action
410
+
411
+ ## 2026-01-26
412
+
413
+ - [2.3.1] Bug fix if reference model isn't loaded only yield warning
414
+ - [2.3.1] Bug fix in fetching multi references
415
+
416
+ ## 2026-01-24
417
+
418
+ - [2.3.0] Add `dynHooks` to model's options
419
+ - [2.3.0] Add `dobo:unique` feature
420
+ - [2.3.0] Add `noWait` handler for model's hook
421
+
422
+ ## 2026-01-21
423
+
424
+ - [2.2.5] Add `proto` to `connection.options`
425
+
426
+ ## 2026-01-19
427
+
428
+ - [2.2.4] Bug fix in route `dobo:/attachment/...`
429
+
430
+ ## 2026-01-18
431
+
432
+ - [2.2.2] Revert back to `mingo@6.5.1` because of bugs in `skip` operation
433
+ - [2.2.3] Bug fix in driver's `sanitizeBody()`
434
+
435
+ ## 2026-01-16
436
+
437
+ - [2.2.1] Bug fix in model references
438
+
439
+ ## 2026-01-11
440
+
441
+ - [2.2.0] Any driver that support memory DB can now declare itself as in-memory DB and be handled as such
442
+ - [2.2.0] `driver.init()` is removed, and driver should solely use `driver.createClient()` instead
443
+ - [2.2.0] Bug fixes
444
+
445
+ ## 2026-01-07
446
+
447
+ - [2.2.0] Add `immutable` feature
448
+ - [2.2.0] Lots of bug fixes
449
+
450
+ ## 2025-12-28
451
+
452
+ - [2.2.0] Add `calcAggregate()` & `calcHistogram()` for array of data objects
453
+ - [2.2.0] Implement `createAggregate()` & `createHistogram()` to the built-in memory database driver
454
+ - [2.2.0] If no `default` connection found, all models automatically bound to `memory` connection
455
+
456
+ ## 2025-12-22
457
+
458
+ - [2.2.0] Introduce Action class that enables you to work on models with chainable methods
459
+ - [2.2.0] All base class definitions moved now to `this.baseClass` instead of `this.lib`
460
+
461
+ ## 2025-12-16
462
+
463
+ - [2.2.0] Upgrade mingo to 7.1.0
464
+
465
+ ## 2025-12-14
466
+
467
+ - [2.2.0] Drop Model class, replace as Model class
468
+
469
+ ## 2025-12-10
470
+
471
+ - [2.2.0] Rewrite the whole thing into class based modules: Connection, driver, Feature, Model. Dobo will solely serve as DB Manager in the future
472
+
473
+ ## 2025-12-05
474
+ - [2.2.0] Connection now saved in `this.connections` as `Connection` instance
475
+
476
+ ## 2025-12-03
477
+
478
+ - [2.1.0] Upgrade joi to 18.0.2
479
+ - [2.1.0] Upgrade mingo to 7.0.2
480
+ - [2.1.0] Feature now saved in `this.features` as `Feature` instance
481
+ - [2.1.0] driver now saved in `this.drivers` as `driver` instance
474
482
  - [2.1.0] Add `this.getdriver()`. Accept short name or NsPath format