vona-module-a-orm 5.0.96 → 5.1.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 (367) hide show
  1. package/LICENSE +0 -0
  2. package/cli/entity/metadata/generate.ts +2 -1
  3. package/cli/model/metadata/generate.ts +6 -2
  4. package/cli/model/metadata/magic.ts +15 -6
  5. package/dist/.metadata/index.d.ts +1 -0
  6. package/dist/.metadata/index.d.ts.map +1 -0
  7. package/dist/.metadata/locales.d.ts +1 -0
  8. package/dist/.metadata/locales.d.ts.map +1 -0
  9. package/dist/.metadata/this.d.ts +1 -0
  10. package/dist/.metadata/this.d.ts.map +1 -0
  11. package/dist/bean/aopMethod.transaction.d.ts +2 -1
  12. package/dist/bean/aopMethod.transaction.d.ts.map +1 -0
  13. package/dist/bean/bean.database.d.ts +2 -1
  14. package/dist/bean/bean.database.d.ts.map +1 -0
  15. package/dist/bean/bean.databaseDialectBase.d.ts +2 -1
  16. package/dist/bean/bean.databaseDialectBase.d.ts.map +1 -0
  17. package/dist/bean/bean.model/bean.model_cache.d.ts +5 -1
  18. package/dist/bean/bean.model/bean.model_cache.d.ts.map +1 -0
  19. package/dist/bean/bean.model/bean.model_crud.d.ts +1 -0
  20. package/dist/bean/bean.model/bean.model_crud.d.ts.map +1 -0
  21. package/dist/bean/bean.model/bean.model_crud_inner.d.ts +3 -1
  22. package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +1 -0
  23. package/dist/bean/bean.model/bean.model_crud_table.d.ts +1 -0
  24. package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +1 -0
  25. package/dist/bean/bean.model/bean.model_knex.d.ts +1 -0
  26. package/dist/bean/bean.model/bean.model_knex.d.ts.map +1 -0
  27. package/dist/bean/bean.model/bean.model_meta.d.ts +3 -2
  28. package/dist/bean/bean.model/bean.model_meta.d.ts.map +1 -0
  29. package/dist/bean/bean.model/bean.model_utils.d.ts +5 -3
  30. package/dist/bean/bean.model/bean.model_utils.d.ts.map +1 -0
  31. package/dist/bean/bean.model/bean.model_view.d.ts +1 -0
  32. package/dist/bean/bean.model/bean.model_view.d.ts.map +1 -0
  33. package/dist/bean/bean.model.d.ts +1 -0
  34. package/dist/bean/bean.model.d.ts.map +1 -0
  35. package/dist/bean/bean.modelBase.d.ts +1 -0
  36. package/dist/bean/bean.modelBase.d.ts.map +1 -0
  37. package/dist/bean/broadcast.columnsClear.d.ts +2 -1
  38. package/dist/bean/broadcast.columnsClear.d.ts.map +1 -0
  39. package/dist/bean/event.clientNameReal.d.ts +2 -1
  40. package/dist/bean/event.clientNameReal.d.ts.map +1 -0
  41. package/dist/bean/event.columnsClear.d.ts +2 -1
  42. package/dist/bean/event.columnsClear.d.ts.map +1 -0
  43. package/dist/bean/hmr.entity.d.ts +1 -0
  44. package/dist/bean/hmr.entity.d.ts.map +1 -0
  45. package/dist/bean/hmr.model.d.ts +1 -0
  46. package/dist/bean/hmr.model.d.ts.map +1 -0
  47. package/dist/bean/queue.doubleDelete.d.ts +2 -1
  48. package/dist/bean/queue.doubleDelete.d.ts.map +1 -0
  49. package/dist/bean/schedule.softDeletionPrune.d.ts +1 -0
  50. package/dist/bean/schedule.softDeletionPrune.d.ts.map +1 -0
  51. package/dist/common/buildWhere.d.ts +1 -0
  52. package/dist/common/buildWhere.d.ts.map +1 -0
  53. package/dist/common/checkWhere.d.ts +1 -0
  54. package/dist/common/checkWhere.d.ts.map +1 -0
  55. package/dist/common/index.d.ts +1 -0
  56. package/dist/common/index.d.ts.map +1 -0
  57. package/dist/common/utils.d.ts +2 -1
  58. package/dist/common/utils.d.ts.map +1 -0
  59. package/dist/config/config.d.ts +1 -0
  60. package/dist/config/config.d.ts.map +1 -0
  61. package/dist/config/errors.d.ts +1 -0
  62. package/dist/config/errors.d.ts.map +1 -0
  63. package/dist/config/locale/en-us.d.ts +1 -0
  64. package/dist/config/locale/en-us.d.ts.map +1 -0
  65. package/dist/config/locale/zh-cn.d.ts +1 -0
  66. package/dist/config/locale/zh-cn.d.ts.map +1 -0
  67. package/dist/extend/index.d.ts +1 -0
  68. package/dist/extend/index.d.ts.map +1 -0
  69. package/dist/extend/schemaBuilder.d.ts +1 -0
  70. package/dist/extend/schemaBuilder.d.ts.map +1 -0
  71. package/dist/extend/tableBuilder.d.ts +1 -0
  72. package/dist/extend/tableBuilder.d.ts.map +1 -0
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +94 -15
  76. package/dist/index.js.map +1 -0
  77. package/dist/lib/const.d.ts +1 -0
  78. package/dist/lib/const.d.ts.map +1 -0
  79. package/dist/lib/databaseDialect.d.ts +1 -0
  80. package/dist/lib/databaseDialect.d.ts.map +1 -0
  81. package/dist/lib/dto/dto.d.ts +3 -0
  82. package/dist/lib/dto/dto.d.ts.map +1 -0
  83. package/dist/lib/dto/dtoAggregate.d.ts +3 -2
  84. package/dist/lib/dto/dtoAggregate.d.ts.map +1 -0
  85. package/dist/lib/dto/dtoCreate.d.ts +2 -1
  86. package/dist/lib/dto/dtoCreate.d.ts.map +1 -0
  87. package/dist/lib/dto/dtoGet.d.ts +2 -1
  88. package/dist/lib/dto/dtoGet.d.ts.map +1 -0
  89. package/dist/lib/dto/dtoGroup.d.ts +2 -1
  90. package/dist/lib/dto/dtoGroup.d.ts.map +1 -0
  91. package/dist/lib/dto/dtoListAndCount.d.ts +4 -0
  92. package/dist/lib/dto/dtoListAndCount.d.ts.map +1 -0
  93. package/dist/lib/dto/dtoMutate.d.ts +3 -2
  94. package/dist/lib/dto/dtoMutate.d.ts.map +1 -0
  95. package/dist/lib/dto/dtoQuery.d.ts +1 -0
  96. package/dist/lib/dto/dtoQuery.d.ts.map +1 -0
  97. package/dist/lib/dto/dtoQueryPage.d.ts +1 -0
  98. package/dist/lib/dto/dtoQueryPage.d.ts.map +1 -0
  99. package/dist/lib/dto/dtoSelectAndCount.d.ts +2 -1
  100. package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -0
  101. package/dist/lib/dto/dtoUpdate.d.ts +2 -1
  102. package/dist/lib/dto/dtoUpdate.d.ts.map +1 -0
  103. package/dist/lib/dto/index.d.ts +1 -0
  104. package/dist/lib/dto/index.d.ts.map +1 -0
  105. package/dist/lib/entity.d.ts +1 -0
  106. package/dist/lib/entity.d.ts.map +1 -0
  107. package/dist/lib/index.d.ts +1 -0
  108. package/dist/lib/index.d.ts.map +1 -0
  109. package/dist/lib/model.d.ts +1 -0
  110. package/dist/lib/model.d.ts.map +1 -0
  111. package/dist/lib/modelCacheBase.d.ts +2 -1
  112. package/dist/lib/modelCacheBase.d.ts.map +1 -0
  113. package/dist/lib/relations.d.ts +5 -4
  114. package/dist/lib/relations.d.ts.map +1 -0
  115. package/dist/lib/relationsDynamic.d.ts +5 -4
  116. package/dist/lib/relationsDynamic.d.ts.map +1 -0
  117. package/dist/lib/relationsMutate.d.ts +4 -3
  118. package/dist/lib/relationsMutate.d.ts.map +1 -0
  119. package/dist/lib/relationsStatic.d.ts +1 -0
  120. package/dist/lib/relationsStatic.d.ts.map +1 -0
  121. package/dist/lib/utils.d.ts +1 -0
  122. package/dist/lib/utils.d.ts.map +1 -0
  123. package/dist/main.d.ts +2 -1
  124. package/dist/main.d.ts.map +1 -0
  125. package/dist/service/cacheEntity_.d.ts +1 -0
  126. package/dist/service/cacheEntity_.d.ts.map +1 -0
  127. package/dist/service/cacheQuery_.d.ts +1 -0
  128. package/dist/service/cacheQuery_.d.ts.map +1 -0
  129. package/dist/service/columnsCache_.d.ts +2 -1
  130. package/dist/service/columnsCache_.d.ts.map +1 -0
  131. package/dist/service/columns_.d.ts +2 -1
  132. package/dist/service/columns_.d.ts.map +1 -0
  133. package/dist/service/database.d.ts +2 -1
  134. package/dist/service/database.d.ts.map +1 -0
  135. package/dist/service/databaseAsyncLocalStorage_.d.ts +1 -0
  136. package/dist/service/databaseAsyncLocalStorage_.d.ts.map +1 -0
  137. package/dist/service/databaseClient_.d.ts +2 -1
  138. package/dist/service/databaseClient_.d.ts.map +1 -0
  139. package/dist/service/db_.d.ts +2 -1
  140. package/dist/service/db_.d.ts.map +1 -0
  141. package/dist/service/entityResolver_.d.ts +1 -0
  142. package/dist/service/entityResolver_.d.ts.map +1 -0
  143. package/dist/service/modelResolver_.d.ts +1 -0
  144. package/dist/service/modelResolver_.d.ts.map +1 -0
  145. package/dist/service/relations_.d.ts +2 -1
  146. package/dist/service/relations_.d.ts.map +1 -0
  147. package/dist/service/transactionAsyncLocalStorage_.d.ts +1 -0
  148. package/dist/service/transactionAsyncLocalStorage_.d.ts.map +1 -0
  149. package/dist/service/transactionConsistency/342/200/214_.d.ts +1 -0
  150. package/dist/service/transactionConsistency/342/200/214_.d.ts.map +1 -0
  151. package/dist/service/transactionFiber_.d.ts +1 -0
  152. package/dist/service/transactionFiber_.d.ts.map +1 -0
  153. package/dist/service/transactionState_.d.ts +2 -1
  154. package/dist/service/transactionState_.d.ts.map +1 -0
  155. package/dist/service/transaction_.d.ts +2 -1
  156. package/dist/service/transaction_.d.ts.map +1 -0
  157. package/dist/types/columns.d.ts +1 -0
  158. package/dist/types/columns.d.ts.map +1 -0
  159. package/dist/types/config.d.ts +1 -0
  160. package/dist/types/config.d.ts.map +1 -0
  161. package/dist/types/database.d.ts +1 -0
  162. package/dist/types/database.d.ts.map +1 -0
  163. package/dist/types/depth.d.ts +1 -0
  164. package/dist/types/depth.d.ts.map +1 -0
  165. package/dist/types/dialect.d.ts +1 -0
  166. package/dist/types/dialect.d.ts.map +1 -0
  167. package/dist/types/dto/dtoAggregate.d.ts +1 -0
  168. package/dist/types/dto/dtoAggregate.d.ts.map +1 -0
  169. package/dist/types/dto/dtoGet.d.ts +3 -2
  170. package/dist/types/dto/dtoGet.d.ts.map +1 -0
  171. package/dist/types/dto/dtoGroup.d.ts +1 -0
  172. package/dist/types/dto/dtoGroup.d.ts.map +1 -0
  173. package/dist/types/dto/dtoListAndCount.d.ts +8 -0
  174. package/dist/types/dto/dtoListAndCount.d.ts.map +1 -0
  175. package/dist/types/dto/dtoMutate.d.ts +8 -9
  176. package/dist/types/dto/dtoMutate.d.ts.map +1 -0
  177. package/dist/types/dto/dtoQueryBase.d.ts +1 -0
  178. package/dist/types/dto/dtoQueryBase.d.ts.map +1 -0
  179. package/dist/types/dto/dtoQueryPageBase.d.ts +1 -0
  180. package/dist/types/dto/dtoQueryPageBase.d.ts.map +1 -0
  181. package/dist/types/dto/dtoSelectAndCount.d.ts +2 -1
  182. package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -0
  183. package/dist/types/dto/index.d.ts +2 -0
  184. package/dist/types/dto/index.d.ts.map +1 -0
  185. package/dist/types/entity.d.ts +1 -0
  186. package/dist/types/entity.d.ts.map +1 -0
  187. package/dist/types/entityBase.d.ts +1 -0
  188. package/dist/types/entityBase.d.ts.map +1 -0
  189. package/dist/types/entityBaseEmpty.d.ts +1 -0
  190. package/dist/types/entityBaseEmpty.d.ts.map +1 -0
  191. package/dist/types/entityBaseInner.d.ts +1 -0
  192. package/dist/types/entityBaseInner.d.ts.map +1 -0
  193. package/dist/types/entityBaseSimple.d.ts +1 -0
  194. package/dist/types/entityBaseSimple.d.ts.map +1 -0
  195. package/dist/types/extra.d.ts +1 -0
  196. package/dist/types/extra.d.ts.map +1 -0
  197. package/dist/types/index.d.ts +2 -0
  198. package/dist/types/index.d.ts.map +1 -0
  199. package/dist/types/logger.d.ts +1 -0
  200. package/dist/types/logger.d.ts.map +1 -0
  201. package/dist/types/model.d.ts +3 -2
  202. package/dist/types/model.d.ts.map +1 -0
  203. package/dist/types/modelAggr.d.ts +2 -1
  204. package/dist/types/modelAggr.d.ts.map +1 -0
  205. package/dist/types/modelCount.d.ts +2 -1
  206. package/dist/types/modelCount.d.ts.map +1 -0
  207. package/dist/types/modelGeneral.d.ts +4 -3
  208. package/dist/types/modelGeneral.d.ts.map +1 -0
  209. package/dist/types/modelGroup.d.ts +2 -1
  210. package/dist/types/modelGroup.d.ts.map +1 -0
  211. package/dist/types/modelIncrement.d.ts +19 -0
  212. package/dist/types/modelIncrement.d.ts.map +1 -0
  213. package/dist/types/modelWhere.d.ts +2 -1
  214. package/dist/types/modelWhere.d.ts.map +1 -0
  215. package/dist/types/onion/databaseDialect.d.ts +1 -0
  216. package/dist/types/onion/databaseDialect.d.ts.map +1 -0
  217. package/dist/types/onion/entity.d.ts +1 -0
  218. package/dist/types/onion/entity.d.ts.map +1 -0
  219. package/dist/types/onion/index.d.ts +1 -0
  220. package/dist/types/onion/index.d.ts.map +1 -0
  221. package/dist/types/onion/model.d.ts +1 -0
  222. package/dist/types/onion/model.d.ts.map +1 -0
  223. package/dist/types/onion/table.d.ts +1 -0
  224. package/dist/types/onion/table.d.ts.map +1 -0
  225. package/dist/types/relations.d.ts +10 -11
  226. package/dist/types/relations.d.ts.map +1 -0
  227. package/dist/types/relationsAggr.d.ts +2 -1
  228. package/dist/types/relationsAggr.d.ts.map +1 -0
  229. package/dist/types/relationsColumns.d.ts +5 -4
  230. package/dist/types/relationsColumns.d.ts.map +1 -0
  231. package/dist/types/relationsDef.d.ts +5 -4
  232. package/dist/types/relationsDef.d.ts.map +1 -0
  233. package/dist/types/relationsDefDynamic.d.ts +6 -5
  234. package/dist/types/relationsDefDynamic.d.ts.map +1 -0
  235. package/dist/types/relationsDefMutate.d.ts +1 -0
  236. package/dist/types/relationsDefMutate.d.ts.map +1 -0
  237. package/dist/types/relationsGroup.d.ts +1 -0
  238. package/dist/types/relationsGroup.d.ts.map +1 -0
  239. package/dist/types/relationsMutate.d.ts +4 -3
  240. package/dist/types/relationsMutate.d.ts.map +1 -0
  241. package/dist/types/relationsTables.d.ts +1 -0
  242. package/dist/types/relationsTables.d.ts.map +1 -0
  243. package/dist/types/transaction.d.ts +1 -0
  244. package/dist/types/transaction.d.ts.map +1 -0
  245. package/dist-cli/entity/metadata/generate.js +1 -1
  246. package/dist-cli/model/metadata/generate.js +4 -2
  247. package/dist-cli/model/metadata/magic.js +2 -2
  248. package/package.json +40 -36
  249. package/src/.metadata/index.ts +348 -0
  250. package/src/.metadata/locales.ts +13 -0
  251. package/src/.metadata/this.ts +2 -0
  252. package/src/bean/aopMethod.transaction.ts +18 -0
  253. package/src/bean/bean.database.ts +57 -0
  254. package/src/bean/bean.databaseDialectBase.ts +149 -0
  255. package/src/bean/bean.model/bean.model_cache.ts +815 -0
  256. package/src/bean/bean.model/bean.model_crud.ts +46 -0
  257. package/src/bean/bean.model/bean.model_crud_inner.ts +281 -0
  258. package/src/bean/bean.model/bean.model_crud_table.ts +59 -0
  259. package/src/bean/bean.model/bean.model_knex.ts +60 -0
  260. package/src/bean/bean.model/bean.model_meta.ts +204 -0
  261. package/src/bean/bean.model/bean.model_utils.ts +275 -0
  262. package/src/bean/bean.model/bean.model_view.ts +129 -0
  263. package/src/bean/bean.model.ts +8 -0
  264. package/src/bean/bean.modelBase.ts +8 -0
  265. package/src/bean/broadcast.columnsClear.ts +24 -0
  266. package/src/bean/event.clientNameReal.ts +10 -0
  267. package/src/bean/event.columnsClear.ts +13 -0
  268. package/src/bean/hmr.entity.ts +12 -0
  269. package/src/bean/hmr.model.ts +16 -0
  270. package/src/bean/queue.doubleDelete.ts +29 -0
  271. package/src/bean/schedule.softDeletionPrune.ts +45 -0
  272. package/src/common/buildWhere.ts +238 -0
  273. package/src/common/checkWhere.ts +128 -0
  274. package/src/common/index.ts +3 -0
  275. package/src/common/utils.ts +74 -0
  276. package/src/config/config.ts +60 -0
  277. package/src/config/errors.ts +3 -0
  278. package/src/config/locale/en-us.ts +8 -0
  279. package/src/config/locale/zh-cn.ts +8 -0
  280. package/src/extend/index.ts +12 -0
  281. package/src/extend/schemaBuilder.ts +29 -0
  282. package/src/extend/tableBuilder.ts +87 -0
  283. package/src/index.ts +10 -0
  284. package/src/lib/const.ts +58 -0
  285. package/src/lib/databaseDialect.ts +7 -0
  286. package/src/lib/dto/dto.ts +21 -0
  287. package/src/lib/dto/dtoAggregate.ts +51 -0
  288. package/src/lib/dto/dtoCreate.ts +14 -0
  289. package/src/lib/dto/dtoGet.ts +159 -0
  290. package/src/lib/dto/dtoGroup.ts +57 -0
  291. package/src/lib/dto/dtoListAndCount.ts +16 -0
  292. package/src/lib/dto/dtoMutate.ts +82 -0
  293. package/src/lib/dto/dtoQuery.ts +9 -0
  294. package/src/lib/dto/dtoQueryPage.ts +9 -0
  295. package/src/lib/dto/dtoSelectAndCount.ts +20 -0
  296. package/src/lib/dto/dtoUpdate.ts +16 -0
  297. package/src/lib/dto/index.ts +1 -0
  298. package/src/lib/entity.ts +25 -0
  299. package/src/lib/index.ts +9 -0
  300. package/src/lib/model.ts +7 -0
  301. package/src/lib/modelCacheBase.ts +98 -0
  302. package/src/lib/relations.ts +118 -0
  303. package/src/lib/relationsDynamic.ts +75 -0
  304. package/src/lib/relationsMutate.ts +60 -0
  305. package/src/lib/relationsStatic.ts +18 -0
  306. package/src/lib/utils.ts +45 -0
  307. package/src/main.ts +79 -0
  308. package/src/service/cacheEntity_.ts +37 -0
  309. package/src/service/cacheQuery_.ts +20 -0
  310. package/src/service/columnsCache_.ts +69 -0
  311. package/src/service/columns_.ts +64 -0
  312. package/src/service/database.ts +126 -0
  313. package/src/service/databaseAsyncLocalStorage_.ts +29 -0
  314. package/src/service/databaseClient_.ts +124 -0
  315. package/src/service/db_.ts +77 -0
  316. package/src/service/entityResolver_.ts +25 -0
  317. package/src/service/modelResolver_.ts +19 -0
  318. package/src/service/relations_.ts +444 -0
  319. package/src/service/transactionAsyncLocalStorage_.ts +31 -0
  320. package/src/service/transactionConsistency/342/200/214_.ts +37 -0
  321. package/src/service/transactionFiber_.ts +42 -0
  322. package/src/service/transactionState_.ts +35 -0
  323. package/src/service/transaction_.ts +147 -0
  324. package/src/types/columns.ts +8 -0
  325. package/src/types/config.ts +23 -0
  326. package/src/types/database.ts +64 -0
  327. package/src/types/depth.ts +55 -0
  328. package/src/types/dialect.ts +17 -0
  329. package/src/types/dto/dtoAggregate.ts +3 -0
  330. package/src/types/dto/dtoGet.ts +23 -0
  331. package/src/types/dto/dtoGroup.ts +3 -0
  332. package/src/types/dto/dtoListAndCount.ts +7 -0
  333. package/src/types/dto/dtoMutate.ts +231 -0
  334. package/src/types/dto/dtoQueryBase.ts +18 -0
  335. package/src/types/dto/dtoQueryPageBase.ts +18 -0
  336. package/src/types/dto/dtoSelectAndCount.ts +11 -0
  337. package/src/types/dto/index.ts +8 -0
  338. package/src/types/entity.ts +15 -0
  339. package/src/types/entityBase.ts +11 -0
  340. package/src/types/entityBaseEmpty.ts +1 -0
  341. package/src/types/entityBaseInner.ts +18 -0
  342. package/src/types/entityBaseSimple.ts +9 -0
  343. package/src/types/extra.ts +23 -0
  344. package/src/types/index.ts +30 -0
  345. package/src/types/logger.ts +6 -0
  346. package/src/types/model.ts +152 -0
  347. package/src/types/modelAggr.ts +69 -0
  348. package/src/types/modelCount.ts +40 -0
  349. package/src/types/modelGeneral.ts +61 -0
  350. package/src/types/modelGroup.ts +48 -0
  351. package/src/types/modelIncrement.ts +50 -0
  352. package/src/types/modelWhere.ts +85 -0
  353. package/src/types/onion/databaseDialect.ts +22 -0
  354. package/src/types/onion/entity.ts +33 -0
  355. package/src/types/onion/index.ts +4 -0
  356. package/src/types/onion/model.ts +68 -0
  357. package/src/types/onion/table.ts +1 -0
  358. package/src/types/relations.ts +243 -0
  359. package/src/types/relationsAggr.ts +31 -0
  360. package/src/types/relationsColumns.ts +116 -0
  361. package/src/types/relationsDef.ts +152 -0
  362. package/src/types/relationsDefDynamic.ts +128 -0
  363. package/src/types/relationsDefMutate.ts +11 -0
  364. package/src/types/relationsGroup.ts +58 -0
  365. package/src/types/relationsMutate.ts +118 -0
  366. package/src/types/relationsTables.ts +38 -0
  367. package/src/types/transaction.ts +23 -0
