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,98 @@
1
+ import type { BeanSummerCacheBase, IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
2
+
3
+ import { BeanBase, deepExtend } from 'vona';
4
+
5
+ import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
6
+ import type { TypeModelCacheType } from '../types/model.ts';
7
+ import type { ITableRecord } from '../types/onion/table.ts';
8
+
9
+ import { getCacheModelCacheInstances } from './const.ts';
10
+
11
+ const SymbolCacheOptions = Symbol('SymbolCacheOptions');
12
+ const SymbolCacheEnabled = Symbol('SymbolCacheEnabled');
13
+
14
+ export class ModelCacheBase extends BeanBase {
15
+ private [SymbolCacheOptions]: IDecoratorSummerCacheOptions | false;
16
+ protected _model: BeanModelCache;
17
+ private _cacheType: TypeModelCacheType;
18
+
19
+ protected __init__(model: BeanModelCache, cacheType: TypeModelCacheType) {
20
+ this._model = model;
21
+ this._cacheType = cacheType;
22
+ }
23
+
24
+ private get scopeOrm() {
25
+ return this.$scope.orm;
26
+ }
27
+
28
+ public getInstance(table: keyof ITableRecord): BeanSummerCacheBase {
29
+ if (this.options === false) throw new Error('cache disabled');
30
+ const beanFullName = this._model.$beanFullName;
31
+ const cacheName = this.getName(table);
32
+ const cacheModelCacheInstances = getCacheModelCacheInstances(this.app);
33
+ if (!cacheModelCacheInstances[beanFullName]) cacheModelCacheInstances[beanFullName] = {};
34
+ if (!cacheModelCacheInstances[beanFullName][cacheName]) {
35
+ cacheModelCacheInstances[beanFullName][cacheName] = this.app.bean.summer.cache<any, any>(cacheName, this.options);
36
+ }
37
+ return cacheModelCacheInstances[beanFullName][cacheName];
38
+ }
39
+
40
+ public getName(table: keyof ITableRecord) {
41
+ const clientNameReal = this.$scope.orm.service.database.prepareClientNameReal(this._model.db.clientName);
42
+ return `${this._model.$beanFullName}:${clientNameReal}:${table}:${this._cacheType}`;
43
+ }
44
+
45
+ public get options() {
46
+ if (this[SymbolCacheOptions] === undefined) {
47
+ this[SymbolCacheOptions] = this._getCacheOptionsInner();
48
+ }
49
+ return this[SymbolCacheOptions];
50
+ }
51
+
52
+ public get enabled() {
53
+ if (this[SymbolCacheEnabled] === undefined) {
54
+ this[SymbolCacheEnabled] = this._getCacheEnabledInner();
55
+ }
56
+ return this[SymbolCacheEnabled];
57
+ }
58
+
59
+ private _getCacheEnabledInner() {
60
+ if (this.options === false) return false;
61
+ // enable
62
+ if (!this.bean.onion.checkOnionOptionsEnabled(this.options)) return false;
63
+ // default
64
+ return true;
65
+ }
66
+
67
+ private _getCacheOptionsInner() {
68
+ if (this._model.options.cache?.[this._cacheType] === false) return false;
69
+ // options
70
+ let _cacheOptions = (this._model.options.cache?.[this._cacheType] ?? {}) as IDecoratorSummerCacheOptions;
71
+ // preset
72
+ let configPreset;
73
+ let preset = _cacheOptions.preset;
74
+ if (!preset && !_cacheOptions.mode) preset = this.scopeOrm.config.summer.presetDefault;
75
+ if (preset) {
76
+ configPreset = this.scopeOrm.config.summer.preset[preset];
77
+ }
78
+ // extend
79
+ _cacheOptions = deepExtend(
80
+ {
81
+ enable: this.scopeOrm.config.summer.enable,
82
+ meta: this.scopeOrm.config.summer.meta,
83
+ mem: {
84
+ disableInstance: this._model.disableInstance,
85
+ },
86
+ redis: {
87
+ disableInstance: this._model.disableInstance,
88
+ client: this.scopeOrm.config.summer.redis.client,
89
+ },
90
+ },
91
+ configPreset,
92
+ _cacheOptions,
93
+ { preset: undefined },
94
+ );
95
+ // ok
96
+ return _cacheOptions;
97
+ }
98
+ }
@@ -0,0 +1,118 @@
1
+ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
2
+ import type { IModelClassRecord } from '../types/onion/model.ts';
3
+ import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
4
+ import type { IModelRelationOptionsManyStatic, IModelRelationOptionsOneStatic } from './relationsStatic.ts';
5
+
6
+ function hasOne<MODEL extends BeanModelMeta | keyof IModelClassRecord, OPTIONS extends IModelRelationOptionsOneStatic<TypeModelOfModelLike<MODEL>>>(
7
+ classModel: TypeModelClassLike<MODEL>,
8
+ key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
9
+ options?: OPTIONS,
10
+ ): any {
11
+ // : IModelRelationHasOne<MODEL, AUTOLOAD, COLUMNS> {
12
+ return { type: 'hasOne', model: classModel, key, options };
13
+ }
14
+
15
+ function belongsTo<
16
+ MODELSelf extends BeanModelMeta | keyof IModelClassRecord,
17
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
18
+ OPTIONS extends IModelRelationOptionsOneStatic<TypeModelOfModelLike<MODEL>>,
19
+ >(
20
+ _classModelSelf: TypeModelClassLike<MODELSelf>,
21
+ classModel: TypeModelClassLike<MODEL>,
22
+ key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
23
+ options?: OPTIONS,
24
+ ): any {
25
+ // : IModelRelationBelongsTo<MODELSelf, MODEL, AUTOLOAD, COLUMNS> {
26
+ return { type: 'belongsTo', model: classModel, key, options };
27
+ }
28
+
29
+ function hasMany<
30
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
31
+ OPTIONS extends IModelRelationOptionsManyStatic<TypeModelOfModelLike<MODEL>, ModelJoins, Group>,
32
+ ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
33
+ Group extends boolean | undefined = undefined,
34
+ >(
35
+ classModel: TypeModelClassLike<MODEL>,
36
+ key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
37
+ options?: OPTIONS,
38
+ _modelJoins?: ModelJoins,
39
+ _group?: Group,
40
+ ): any {
41
+ // : IModelRelationHasMany<MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
42
+ return { type: 'hasMany', model: classModel, key, options };
43
+ }
44
+
45
+ function belongsToMany<
46
+ MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
47
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
48
+ OPTIONS extends IModelRelationOptionsManyStatic<TypeModelOfModelLike<MODEL>, ModelJoins, Group>,
49
+ ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
50
+ Group extends boolean | undefined = undefined,
51
+ >(
52
+ classModelMiddle: TypeModelClassLike<MODELMiddle>,
53
+ classModel: TypeModelClassLike<MODEL>,
54
+ keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
55
+ keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
56
+ options?: OPTIONS,
57
+ _modelJoins?: ModelJoins,
58
+ _group?: Group,
59
+ ): any {
60
+ // : IModelRelationBelongsToMany<MODELMiddle, MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
61
+ return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
62
+ }
63
+
64
+ export const $relation = {
65
+ hasOne,
66
+ belongsTo,
67
+ hasMany,
68
+ belongsToMany,
69
+ };
70
+
71
+ // function hasMany<
72
+ // MODEL extends BeanModelMeta | (keyof IModelClassRecord),
73
+ // AUTOLOAD extends boolean = boolean,
74
+ // COLUMNS
75
+ // extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
76
+ // ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
77
+ // Aggrs extends TypeModelSelectAggrParamsAggrs<
78
+ // TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
79
+ // > | undefined = undefined, // TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
80
+ // Groups extends TypeModelColumnsStrict<
81
+ // TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
82
+ // > | undefined = undefined, // TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
83
+ // >(
84
+ // classModel: TypeModelClassLike<MODEL>,
85
+ // key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
86
+ // options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>,
87
+ // _modelJoins?: ModelJoins,
88
+ // _aggrs?: Aggrs,
89
+ // _groups?: Groups,
90
+ // ): any { // : IModelRelationHasMany<MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
91
+ // return { type: 'hasMany', model: classModel, key, options };
92
+ // }
93
+
94
+ // function belongsToMany<
95
+ // MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord),
96
+ // MODEL extends BeanModelMeta | (keyof IModelClassRecord),
97
+ // AUTOLOAD extends boolean = boolean,
98
+ // COLUMNS
99
+ // extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
100
+ // ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
101
+ // Aggrs extends TypeModelSelectAggrParamsAggrs<
102
+ // TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
103
+ // > | undefined = undefined, // TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
104
+ // Groups extends TypeModelColumnsStrict<
105
+ // TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
106
+ // > | undefined = undefined, // TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
107
+ // >(
108
+ // classModelMiddle: TypeModelClassLike<MODELMiddle>,
109
+ // classModel: TypeModelClassLike<MODEL>,
110
+ // keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
111
+ // keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
112
+ // options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>,
113
+ // _modelJoins?: ModelJoins,
114
+ // _aggrs?: Aggrs,
115
+ // _groups?: Groups,
116
+ // ): any { // : IModelRelationBelongsToMany<MODELMiddle, MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
117
+ // return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
118
+ // }
@@ -0,0 +1,75 @@
1
+ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
2
+ import type { IModelClassRecord } from '../types/onion/model.ts';
3
+ import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
4
+ import type {
5
+ IModelRelationBelongsToDynamic,
6
+ IModelRelationBelongsToManyDynamic,
7
+ IModelRelationHasManyDynamic,
8
+ IModelRelationHasOneDynamic,
9
+ IModelRelationOptionsManyDynamic,
10
+ IModelRelationOptionsOneDynamic,
11
+ } from '../types/relationsDefDynamic.ts';
12
+
13
+ function hasOne<
14
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
15
+ KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
16
+ OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined,
17
+ >(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS> {
18
+ return { type: 'hasOne', model: classModel, key, options };
19
+ }
20
+
21
+ function belongsTo<
22
+ MODELSelf extends BeanModelMeta | keyof IModelClassRecord,
23
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
24
+ OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined,
25
+ >(
26
+ _classModelSelf: TypeModelClassLike<MODELSelf>,
27
+ classModel: TypeModelClassLike<MODEL>,
28
+ key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
29
+ options?: OPTIONS,
30
+ ): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS> {
31
+ return { type: 'belongsTo', model: classModel, key, options };
32
+ }
33
+
34
+ function hasMany<
35
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
36
+ KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
37
+ // not use `| undefined = undefined` or `= {}`
38
+ OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined,
39
+ ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
40
+ Group extends boolean | undefined = undefined,
41
+ >(
42
+ classModel: TypeModelClassLike<MODEL>,
43
+ key: KEY,
44
+ options?: OPTIONS,
45
+ _modelJoins?: ModelJoins,
46
+ _group?: Group,
47
+ ): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS, ModelJoins, Group> {
48
+ return { type: 'hasMany', model: classModel, key, options };
49
+ }
50
+
51
+ function belongsToMany<
52
+ MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
53
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
54
+ // not use `| undefined = undefined` or `= {}`
55
+ OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined,
56
+ ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
57
+ Group extends boolean | undefined = undefined,
58
+ >(
59
+ classModelMiddle: TypeModelClassLike<MODELMiddle>,
60
+ classModel: TypeModelClassLike<MODEL>,
61
+ keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
62
+ keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
63
+ options?: OPTIONS,
64
+ _modelJoins?: ModelJoins,
65
+ _group?: Group,
66
+ ): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS, ModelJoins, Group> {
67
+ return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
68
+ }
69
+
70
+ export const $relationDynamic = {
71
+ hasOne,
72
+ belongsTo,
73
+ hasMany,
74
+ belongsToMany,
75
+ };
@@ -0,0 +1,60 @@
1
+ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
2
+ import type { IModelClassRecord } from '../types/onion/model.ts';
3
+ import type { TypeModelClassLike, TypeModelOfModelLike, TypeSymbolKeyEntity } from '../types/relations.ts';
4
+ import type { IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic } from '../types/relationsDefDynamic.ts';
5
+ import type {
6
+ IModelRelationOptionsBelongsToManyMutate,
7
+ IModelRelationOptionsManyMutate,
8
+ IModelRelationOptionsOneMutate,
9
+ } from '../types/relationsDefMutate.ts';
10
+
11
+ function hasOne<
12
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
13
+ KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
14
+ OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>,
15
+ >(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS> {
16
+ return { type: 'hasOne', model: classModel, key, options };
17
+ }
18
+
19
+ // function belongsTo<
20
+ // MODELSelf extends BeanModelMeta | (keyof IModelClassRecord),
21
+ // MODEL extends BeanModelMeta | (keyof IModelClassRecord),
22
+ // OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>,
23
+ // >(
24
+ // _classModelSelf: TypeModelClassLike<MODELSelf>,
25
+ // classModel: TypeModelClassLike<MODEL>,
26
+ // key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
27
+ // options?: OPTIONS,
28
+ // ): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS> {
29
+ // return { type: 'belongsTo', model: classModel, key, options };
30
+ // }
31
+
32
+ function hasMany<
33
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
34
+ KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
35
+ // not use `| undefined = undefined` or `= {}`
36
+ OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>,
37
+ >(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS> {
38
+ return { type: 'hasMany', model: classModel, key, options };
39
+ }
40
+
41
+ function belongsToMany<
42
+ MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
43
+ MODEL extends BeanModelMeta | keyof IModelClassRecord,
44
+ OPTIONS extends IModelRelationOptionsBelongsToManyMutate<TypeModelOfModelLike<MODEL>>,
45
+ >(
46
+ classModelMiddle: TypeModelClassLike<MODELMiddle>,
47
+ classModel: TypeModelClassLike<MODEL>,
48
+ keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
49
+ keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
50
+ options?: OPTIONS,
51
+ ): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS> {
52
+ return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
53
+ }
54
+
55
+ export const $relationMutate = {
56
+ hasOne,
57
+ // belongsTo,
58
+ hasMany,
59
+ belongsToMany,
60
+ };
@@ -0,0 +1,18 @@
1
+ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
2
+ import type { TypeModelsClassLikeGeneral } from '../types/relations.ts';
3
+ import type { IModelRelationOptionsManyDynamic, IModelRelationOptionsOneDynamic } from '../types/relationsDefDynamic.ts';
4
+
5
+ export interface IModelRelationOptionsManyStatic<
6
+ MODEL extends BeanModelMeta,
7
+ ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
8
+ Group extends boolean | undefined = undefined,
9
+ > extends Omit<IModelRelationOptionsManyDynamic<MODEL, ModelJoins, Group>, 'include' | 'with'> {
10
+ autoload?: boolean;
11
+ }
12
+
13
+ export interface IModelRelationOptionsOneStatic<MODEL extends BeanModelMeta> extends Omit<
14
+ IModelRelationOptionsOneDynamic<MODEL>,
15
+ 'include' | 'with'
16
+ > {
17
+ autoload?: boolean;
18
+ }
@@ -0,0 +1,45 @@
1
+ import { deepExtend } from 'vona';
2
+
3
+ import type { IModelRelationIncludeWrapper } from '../types/model.ts';
4
+ import type { IRelationItem } from '../types/relationsDef.ts';
5
+
6
+ export function handleRelationsCollection(relationsStatic?: Record<string, any>, includeWrapper?: IModelRelationIncludeWrapper): IRelationItem[] {
7
+ // collect
8
+ const relations: IRelationItem[] = [];
9
+ // include
10
+ if (relationsStatic) {
11
+ for (const key in relationsStatic) {
12
+ const relationDef = relationsStatic[key];
13
+ const relationCur: any = includeWrapper?.include?.[key];
14
+ let relationReal;
15
+ let includeReal;
16
+ let withReal;
17
+ let autoload;
18
+ if (relationCur === false) {
19
+ continue;
20
+ } else if (relationCur === true) {
21
+ relationReal = relationDef;
22
+ autoload = relationDef.options?.autoload;
23
+ } else if (typeof relationCur === 'object') {
24
+ relationReal = deepExtend({}, relationDef, { options: relationCur });
25
+ includeReal = relationCur.include;
26
+ withReal = relationCur.with;
27
+ } else if (relationDef.options?.autoload) {
28
+ relationReal = relationDef;
29
+ autoload = relationDef.options?.autoload;
30
+ } else {
31
+ continue;
32
+ }
33
+ relations.push([key, relationReal, includeReal, withReal, autoload]);
34
+ }
35
+ }
36
+ // with
37
+ if (includeWrapper?.with) {
38
+ for (const key in includeWrapper.with) {
39
+ const relationReal: any = includeWrapper.with[key];
40
+ if (!relationReal) continue;
41
+ relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
42
+ }
43
+ }
44
+ return relations;
45
+ }
package/src/main.ts ADDED
@@ -0,0 +1,79 @@
1
+ import type { FunctionAny, IModuleMain, PowerPartial, VonaApplication, VonaContext } from 'vona';
2
+
3
+ import { BeanSimple, cast, combineConfigDefault, deepExtend } from 'vona';
4
+ import { ServiceDatabaseAsyncLocalStorage, ServiceTransactionConsistency‌ } from 'vona-module-a-orm';
5
+
6
+ import type { ConfigDatabase } from './types/config.ts';
7
+
8
+ import { ExtendKnex } from './extend/index.ts';
9
+
10
+ const SymbolTransactionConsistency = Symbol('SymbolTransactionConsistency');
11
+
12
+ export class Main extends BeanSimple implements IModuleMain {
13
+ async moduleLoading() {
14
+ // config
15
+ const _configDefault = await combineConfigDefault<ConfigDatabase>(this.app, configDefault, configDev, configProd, configTest);
16
+ this.app.config.database = deepExtend({}, _configDefault, this.app.config.database);
17
+ }
18
+
19
+ async moduleLoaded() {
20
+ // ExtendKnex
21
+ ExtendKnex(this.app);
22
+ // db
23
+ Object.defineProperty(this.app.context, 'db', {
24
+ enumerable: false,
25
+ get(this: VonaContext) {
26
+ return this.app.bean._getBean(ServiceDatabaseAsyncLocalStorage).current;
27
+ },
28
+ });
29
+ // transactionConsistency
30
+ Object.defineProperty(this.app.context, 'transactionConsistency', {
31
+ enumerable: false,
32
+ get(this: VonaContext) {
33
+ if (!this[SymbolTransactionConsistency]) {
34
+ this[SymbolTransactionConsistency] = this.app.bean._newBean(ServiceTransactionConsistency‌);
35
+ }
36
+ return this[SymbolTransactionConsistency];
37
+ },
38
+ });
39
+ // commit
40
+ Object.defineProperty(this.app.context, 'commit', {
41
+ enumerable: false,
42
+ get() {
43
+ return function (this: VonaContext, cb: FunctionAny) {
44
+ if (this.ctxCaller) {
45
+ this.ctxCaller.commit(cb);
46
+ } else {
47
+ cast(this).transactionConsistency.commit(cb);
48
+ }
49
+ };
50
+ },
51
+ });
52
+ Object.defineProperty(this.app.context, 'commitsDone', {
53
+ enumerable: false,
54
+ get() {
55
+ return function (this: VonaContext) {
56
+ return cast(this).transactionConsistency.commitsDone();
57
+ };
58
+ },
59
+ });
60
+ }
61
+
62
+ async configLoaded(_config) {}
63
+ }
64
+
65
+ export async function configDefault(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
66
+ return {};
67
+ }
68
+
69
+ async function configDev(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
70
+ return {};
71
+ }
72
+
73
+ async function configProd(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
74
+ return {};
75
+ }
76
+
77
+ async function configTest(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
78
+ return {};
79
+ }
@@ -0,0 +1,37 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+
3
+ import { Service } from 'vona-module-a-bean';
4
+
5
+ import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
6
+ import type { ITableRecord } from '../types/onion/table.ts';
7
+
8
+ import { ModelCacheBase } from '../lib/modelCacheBase.ts';
9
+
10
+ @Service()
11
+ export class ServiceCacheEntity extends ModelCacheBase {
12
+ protected __init__(model: BeanModelCache) {
13
+ super.__init__(model, 'entity');
14
+ }
15
+
16
+ public async clear(table?: keyof ITableRecord) {
17
+ if (!this.enabled) return;
18
+ table = table || this._model.getTable(undefined);
19
+ const cache = this.getInstance(table);
20
+ await cache.clear();
21
+ }
22
+
23
+ public async del(id: TableIdentity | TableIdentity[], table?: keyof ITableRecord) {
24
+ if (!this.enabled) return;
25
+ table = table || this._model.getTable(undefined);
26
+ const cache = this.getInstance(table);
27
+ if (Array.isArray(id)) {
28
+ await cache.mdel(id);
29
+ } else {
30
+ await cache.del(id);
31
+ }
32
+ }
33
+
34
+ public get keysAux() {
35
+ return this._model.options.cache?.keysAux;
36
+ }
37
+ }
@@ -0,0 +1,20 @@
1
+ import { Service } from 'vona-module-a-bean';
2
+
3
+ import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
4
+ import type { ITableRecord } from '../types/onion/table.ts';
5
+
6
+ import { ModelCacheBase } from '../lib/modelCacheBase.ts';
7
+
8
+ @Service()
9
+ export class ServiceCacheQuery extends ModelCacheBase {
10
+ protected __init__(model: BeanModelCache) {
11
+ super.__init__(model, 'query');
12
+ }
13
+
14
+ public async clear(table?: keyof ITableRecord) {
15
+ if (!this.enabled) return;
16
+ table = table || this._model.getTable(undefined);
17
+ const cache = this.getInstance(table);
18
+ await cache.clear();
19
+ }
20
+ }
@@ -0,0 +1,69 @@
1
+ import { BeanBase } from 'vona';
2
+ import { Service } from 'vona-module-a-bean';
3
+
4
+ import type { ITableColumns, ITableColumnsDefault } from '../types/columns.ts';
5
+ import type { IDatabaseClientRecord } from '../types/database.ts';
6
+
7
+ const SymbolColumnsCache = Symbol('SymbolColumnsCache');
8
+ const SymbolColumnsDefaultCache = Symbol('SymbolColumnsDefaultCache');
9
+
10
+ @Service()
11
+ export class ServiceColumnsCache extends BeanBase {
12
+ clientName: keyof IDatabaseClientRecord;
13
+ protected [SymbolColumnsCache]: Record<string, ITableColumns> = {};
14
+ protected [SymbolColumnsDefaultCache]: Record<string, ITableColumnsDefault> = {};
15
+ private _onColumnsClearCancel?: Function;
16
+
17
+ /** real client name */
18
+ protected __init__(clientName: keyof IDatabaseClientRecord) {
19
+ this.clientName = clientName;
20
+ this._onColumnsClearCancel = this.scope.event.columnsClear.on(({ clientName, tableName }, next) => {
21
+ if (clientName === this.clientName) {
22
+ this.columnsClear(tableName);
23
+ }
24
+ next();
25
+ });
26
+ }
27
+
28
+ protected async __dispose__() {
29
+ this._onColumnsClearCancel?.();
30
+ }
31
+
32
+ getColumnsDefaultCache(table: string) {
33
+ return this[SymbolColumnsDefaultCache][table];
34
+ }
35
+
36
+ setColumnsDefaultCache(table: string, data: ITableColumnsDefault) {
37
+ this[SymbolColumnsDefaultCache][table] = data;
38
+ }
39
+
40
+ deleteColumnsDefaultCache(table: string) {
41
+ delete this[SymbolColumnsDefaultCache][table];
42
+ }
43
+
44
+ getColumnsCache(table: string) {
45
+ return this[SymbolColumnsCache][table];
46
+ }
47
+
48
+ setColumnsCache(table: string, columns: ITableColumns) {
49
+ this[SymbolColumnsCache][table] = columns;
50
+ }
51
+
52
+ deleteColumnsCache(table: string) {
53
+ delete this[SymbolColumnsCache][table];
54
+ }
55
+
56
+ columnsClear(tableName?: string) {
57
+ if (tableName) {
58
+ const exists = this.getColumnsCache(tableName);
59
+ this.deleteColumnsCache(tableName);
60
+ this.deleteColumnsDefaultCache(tableName);
61
+ return exists;
62
+ } else {
63
+ const exists = Object.keys(this[SymbolColumnsCache]).length > 0;
64
+ this[SymbolColumnsCache] = {};
65
+ this[SymbolColumnsDefaultCache] = {};
66
+ return exists;
67
+ }
68
+ }
69
+ }