@uql/core 3.1.1 → 3.1.3

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 (599) hide show
  1. package/CHANGELOG.md +136 -185
  2. package/{dist/README.md → README.md} +22 -27
  3. package/dist/browser/cc-BEf4wTUm.js +535 -0
  4. package/dist/browser/cc-BEf4wTUm.js.map +1 -0
  5. package/dist/browser/http/bus.d.ts +1 -0
  6. package/dist/browser/http/bus.d.ts.map +1 -0
  7. package/dist/browser/http/bus.js +1 -1
  8. package/dist/browser/http/bus.js.map +1 -0
  9. package/dist/browser/http/http.d.ts +1 -0
  10. package/dist/browser/http/http.d.ts.map +1 -0
  11. package/dist/browser/http/http.js +1 -1
  12. package/dist/browser/http/http.js.map +1 -0
  13. package/dist/browser/http/index.d.ts +1 -0
  14. package/dist/browser/http/index.d.ts.map +1 -0
  15. package/dist/browser/http/index.js +1 -1
  16. package/dist/browser/http/index.js.map +1 -0
  17. package/dist/browser/index.d.ts +1 -0
  18. package/dist/browser/index.d.ts.map +1 -0
  19. package/dist/browser/index.js +1 -1
  20. package/dist/browser/index.js.map +1 -0
  21. package/dist/browser/options.d.ts +1 -0
  22. package/dist/browser/options.d.ts.map +1 -0
  23. package/dist/browser/options.js +1 -1
  24. package/dist/browser/options.js.map +1 -0
  25. package/dist/browser/querier/genericClientRepository.d.ts +1 -0
  26. package/dist/browser/querier/genericClientRepository.d.ts.map +1 -0
  27. package/dist/browser/querier/genericClientRepository.js +1 -1
  28. package/dist/browser/querier/genericClientRepository.js.map +1 -0
  29. package/dist/browser/querier/httpQuerier.d.ts +1 -0
  30. package/dist/browser/querier/httpQuerier.d.ts.map +1 -0
  31. package/dist/browser/querier/httpQuerier.js +1 -1
  32. package/dist/browser/querier/httpQuerier.js.map +1 -0
  33. package/dist/browser/querier/index.d.ts +1 -0
  34. package/dist/browser/querier/index.d.ts.map +1 -0
  35. package/dist/browser/querier/index.js +1 -1
  36. package/dist/browser/querier/index.js.map +1 -0
  37. package/dist/browser/querier/querier.util.d.ts +1 -0
  38. package/dist/browser/querier/querier.util.d.ts.map +1 -0
  39. package/dist/browser/querier/querier.util.js +1 -1
  40. package/dist/browser/querier/querier.util.js.map +1 -0
  41. package/dist/browser/type/clientQuerier.d.ts +1 -0
  42. package/dist/browser/type/clientQuerier.d.ts.map +1 -0
  43. package/dist/browser/type/clientQuerier.js +1 -1
  44. package/dist/browser/type/clientQuerier.js.map +1 -0
  45. package/dist/browser/type/clientQuerierPool.d.ts +1 -0
  46. package/dist/browser/type/clientQuerierPool.d.ts.map +1 -0
  47. package/dist/browser/type/clientQuerierPool.js +1 -1
  48. package/dist/browser/type/clientQuerierPool.js.map +1 -0
  49. package/dist/browser/type/clientRepository.d.ts +1 -0
  50. package/dist/browser/type/clientRepository.d.ts.map +1 -0
  51. package/dist/browser/type/clientRepository.js +1 -1
  52. package/dist/browser/type/clientRepository.js.map +1 -0
  53. package/dist/browser/type/index.d.ts +1 -0
  54. package/dist/browser/type/index.d.ts.map +1 -0
  55. package/dist/browser/type/index.js +1 -1
  56. package/dist/browser/type/index.js.map +1 -0
  57. package/dist/browser/type/request.d.ts +1 -0
  58. package/dist/browser/type/request.d.ts.map +1 -0
  59. package/dist/browser/type/request.js +1 -1
  60. package/dist/browser/type/request.js.map +1 -0
  61. package/dist/dialect/abstractDialect.d.ts +1 -0
  62. package/dist/dialect/abstractDialect.d.ts.map +1 -0
  63. package/dist/dialect/abstractDialect.js +1 -1
  64. package/dist/dialect/abstractDialect.js.map +1 -0
  65. package/dist/dialect/abstractSqlDialect.d.ts +1 -0
  66. package/dist/dialect/abstractSqlDialect.d.ts.map +1 -0
  67. package/dist/dialect/abstractSqlDialect.js +1 -1
  68. package/dist/dialect/abstractSqlDialect.js.map +1 -0
  69. package/dist/dialect/index.d.ts +1 -0
  70. package/dist/dialect/index.d.ts.map +1 -0
  71. package/dist/dialect/index.js +1 -1
  72. package/dist/dialect/index.js.map +1 -0
  73. package/dist/dialect/queryContext.d.ts +1 -0
  74. package/dist/dialect/queryContext.d.ts.map +1 -0
  75. package/dist/dialect/queryContext.js +1 -1
  76. package/dist/dialect/queryContext.js.map +1 -0
  77. package/dist/entity/decorator/definition.d.ts +1 -0
  78. package/dist/entity/decorator/definition.d.ts.map +1 -0
  79. package/dist/entity/decorator/definition.js +1 -2
  80. package/dist/entity/decorator/definition.js.map +1 -0
  81. package/dist/entity/decorator/entity.d.ts +1 -0
  82. package/dist/entity/decorator/entity.d.ts.map +1 -0
  83. package/dist/entity/decorator/entity.js +1 -1
  84. package/dist/entity/decorator/entity.js.map +1 -0
  85. package/dist/entity/decorator/field.d.ts +1 -0
  86. package/dist/entity/decorator/field.d.ts.map +1 -0
  87. package/dist/entity/decorator/field.js +1 -1
  88. package/dist/entity/decorator/field.js.map +1 -0
  89. package/dist/entity/decorator/id.d.ts +1 -0
  90. package/dist/entity/decorator/id.d.ts.map +1 -0
  91. package/dist/entity/decorator/id.js +1 -1
  92. package/dist/entity/decorator/id.js.map +1 -0
  93. package/dist/entity/decorator/index.d.ts +1 -0
  94. package/dist/entity/decorator/index.d.ts.map +1 -0
  95. package/dist/entity/decorator/index.js +1 -1
  96. package/dist/entity/decorator/index.js.map +1 -0
  97. package/dist/entity/decorator/relation.d.ts +1 -0
  98. package/dist/entity/decorator/relation.d.ts.map +1 -0
  99. package/dist/entity/decorator/relation.js +1 -1
  100. package/dist/entity/decorator/relation.js.map +1 -0
  101. package/dist/entity/index.d.ts +1 -0
  102. package/dist/entity/index.d.ts.map +1 -0
  103. package/dist/entity/index.js +1 -1
  104. package/dist/entity/index.js.map +1 -0
  105. package/dist/express/index.d.ts +1 -0
  106. package/dist/express/index.d.ts.map +1 -0
  107. package/dist/express/index.js +1 -1
  108. package/dist/express/index.js.map +1 -0
  109. package/dist/express/querierMiddleware.d.ts +1 -0
  110. package/dist/express/querierMiddleware.d.ts.map +1 -0
  111. package/dist/express/querierMiddleware.js +1 -1
  112. package/dist/express/querierMiddleware.js.map +1 -0
  113. package/dist/express/query.util.d.ts +1 -0
  114. package/dist/express/query.util.d.ts.map +1 -0
  115. package/dist/express/query.util.js +1 -1
  116. package/dist/express/query.util.js.map +1 -0
  117. package/dist/index.d.ts +1 -1
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +1 -2
  120. package/dist/index.js.map +1 -0
  121. package/dist/maria/index.d.ts +1 -0
  122. package/dist/maria/index.d.ts.map +1 -0
  123. package/dist/maria/index.js +1 -1
  124. package/dist/maria/index.js.map +1 -0
  125. package/dist/maria/mariaDialect.d.ts +1 -0
  126. package/dist/maria/mariaDialect.d.ts.map +1 -0
  127. package/dist/maria/mariaDialect.js +1 -1
  128. package/dist/maria/mariaDialect.js.map +1 -0
  129. package/dist/maria/mariadbQuerier.d.ts +1 -0
  130. package/dist/maria/mariadbQuerier.d.ts.map +1 -0
  131. package/dist/maria/mariadbQuerier.js +1 -1
  132. package/dist/maria/mariadbQuerier.js.map +1 -0
  133. package/dist/maria/mariadbQuerierPool.d.ts +1 -0
  134. package/dist/maria/mariadbQuerierPool.d.ts.map +1 -0
  135. package/dist/maria/mariadbQuerierPool.js +1 -1
  136. package/dist/maria/mariadbQuerierPool.js.map +1 -0
  137. package/dist/migrate/cli.d.ts +1 -0
  138. package/dist/migrate/cli.d.ts.map +1 -0
  139. package/dist/migrate/cli.js +3 -3
  140. package/dist/migrate/cli.js.map +1 -0
  141. package/dist/migrate/generator/index.d.ts +1 -0
  142. package/dist/migrate/generator/index.d.ts.map +1 -0
  143. package/dist/migrate/generator/index.js +1 -1
  144. package/dist/migrate/generator/index.js.map +1 -0
  145. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +1 -0
  146. package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -0
  147. package/dist/migrate/generator/mongoSchemaGenerator.js +1 -1
  148. package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -0
  149. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +1 -0
  150. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts.map +1 -0
  151. package/dist/migrate/generator/mysqlSchemaGenerator.js +1 -1
  152. package/dist/migrate/generator/mysqlSchemaGenerator.js.map +1 -0
  153. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +1 -0
  154. package/dist/migrate/generator/postgresSchemaGenerator.d.ts.map +1 -0
  155. package/dist/migrate/generator/postgresSchemaGenerator.js +1 -1
  156. package/dist/migrate/generator/postgresSchemaGenerator.js.map +1 -0
  157. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +1 -0
  158. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts.map +1 -0
  159. package/dist/migrate/generator/sqliteSchemaGenerator.js +1 -1
  160. package/dist/migrate/generator/sqliteSchemaGenerator.js.map +1 -0
  161. package/dist/migrate/index.d.ts +1 -0
  162. package/dist/migrate/index.d.ts.map +1 -0
  163. package/dist/migrate/index.js +1 -1
  164. package/dist/migrate/index.js.map +1 -0
  165. package/dist/migrate/introspection/index.d.ts +1 -0
  166. package/dist/migrate/introspection/index.d.ts.map +1 -0
  167. package/dist/migrate/introspection/index.js +1 -1
  168. package/dist/migrate/introspection/index.js.map +1 -0
  169. package/dist/migrate/introspection/mongoIntrospector.d.ts +1 -0
  170. package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -0
  171. package/dist/migrate/introspection/mongoIntrospector.js +1 -1
  172. package/dist/migrate/introspection/mongoIntrospector.js.map +1 -0
  173. package/dist/migrate/introspection/mysqlIntrospector.d.ts +1 -0
  174. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -0
  175. package/dist/migrate/introspection/mysqlIntrospector.js +1 -1
  176. package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -0
  177. package/dist/migrate/introspection/postgresIntrospector.d.ts +1 -0
  178. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -0
  179. package/dist/migrate/introspection/postgresIntrospector.js +1 -1
  180. package/dist/migrate/introspection/postgresIntrospector.js.map +1 -0
  181. package/dist/migrate/introspection/sqliteIntrospector.d.ts +1 -0
  182. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -0
  183. package/dist/migrate/introspection/sqliteIntrospector.js +1 -1
  184. package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -0
  185. package/dist/migrate/migrator.d.ts +1 -0
  186. package/dist/migrate/migrator.d.ts.map +1 -0
  187. package/dist/migrate/migrator.js +1 -1
  188. package/dist/migrate/migrator.js.map +1 -0
  189. package/dist/migrate/schemaGenerator.d.ts +1 -0
  190. package/dist/migrate/schemaGenerator.d.ts.map +1 -0
  191. package/dist/migrate/schemaGenerator.js +1 -1
  192. package/dist/migrate/schemaGenerator.js.map +1 -0
  193. package/dist/migrate/storage/databaseStorage.d.ts +1 -0
  194. package/dist/migrate/storage/databaseStorage.d.ts.map +1 -0
  195. package/dist/migrate/storage/databaseStorage.js +1 -1
  196. package/dist/migrate/storage/databaseStorage.js.map +1 -0
  197. package/dist/migrate/storage/index.d.ts +1 -0
  198. package/dist/migrate/storage/index.d.ts.map +1 -0
  199. package/dist/migrate/storage/index.js +1 -1
  200. package/dist/migrate/storage/index.js.map +1 -0
  201. package/dist/migrate/storage/jsonStorage.d.ts +1 -0
  202. package/dist/migrate/storage/jsonStorage.d.ts.map +1 -0
  203. package/dist/migrate/storage/jsonStorage.js +1 -1
  204. package/dist/migrate/storage/jsonStorage.js.map +1 -0
  205. package/dist/migrate/type.d.ts +1 -0
  206. package/dist/migrate/type.d.ts.map +1 -0
  207. package/dist/migrate/type.js +1 -1
  208. package/dist/migrate/type.js.map +1 -0
  209. package/dist/mongo/index.d.ts +1 -0
  210. package/dist/mongo/index.d.ts.map +1 -0
  211. package/dist/mongo/index.js +1 -1
  212. package/dist/mongo/index.js.map +1 -0
  213. package/dist/mongo/mongoDialect.d.ts +1 -0
  214. package/dist/mongo/mongoDialect.d.ts.map +1 -0
  215. package/dist/mongo/mongoDialect.js +1 -1
  216. package/dist/mongo/mongoDialect.js.map +1 -0
  217. package/dist/mongo/mongodbQuerier.d.ts +1 -0
  218. package/dist/mongo/mongodbQuerier.d.ts.map +1 -0
  219. package/dist/mongo/mongodbQuerier.js +1 -1
  220. package/dist/mongo/mongodbQuerier.js.map +1 -0
  221. package/dist/mongo/mongodbQuerierPool.d.ts +1 -0
  222. package/dist/mongo/mongodbQuerierPool.d.ts.map +1 -0
  223. package/dist/mongo/mongodbQuerierPool.js +1 -1
  224. package/dist/mongo/mongodbQuerierPool.js.map +1 -0
  225. package/dist/mysql/index.d.ts +1 -0
  226. package/dist/mysql/index.d.ts.map +1 -0
  227. package/dist/mysql/index.js +1 -1
  228. package/dist/mysql/index.js.map +1 -0
  229. package/dist/mysql/mysql2Querier.d.ts +1 -0
  230. package/dist/mysql/mysql2Querier.d.ts.map +1 -0
  231. package/dist/mysql/mysql2Querier.js +1 -1
  232. package/dist/mysql/mysql2Querier.js.map +1 -0
  233. package/dist/mysql/mysql2QuerierPool.d.ts +1 -0
  234. package/dist/mysql/mysql2QuerierPool.d.ts.map +1 -0
  235. package/dist/mysql/mysql2QuerierPool.js +1 -1
  236. package/dist/mysql/mysql2QuerierPool.js.map +1 -0
  237. package/dist/mysql/mysqlDialect.d.ts +1 -0
  238. package/dist/mysql/mysqlDialect.d.ts.map +1 -0
  239. package/dist/mysql/mysqlDialect.js +1 -1
  240. package/dist/mysql/mysqlDialect.js.map +1 -0
  241. package/dist/namingStrategy/defaultNamingStrategy.d.ts +1 -0
  242. package/dist/namingStrategy/defaultNamingStrategy.d.ts.map +1 -0
  243. package/dist/namingStrategy/defaultNamingStrategy.js +1 -1
  244. package/dist/namingStrategy/defaultNamingStrategy.js.map +1 -0
  245. package/dist/namingStrategy/index.d.ts +1 -0
  246. package/dist/namingStrategy/index.d.ts.map +1 -0
  247. package/dist/namingStrategy/index.js +1 -1
  248. package/dist/namingStrategy/index.js.map +1 -0
  249. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +1 -0
  250. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts.map +1 -0
  251. package/dist/namingStrategy/snakeCaseNamingStrategy.js +1 -1
  252. package/dist/namingStrategy/snakeCaseNamingStrategy.js.map +1 -0
  253. package/dist/options.d.ts +1 -0
  254. package/dist/options.d.ts.map +1 -0
  255. package/dist/options.js +1 -1
  256. package/dist/options.js.map +1 -0
  257. package/dist/postgres/index.d.ts +1 -0
  258. package/dist/postgres/index.d.ts.map +1 -0
  259. package/dist/postgres/index.js +1 -1
  260. package/dist/postgres/index.js.map +1 -0
  261. package/dist/postgres/pgQuerier.d.ts +1 -0
  262. package/dist/postgres/pgQuerier.d.ts.map +1 -0
  263. package/dist/postgres/pgQuerier.js +1 -1
  264. package/dist/postgres/pgQuerier.js.map +1 -0
  265. package/dist/postgres/pgQuerierPool.d.ts +1 -0
  266. package/dist/postgres/pgQuerierPool.d.ts.map +1 -0
  267. package/dist/postgres/pgQuerierPool.js +1 -1
  268. package/dist/postgres/pgQuerierPool.js.map +1 -0
  269. package/dist/postgres/postgresDialect.d.ts +1 -0
  270. package/dist/postgres/postgresDialect.d.ts.map +1 -0
  271. package/dist/postgres/postgresDialect.js +1 -1
  272. package/dist/postgres/postgresDialect.js.map +1 -0
  273. package/dist/querier/abstractQuerier.d.ts +1 -0
  274. package/dist/querier/abstractQuerier.d.ts.map +1 -0
  275. package/dist/querier/abstractQuerier.js +1 -1
  276. package/dist/querier/abstractQuerier.js.map +1 -0
  277. package/dist/querier/abstractQuerierPool.d.ts +1 -0
  278. package/dist/querier/abstractQuerierPool.d.ts.map +1 -0
  279. package/dist/querier/abstractQuerierPool.js +1 -1
  280. package/dist/querier/abstractQuerierPool.js.map +1 -0
  281. package/dist/querier/abstractSqlQuerier.d.ts +1 -0
  282. package/dist/querier/abstractSqlQuerier.d.ts.map +1 -0
  283. package/dist/querier/abstractSqlQuerier.js +1 -1
  284. package/dist/querier/abstractSqlQuerier.js.map +1 -0
  285. package/dist/querier/decorator/index.d.ts +1 -0
  286. package/dist/querier/decorator/index.d.ts.map +1 -0
  287. package/dist/querier/decorator/index.js +1 -1
  288. package/dist/querier/decorator/index.js.map +1 -0
  289. package/dist/querier/decorator/injectQuerier.d.ts +1 -0
  290. package/dist/querier/decorator/injectQuerier.d.ts.map +1 -0
  291. package/dist/querier/decorator/injectQuerier.js +1 -1
  292. package/dist/querier/decorator/injectQuerier.js.map +1 -0
  293. package/dist/querier/decorator/serialized.d.ts +1 -0
  294. package/dist/querier/decorator/serialized.d.ts.map +1 -0
  295. package/dist/querier/decorator/serialized.js +1 -1
  296. package/dist/querier/decorator/serialized.js.map +1 -0
  297. package/dist/querier/decorator/transactional.d.ts +1 -0
  298. package/dist/querier/decorator/transactional.d.ts.map +1 -0
  299. package/dist/querier/decorator/transactional.js +1 -1
  300. package/dist/querier/decorator/transactional.js.map +1 -0
  301. package/dist/querier/index.d.ts +1 -0
  302. package/dist/querier/index.d.ts.map +1 -0
  303. package/dist/querier/index.js +1 -1
  304. package/dist/querier/index.js.map +1 -0
  305. package/dist/repository/genericRepository.d.ts +1 -0
  306. package/dist/repository/genericRepository.d.ts.map +1 -0
  307. package/dist/repository/genericRepository.js +1 -1
  308. package/dist/repository/genericRepository.js.map +1 -0
  309. package/dist/repository/index.d.ts +1 -0
  310. package/dist/repository/index.d.ts.map +1 -0
  311. package/dist/repository/index.js +1 -1
  312. package/dist/repository/index.js.map +1 -0
  313. package/dist/sqlite/index.d.ts +1 -0
  314. package/dist/sqlite/index.d.ts.map +1 -0
  315. package/dist/sqlite/index.js +1 -1
  316. package/dist/sqlite/index.js.map +1 -0
  317. package/dist/sqlite/sqliteDialect.d.ts +1 -0
  318. package/dist/sqlite/sqliteDialect.d.ts.map +1 -0
  319. package/dist/sqlite/sqliteDialect.js +1 -1
  320. package/dist/sqlite/sqliteDialect.js.map +1 -0
  321. package/dist/sqlite/sqliteQuerier.d.ts +1 -0
  322. package/dist/sqlite/sqliteQuerier.d.ts.map +1 -0
  323. package/dist/sqlite/sqliteQuerier.js +1 -1
  324. package/dist/sqlite/sqliteQuerier.js.map +1 -0
  325. package/dist/sqlite/sqliteQuerierPool.d.ts +1 -0
  326. package/dist/sqlite/sqliteQuerierPool.d.ts.map +1 -0
  327. package/dist/sqlite/sqliteQuerierPool.js +1 -1
  328. package/dist/sqlite/sqliteQuerierPool.js.map +1 -0
  329. package/dist/type/entity.d.ts +1 -0
  330. package/dist/type/entity.d.ts.map +1 -0
  331. package/dist/type/entity.js +1 -1
  332. package/dist/type/entity.js.map +1 -0
  333. package/dist/type/index.d.ts +1 -0
  334. package/dist/type/index.d.ts.map +1 -0
  335. package/dist/type/index.js +1 -1
  336. package/dist/type/index.js.map +1 -0
  337. package/dist/type/migration.d.ts +1 -0
  338. package/dist/type/migration.d.ts.map +1 -0
  339. package/dist/type/migration.js +1 -1
  340. package/dist/type/migration.js.map +1 -0
  341. package/dist/type/namingStrategy.d.ts +1 -0
  342. package/dist/type/namingStrategy.d.ts.map +1 -0
  343. package/dist/type/namingStrategy.js +1 -1
  344. package/dist/type/namingStrategy.js.map +1 -0
  345. package/dist/type/querier.d.ts +1 -0
  346. package/dist/type/querier.d.ts.map +1 -0
  347. package/dist/type/querier.js +1 -1
  348. package/dist/type/querier.js.map +1 -0
  349. package/dist/type/querierPool.d.ts +1 -0
  350. package/dist/type/querierPool.d.ts.map +1 -0
  351. package/dist/type/querierPool.js +1 -1
  352. package/dist/type/querierPool.js.map +1 -0
  353. package/dist/type/query.d.ts +1 -0
  354. package/dist/type/query.d.ts.map +1 -0
  355. package/dist/type/query.js +1 -1
  356. package/dist/type/query.js.map +1 -0
  357. package/dist/type/repository.d.ts +1 -0
  358. package/dist/type/repository.d.ts.map +1 -0
  359. package/dist/type/repository.js +1 -1
  360. package/dist/type/repository.js.map +1 -0
  361. package/dist/type/universalQuerier.d.ts +1 -0
  362. package/dist/type/universalQuerier.d.ts.map +1 -0
  363. package/dist/type/universalQuerier.js +1 -1
  364. package/dist/type/universalQuerier.js.map +1 -0
  365. package/dist/type/utility.d.ts +1 -0
  366. package/dist/type/utility.d.ts.map +1 -0
  367. package/dist/type/utility.js +1 -1
  368. package/dist/type/utility.js.map +1 -0
  369. package/dist/util/dialect.util.d.ts +1 -0
  370. package/dist/util/dialect.util.d.ts.map +1 -0
  371. package/dist/util/dialect.util.js +1 -1
  372. package/dist/util/dialect.util.js.map +1 -0
  373. package/dist/util/index.d.ts +1 -0
  374. package/dist/util/index.d.ts.map +1 -0
  375. package/dist/util/index.js +1 -1
  376. package/dist/util/index.js.map +1 -0
  377. package/dist/util/object.util.d.ts +1 -0
  378. package/dist/util/object.util.d.ts.map +1 -0
  379. package/dist/util/object.util.js +1 -1
  380. package/dist/util/object.util.js.map +1 -0
  381. package/dist/util/raw.d.ts +1 -0
  382. package/dist/util/raw.d.ts.map +1 -0
  383. package/dist/util/raw.js +1 -1
  384. package/dist/util/raw.js.map +1 -0
  385. package/dist/util/sql.util.d.ts +1 -0
  386. package/dist/util/sql.util.d.ts.map +1 -0
  387. package/dist/util/sql.util.js +1 -1
  388. package/dist/util/sql.util.js.map +1 -0
  389. package/dist/util/string.util.d.ts +1 -0
  390. package/dist/util/string.util.d.ts.map +1 -0
  391. package/dist/util/string.util.js +1 -1
  392. package/dist/util/string.util.js.map +1 -0
  393. package/package.json +32 -26
  394. package/dist/CHANGELOG.md +0 -186
  395. package/dist/maria/mariaQuerierPool.test.d.ts +0 -5
  396. package/dist/maria/mariaQuerierPool.test.js +0 -19
  397. package/dist/maria/mariadbQuerier.test.d.ts +0 -4
  398. package/dist/maria/mariadbQuerier.test.js +0 -19
  399. package/dist/migrate/migrator-mongo.test.d.ts +0 -1
  400. package/dist/migrate/migrator-mongo.test.js +0 -54
  401. package/dist/migrate/migrator.test.d.ts +0 -1
  402. package/dist/migrate/migrator.test.js +0 -106
  403. package/dist/mongo/mongodbQuerier.test.d.ts +0 -1
  404. package/dist/mongo/mongodbQuerier.test.js +0 -36
  405. package/dist/mongo/mongodbQuerierPool.test.d.ts +0 -1
  406. package/dist/mongo/mongodbQuerierPool.test.js +0 -21
  407. package/dist/mysql/mysql2Querier.test.d.ts +0 -4
  408. package/dist/mysql/mysql2Querier.test.js +0 -16
  409. package/dist/mysql/mysql2QuerierPool.test.d.ts +0 -5
  410. package/dist/mysql/mysql2QuerierPool.test.js +0 -16
  411. package/dist/package.json +0 -131
  412. package/dist/postgres/pgQuerier.test.d.ts +0 -4
  413. package/dist/postgres/pgQuerier.test.js +0 -20
  414. package/dist/postgres/pgQuerierPool.test.d.ts +0 -5
  415. package/dist/postgres/pgQuerierPool.test.js +0 -23
  416. package/dist/querier/abstractQuerier-test.d.ts +0 -45
  417. package/dist/querier/abstractQuerier-test.js +0 -461
  418. package/dist/querier/abstractQuerierPool-test.d.ts +0 -9
  419. package/dist/querier/abstractQuerierPool-test.js +0 -18
  420. package/dist/querier/abstractSqlQuerier-test.d.ts +0 -9
  421. package/dist/querier/abstractSqlQuerier-test.js +0 -16
  422. package/dist/sqlite/sqliteQuerier.test.d.ts +0 -5
  423. package/dist/sqlite/sqliteQuerier.test.js +0 -19
  424. package/dist/sqlite/sqliteQuerierPool.test.d.ts +0 -5
  425. package/dist/sqlite/sqliteQuerierPool.test.js +0 -10
  426. package/dist/test/entityMock.d.ts +0 -164
  427. package/dist/test/entityMock.js +0 -554
  428. package/dist/test/index.d.ts +0 -3
  429. package/dist/test/index.js +0 -4
  430. package/dist/test/it.util.d.ts +0 -4
  431. package/dist/test/it.util.js +0 -55
  432. package/dist/test/spec.util.d.ts +0 -14
  433. package/dist/test/spec.util.js +0 -50
  434. package/src/@types/index.d.ts +0 -1
  435. package/src/@types/jest.d.ts +0 -6
  436. package/src/browser/http/bus.spec.ts +0 -22
  437. package/src/browser/http/bus.ts +0 -17
  438. package/src/browser/http/http.spec.ts +0 -70
  439. package/src/browser/http/http.ts +0 -55
  440. package/src/browser/http/index.ts +0 -2
  441. package/src/browser/index.ts +0 -4
  442. package/src/browser/options.spec.ts +0 -37
  443. package/src/browser/options.ts +0 -18
  444. package/src/browser/querier/genericClientRepository.spec.ts +0 -105
  445. package/src/browser/querier/genericClientRepository.ts +0 -49
  446. package/src/browser/querier/httpQuerier.ts +0 -82
  447. package/src/browser/querier/index.ts +0 -3
  448. package/src/browser/querier/querier.util.spec.ts +0 -35
  449. package/src/browser/querier/querier.util.ts +0 -18
  450. package/src/browser/type/clientQuerier.ts +0 -45
  451. package/src/browser/type/clientQuerierPool.ts +0 -5
  452. package/src/browser/type/clientRepository.ts +0 -22
  453. package/src/browser/type/index.ts +0 -4
  454. package/src/browser/type/request.ts +0 -25
  455. package/src/dialect/abstractDialect.ts +0 -28
  456. package/src/dialect/abstractSqlDialect-spec.ts +0 -1309
  457. package/src/dialect/abstractSqlDialect.ts +0 -805
  458. package/src/dialect/index.ts +0 -3
  459. package/src/dialect/namingStrategy.spec.ts +0 -52
  460. package/src/dialect/queryContext.ts +0 -69
  461. package/src/entity/decorator/definition.spec.ts +0 -736
  462. package/src/entity/decorator/definition.ts +0 -265
  463. package/src/entity/decorator/entity.ts +0 -8
  464. package/src/entity/decorator/field.ts +0 -9
  465. package/src/entity/decorator/id.ts +0 -9
  466. package/src/entity/decorator/index.ts +0 -5
  467. package/src/entity/decorator/relation.spec.ts +0 -41
  468. package/src/entity/decorator/relation.ts +0 -34
  469. package/src/entity/index.ts +0 -1
  470. package/src/express/@types/express.d.ts +0 -8
  471. package/src/express/@types/index.d.ts +0 -1
  472. package/src/express/index.ts +0 -2
  473. package/src/express/querierMiddleware.ts +0 -217
  474. package/src/express/query.util.spec.ts +0 -40
  475. package/src/express/query.util.ts +0 -21
  476. package/src/index.ts +0 -9
  477. package/src/maria/index.ts +0 -3
  478. package/src/maria/mariaDialect.spec.ts +0 -207
  479. package/src/maria/mariaDialect.ts +0 -42
  480. package/src/maria/mariaQuerierPool.test.ts +0 -23
  481. package/src/maria/mariadbQuerier.test.ts +0 -23
  482. package/src/maria/mariadbQuerier.ts +0 -45
  483. package/src/maria/mariadbQuerierPool.ts +0 -21
  484. package/src/migrate/cli.ts +0 -301
  485. package/src/migrate/generator/index.ts +0 -4
  486. package/src/migrate/generator/mongoSchemaGenerator.spec.ts +0 -112
  487. package/src/migrate/generator/mongoSchemaGenerator.ts +0 -115
  488. package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +0 -34
  489. package/src/migrate/generator/mysqlSchemaGenerator.ts +0 -92
  490. package/src/migrate/generator/postgresSchemaGenerator.spec.ts +0 -44
  491. package/src/migrate/generator/postgresSchemaGenerator.ts +0 -127
  492. package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +0 -33
  493. package/src/migrate/generator/sqliteSchemaGenerator.ts +0 -81
  494. package/src/migrate/index.ts +0 -41
  495. package/src/migrate/introspection/index.ts +0 -4
  496. package/src/migrate/introspection/mongoIntrospector.spec.ts +0 -75
  497. package/src/migrate/introspection/mongoIntrospector.ts +0 -47
  498. package/src/migrate/introspection/mysqlIntrospector.spec.ts +0 -113
  499. package/src/migrate/introspection/mysqlIntrospector.ts +0 -278
  500. package/src/migrate/introspection/postgresIntrospector.spec.ts +0 -112
  501. package/src/migrate/introspection/postgresIntrospector.ts +0 -329
  502. package/src/migrate/introspection/sqliteIntrospector.spec.ts +0 -112
  503. package/src/migrate/introspection/sqliteIntrospector.ts +0 -296
  504. package/src/migrate/migrator-mongo.test.ts +0 -54
  505. package/src/migrate/migrator.spec.ts +0 -255
  506. package/src/migrate/migrator.test.ts +0 -94
  507. package/src/migrate/migrator.ts +0 -719
  508. package/src/migrate/namingStrategy.spec.ts +0 -22
  509. package/src/migrate/schemaGenerator-advanced.spec.ts +0 -138
  510. package/src/migrate/schemaGenerator.spec.ts +0 -190
  511. package/src/migrate/schemaGenerator.ts +0 -478
  512. package/src/migrate/storage/databaseStorage.spec.ts +0 -69
  513. package/src/migrate/storage/databaseStorage.ts +0 -100
  514. package/src/migrate/storage/index.ts +0 -2
  515. package/src/migrate/storage/jsonStorage.ts +0 -58
  516. package/src/migrate/type.ts +0 -1
  517. package/src/mongo/index.ts +0 -3
  518. package/src/mongo/mongoDialect.spec.ts +0 -251
  519. package/src/mongo/mongoDialect.ts +0 -238
  520. package/src/mongo/mongodbQuerier.test.ts +0 -45
  521. package/src/mongo/mongodbQuerier.ts +0 -256
  522. package/src/mongo/mongodbQuerierPool.test.ts +0 -25
  523. package/src/mongo/mongodbQuerierPool.ts +0 -24
  524. package/src/mysql/index.ts +0 -3
  525. package/src/mysql/mysql2Querier.test.ts +0 -20
  526. package/src/mysql/mysql2Querier.ts +0 -49
  527. package/src/mysql/mysql2QuerierPool.test.ts +0 -20
  528. package/src/mysql/mysql2QuerierPool.ts +0 -21
  529. package/src/mysql/mysqlDialect.spec.ts +0 -20
  530. package/src/mysql/mysqlDialect.ts +0 -16
  531. package/src/namingStrategy/defaultNamingStrategy.ts +0 -18
  532. package/src/namingStrategy/index.spec.ts +0 -36
  533. package/src/namingStrategy/index.ts +0 -2
  534. package/src/namingStrategy/snakeCaseNamingStrategy.ts +0 -15
  535. package/src/options.spec.ts +0 -41
  536. package/src/options.ts +0 -18
  537. package/src/postgres/index.ts +0 -3
  538. package/src/postgres/manual-types.d.ts +0 -4
  539. package/src/postgres/pgQuerier.test.ts +0 -25
  540. package/src/postgres/pgQuerier.ts +0 -45
  541. package/src/postgres/pgQuerierPool.test.ts +0 -28
  542. package/src/postgres/pgQuerierPool.ts +0 -21
  543. package/src/postgres/postgresDialect.spec.ts +0 -428
  544. package/src/postgres/postgresDialect.ts +0 -144
  545. package/src/querier/abstractQuerier-test.ts +0 -584
  546. package/src/querier/abstractQuerier.ts +0 -353
  547. package/src/querier/abstractQuerierPool-test.ts +0 -20
  548. package/src/querier/abstractQuerierPool.ts +0 -18
  549. package/src/querier/abstractSqlQuerier-spec.ts +0 -979
  550. package/src/querier/abstractSqlQuerier-test.ts +0 -21
  551. package/src/querier/abstractSqlQuerier.ts +0 -138
  552. package/src/querier/decorator/index.ts +0 -3
  553. package/src/querier/decorator/injectQuerier.spec.ts +0 -74
  554. package/src/querier/decorator/injectQuerier.ts +0 -45
  555. package/src/querier/decorator/serialized.spec.ts +0 -98
  556. package/src/querier/decorator/serialized.ts +0 -13
  557. package/src/querier/decorator/transactional.spec.ts +0 -240
  558. package/src/querier/decorator/transactional.ts +0 -56
  559. package/src/querier/index.ts +0 -4
  560. package/src/repository/genericRepository.spec.ts +0 -111
  561. package/src/repository/genericRepository.ts +0 -74
  562. package/src/repository/index.ts +0 -1
  563. package/src/sqlite/index.ts +0 -3
  564. package/src/sqlite/manual-types.d.ts +0 -4
  565. package/src/sqlite/sqliteDialect.spec.ts +0 -155
  566. package/src/sqlite/sqliteDialect.ts +0 -76
  567. package/src/sqlite/sqliteQuerier.spec.ts +0 -36
  568. package/src/sqlite/sqliteQuerier.test.ts +0 -21
  569. package/src/sqlite/sqliteQuerier.ts +0 -37
  570. package/src/sqlite/sqliteQuerierPool.test.ts +0 -12
  571. package/src/sqlite/sqliteQuerierPool.ts +0 -38
  572. package/src/test/entityMock.ts +0 -375
  573. package/src/test/index.ts +0 -3
  574. package/src/test/it.util.ts +0 -69
  575. package/src/test/spec.util.ts +0 -57
  576. package/src/type/entity.ts +0 -218
  577. package/src/type/index.ts +0 -9
  578. package/src/type/migration.ts +0 -241
  579. package/src/type/namingStrategy.ts +0 -17
  580. package/src/type/querier.ts +0 -143
  581. package/src/type/querierPool.ts +0 -26
  582. package/src/type/query.ts +0 -506
  583. package/src/type/repository.ts +0 -142
  584. package/src/type/universalQuerier.ts +0 -133
  585. package/src/type/utility.ts +0 -21
  586. package/src/util/dialect.util-extra.spec.ts +0 -96
  587. package/src/util/dialect.util.spec.ts +0 -23
  588. package/src/util/dialect.util.ts +0 -134
  589. package/src/util/index.ts +0 -5
  590. package/src/util/object.util.spec.ts +0 -29
  591. package/src/util/object.util.ts +0 -27
  592. package/src/util/raw.ts +0 -11
  593. package/src/util/sql.util-extra.spec.ts +0 -17
  594. package/src/util/sql.util.spec.ts +0 -208
  595. package/src/util/sql.util.ts +0 -104
  596. package/src/util/string.util.spec.ts +0 -46
  597. package/src/util/string.util.ts +0 -35
  598. package/tsconfig.build.json +0 -5
  599. package/tsconfig.json +0 -8
