dobo 2.38.0 → 2.39.1

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