@@ -0,0 +1,275 @@
1
+ import type { Knex } from 'knex';
2
+
3
+ import { ensureArray, isNil } from '@cabloy/utils';
4
+ import { cast } from 'vona';
5
+ import { $tableDefaults } from 'vona-module-a-ormutils';
6
+
7
+ import type {
8
+ IModelMethodOptionsGeneral,
9
+ IModelSelectParamsJoin,
10
+ IModelSelectParamsPage,
11
+ ITableColumns,
12
+ ITableRecord,
13
+ TypeModelColumn,
14
+ TypeModelColumns,
15
+ TypeModelColumnsStrict,
16
+ TypeModelIncrementParamsColumns,
17
+ TypeModelSelectAggrParamsAggrs,
18
+ TypeModelSelectGroupParamsColumns,
19
+ TypeModelWhere,
20
+ } from '../../types/index.ts';
21
+
22
+ import { buildWhere } from '../../common/buildWhere.ts';
23
+ import { isRaw } from '../../common/utils.ts';
24
+ import { BeanModelMeta } from './bean.model_meta.ts';
25
+
26
+ export class BeanModelUtils<TRecord extends {}> extends BeanModelMeta<TRecord> {
27
+ async prepareData(item?: Partial<TRecord>): Promise<[TRecord, TRecord]>;
28
+ async prepareData(table: keyof ITableRecord, item?: Partial<TRecord>): Promise<[TRecord, TRecord]>;
29
+ async prepareData(table?, item?): Promise<[TRecord, TRecord]> {
30
+ if (typeof table !== 'string') {
31
+ item = table;
32
+ table = undefined;
33
+ }
34
+ // table
35
+ table = table || this.getTable(item);
36
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
37
+ // item
38
+ if (!item) return [{}, {}] as [TRecord, TRecord];
39
+ // columns
40
+ const columns = await this.columns(table);
41
+ // data
42
+ const data = {};
43
+ const dataOriginal = {};
44
+ for (const columnName in columns) {
45
+ const column = columns[columnName];
46
+ if (Object.prototype.hasOwnProperty.call(item, columnName)) {
47
+ let value = item[columnName];
48
+ dataOriginal[columnName] = value;
49
+ if (column.type === 'json' && value !== undefined) {
50
+ value = JSON.stringify(value);
51
+ }
52
+ data[columnName] = value;
53
+ }
54
+ }
55
+ return [data, dataOriginal] as [TRecord, TRecord];
56
+ }
57
+
58
+ async defaultData(table?: keyof ITableRecord): Promise<TRecord> {
59
+ if (this.options.entity) {
60
+ return $tableDefaults(this.options.entity) as any;
61
+ }
62
+ table = table || this.getTable(undefined);
63
+ return (await this.db.columns.defaultData(table)) as TRecord;
64
+ }
65
+
66
+ async columns(table?: keyof ITableRecord): Promise<ITableColumns> {
67
+ table = table || this.getTable(undefined);
68
+ return await this.db.columns.columns(table);
69
+ }
70
+
71
+ isRaw(raw) {
72
+ return isRaw(raw);
73
+ }
74
+
75
+ raw(value: Knex.Value): Knex.Raw<any>;
76
+ raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(sql: string, binding: Knex.RawBinding): Knex.Raw<TResult2>;
77
+ raw<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(sql: string, bindings: readonly Knex.RawBinding[] | Knex.ValueDict): Knex.Raw<TResult2>;
78
+ raw(sql, bindings?) {
79
+ return this.connection.raw(sql, bindings);
80
+ }
81
+
82
+ ref<TSrc extends string>(src: TSrc): Knex.Ref<TSrc, { [K in TSrc]: TSrc }> {
83
+ return this.connection.ref<TSrc>(src);
84
+ }
85
+
86
+ toIdentifier(name: string | string[]): Knex.Raw<any> {
87
+ const parts = Array.isArray(name) ? name : name.split(',');
88
+ return this.raw(parts.map(_ => '??').join(','), parts);
89
+ }
90
+
91
+ // checkWhere(where: TypeModelWhere<TRecord>) {
92
+ // return checkWhere(where);
93
+ // }
94
+
95
+ buildWhere(builder: Knex.QueryBuilder, wheres?: TypeModelWhere<TRecord>) {
96
+ if (!wheres) return;
97
+ return buildWhere(this.db, builder, wheres);
98
+ }
99
+
100
+ buildJoin(builder: Knex.QueryBuilder, join?: IModelSelectParamsJoin<TRecord, ''>) {
101
+ if (!join) return;
102
+ const [joinType, joinTable, joinOn] = join;
103
+ builder[joinType](joinTable, cast(joinOn));
104
+ }
105
+
106
+ buildJoins(builder: Knex.QueryBuilder, joins?: IModelSelectParamsJoin<TRecord, ''>[]) {
107
+ if (!joins) return;
108
+ for (const [joinType, joinTable, joinOn] of joins) {
109
+ if (Array.isArray(joinOn)) {
110
+ cast(builder)[joinType](joinTable, ...joinOn);
111
+ } else {
112
+ builder[joinType](joinTable, joinOn);
113
+ }
114
+ }
115
+ }
116
+
117
+ buildDistinct(builder: Knex.QueryBuilder, distinct?: boolean | keyof TRecord | (keyof TRecord)[]) {
118
+ if (distinct === undefined || distinct === false) return;
119
+ if (distinct === true) {
120
+ builder.distinct();
121
+ } else if (Array.isArray(distinct)) {
122
+ builder.distinct(...distinct);
123
+ } else {
124
+ builder.distinct(distinct);
125
+ }
126
+ }
127
+
128
+ buildCount(builder: Knex.QueryBuilder, column?: TypeModelColumn<TRecord>, distinct?: boolean | keyof TRecord | (keyof TRecord)[]) {
129
+ if (column !== undefined) {
130
+ builder.count(column);
131
+ } else if (distinct !== undefined && distinct !== false) {
132
+ builder.count(this.raw(`distinct ${this.toIdentifier(distinct as any)}`));
133
+ } else {
134
+ builder.count();
135
+ }
136
+ }
137
+
138
+ buildIncrement(builder: Knex.QueryBuilder, columns: TypeModelIncrementParamsColumns<TRecord>) {
139
+ builder.increment(columns as any);
140
+ }
141
+
142
+ buildOrders(builder: Knex.QueryBuilder, orders) {
143
+ if (!orders) return;
144
+ for (const [orderColumn, orderDirection, orderNulls] of orders) {
145
+ builder.orderBy(orderColumn, orderDirection, orderNulls);
146
+ }
147
+ }
148
+
149
+ buildLimit(builder: Knex.QueryBuilder, limit?: number) {
150
+ if (limit !== 0 && limit !== undefined) {
151
+ builder.limit(limit);
152
+ }
153
+ }
154
+
155
+ buildOffset(builder: Knex.QueryBuilder, offset?: number) {
156
+ if (offset !== undefined) {
157
+ builder.offset(offset);
158
+ }
159
+ }
160
+
161
+ buildColumns(builder: Knex.QueryBuilder, columns?: TypeModelColumns<TRecord>, groups?: (keyof TRecord)[] | undefined) {
162
+ if (columns) {
163
+ builder.select(columns as any);
164
+ } else if (groups) {
165
+ builder.select(groups);
166
+ }
167
+ }
168
+
169
+ buildGroups(builder: Knex.QueryBuilder, groups?: TypeModelColumnsStrict<TRecord>) {
170
+ if (!groups) return;
171
+ groups = ensureArray(groups)!;
172
+ builder.groupBy(groups);
173
+ return groups;
174
+ }
175
+
176
+ buildAggrs(builder: Knex.QueryBuilder, aggrs?: TypeModelSelectAggrParamsAggrs<TRecord>) {
177
+ if (!aggrs) return;
178
+ for (const key in aggrs) {
179
+ const columns = ensureArray(aggrs[key]);
180
+ if (!columns) continue;
181
+ for (const column of columns) {
182
+ const column2 = `${key}_${column === '*' ? 'all' : column}`;
183
+ builder[key](column, { as: column2 });
184
+ }
185
+ }
186
+ }
187
+
188
+ buildPage(builder: Knex.QueryBuilder, page?: IModelSelectParamsPage) {
189
+ if (!page) return;
190
+ this.buildLimit(builder, page.size);
191
+ this.buildOffset(builder, page.index);
192
+ }
193
+
194
+ prepareHaving(builder: Knex.QueryBuilder, having?: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>) {
195
+ if (!having) return;
196
+ this.buildHaving(builder, having);
197
+ }
198
+
199
+ buildHaving(builder: Knex.QueryBuilder, having: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord>>) {
200
+ return buildWhere(this.db, builder, having, true);
201
+ }
202
+
203
+ prepareWhere(builder: Knex.QueryBuilder, table?: keyof ITableRecord, where?: TypeModelWhere<TRecord>, options?: IModelMethodOptionsGeneral) {
204
+ // table
205
+ table = table || this.getTable(where);
206
+ if (!table) throw new Error('should specify the table name');
207
+ // disableInstance/disableDeleted
208
+ where = Object.assign({}, where);
209
+ where = this._prepareWhereByOptions(table, where, options);
210
+ // build
211
+ this.buildWhere(builder, where);
212
+ }
213
+
214
+ extractCount(result: Array<object> | object, columnName?: string): string {
215
+ return this.extractFirstNumber(result, 0, columnName)!;
216
+ }
217
+
218
+ extractFirstNumber<T = number | string | undefined>(
219
+ result: Array<object> | object,
220
+ defaultValue?: T,
221
+ columnName?: string,
222
+ ): T extends undefined ? string | undefined : string {
223
+ const value = this.extractFirstValue(result, defaultValue, columnName);
224
+ if (value === undefined || value === null) return undefined as any;
225
+ return String(value);
226
+ }
227
+
228
+ extractFirstValue(result: Array<object> | object, defaultValue?: any, columnName?: string): any | undefined {
229
+ const value = this._extractFirstValue(result, columnName);
230
+ if (value === undefined || value === null) return defaultValue;
231
+ return value;
232
+ }
233
+
234
+ private _extractFirstValue(result: Array<object> | object, columnName?: string): any | undefined {
235
+ const res = Array.isArray(result) ? result[0] : result;
236
+ if (!res) return undefined;
237
+ if (columnName) return res[columnName];
238
+ const keys = Object.keys(res);
239
+ if (keys.length === 0) return undefined;
240
+ return res[keys[0]];
241
+ }
242
+
243
+ protected _prepareWhereByOptions(table: keyof ITableRecord, where, options?: IModelMethodOptionsGeneral) {
244
+ // disableInstance: should not check if specified
245
+ where = this._prepareDisableInstanceByOptions(table, where, options);
246
+ // disableDeleted: should not check if specified
247
+ where = this._prepareDisableDeletedByOptions(table, where, options);
248
+ // ok
249
+ return where;
250
+ }
251
+
252
+ protected _prepareInsertDataByOptions(table: keyof ITableRecord, data, options?: IModelMethodOptionsGeneral) {
253
+ let result = Object.assign({}, data);
254
+ // disableInstance: should not check if specified
255
+ result = this._prepareDisableInstanceByOptions(table, result, options, true);
256
+ // disableDeleted: should not check if specified
257
+ result = this._prepareDisableDeletedByOptions(table, result, options, true);
258
+ // createdAt/updatedAt
259
+ if (isNil(result.createdAt)) {
260
+ if (!this._checkDisableCreateTimeByOptions(options)) {
261
+ result.createdAt = new Date();
262
+ } else {
263
+ delete result.createdAt;
264
+ }
265
+ }
266
+ if (isNil(result.updatedAt)) {
267
+ if (!this._checkDisableUpdateTimeByOptions(options)) {
268
+ result.updatedAt = new Date();
269
+ } else {
270
+ delete result.updatedAt;
271
+ }
272
+ }
273
+ return result;
274
+ }
275
+ }
@@ -0,0 +1,129 @@
1
+ import type { ISwapDepsItem } from '@cabloy/deps';
2
+ import type { Knex } from 'knex';
3
+
4
+ import { swapDeps } from '@cabloy/deps';
5
+ import { cast } from 'vona';
6
+
7
+ import { BeanModelKnex } from './bean.model_knex.ts';
8
+
9
+ export class BeanModelView<TRecord extends {}> extends BeanModelKnex<TRecord> {
10
+ async createView(viewName: string, callback?: (viewBuilder: Knex.ViewBuilder) => any): Promise<void> {
11
+ if (callback) {
12
+ // create view
13
+ let _view: Knex.ViewBuilder | null = null;
14
+ await this.schema.createView(viewName, view => {
15
+ _view = view;
16
+ return callback(view);
17
+ });
18
+ // view sql
19
+ const sql = cast(_view).toSQL();
20
+ const viewSql = sql[0].sql;
21
+ // record view
22
+ const viewRecord = await this.modelViewRecord.get({ viewName });
23
+ if (viewRecord) {
24
+ await this.modelViewRecord.update({ id: viewRecord.id, viewSql });
25
+ } else {
26
+ await this.modelViewRecord.insert({ viewName, viewSql });
27
+ }
28
+ } else {
29
+ // get record
30
+ const viewRecord = await this.modelViewRecord.get({ viewName });
31
+ if (!viewRecord) throw new Error(`not found view record: ${viewName}`);
32
+ await this.raw(viewRecord.viewSql);
33
+ }
34
+ }
35
+
36
+ async dropView(viewName: string, disableRemoveRecord?: boolean) {
37
+ // drop view: use dropViewIfExists
38
+ await this.schema.dropViewIfExists(viewName);
39
+ // remove record
40
+ if (!disableRemoveRecord) {
41
+ await this.modelViewRecord.delete({ viewName });
42
+ }
43
+ }
44
+
45
+ async alterView(viewName: string, callback?: (viewBuilder: Knex.ViewBuilder) => any): Promise<void> {
46
+ await this._viewDependentsAll_handle(viewName, async () => {
47
+ // drop view
48
+ await this.dropView(viewName, true);
49
+ // create view
50
+ await this.createView(viewName, callback);
51
+ });
52
+ }
53
+
54
+ async createTable(tableName: string, callback: (tableBuilder: Knex.CreateTableBuilder) => any): Promise<void> {
55
+ await this.schema.createTable(tableName, callback);
56
+ }
57
+
58
+ async dropTable(tableName: string) {
59
+ await this.schema.dropTable(tableName);
60
+ }
61
+
62
+ async alterTable(tableName: string, callback: (tableBuilder: Knex.CreateTableBuilder) => any, alterViewAuto?: boolean): Promise<void> {
63
+ if (!alterViewAuto) {
64
+ // alter table
65
+ return await this.schema.alterTable(tableName, table => {
66
+ return callback(table);
67
+ });
68
+ }
69
+ await this._viewDependentsAll_handle(tableName, async () => {
70
+ await this.schema.alterTable(tableName, table => {
71
+ return callback(table);
72
+ });
73
+ });
74
+ }
75
+
76
+ async viewDependents(viewName: string): Promise<string[]> {
77
+ // builder
78
+ const builder = this.builder();
79
+ // dialect
80
+ return await this.dialect.viewDependents(builder, viewName);
81
+ }
82
+
83
+ async viewDependentsAll(viewName: string): Promise<string[]> {
84
+ // views
85
+ const views: ISwapDepsItem[] = [{ name: viewName, dependencies: [] }];
86
+ // dependencies all
87
+ await this._viewDependentsAll_inner(viewName, views);
88
+ // swap
89
+ swapDeps(views);
90
+ // shift
91
+ views.shift();
92
+ // ready
93
+ return views.map(view => view.name);
94
+ }
95
+
96
+ private async _viewDependentsAll_inner(viewName: string, views: ISwapDepsItem[]) {
97
+ const dependents = await this.viewDependents(viewName);
98
+ for (const dependent of dependents) {
99
+ // dependencies
100
+ const view = views.find(view => view.name === dependent);
101
+ if (view) {
102
+ const dep = cast(view.dependencies).find(dep => dep.toLowerCase() === viewName.toLowerCase());
103
+ if (!dep) {
104
+ cast(view.dependencies).push(viewName);
105
+ }
106
+ } else {
107
+ views.push({ name: dependent, dependencies: [viewName] });
108
+ }
109
+ // next
110
+ await this._viewDependentsAll_inner(dependent, views);
111
+ }
112
+ }
113
+
114
+ private async _viewDependentsAll_handle(viewName: string, callback: () => Promise<void>) {
115
+ // viewDependentsAll
116
+ const viewDependents = await this.viewDependentsAll(viewName);
117
+ // drop dependents
118
+ for (let i = viewDependents.length - 1; i >= 0; i--) {
119
+ const viewDependent = viewDependents[i];
120
+ await this.dropView(viewDependent, true);
121
+ }
122
+ // callback
123
+ await callback();
124
+ // create dependents
125
+ for (const viewDependent of viewDependents) {
126
+ await this.createView(viewDependent);
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,8 @@
1
+ import { Virtual } from 'vona';
2
+ import { Bean } from 'vona-module-a-bean';
3
+
4
+ import { BeanModelCrudTable } from './bean.model/bean.model_crud_table.ts';
5
+
6
+ @Bean()
7
+ @Virtual()
8
+ export class BeanModel<TRecord extends {} = any> extends BeanModelCrudTable<TRecord> {}
@@ -0,0 +1,8 @@
1
+ import { Virtual } from 'vona';
2
+ import { Bean } from 'vona-module-a-bean';
3
+
4
+ import { BeanModelCache } from './bean.model/bean.model_cache.ts';
5
+
6
+ @Bean()
7
+ @Virtual()
8
+ export class BeanModelBase<TRecord extends {} = any> extends BeanModelCache<TRecord> {}
@@ -0,0 +1,24 @@
1
+ import type { IBroadcastExecute } from 'vona-module-a-broadcast';
2
+
3
+ import { cast } from 'vona';
4
+ import { BeanBroadcastBase, Broadcast } from 'vona-module-a-broadcast';
5
+
6
+ import type { IDatabaseClientRecord } from '../types/database.ts';
7
+
8
+ export interface TypeBroadcastColumnsClearJobData {
9
+ clientName?: keyof IDatabaseClientRecord;
10
+ tableName?: string;
11
+ }
12
+
13
+ @Broadcast()
14
+ export class BroadcastColumnsClear
15
+ extends BeanBroadcastBase<TypeBroadcastColumnsClearJobData>
16
+ implements IBroadcastExecute<TypeBroadcastColumnsClearJobData>
17
+ {
18
+ async execute(data: TypeBroadcastColumnsClearJobData, isEmitter?: boolean) {
19
+ const { clientName, tableName } = data;
20
+ if (!isEmitter) {
21
+ await cast(this.scope.service.database).columnsClearWorker(clientName, tableName);
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,10 @@
1
+ import { BeanEventBase, Event } from 'vona-module-a-event';
2
+
3
+ import type { IDatabaseClientRecord } from '../types/database.ts';
4
+
5
+ export type TypeEventClientNameRealData = keyof IDatabaseClientRecord;
6
+
7
+ export type TypeEventClientNameRealResult = keyof IDatabaseClientRecord;
8
+
9
+ @Event()
10
+ export class EventClientNameReal extends BeanEventBase<TypeEventClientNameRealData, TypeEventClientNameRealResult> {}
@@ -0,0 +1,13 @@
1
+ import { BeanEventBase, Event } from 'vona-module-a-event';
2
+
3
+ import type { IDatabaseClientRecord } from '../types/database.ts';
4
+
5
+ export interface TypeEventColumnsClearData {
6
+ clientName: keyof IDatabaseClientRecord;
7
+ tableName?: string;
8
+ }
9
+
10
+ export type TypeEventColumnsClearResult = void;
11
+
12
+ @Event()
13
+ export class EventColumnsClear extends BeanEventBase<TypeEventColumnsClearData, TypeEventColumnsClearResult> {}
@@ -0,0 +1,12 @@
1
+ import type { IDecoratorBeanOptionsBase } from 'vona';
2
+ import type { IHmrReload } from 'vona-module-a-hmr';
3
+
4
+ import { BeanBase } from 'vona';
5
+ import { Hmr } from 'vona-module-a-hmrbase';
6
+
7
+ @Hmr()
8
+ export class HmrEntity extends BeanBase implements IHmrReload {
9
+ async reload(_beanOptions: IDecoratorBeanOptionsBase) {
10
+ this.app.bean.worker.reload();
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ import type { IDecoratorBeanOptionsBase } from 'vona';
2
+ import type { IHmrReload } from 'vona-module-a-hmr';
3
+
4
+ import { BeanBase } from 'vona';
5
+ import { Hmr } from 'vona-module-a-hmrbase';
6
+ // import { clearAllCacheModelsClear, clearCacheModelCacheInstance } from '../lib/const.ts';
7
+
8
+ @Hmr()
9
+ export class HmrModel extends BeanBase implements IHmrReload {
10
+ async reload(_beanOptions: IDecoratorBeanOptionsBase) {
11
+ // more deps: dto/model
12
+ this.app.bean.worker.reload();
13
+ // clearAllCacheModelsClear(this.app);
14
+ // await clearCacheModelCacheInstance(this.app, beanOptions.beanFullName);
15
+ }
16
+ }
@@ -0,0 +1,29 @@
1
+ import type { IQueueExecute, IQueuePushOptions } from 'vona-module-a-queue';
2
+
3
+ import { BeanQueueBase, Queue } from 'vona-module-a-queue';
4
+
5
+ import type { IDatabaseClientRecord } from '../types/database.ts';
6
+ import type { ITableRecord } from '../types/onion/table.ts';
7
+
8
+ export interface TypeQueueDoubleDeleteJobData {
9
+ beanFullName: string;
10
+ clientName: keyof IDatabaseClientRecord;
11
+ table?: keyof ITableRecord;
12
+ method: 'cacheEntityDelInner' | 'cacheEntityClearInner' | 'cacheQueryClearInner';
13
+ args: any[];
14
+ }
15
+
16
+ export type TypeQueueDoubleDeleteJobResult = void;
17
+
18
+ @Queue({
19
+ options: { job: { delay: 3 * 1000 } },
20
+ })
21
+ export class QueueDoubleDelete
22
+ extends BeanQueueBase<TypeQueueDoubleDeleteJobData, TypeQueueDoubleDeleteJobResult>
23
+ implements IQueueExecute<TypeQueueDoubleDeleteJobData, TypeQueueDoubleDeleteJobResult>
24
+ {
25
+ async execute(data: TypeQueueDoubleDeleteJobData, _options?: IQueuePushOptions): Promise<TypeQueueDoubleDeleteJobResult> {
26
+ const beanInstance = this.app.bean._newBean(data.beanFullName as any, data.clientName, data.table);
27
+ await beanInstance[data.method](...data.args);
28
+ }
29
+ }
@@ -0,0 +1,45 @@
1
+ import type { IOnionSlice } from 'vona-module-a-onion';
2
+ import type { IScheduleExecute } from 'vona-module-a-schedule';
3
+
4
+ import { BeanBase } from 'vona';
5
+ import { Schedule } from 'vona-module-a-schedule';
6
+
7
+ import type { IModelRecord, ISoftDeletionPrune } from '../types/onion/model.ts';
8
+ import type { BeanModelCache } from './bean.model/bean.model_cache.ts';
9
+
10
+ @Schedule({ repeat: { every: 24 * 3600 * 1000 } })
11
+ export class ScheduleSoftDeletionPrune extends BeanBase implements IScheduleExecute {
12
+ async execute() {
13
+ const onionSlices = this.bean.onion.model.getOnionsEnabledCached();
14
+ for (const onionSlice of onionSlices) {
15
+ if (onionSlice.beanOptions.options?.disableDeleted) continue;
16
+ let softDeletionPrune = onionSlice.beanOptions.options?.softDeletionPrune ?? this.scope.config.softDeletionPrune.enable;
17
+ if (!softDeletionPrune) continue;
18
+ if (softDeletionPrune === true) softDeletionPrune = {};
19
+ await this._modulePrune(onionSlice, softDeletionPrune);
20
+ }
21
+ }
22
+
23
+ private async _modulePrune<MODULE extends BeanModelCache, T extends keyof IModelRecord>(
24
+ onionSlice: IOnionSlice<IModelRecord, T, unknown>,
25
+ softDeletionPrune: ISoftDeletionPrune,
26
+ ) {
27
+ const handler = softDeletionPrune.handler;
28
+ const expired = softDeletionPrune.expired ?? this.scope.config.softDeletionPrune.expired;
29
+ const modelTarget = this.bean._getBean<MODULE>(onionSlice.beanOptions.beanFullName as any);
30
+ if (handler) {
31
+ await handler(this.ctx, modelTarget, { expired });
32
+ } else {
33
+ const expiredTime = new Date(Date.now() - expired);
34
+ await modelTarget.delete(
35
+ {
36
+ deleted: true,
37
+ updatedAt: {
38
+ _lt_: expiredTime,
39
+ },
40
+ } as any,
41
+ { disableDeleted: true },
42
+ );
43
+ }
44
+ }
45
+ }