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,147 @@
1
+ import type knex from 'knex';
2
+ import type { Knex } from 'knex';
3
+ import type { FunctionAny, FunctionAsync } from 'vona';
4
+
5
+ import { BeanBase } from 'vona';
6
+ import { Service } from 'vona-module-a-bean';
7
+
8
+ import type { ITransactionConsistencyCommitOptions, ITransactionOptions } from '../types/transaction.ts';
9
+ import type { ServiceDb } from './db_.ts';
10
+ import type { ServiceTransactionFiber } from './transactionFiber_.ts';
11
+
12
+ import { TransactionIsolationLevelsMap } from '../types/transaction.ts';
13
+ import { ServiceTransactionAsyncLocalStorage } from './transactionAsyncLocalStorage_.ts';
14
+
15
+ @Service()
16
+ export class ServiceTransaction extends BeanBase {
17
+ private _db: ServiceDb;
18
+
19
+ protected __init__(db: ServiceDb) {
20
+ this._db = db;
21
+ }
22
+
23
+ get transactionState() {
24
+ return this.bean._getBean(ServiceTransactionAsyncLocalStorage).transactionState;
25
+ }
26
+
27
+ get transactionFiber(): ServiceTransactionFiber | undefined {
28
+ return this.transactionState.get(this._db);
29
+ }
30
+
31
+ get inTransaction() {
32
+ return !!this.transactionFiber;
33
+ }
34
+
35
+ get connection(): knex.Knex.Transaction | undefined {
36
+ return this.transactionFiber?.connection;
37
+ }
38
+
39
+ async commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions) {
40
+ const fiber = this.transactionFiber;
41
+ if (!fiber) {
42
+ if (!options?.ignoreIfNotInTransaction) {
43
+ await cb();
44
+ }
45
+ } else {
46
+ fiber.commit(cb);
47
+ }
48
+ }
49
+
50
+ compensate(cb: FunctionAny) {
51
+ const fiber = this.transactionFiber;
52
+ if (fiber) {
53
+ fiber.compensate(cb);
54
+ }
55
+ }
56
+
57
+ async begin<RESULT>(fn: FunctionAsync<RESULT>, options?: ITransactionOptions): Promise<RESULT> {
58
+ // transactionOptions
59
+ const transactionOptions = Object.assign({}, options, { propagation: undefined });
60
+ // propagation
61
+ const propagation = options?.propagation ?? 'REQUIRED';
62
+ if (propagation === 'REQUIRED') {
63
+ // required
64
+ return this._isolationLevelRequired(fn, transactionOptions);
65
+ } else if (propagation === 'SUPPORTS') {
66
+ // supports
67
+ if (this.inTransaction) {
68
+ return this._isolationLevelRequired(fn, transactionOptions);
69
+ } else {
70
+ return fn();
71
+ }
72
+ } else if (propagation === 'MANDATORY') {
73
+ // mandatory
74
+ if (this.inTransaction) {
75
+ return this._isolationLevelRequired(fn, transactionOptions);
76
+ } else {
77
+ throw new Error('transaction error: EnumTransactionPropagation.MANDATORY');
78
+ }
79
+ } else if (propagation === 'REQUIRES_NEW') {
80
+ // requires_new
81
+ if (!this.inTransaction) {
82
+ return this._isolationLevelRequired(fn, transactionOptions);
83
+ } else {
84
+ return this.bean.database.switchDbIsolate(() => {
85
+ return this.bean.database.current.transaction.begin(() => {
86
+ return fn();
87
+ }, transactionOptions);
88
+ }, this._db.info);
89
+ }
90
+ } else if (propagation === 'NOT_SUPPORTED') {
91
+ if (!this.inTransaction) {
92
+ return fn();
93
+ } else {
94
+ return this.bean.database.switchDbIsolate(fn, this._db.info);
95
+ }
96
+ } else if (propagation === 'NEVER') {
97
+ if (!this.inTransaction) {
98
+ return fn();
99
+ } else {
100
+ throw new Error('transaction error: EnumTransactionPropagation.NEVER');
101
+ }
102
+ }
103
+ throw new Error('transaction error: unknown propagation');
104
+ }
105
+
106
+ private async _isolationLevelRequired<RESULT>(fn: FunctionAsync<RESULT>, options?: ITransactionOptions): Promise<RESULT> {
107
+ let res: RESULT;
108
+ // begin
109
+ let fiber: ServiceTransactionFiber | undefined;
110
+ if (!this.inTransaction) {
111
+ const connection = this._db.client.connection;
112
+ const transactionConnection = await connection.transaction(_translateTransactionOptions(options));
113
+ fiber = this.transactionState.add(this._db, transactionConnection);
114
+ }
115
+ // fn
116
+ try {
117
+ res = await fn();
118
+ } catch (err) {
119
+ if (fiber) {
120
+ await fiber.doRollback();
121
+ this.transactionState.remove(this._db);
122
+ }
123
+ throw err;
124
+ }
125
+ try {
126
+ if (fiber) {
127
+ await fiber.doCommit();
128
+ this.transactionState.remove(this._db);
129
+ }
130
+ } catch (err) {
131
+ if (fiber) {
132
+ await fiber.doRollback();
133
+ this.transactionState.remove(this._db);
134
+ }
135
+ throw err;
136
+ }
137
+ return res;
138
+ }
139
+ }
140
+
141
+ function _translateTransactionOptions(options?: ITransactionOptions): Knex.TransactionConfig | undefined {
142
+ if (!options) return undefined;
143
+ return {
144
+ isolationLevel: TransactionIsolationLevelsMap[options.isolationLevel ?? 'DEFAULT'] as any,
145
+ readOnly: options.readOnly,
146
+ };
147
+ }
@@ -0,0 +1,8 @@
1
+ export interface ITableColumn {
2
+ type: string;
3
+ default: any;
4
+ }
5
+
6
+ export type ITableColumns = Record<string, ITableColumn>;
7
+
8
+ export type ITableColumnsDefault = Record<string, any>;
@@ -0,0 +1,23 @@
1
+ import type { Knex } from 'knex';
2
+ import type { VonaContext } from 'vona';
3
+
4
+ import type { IDatabaseClientDialectRecord, IDatabaseClientRecord } from './database.ts';
5
+ import type { IDatabaseDialectRecord } from './onion/databaseDialect.ts';
6
+
7
+ export type TypeDefaultClientNameFn = (ctx?: VonaContext) => keyof IDatabaseClientRecord;
8
+
9
+ export type TypeDefaultClientName = TypeDefaultClientNameFn | keyof IDatabaseClientRecord;
10
+
11
+ export interface ConfigDatabaseClient extends Omit<Knex.Config, 'client'> {
12
+ client: keyof IDatabaseClientDialectRecord;
13
+ }
14
+ export interface ConfigDatabase {
15
+ testDatabase: boolean;
16
+ defaultClient: TypeDefaultClientName;
17
+ clients: Record<keyof IDatabaseClientRecord, ConfigDatabaseClient>;
18
+ base: ConfigDatabaseClient;
19
+ }
20
+
21
+ export type IDataBaseConfigDialects = {
22
+ [KEY in keyof IDatabaseClientDialectRecord]: keyof IDatabaseDialectRecord;
23
+ };
@@ -0,0 +1,64 @@
1
+ import type { FunctionAny } from 'vona';
2
+
3
+ import type { BeanModel } from '../bean/bean.model.ts';
4
+ import type { ServiceDb } from '../service/db_.ts';
5
+ import type { ConfigDatabase } from './config.ts';
6
+
7
+ export interface IDbInfo {
8
+ level: number;
9
+ clientName: keyof IDatabaseClientRecord;
10
+ }
11
+
12
+ export interface IDatabaseClientRecord {
13
+ default: never;
14
+ sqlite3: never;
15
+ pg: never;
16
+ mysql: never;
17
+ }
18
+
19
+ export interface IDatabaseClientDialectRecord {
20
+ 'better-sqlite3': never;
21
+ 'pg': never;
22
+ 'mysql': never;
23
+ 'mysql2': never;
24
+ }
25
+
26
+ export interface IDatabaseSwitchOptions {
27
+ clientName?: keyof IDatabaseClientRecord;
28
+ }
29
+
30
+ declare module 'vona' {
31
+ export interface IBeanRecordGlobal {
32
+ model: BeanModel;
33
+ }
34
+
35
+ export interface VonaConfig {
36
+ database: ConfigDatabase;
37
+ }
38
+
39
+ export interface VonaContext {
40
+ get db(): ServiceDb;
41
+ commit(cb: FunctionAny): void;
42
+ commitsDone(): Promise<void>;
43
+ }
44
+
45
+ export interface VonaConfigEnv {
46
+ // default
47
+ DATABASE_DEFAULT_CLIENT: string | undefined;
48
+ // sqlite3
49
+ DATABASE_CLIENT_SQLITE3_FILENAME: string | undefined;
50
+ DATABASE_CLIENT_SQLITE3_NATIVEBINDING: string | 'true' | 'false' | undefined;
51
+ // pg
52
+ DATABASE_CLIENT_PG_HOST: string | undefined;
53
+ DATABASE_CLIENT_PG_PORT: string | undefined;
54
+ DATABASE_CLIENT_PG_USER: string | undefined;
55
+ DATABASE_CLIENT_PG_PASSWORD: string | undefined;
56
+ DATABASE_CLIENT_PG_DATABASE: string | undefined;
57
+ // mysql
58
+ DATABASE_CLIENT_MYSQL_HOST: string | undefined;
59
+ DATABASE_CLIENT_MYSQL_PORT: string | undefined;
60
+ DATABASE_CLIENT_MYSQL_USER: string | undefined;
61
+ DATABASE_CLIENT_MYSQL_PASSWORD: string | undefined;
62
+ DATABASE_CLIENT_MYSQL_DATABASE: string | undefined;
63
+ }
64
+ }
@@ -0,0 +1,55 @@
1
+ export type TypeDepthPrevMax = 50;
2
+ export type TypeDepthPrev = [
3
+ never,
4
+ 0,
5
+ 1,
6
+ 2,
7
+ 3,
8
+ 4,
9
+ 5,
10
+ 6,
11
+ 7,
12
+ 8,
13
+ 9,
14
+ 10,
15
+ 11,
16
+ 12,
17
+ 13,
18
+ 14,
19
+ 15,
20
+ 16,
21
+ 17,
22
+ 18,
23
+ 19,
24
+ 20,
25
+ 21,
26
+ 22,
27
+ 23,
28
+ 24,
29
+ 25,
30
+ 26,
31
+ 27,
32
+ 28,
33
+ 29,
34
+ 30,
35
+ 31,
36
+ 32,
37
+ 33,
38
+ 34,
39
+ 35,
40
+ 36,
41
+ 37,
42
+ 38,
43
+ 39,
44
+ 40,
45
+ 41,
46
+ 42,
47
+ 43,
48
+ 44,
49
+ 45,
50
+ 46,
51
+ 47,
52
+ 48,
53
+ 49,
54
+ 50,
55
+ ];
@@ -0,0 +1,17 @@
1
+ import type { ITableColumns } from './columns.ts';
2
+
3
+ export interface IFetchDatabasesResultItem {
4
+ name: string;
5
+ }
6
+
7
+ export interface IFetchIndexesResultItem {
8
+ indexName: string;
9
+ }
10
+
11
+ export type TypeDatabaseDialectTableColumnsFn = () => Promise<ITableColumns>;
12
+
13
+ export interface IDatabaseDialectCapabilities {
14
+ like: boolean;
15
+ ilike: boolean;
16
+ level: boolean;
17
+ }
@@ -0,0 +1,3 @@
1
+ import type { TypeModelAggrRelationResultAggrs } from '../relationsAggr.ts';
2
+
3
+ export type TypeDtoAggrResult<Aggrs> = TypeModelAggrRelationResultAggrs<Aggrs>;
@@ -0,0 +1,23 @@
1
+ import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
2
+ import type { IModelRelationIncludeWrapper } from '../model.ts';
3
+ import type { TypeModelColumns } from '../modelWhere.ts';
4
+ import type { IModelClassRecord } from '../onion/model.ts';
5
+ import type { TypeModelOfModelLike, TypeModelRelationResult, TypeSymbolKeyEntity } from '../relations.ts';
6
+
7
+ export type IDtoGetParams<ModelLike extends BeanModelMeta | keyof IModelClassRecord> = IBuildDtoGetParams<
8
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
9
+ TypeModelOfModelLike<ModelLike>
10
+ >;
11
+
12
+ export interface IBuildDtoGetParams<TRecord, Model extends BeanModelMeta>
13
+ extends IModelRelationIncludeWrapper<Model>, IBuildDtoGetParamsBasic<TRecord> {}
14
+
15
+ export interface IBuildDtoGetParamsBasic<TRecord> {
16
+ columns?: TypeModelColumns<TRecord>;
17
+ }
18
+
19
+ export type TypeDtoGetResult<ModelLike extends BeanModelMeta | keyof IModelClassRecord, TOptionsRelation> = TypeModelRelationResult<
20
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
21
+ TypeModelOfModelLike<ModelLike>,
22
+ TOptionsRelation
23
+ >;
@@ -0,0 +1,3 @@
1
+ import type { TypeModelGroupRelationResultGroups } from '../relationsGroup.ts';
2
+
3
+ export type TypeDtoGroupResult<TRecord, Aggrs, Groups, Columns> = TypeModelGroupRelationResultGroups<TRecord, Aggrs, Groups, Columns>;
@@ -0,0 +1,7 @@
1
+ export interface TypeDtoListAndCountResult<T> {
2
+ list: T[];
3
+ total: string;
4
+ pageCount: number;
5
+ pageSize: number;
6
+ pageNo: number;
7
+ }
@@ -0,0 +1,231 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+ import type { OmitNever, TypeOmitStringUnion } from 'vona';
3
+
4
+ import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
5
+ import type { IModelRelationIncludeWrapper } from '../model.ts';
6
+ import type { TypeModelColumnsStrict } from '../modelWhere.ts';
7
+ import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
8
+ import type {
9
+ TypeModelOfModelLike,
10
+ TypeSymbolKeyEntity,
11
+ TypeUtilEntityOmit,
12
+ TypeUtilEntityPartial,
13
+ TypeUtilEntitySelector,
14
+ TypeUtilGetColumnsFromRelationAndIncludeWrapper,
15
+ TypeUtilGetModelOptions,
16
+ TypeUtilGetParamsColumns,
17
+ TypeUtilGetParamsInlcude,
18
+ TypeUtilGetParamsWith,
19
+ TypeUtilGetRelationEntity,
20
+ TypeUtilGetRelationKey,
21
+ TypeUtilGetRelationModel,
22
+ TypeUtilGetRelationOptions,
23
+ TypeUtilGetRelationOptionsAutoload,
24
+ TypeUtilGetRelationType,
25
+ TypeUtilPrepareColumns,
26
+ } from '../relations.ts';
27
+
28
+ export type TypeDtoMutateType = 'create' | 'update' | 'mutate';
29
+
30
+ export type IDtoMutateParams<ModelLike extends BeanModelMeta | keyof IModelClassRecord> = IBuildDtoMutateParams<
31
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
32
+ TypeModelOfModelLike<ModelLike>
33
+ >;
34
+
35
+ export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta>
36
+ extends IModelRelationIncludeWrapper<Model>, IBuildDtoMutateParamsBasic<TRecord> {}
37
+
38
+ export interface IBuildDtoMutateParamsBasic<TRecord> {
39
+ columns?: TypeModelColumnsStrict<TRecord>;
40
+ }
41
+
42
+ export type TypeDtoMutateResult<
43
+ ModelLike extends BeanModelMeta | keyof IModelClassRecord,
44
+ TOptionsRelation,
45
+ TMutateTypeTopLevel extends TypeDtoMutateType,
46
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
47
+ TTopLevel extends boolean | undefined = undefined,
48
+ > = TypeDtoMutateRelationResult<
49
+ TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
50
+ TypeModelOfModelLike<ModelLike>,
51
+ TOptionsRelation,
52
+ TMutateTypeTopLevel,
53
+ TColumnsOmitDefault,
54
+ TTopLevel
55
+ >;
56
+
57
+ export type TypeDtoMutateRelationResult<
58
+ TRecord,
59
+ TModel extends BeanModelMeta | undefined,
60
+ TOptionsRelation,
61
+ TMutateTypeTopLevel extends TypeDtoMutateType,
62
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
63
+ TTopLevel extends boolean | undefined = undefined,
64
+ TColumns = undefined,
65
+ REFKEY = undefined,
66
+ > = TypeDtoMutateRelationResultEntity<
67
+ TRecord,
68
+ TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>,
69
+ TMutateTypeTopLevel,
70
+ TColumnsOmitDefault,
71
+ TTopLevel,
72
+ REFKEY
73
+ > &
74
+ (TModel extends BeanModelMeta
75
+ ? OmitNever<
76
+ TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>
77
+ > &
78
+ OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>
79
+ : {});
80
+
81
+ type TypeDtoMutateRelationResultMergeInclude<
82
+ TMutateTypeTopLevel extends TypeDtoMutateType,
83
+ TModelOptions extends IDecoratorModelOptions,
84
+ TInclude extends {} | undefined | unknown,
85
+ > = {
86
+ [RelationName in keyof TModelOptions['relations']]: TInclude extends {}
87
+ ? TInclude[RelationName] extends {} | boolean
88
+ ? TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel, TModelOptions['relations'][RelationName], TInclude[RelationName]>
89
+ : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>
90
+ : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>;
91
+ };
92
+
93
+ type TypeDtoMutateModelRelationResultMergeWith<
94
+ TMutateTypeTopLevel extends TypeDtoMutateType,
95
+ TWith extends {} | undefined | unknown,
96
+ > = TWith extends {} ? { [RelationName in keyof TWith]: TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel, TWith[RelationName]> } : {};
97
+
98
+ type TypeDtoMutateRelationResultMergeIncludeWrapper<
99
+ TMutateTypeTopLevel extends TypeDtoMutateType,
100
+ Relation,
101
+ IncludeWrapper,
102
+ > = IncludeWrapper extends false
103
+ ? never
104
+ : IncludeWrapper extends true
105
+ ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined>
106
+ : IncludeWrapper extends {}
107
+ ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, IncludeWrapper>
108
+ : never;
109
+
110
+ type TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel extends TypeDtoMutateType, Relation> =
111
+ TypeUtilGetRelationOptionsAutoload<Relation> extends true
112
+ ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined>
113
+ : never;
114
+
115
+ type TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel extends TypeDtoMutateType, WithRelation> = WithRelation extends false
116
+ ? never
117
+ : WithRelation extends true
118
+ ? never
119
+ : WithRelation extends {}
120
+ ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, WithRelation, TypeUtilGetRelationOptions<WithRelation>>
121
+ : never;
122
+
123
+ type TypeUtilGetDtoMutateRelationEntityByType<
124
+ TMutateTypeTopLevel extends TypeDtoMutateType,
125
+ Relation,
126
+ IncludeWrapper extends {} | undefined | unknown,
127
+ > = TypeUtilGetDtoMutateEntityByType<
128
+ TMutateTypeTopLevel,
129
+ TypeUtilGetRelationEntity<Relation>,
130
+ TypeUtilGetRelationType<Relation>,
131
+ TypeUtilGetRelationModel<Relation>,
132
+ IncludeWrapper,
133
+ TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>,
134
+ TypeUtilGetRelationKey<Relation>
135
+ >;
136
+ type TypeUtilGetDtoMutateEntityByType<
137
+ TMutateTypeTopLevel extends TypeDtoMutateType,
138
+ TRecord,
139
+ TYPE,
140
+ TModel extends BeanModelMeta | undefined,
141
+ IncludeWrapper extends {} | undefined | unknown,
142
+ Columns,
143
+ REFKEY = undefined,
144
+ > = TYPE extends 'belongsTo'
145
+ ? never
146
+ : TYPE extends 'belongsToMany'
147
+ ? Array<{ id: TableIdentity; deleted?: boolean }> | undefined
148
+ : TYPE extends 'hasMany'
149
+ ? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY>> | undefined
150
+ : TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY> | undefined;
151
+
152
+ type TypeDtoMutateRelationResultEntity<
153
+ TRecord,
154
+ Columns = undefined,
155
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
156
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
157
+ TTopLevel extends boolean | undefined = undefined,
158
+ REFKEY = undefined,
159
+ > = TypeDtoMutateRelationResultPatch<
160
+ TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>,
161
+ TMutateTypeTopLevel,
162
+ TTopLevel,
163
+ REFKEY
164
+ >;
165
+
166
+ type TypeDtoMutateRelationResultPatch<
167
+ TRecordResult,
168
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
169
+ TTopLevel extends boolean | undefined = undefined,
170
+ REFKEY = undefined,
171
+ > = TTopLevel extends false
172
+ ? TypeUtilEntityOmit<TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>, REFKEY>
173
+ : TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>;
174
+
175
+ type TypeDtoMutateRelationResultPatch2<
176
+ TRecordResult,
177
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
178
+ TTopLevel extends boolean | undefined = undefined,
179
+ > = TTopLevel extends false
180
+ ? TMutateTypeTopLevel extends 'update' | 'mutate'
181
+ ? TypeUtilEntityPartial<TRecordResult, 'id' | 'deleted'>
182
+ : TRecordResult
183
+ : TRecordResult;
184
+
185
+ type TypeDtoMutateRelationResultEntityInner<
186
+ TRecord,
187
+ Columns = undefined,
188
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
189
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
190
+ TTopLevel extends boolean | undefined = undefined,
191
+ > = [Columns] extends [string | string[]]
192
+ ? TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns, TMutateTypeTopLevel, TTopLevel>
193
+ : TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel, TColumnsOmitDefault>;
194
+
195
+ type TypeDtoMutateRelationResultEntityFromColumns<
196
+ TRecord,
197
+ Columns = undefined,
198
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
199
+ TTopLevel extends boolean | undefined = undefined,
200
+ > = TypeUtilEntitySelector<
201
+ TRecord,
202
+ TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumns<TypeUtilPrepareColumns<Columns>, TMutateTypeTopLevel, TTopLevel>>
203
+ >;
204
+
205
+ type TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<
206
+ TRecord,
207
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
208
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
209
+ > = TypeUtilEntityOmit<
210
+ TRecord,
211
+ TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel, TColumnsOmitDefault>>
212
+ >;
213
+
214
+ type TypeDtoMutateRelationResultPrepareColumns<
215
+ TColumns = undefined,
216
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
217
+ TTopLevel extends boolean | undefined = undefined,
218
+ > = TTopLevel extends true
219
+ ? TColumns
220
+ : TMutateTypeTopLevel extends 'create'
221
+ ? TypeOmitStringUnion<TColumns, 'deleted' | 'id'>
222
+ : TColumns | 'deleted' | 'id';
223
+
224
+ type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<
225
+ TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
226
+ TColumnsOmitDefault extends string | string[] | undefined = undefined,
227
+ > = TColumnsOmitDefault extends string | string[]
228
+ ? TColumnsOmitDefault
229
+ : TMutateTypeTopLevel extends 'create'
230
+ ? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt']
231
+ : ['iid', 'createdAt', 'updatedAt'];
@@ -0,0 +1,18 @@
1
+ import { useApp } from 'vona';
2
+ import { Api, v } from 'vona-module-a-openapiutils';
3
+ import z from 'zod';
4
+
5
+ const app = useApp();
6
+ const ormConfig = app.util.getModuleConfigRaw('a-orm');
7
+ const ordersDefault = ormConfig?.rest?.query?.orders?.default ?? 'createdAt,desc';
8
+
9
+ export class DtoQueryBase {
10
+ @Api.field(v.optional(), v.array(String, { separator: ',' }))
11
+ columns?: string[];
12
+
13
+ @Api.field(v.optional(), z.looseObject({}))
14
+ where?: object;
15
+
16
+ @Api.field(v.default(ordersDefault), v.optional(), z.union([z.string(), z.array(z.array(z.string()))]))
17
+ orders?: string | string[][];
18
+ }
@@ -0,0 +1,18 @@
1
+ import { useApp } from 'vona';
2
+ import { Api } from 'vona-module-a-openapiutils';
3
+ import z from 'zod';
4
+
5
+ import { DtoQueryBase } from './dtoQueryBase.ts';
6
+
7
+ const app = useApp();
8
+ const ormConfig = app.util.getModuleConfigRaw('a-orm');
9
+ const pageSizeDefault = ormConfig?.rest?.query?.pageSize?.default ?? 20;
10
+ const pageSizeMax = ormConfig?.rest?.query?.pageSize?.max ?? 100;
11
+
12
+ export class DtoQueryPageBase extends DtoQueryBase {
13
+ @Api.field(z.number().min(1).default(1))
14
+ pageNo: number;
15
+
16
+ @Api.field(z.number().min(1).max(pageSizeMax).default(pageSizeDefault))
17
+ pageSize: number;
18
+ }
@@ -0,0 +1,11 @@
1
+ import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
2
+ import type { IModelClassRecord } from '../onion/model.ts';
3
+ import type { TypeDtoGetResult } from './dtoGet.ts';
4
+
5
+ export interface TypeDtoSelectAndCountResult<ModelLike extends BeanModelMeta | keyof IModelClassRecord, TOptionsRelation> {
6
+ list: TypeDtoGetResult<ModelLike, TOptionsRelation>[];
7
+ total: string;
8
+ pageCount: number;
9
+ pageSize: number;
10
+ pageNo: number;
11
+ }
@@ -0,0 +1,8 @@
1
+ export * from './dtoAggregate.ts';
2
+ export * from './dtoGet.ts';
3
+ export * from './dtoGroup.ts';
4
+ export * from './dtoListAndCount.ts';
5
+ export * from './dtoMutate.ts';
6
+ export * from './dtoQueryBase.ts';
7
+ export * from './dtoQueryPageBase.ts';
8
+ export * from './dtoSelectAndCount.ts';
@@ -0,0 +1,15 @@
1
+ import type { PickString } from 'vona';
2
+
3
+ export type TypeEntityMeta<T, N = string> = Required<{
4
+ [key in keyof T]: key;
5
+ }> & {
6
+ $table: N;
7
+ $comment: Required<{ [key in keyof T]: string }> & { $table: string };
8
+ $default: Required<{ [key in keyof T]: any }>;
9
+ };
10
+
11
+ export const SymbolKeyFieldsMore = Symbol('$fieldsMore');
12
+ export type TypeSymbolKeyFieldsMore = typeof SymbolKeyFieldsMore;
13
+
14
+ export type TypeEntityStudentMetaSimple<T> = Omit<T, '$table' | '$comment' | '$default'>;
15
+ export type TypeEntityStudentMetaSimpleColumns<T> = PickString<keyof TypeEntityStudentMetaSimple<T>>;
@@ -0,0 +1,11 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+
3
+ import { Api, v } from 'vona-module-a-openapiutils';
4
+
5
+ import { $locale } from '../.metadata/locales.ts';
6
+ import { EntityBaseInner } from './entityBaseInner.ts';
7
+
8
+ export class EntityBase extends EntityBaseInner {
9
+ @Api.field(v.order(1, 'core'), v.title($locale('TableIdentity')), v.tableIdentity())
10
+ id: TableIdentity;
11
+ }
@@ -0,0 +1 @@
1
+ export class EntityBaseEmpty {}