@@ -1,21 +0,0 @@
1
- import { createTables, dropTables } from '../test/index.js';
2
- import type { QuerierPool } from '../type/index.js';
3
- import { AbstractQuerierIt } from './abstractQuerier-test.js';
4
- import type { AbstractSqlQuerier } from './abstractSqlQuerier.js';
5
-
6
- export abstract class AbstractSqlQuerierIt extends AbstractQuerierIt<AbstractSqlQuerier> {
7
- constructor(
8
- pool: QuerierPool<AbstractSqlQuerier>,
9
- readonly idType: string,
10
- ) {
11
- super(pool);
12
- }
13
-
14
- override createTables() {
15
- return createTables(this.querier, this.idType);
16
- }
17
-
18
- override dropTables() {
19
- return dropTables(this.querier);
20
- }
21
- }
@@ -1,138 +0,0 @@
1
- import type { AbstractSqlDialect } from '../dialect/index.js';
2
- import { getMeta } from '../entity/index.js';
3
- import type {
4
- Query,
5
- QueryConflictPaths,
6
- QueryOptions,
7
- QuerySearch,
8
- QueryUpdateResult,
9
- SqlQuerier,
10
- Type,
11
- } from '../type/index.js';
12
- import { clone, unflatObjects } from '../util/index.js';
13
- import { AbstractQuerier } from './abstractQuerier.js';
14
- import { Serialized } from './decorator/index.js';
15
-
16
- export abstract class AbstractSqlQuerier extends AbstractQuerier implements SqlQuerier {
17
- private hasPendingTransaction?: boolean;
18
-
19
- constructor(readonly dialect: AbstractSqlDialect) {
20
- super();
21
- }
22
-
23
- /**
24
- * internal read query.
25
- */
26
- protected abstract internalAll<T>(query: string, values?: unknown[]): Promise<T[]>;
27
-
28
- /**
29
- * internal insert/update/delete/ddl query.
30
- */
31
- protected abstract internalRun(query: string, values?: unknown[]): Promise<QueryUpdateResult>;
32
-
33
- @Serialized()
34
- async all<T>(query: string, values?: unknown[]): Promise<T[]> {
35
- return this.internalAll<T>(query, values);
36
- }
37
-
38
- @Serialized()
39
- async run(query: string, values?: unknown[]): Promise<QueryUpdateResult> {
40
- return this.internalRun(query, values);
41
- }
42
-
43
- override async findMany<E>(entity: Type<E>, q: Query<E>) {
44
- const ctx = this.dialect.createContext();
45
- this.dialect.find(ctx, entity, q);
46
- const res = await this.all<E>(ctx.sql, ctx.values);
47
- const founds = unflatObjects(res);
48
- await this.fillToManyRelations(entity, founds, q.$select);
49
- return founds;
50
- }
51
-
52
- override async count<E>(entity: Type<E>, q: QuerySearch<E> = {}) {
53
- const ctx = this.dialect.createContext();
54
- this.dialect.count(ctx, entity, q);
55
- const res = await this.all<{ count: number }>(ctx.sql, ctx.values);
56
- return Number(res[0].count);
57
- }
58
-
59
- override async insertMany<E>(entity: Type<E>, payload: E[]) {
60
- if (!payload?.length) {
61
- return [];
62
- }
63
- payload = clone(payload);
64
- const ctx = this.dialect.createContext();
65
- this.dialect.insert(ctx, entity, payload);
66
- const { ids } = await this.run(ctx.sql, ctx.values);
67
- const meta = getMeta(entity);
68
- const payloadIds = payload.map((it, index) => {
69
- it[meta.id as string] ??= ids[index];
70
- return it[meta.id];
71
- });
72
- await this.insertRelations(entity, payload);
73
- return payloadIds;
74
- }
75
-
76
- override async updateMany<E>(entity: Type<E>, q: QuerySearch<E>, payload: E) {
77
- payload = clone(payload);
78
- const ctx = this.dialect.createContext();
79
- this.dialect.update(ctx, entity, q, payload);
80
- const { changes } = await this.run(ctx.sql, ctx.values);
81
- await this.updateRelations(entity, q, payload);
82
- return changes;
83
- }
84
-
85
- override async upsertOne<E>(entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E) {
86
- payload = clone(payload);
87
- const ctx = this.dialect.createContext();
88
- this.dialect.upsert(ctx, entity, conflictPaths, payload);
89
- return this.run(ctx.sql, ctx.values);
90
- }
91
-
92
- override async deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions) {
93
- const meta = getMeta(entity);
94
- const findCtx = this.dialect.createContext();
95
- this.dialect.find(findCtx, entity, { ...q, $select: [meta.id] });
96
- const founds = await this.all<E>(findCtx.sql, findCtx.values);
97
- if (!founds.length) {
98
- return 0;
99
- }
100
- const ids = founds.map((it) => it[meta.id]);
101
- const deleteCtx = this.dialect.createContext();
102
- this.dialect.delete(deleteCtx, entity, { $where: ids }, opts);
103
- const { changes } = await this.run(deleteCtx.sql, deleteCtx.values);
104
- await this.deleteRelations(entity, ids, opts);
105
- return changes;
106
- }
107
-
108
- override get hasOpenTransaction() {
109
- return this.hasPendingTransaction;
110
- }
111
-
112
- @Serialized()
113
- override async beginTransaction() {
114
- if (this.hasPendingTransaction) {
115
- throw TypeError('pending transaction');
116
- }
117
- await this.internalRun(this.dialect.beginTransactionCommand);
118
- this.hasPendingTransaction = true;
119
- }
120
-
121
- @Serialized()
122
- override async commitTransaction() {
123
- if (!this.hasPendingTransaction) {
124
- throw TypeError('not a pending transaction');
125
- }
126
- await this.internalRun(this.dialect.commitTransactionCommand);
127
- this.hasPendingTransaction = false;
128
- }
129
-
130
- @Serialized()
131
- override async rollbackTransaction() {
132
- if (!this.hasPendingTransaction) {
133
- throw TypeError('not a pending transaction');
134
- }
135
- await this.internalRun(this.dialect.rollbackTransactionCommand);
136
- this.hasPendingTransaction = false;
137
- }
138
- }
@@ -1,3 +0,0 @@
1
- export * from './injectQuerier.js';
2
- export * from './serialized.js';
3
- export * from './transactional.js';
@@ -1,74 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import type { Querier } from '../../type/index.js';
3
- import { getInjectedQuerierIndex, InjectQuerier } from './injectQuerier.js';
4
-
5
- describe('injectQuerier', () => {
6
- it('no inject', () => {
7
- class ServiceA {
8
- save() {}
9
-
10
- hello(param1: string, someQuerier?: Querier) {}
11
- }
12
-
13
- expect(getInjectedQuerierIndex(ServiceA, 'save')).toBe(undefined);
14
- expect(getInjectedQuerierIndex(ServiceA, 'hello')).toBe(undefined);
15
- });
16
-
17
- it('one', () => {
18
- class ServiceA {
19
- save(@InjectQuerier() someQuerier?: Querier) {}
20
-
21
- update(param1: string, @InjectQuerier() someQuerier?: Querier) {}
22
- }
23
-
24
- expect(getInjectedQuerierIndex(ServiceA, 'save')).toBe(0);
25
- expect(getInjectedQuerierIndex(ServiceA, 'update')).toBe(1);
26
- });
27
-
28
- it('inheritance', () => {
29
- class ServiceA {
30
- save(@InjectQuerier() someQuerier?: Querier) {}
31
- }
32
- class ServiceB extends ServiceA {}
33
- class ServiceC extends ServiceB {
34
- hello(@InjectQuerier() someQuerier?: Querier) {}
35
- }
36
-
37
- class ServiceD extends ServiceC {}
38
-
39
- class ServiceE extends ServiceB {}
40
-
41
- expect(getInjectedQuerierIndex(ServiceA, 'save')).toBe(0);
42
- expect(getInjectedQuerierIndex(ServiceB, 'save')).toBe(0);
43
- expect(getInjectedQuerierIndex(ServiceC, 'save')).toBe(0);
44
- expect(getInjectedQuerierIndex(ServiceC, 'hello')).toBe(0);
45
- expect(getInjectedQuerierIndex(ServiceD, 'save')).toBe(0);
46
- expect(getInjectedQuerierIndex(ServiceC, 'hello')).toBe(0);
47
- expect(getInjectedQuerierIndex(ServiceE, 'save')).toBe(0);
48
- });
49
-
50
- it('inheritance - overridden', () => {
51
- class ServiceA {
52
- save(@InjectQuerier() someQuerier?: Querier) {}
53
- }
54
- class ServiceB extends ServiceA {
55
- override save(someQuerier?: Querier) {}
56
- }
57
-
58
- class ServiceC extends ServiceA {
59
- override save(@InjectQuerier() someQuerier?: Querier) {}
60
- }
61
-
62
- expect(getInjectedQuerierIndex(ServiceA, 'save')).toBe(0);
63
- expect(getInjectedQuerierIndex(ServiceB, 'save')).toBe(undefined);
64
- expect(getInjectedQuerierIndex(ServiceC, 'save')).toBe(0);
65
- });
66
-
67
- it('prevent duplicated injection', () => {
68
- expect(() => {
69
- class ServiceA {
70
- save(@InjectQuerier() someQuerier?: Querier, @InjectQuerier() anotherQuerier?: Querier) {}
71
- }
72
- }).toThrow("@InjectQuerier() can only appears once in 'ServiceA.save'");
73
- });
74
- });
@@ -1,45 +0,0 @@
1
- import type { Key, Primitive, Type } from '../../type/index.js';
2
-
3
- const metadataKey = Symbol('InjectQuerier');
4
-
5
- export function InjectQuerier() {
6
- return (proto: Record<Primitive, any>, key: string, index: number) => {
7
- if (!proto[metadataKey]) {
8
- proto[metadataKey] = new WeakMap();
9
- }
10
-
11
- if (!proto[metadataKey].has(proto.constructor)) {
12
- proto[metadataKey].set(proto.constructor, {});
13
- }
14
-
15
- const meta = proto[metadataKey].get(proto.constructor);
16
- const isAlreadyInjected = key in meta;
17
-
18
- if (isAlreadyInjected) {
19
- throw new TypeError(`@InjectQuerier() can only appears once in '${proto.constructor.name}.${key}'}`);
20
- }
21
-
22
- meta[key] = index;
23
- };
24
- }
25
-
26
- export function getInjectedQuerierIndex<S>(service: Type<S>, key: Key<S>) {
27
- let proto = service.prototype;
28
-
29
- while (proto.constructor !== Object) {
30
- const meta = proto[metadataKey]?.get(proto.constructor);
31
-
32
- if (meta && key in meta) {
33
- return meta[key];
34
- }
35
-
36
- const keys = Object.getOwnPropertyNames(proto) as Key<S>[];
37
- const isOwnKey = keys.includes(key);
38
-
39
- if (isOwnKey) {
40
- return;
41
- }
42
-
43
- proto = Object.getPrototypeOf(proto);
44
- }
45
- }
@@ -1,98 +0,0 @@
1
- import { expect, test } from 'bun:test';
2
- import { AbstractQuerier } from '../abstractQuerier.js';
3
- import { Serialized } from './serialized.js';
4
-
5
- class MockQuerier extends AbstractQuerier {
6
- activeCount = 0;
7
- maxConcurrency = 0;
8
- executionOrder: number[] = [];
9
-
10
- @Serialized()
11
- async slowMethod(id: number, delay: number) {
12
- this.activeCount++;
13
- this.maxConcurrency = Math.max(this.maxConcurrency, this.activeCount);
14
- await new Promise((resolve) => setTimeout(resolve, delay));
15
- this.executionOrder.push(id);
16
- this.activeCount--;
17
- return id;
18
- }
19
-
20
- // Abstract methods required by AbstractQuerier
21
- findMany(): any {}
22
- count(): any {}
23
- insertMany(): any {}
24
- updateMany(): any {}
25
- upsertOne(): any {}
26
- deleteMany(): any {}
27
- beginTransaction(): any {}
28
- commitTransaction(): any {}
29
- rollbackTransaction(): any {}
30
- protected internalRelease(): any {}
31
- hasOpenTransaction = false;
32
- }
33
-
34
- test('Serialized decorator executes tasks sequentially', async () => {
35
- const querier = new MockQuerier();
36
- // Fire 3 "parallel" calls
37
- const results = await Promise.all([querier.slowMethod(1, 100), querier.slowMethod(2, 50), querier.slowMethod(3, 10)]);
38
- // Even though 3 finished faster, it should be last because it was queued last
39
- expect(results).toEqual([1, 2, 3]);
40
- expect(querier.executionOrder).toEqual([1, 2, 3]);
41
- // CRITICAL: Max concurrency must be 1
42
- expect(querier.maxConcurrency).toBe(1);
43
- });
44
-
45
- test('Serialized decorator advances queue even on failure', async () => {
46
- class FailingQuerier extends MockQuerier {
47
- @Serialized()
48
- async failingMethod() {
49
- throw new Error('boom');
50
- }
51
- }
52
-
53
- const querier = new FailingQuerier();
54
- const promise1 = querier.failingMethod();
55
- const promise2 = querier.slowMethod(2, 10);
56
- await expect(promise1).rejects.toThrow('boom');
57
- const result2 = await promise2;
58
- expect(result2).toBe(2);
59
- expect(querier.executionOrder).toEqual([2]);
60
- });
61
-
62
- test('Demonstrate deadlock when a @Serialized method calls another @Serialized method', async () => {
63
- class DeadlockQuerier extends MockQuerier {
64
- @Serialized()
65
- async outer() {
66
- return this.inner();
67
- }
68
-
69
- @Serialized()
70
- async inner() {
71
- return 'done';
72
- }
73
- }
74
-
75
- const querier = new DeadlockQuerier();
76
-
77
- // We expect this to deadlock/timeout because 'outer' holds the queue and waits for 'inner',
78
- // but 'inner' is waiting for the queue to be free.
79
- const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('DEADLOCK')), 500));
80
-
81
- await expect(Promise.race([querier.outer(), timeoutPromise])).rejects.toThrow('DEADLOCK');
82
- });
83
-
84
- test('Proper solution: @Serialized method calls a non-decorated internal method', async () => {
85
- class SafeQuerier extends MockQuerier {
86
- @Serialized()
87
- async publicMethod() {
88
- return this.internalMethod();
89
- }
90
-
91
- async internalMethod() {
92
- return 'safe';
93
- }
94
- }
95
-
96
- const querier = new SafeQuerier();
97
- await expect(querier.publicMethod()).resolves.toBe('safe');
98
- });
@@ -1,13 +0,0 @@
1
- /**
2
- * Decorator that ensures the decorated method is executed serially within the Querier instance.
3
- * It uses a private promise queue to prevent race conditions on the database connection.
4
- * Note: The decorated class must extend AbstractQuerier or implement a compatible serialize method.
5
- */
6
- export function Serialized() {
7
- return (_target: object, _key: string, propDescriptor: PropertyDescriptor): void => {
8
- const originalMethod = propDescriptor.value;
9
- propDescriptor.value = function (this: any, ...args: any[]) {
10
- return this.serialize(() => originalMethod.apply(this, args));
11
- };
12
- };
13
- }
@@ -1,240 +0,0 @@
1
- import { beforeEach, describe, expect, it, jest } from 'bun:test';
2
- import { getQuerier, setQuerierPool } from '../../options.js';
3
- import type { Querier, QuerierPool, Writable } from '../../type/index.js';
4
- import { InjectQuerier } from './injectQuerier.js';
5
- import { Transactional } from './transactional.js';
6
-
7
- describe('transactional', () => {
8
- let anotherQuerierPool: QuerierPool;
9
-
10
- beforeEach(() => {
11
- const querierSingleton = buildQuerierMock();
12
- const anotherQuerierSingleton = buildQuerierMock();
13
-
14
- setQuerierPool({
15
- getQuerier: async () => querierSingleton,
16
- end: async () => undefined,
17
- dialect: 'postgres',
18
- });
19
-
20
- anotherQuerierPool = {
21
- getQuerier: async () => anotherQuerierSingleton,
22
- end: async () => undefined,
23
- dialect: 'postgres',
24
- };
25
- });
26
-
27
- it('injectQuerier', async () => {
28
- class ServiceA {
29
- @Transactional()
30
- async save(@InjectQuerier() querier?: Querier) {}
31
- }
32
-
33
- const serviceA = new ServiceA();
34
- await serviceA.save();
35
-
36
- const querier = await getQuerier();
37
-
38
- expect(querier.beginTransaction).toHaveBeenCalledTimes(1);
39
- expect(querier.commitTransaction).toHaveBeenCalledTimes(1);
40
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
41
- expect(querier.release).toHaveBeenCalledTimes(1);
42
-
43
- const anotherQuerier = await anotherQuerierPool.getQuerier();
44
-
45
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(0);
46
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(0);
47
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
48
- expect(anotherQuerier.release).toHaveBeenCalledTimes(0);
49
- });
50
-
51
- it('injectQuerier - querier and repositories', async () => {
52
- class ServiceA {
53
- @Transactional()
54
- async save(@InjectQuerier() querier?: Querier) {}
55
- }
56
-
57
- const serviceA = new ServiceA();
58
- await serviceA.save();
59
-
60
- const querier = await getQuerier();
61
-
62
- expect(querier.beginTransaction).toHaveBeenCalledTimes(1);
63
- expect(querier.commitTransaction).toHaveBeenCalledTimes(1);
64
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
65
- expect(querier.release).toHaveBeenCalledTimes(1);
66
-
67
- const anotherQuerier = await anotherQuerierPool.getQuerier();
68
-
69
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(0);
70
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(0);
71
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
72
- expect(anotherQuerier.release).toHaveBeenCalledTimes(0);
73
- });
74
-
75
- it('injectQuerier propagation: supported', async () => {
76
- class ServiceA {
77
- @Transactional({ propagation: 'supported' })
78
- async find(@InjectQuerier() querier?: Querier) {}
79
- }
80
-
81
- const serviceA = new ServiceA();
82
- await serviceA.find();
83
-
84
- const querier = await getQuerier();
85
-
86
- expect(querier.beginTransaction).toHaveBeenCalledTimes(0);
87
- expect(querier.commitTransaction).toHaveBeenCalledTimes(0);
88
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
89
- expect(querier.release).toHaveBeenCalledTimes(1);
90
-
91
- const anotherQuerier = await anotherQuerierPool.getQuerier();
92
-
93
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(0);
94
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(0);
95
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
96
- expect(anotherQuerier.release).toHaveBeenCalledTimes(0);
97
- });
98
-
99
- it('injectQuerier another querierPool', async () => {
100
- class ServiceA {
101
- @Transactional({ querierPool: anotherQuerierPool })
102
- async save(@InjectQuerier() querier?: Querier) {}
103
- }
104
-
105
- const serviceA = new ServiceA();
106
- await serviceA.save();
107
-
108
- const anotherQuerier = await anotherQuerierPool.getQuerier();
109
-
110
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(1);
111
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(1);
112
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
113
- expect(anotherQuerier.release).toHaveBeenCalledTimes(1);
114
-
115
- const querier = await getQuerier();
116
-
117
- expect(querier.beginTransaction).toHaveBeenCalledTimes(0);
118
- expect(querier.commitTransaction).toHaveBeenCalledTimes(0);
119
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
120
- expect(querier.release).toHaveBeenCalledTimes(0);
121
- });
122
-
123
- it('injectQuerier and call super', async () => {
124
- const deleteStub = jest.fn((id: string, querier: Querier) => {});
125
-
126
- class ServiceA {
127
- @Transactional()
128
- async delete(id: string, @InjectQuerier() querier?: Querier) {
129
- deleteStub(id, querier);
130
- }
131
- }
132
-
133
- class ServiceB extends ServiceA {
134
- @Transactional({ querierPool: anotherQuerierPool })
135
- override async delete(id: string, @InjectQuerier() querier?: Querier) {
136
- return super.delete(id, querier);
137
- }
138
- }
139
-
140
- const serviceB = new ServiceB();
141
- await serviceB.delete('123');
142
-
143
- const querier = await getQuerier();
144
-
145
- expect(deleteStub).toHaveBeenCalledTimes(1);
146
-
147
- const anotherQuerier = await anotherQuerierPool.getQuerier();
148
-
149
- expect(deleteStub).toHaveBeenCalledWith('123', anotherQuerier);
150
-
151
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(1);
152
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(1);
153
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
154
- expect(anotherQuerier.release).toHaveBeenCalledTimes(1);
155
-
156
- expect(querier.beginTransaction).toHaveBeenCalledTimes(0);
157
- expect(querier.commitTransaction).toHaveBeenCalledTimes(0);
158
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
159
- expect(querier.release).toHaveBeenCalledTimes(0);
160
- });
161
-
162
- it('throw', async () => {
163
- class ServiceA {
164
- @Transactional({ propagation: 'supported' })
165
- async save(@InjectQuerier() querier?: Querier) {
166
- throw new Error('Some Error');
167
- }
168
- }
169
-
170
- const serviceA = new ServiceA();
171
-
172
- await expect(serviceA.save()).rejects.toThrow('Some Error');
173
-
174
- const querier = await getQuerier();
175
-
176
- expect(querier.beginTransaction).toHaveBeenCalledTimes(0);
177
- expect(querier.commitTransaction).toHaveBeenCalledTimes(0);
178
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(0);
179
- expect(querier.release).toHaveBeenCalledTimes(1);
180
-
181
- const anotherQuerier = await anotherQuerierPool.getQuerier();
182
-
183
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(0);
184
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(0);
185
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
186
- expect(anotherQuerier.release).toHaveBeenCalledTimes(0);
187
- });
188
-
189
- it('throw inside transaction', async () => {
190
- class ServiceA {
191
- @Transactional()
192
- async save(@InjectQuerier() querier?: Querier) {
193
- throw new Error('Some Error');
194
- }
195
- }
196
-
197
- const serviceA = new ServiceA();
198
-
199
- await expect(serviceA.save()).rejects.toThrow('Some Error');
200
-
201
- const querier = await getQuerier();
202
-
203
- expect(querier.beginTransaction).toHaveBeenCalledTimes(1);
204
- expect(querier.commitTransaction).toHaveBeenCalledTimes(0);
205
- expect(querier.rollbackTransaction).toHaveBeenCalledTimes(1);
206
- expect(querier.release).toHaveBeenCalledTimes(1);
207
-
208
- const anotherQuerier = await anotherQuerierPool.getQuerier();
209
-
210
- expect(anotherQuerier.beginTransaction).toHaveBeenCalledTimes(0);
211
- expect(anotherQuerier.commitTransaction).toHaveBeenCalledTimes(0);
212
- expect(anotherQuerier.rollbackTransaction).toHaveBeenCalledTimes(0);
213
- expect(anotherQuerier.release).toHaveBeenCalledTimes(0);
214
- });
215
-
216
- it('missing injectQuerier', () => {
217
- expect(() => {
218
- class ServiceA {
219
- @Transactional()
220
- async find() {}
221
- }
222
- }).toThrow("missing decorator @InjectQuerier() in 'ServiceA.find'");
223
- });
224
- });
225
-
226
- function buildQuerierMock(): Querier {
227
- const querier = {
228
- beginTransaction: jest.fn(async () => {
229
- querier.hasOpenTransaction = true;
230
- }),
231
- commitTransaction: jest.fn(async () => {
232
- querier.hasOpenTransaction = undefined;
233
- }),
234
- rollbackTransaction: jest.fn(async () => {
235
- querier.hasOpenTransaction = undefined;
236
- }),
237
- release: jest.fn(async () => {}),
238
- } as Partial<Querier> as Writable<Querier>;
239
- return querier;
240
- }
@@ -1,56 +0,0 @@
1
- import { getQuerierPool } from '../../options.js';
2
- import type { Querier, QuerierPool, Type } from '../../type/index.js';
3
- import { getInjectedQuerierIndex } from './injectQuerier.js';
4
-
5
- export function Transactional({
6
- propagation = 'required',
7
- querierPool,
8
- }: {
9
- readonly propagation?: 'supported' | 'required';
10
- readonly querierPool?: QuerierPool;
11
- } = {}) {
12
- return (target: object, key: string, propDescriptor: PropertyDescriptor): void => {
13
- const theClass = target.constructor as Type<any>;
14
- const originalMethod = propDescriptor.value;
15
- const injectedQuerierIndex = getInjectedQuerierIndex(theClass, key);
16
-
17
- if (injectedQuerierIndex === undefined) {
18
- throw TypeError(`missing decorator @InjectQuerier() in '${target.constructor.name}.${key}'`);
19
- }
20
-
21
- propDescriptor.value = async function func(this: object, ...args: any[]) {
22
- const params = [...args];
23
- let isOwnTransaction: boolean;
24
- let querier: Querier;
25
-
26
- if (params[injectedQuerierIndex]) {
27
- querier = params[injectedQuerierIndex];
28
- } else {
29
- isOwnTransaction = true;
30
- const pool = querierPool ?? getQuerierPool();
31
- querier = await pool.getQuerier();
32
- params[injectedQuerierIndex] = querier;
33
- }
34
-
35
- try {
36
- if (propagation === 'required' && !querier.hasOpenTransaction) {
37
- await querier.beginTransaction();
38
- }
39
- const resp = await originalMethod.apply(this, params);
40
- if (isOwnTransaction && querier.hasOpenTransaction) {
41
- await querier.commitTransaction();
42
- }
43
- return resp;
44
- } catch (err) {
45
- if (isOwnTransaction && querier.hasOpenTransaction) {
46
- await querier.rollbackTransaction();
47
- }
48
- throw err;
49
- } finally {
50
- if (isOwnTransaction) {
51
- await querier.release();
52
- }
53
- }
54
- };
55
- };
56
- }