@uql/core 1.0.12 → 3.1.0

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 (464) hide show
  1. package/CHANGELOG.md +254 -0
  2. package/LICENSE.md +2 -2
  3. package/dist/browser/http/bus.d.ts +3 -0
  4. package/dist/browser/http/bus.js +14 -0
  5. package/dist/browser/http/http.d.ts +6 -0
  6. package/dist/browser/http/http.js +45 -0
  7. package/dist/browser/http/index.d.ts +2 -0
  8. package/dist/browser/http/index.js +3 -0
  9. package/dist/browser/index.d.ts +4 -0
  10. package/dist/browser/index.js +5 -0
  11. package/dist/browser/options.d.ts +4 -0
  12. package/dist/browser/options.js +14 -0
  13. package/dist/browser/querier/genericClientRepository.d.ts +17 -0
  14. package/dist/browser/querier/genericClientRepository.js +39 -0
  15. package/dist/browser/querier/httpQuerier.d.ts +20 -0
  16. package/dist/browser/querier/httpQuerier.js +71 -0
  17. package/dist/browser/querier/index.d.ts +3 -0
  18. package/dist/browser/querier/index.js +4 -0
  19. package/dist/browser/querier/querier.util.d.ts +2 -0
  20. package/dist/browser/querier/querier.util.js +17 -0
  21. package/dist/browser/type/clientQuerier.d.ts +16 -0
  22. package/dist/browser/type/clientQuerier.js +2 -0
  23. package/dist/browser/type/clientQuerierPool.d.ts +4 -0
  24. package/dist/browser/type/clientQuerierPool.js +2 -0
  25. package/dist/browser/type/clientRepository.d.ts +13 -0
  26. package/dist/browser/type/clientRepository.js +2 -0
  27. package/dist/browser/type/index.d.ts +4 -0
  28. package/dist/browser/type/index.js +5 -0
  29. package/dist/browser/type/request.d.ts +28 -0
  30. package/dist/browser/type/request.js +2 -0
  31. package/dist/browser/uql-browser.min.js +2150 -0
  32. package/dist/browser/uql-browser.min.js.map +1 -0
  33. package/dist/dialect/abstractDialect.d.ts +16 -0
  34. package/dist/dialect/abstractDialect.js +28 -0
  35. package/dist/dialect/abstractSqlDialect.d.ts +47 -0
  36. package/dist/dialect/abstractSqlDialect.js +650 -0
  37. package/dist/dialect/index.d.ts +3 -0
  38. package/dist/dialect/index.js +4 -0
  39. package/dist/dialect/queryContext.d.ts +48 -0
  40. package/dist/dialect/queryContext.js +65 -0
  41. package/{entity → dist/entity}/decorator/definition.d.ts +3 -3
  42. package/dist/entity/decorator/definition.js +214 -0
  43. package/{entity → dist/entity}/decorator/entity.d.ts +1 -1
  44. package/dist/entity/decorator/entity.js +7 -0
  45. package/{entity → dist/entity}/decorator/field.d.ts +1 -1
  46. package/dist/entity/decorator/field.js +8 -0
  47. package/{entity → dist/entity}/decorator/id.d.ts +1 -1
  48. package/dist/entity/decorator/id.js +8 -0
  49. package/dist/entity/decorator/index.d.ts +5 -0
  50. package/dist/entity/decorator/index.js +6 -0
  51. package/{entity → dist/entity}/decorator/relation.d.ts +1 -1
  52. package/dist/entity/decorator/relation.js +20 -0
  53. package/dist/entity/index.d.ts +1 -0
  54. package/dist/entity/index.js +2 -0
  55. package/dist/express/index.d.ts +2 -0
  56. package/dist/express/index.js +3 -0
  57. package/dist/express/querierMiddleware.d.ts +26 -0
  58. package/dist/express/querierMiddleware.js +190 -0
  59. package/dist/express/query.util.d.ts +2 -0
  60. package/dist/express/query.util.js +19 -0
  61. package/dist/index.d.ts +9 -0
  62. package/dist/index.js +10 -0
  63. package/dist/maria/index.d.ts +3 -0
  64. package/dist/maria/index.js +4 -0
  65. package/dist/maria/mariaDialect.d.ts +8 -0
  66. package/dist/maria/mariaDialect.js +38 -0
  67. package/dist/maria/mariaQuerierPool.test.d.ts +5 -0
  68. package/dist/maria/mariaQuerierPool.test.js +19 -0
  69. package/dist/maria/mariadbQuerier.d.ts +17 -0
  70. package/dist/maria/mariadbQuerier.js +39 -0
  71. package/dist/maria/mariadbQuerier.test.d.ts +4 -0
  72. package/dist/maria/mariadbQuerier.test.js +19 -0
  73. package/dist/maria/mariadbQuerierPool.d.ts +10 -0
  74. package/dist/maria/mariadbQuerierPool.js +17 -0
  75. package/dist/migrate/cli.d.ts +2 -0
  76. package/dist/migrate/cli.js +254 -0
  77. package/dist/migrate/generator/index.d.ts +4 -0
  78. package/dist/migrate/generator/index.js +5 -0
  79. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +12 -0
  80. package/dist/migrate/generator/mongoSchemaGenerator.js +100 -0
  81. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +14 -0
  82. package/dist/migrate/generator/mysqlSchemaGenerator.js +81 -0
  83. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +18 -0
  84. package/dist/migrate/generator/postgresSchemaGenerator.js +111 -0
  85. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +14 -0
  86. package/dist/migrate/generator/sqliteSchemaGenerator.js +68 -0
  87. package/dist/migrate/index.d.ts +12 -0
  88. package/dist/migrate/index.js +17 -0
  89. package/dist/migrate/introspection/index.d.ts +4 -0
  90. package/dist/migrate/introspection/index.js +5 -0
  91. package/dist/migrate/introspection/mongoIntrospector.d.ts +8 -0
  92. package/dist/migrate/introspection/mongoIntrospector.js +46 -0
  93. package/dist/migrate/introspection/mysqlIntrospector.d.ts +25 -0
  94. package/dist/migrate/introspection/mysqlIntrospector.js +220 -0
  95. package/dist/migrate/introspection/postgresIntrospector.d.ts +21 -0
  96. package/dist/migrate/introspection/postgresIntrospector.js +269 -0
  97. package/dist/migrate/introspection/sqliteIntrospector.d.ts +23 -0
  98. package/dist/migrate/introspection/sqliteIntrospector.js +212 -0
  99. package/dist/migrate/migrator-mongo.test.d.ts +1 -0
  100. package/dist/migrate/migrator-mongo.test.js +54 -0
  101. package/dist/migrate/migrator.d.ts +133 -0
  102. package/dist/migrate/migrator.js +600 -0
  103. package/dist/migrate/migrator.test.d.ts +1 -0
  104. package/dist/migrate/migrator.test.js +106 -0
  105. package/dist/migrate/schemaGenerator.d.ts +78 -0
  106. package/dist/migrate/schemaGenerator.js +363 -0
  107. package/dist/migrate/storage/databaseStorage.d.ts +24 -0
  108. package/dist/migrate/storage/databaseStorage.js +77 -0
  109. package/dist/migrate/storage/index.d.ts +2 -0
  110. package/dist/migrate/storage/index.js +3 -0
  111. package/dist/migrate/storage/jsonStorage.d.ts +15 -0
  112. package/dist/migrate/storage/jsonStorage.js +51 -0
  113. package/dist/migrate/type.d.ts +1 -0
  114. package/dist/migrate/type.js +2 -0
  115. package/dist/mongo/index.d.ts +3 -0
  116. package/dist/mongo/index.js +4 -0
  117. package/dist/mongo/mongoDialect.d.ts +34 -0
  118. package/dist/mongo/mongoDialect.js +163 -0
  119. package/dist/mongo/mongodbQuerier.d.ts +28 -0
  120. package/dist/mongo/mongodbQuerier.js +204 -0
  121. package/dist/mongo/mongodbQuerier.test.d.ts +1 -0
  122. package/dist/mongo/mongodbQuerier.test.js +36 -0
  123. package/dist/mongo/mongodbQuerierPool.d.ts +10 -0
  124. package/dist/mongo/mongodbQuerierPool.js +20 -0
  125. package/dist/mongo/mongodbQuerierPool.test.d.ts +1 -0
  126. package/dist/mongo/mongodbQuerierPool.test.js +21 -0
  127. package/dist/mysql/index.d.ts +3 -0
  128. package/dist/mysql/index.js +4 -0
  129. package/dist/mysql/mysql2Querier.d.ts +17 -0
  130. package/dist/mysql/mysql2Querier.js +43 -0
  131. package/dist/mysql/mysql2Querier.test.d.ts +4 -0
  132. package/dist/mysql/mysql2Querier.test.js +16 -0
  133. package/dist/mysql/mysql2QuerierPool.d.ts +10 -0
  134. package/dist/mysql/mysql2QuerierPool.js +17 -0
  135. package/dist/mysql/mysql2QuerierPool.test.d.ts +5 -0
  136. package/dist/mysql/mysql2QuerierPool.test.js +16 -0
  137. package/dist/mysql/mysqlDialect.d.ts +5 -0
  138. package/dist/mysql/mysqlDialect.js +15 -0
  139. package/dist/namingStrategy/defaultNamingStrategy.d.ts +9 -0
  140. package/dist/namingStrategy/defaultNamingStrategy.js +15 -0
  141. package/dist/namingStrategy/index.d.ts +2 -0
  142. package/dist/namingStrategy/index.js +3 -0
  143. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +8 -0
  144. package/dist/namingStrategy/snakeCaseNamingStrategy.js +14 -0
  145. package/{options.d.ts → dist/options.d.ts} +1 -1
  146. package/dist/options.js +14 -0
  147. package/dist/package.json +131 -0
  148. package/dist/postgres/index.d.ts +3 -0
  149. package/dist/postgres/index.js +4 -0
  150. package/dist/postgres/pgQuerier.d.ts +17 -0
  151. package/dist/postgres/pgQuerier.js +39 -0
  152. package/dist/postgres/pgQuerier.test.d.ts +4 -0
  153. package/dist/postgres/pgQuerier.test.js +20 -0
  154. package/dist/postgres/pgQuerierPool.d.ts +10 -0
  155. package/dist/postgres/pgQuerierPool.js +17 -0
  156. package/dist/postgres/pgQuerierPool.test.d.ts +5 -0
  157. package/dist/postgres/pgQuerierPool.test.js +23 -0
  158. package/dist/postgres/postgresDialect.d.ts +13 -0
  159. package/dist/postgres/postgresDialect.js +110 -0
  160. package/dist/querier/abstractQuerier-test.d.ts +45 -0
  161. package/dist/querier/abstractQuerier-test.js +461 -0
  162. package/dist/querier/abstractQuerier.d.ts +50 -0
  163. package/dist/querier/abstractQuerier.js +278 -0
  164. package/dist/querier/abstractQuerierPool-test.d.ts +9 -0
  165. package/dist/querier/abstractQuerierPool-test.js +18 -0
  166. package/dist/querier/abstractQuerierPool.d.ts +14 -0
  167. package/dist/querier/abstractQuerierPool.js +9 -0
  168. package/dist/querier/abstractSqlQuerier-test.d.ts +9 -0
  169. package/dist/querier/abstractSqlQuerier-test.js +16 -0
  170. package/dist/querier/abstractSqlQuerier.d.ts +28 -0
  171. package/dist/querier/abstractSqlQuerier.js +133 -0
  172. package/dist/querier/decorator/index.d.ts +3 -0
  173. package/dist/querier/decorator/index.js +4 -0
  174. package/dist/querier/decorator/injectQuerier.d.ts +3 -0
  175. package/dist/querier/decorator/injectQuerier.js +33 -0
  176. package/dist/querier/decorator/serialized.d.ts +6 -0
  177. package/dist/querier/decorator/serialized.js +14 -0
  178. package/{querier → dist/querier}/decorator/transactional.d.ts +1 -1
  179. package/dist/querier/decorator/transactional.js +48 -0
  180. package/dist/querier/index.d.ts +4 -0
  181. package/dist/querier/index.js +5 -0
  182. package/dist/repository/genericRepository.d.ts +20 -0
  183. package/dist/repository/genericRepository.js +51 -0
  184. package/dist/repository/index.d.ts +1 -0
  185. package/dist/repository/index.js +2 -0
  186. package/dist/sqlite/index.d.ts +3 -0
  187. package/dist/sqlite/index.js +4 -0
  188. package/dist/sqlite/sqliteDialect.d.ts +10 -0
  189. package/dist/sqlite/sqliteDialect.js +48 -0
  190. package/dist/sqlite/sqliteQuerier.d.ts +15 -0
  191. package/dist/sqlite/sqliteQuerier.js +33 -0
  192. package/dist/sqlite/sqliteQuerier.test.d.ts +5 -0
  193. package/dist/sqlite/sqliteQuerier.test.js +19 -0
  194. package/dist/sqlite/sqliteQuerierPool.d.ts +14 -0
  195. package/dist/sqlite/sqliteQuerierPool.js +34 -0
  196. package/dist/sqlite/sqliteQuerierPool.test.d.ts +5 -0
  197. package/dist/sqlite/sqliteQuerierPool.test.js +10 -0
  198. package/dist/test/entityMock.d.ts +164 -0
  199. package/dist/test/entityMock.js +554 -0
  200. package/dist/test/index.d.ts +3 -0
  201. package/dist/test/index.js +4 -0
  202. package/dist/test/it.util.d.ts +4 -0
  203. package/dist/test/it.util.js +55 -0
  204. package/dist/test/spec.util.d.ts +14 -0
  205. package/dist/test/spec.util.js +50 -0
  206. package/{type → dist/type}/entity.d.ts +97 -4
  207. package/dist/type/entity.js +5 -0
  208. package/dist/type/index.d.ts +9 -0
  209. package/dist/type/index.js +10 -0
  210. package/dist/type/migration.d.ts +213 -0
  211. package/dist/type/migration.js +2 -0
  212. package/dist/type/namingStrategy.d.ts +17 -0
  213. package/dist/type/namingStrategy.js +2 -0
  214. package/dist/type/querier.d.ts +96 -0
  215. package/dist/type/querier.js +11 -0
  216. package/{type → dist/type}/querierPool.d.ts +7 -3
  217. package/dist/type/querierPool.js +2 -0
  218. package/{type → dist/type}/query.d.ts +170 -108
  219. package/dist/type/query.js +9 -0
  220. package/{type → dist/type}/repository.d.ts +42 -35
  221. package/dist/type/repository.js +2 -0
  222. package/{type → dist/type}/universalQuerier.d.ts +50 -28
  223. package/dist/type/universalQuerier.js +2 -0
  224. package/dist/type/utility.d.ts +13 -0
  225. package/dist/type/utility.js +2 -0
  226. package/dist/util/dialect.util.d.ts +12 -0
  227. package/dist/util/dialect.util.js +93 -0
  228. package/dist/util/index.d.ts +5 -0
  229. package/dist/util/index.js +6 -0
  230. package/dist/util/object.util.d.ts +7 -0
  231. package/dist/util/object.util.js +19 -0
  232. package/dist/util/raw.d.ts +8 -0
  233. package/dist/util/raw.js +11 -0
  234. package/dist/util/sql.util.d.ts +13 -0
  235. package/dist/util/sql.util.js +78 -0
  236. package/{util → dist/util}/string.util.d.ts +1 -0
  237. package/dist/util/string.util.js +34 -0
  238. package/package.json +85 -17
  239. package/src/@types/index.d.ts +1 -0
  240. package/src/@types/jest.d.ts +6 -0
  241. package/src/browser/http/bus.spec.ts +22 -0
  242. package/src/browser/http/bus.ts +17 -0
  243. package/src/browser/http/http.spec.ts +70 -0
  244. package/src/browser/http/http.ts +55 -0
  245. package/src/browser/http/index.ts +2 -0
  246. package/src/browser/index.ts +4 -0
  247. package/src/browser/options.spec.ts +37 -0
  248. package/src/browser/options.ts +18 -0
  249. package/src/browser/querier/genericClientRepository.spec.ts +105 -0
  250. package/src/browser/querier/genericClientRepository.ts +49 -0
  251. package/src/browser/querier/httpQuerier.ts +82 -0
  252. package/src/browser/querier/index.ts +3 -0
  253. package/src/browser/querier/querier.util.spec.ts +35 -0
  254. package/src/browser/querier/querier.util.ts +18 -0
  255. package/src/browser/type/clientQuerier.ts +45 -0
  256. package/src/browser/type/clientQuerierPool.ts +5 -0
  257. package/src/browser/type/clientRepository.ts +22 -0
  258. package/src/browser/type/index.ts +4 -0
  259. package/src/browser/type/request.ts +25 -0
  260. package/src/dialect/abstractDialect.ts +28 -0
  261. package/src/dialect/abstractSqlDialect-spec.ts +1309 -0
  262. package/src/dialect/abstractSqlDialect.ts +805 -0
  263. package/src/dialect/index.ts +3 -0
  264. package/src/dialect/namingStrategy.spec.ts +52 -0
  265. package/src/dialect/queryContext.ts +69 -0
  266. package/src/entity/decorator/definition.spec.ts +736 -0
  267. package/src/entity/decorator/definition.ts +265 -0
  268. package/src/entity/decorator/entity.ts +8 -0
  269. package/src/entity/decorator/field.ts +9 -0
  270. package/src/entity/decorator/id.ts +9 -0
  271. package/src/entity/decorator/index.ts +5 -0
  272. package/src/entity/decorator/relation.spec.ts +41 -0
  273. package/src/entity/decorator/relation.ts +34 -0
  274. package/src/entity/index.ts +1 -0
  275. package/src/express/@types/express.d.ts +8 -0
  276. package/src/express/@types/index.d.ts +1 -0
  277. package/src/express/index.ts +2 -0
  278. package/src/express/querierMiddleware.ts +217 -0
  279. package/src/express/query.util.spec.ts +40 -0
  280. package/src/express/query.util.ts +21 -0
  281. package/src/index.ts +9 -0
  282. package/src/maria/index.ts +3 -0
  283. package/src/maria/mariaDialect.spec.ts +207 -0
  284. package/src/maria/mariaDialect.ts +42 -0
  285. package/src/maria/mariaQuerierPool.test.ts +23 -0
  286. package/src/maria/mariadbQuerier.test.ts +23 -0
  287. package/src/maria/mariadbQuerier.ts +45 -0
  288. package/src/maria/mariadbQuerierPool.ts +21 -0
  289. package/src/migrate/cli.ts +301 -0
  290. package/src/migrate/generator/index.ts +4 -0
  291. package/src/migrate/generator/mongoSchemaGenerator.spec.ts +112 -0
  292. package/src/migrate/generator/mongoSchemaGenerator.ts +115 -0
  293. package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +34 -0
  294. package/src/migrate/generator/mysqlSchemaGenerator.ts +92 -0
  295. package/src/migrate/generator/postgresSchemaGenerator.spec.ts +44 -0
  296. package/src/migrate/generator/postgresSchemaGenerator.ts +127 -0
  297. package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +33 -0
  298. package/src/migrate/generator/sqliteSchemaGenerator.ts +81 -0
  299. package/src/migrate/index.ts +41 -0
  300. package/src/migrate/introspection/index.ts +4 -0
  301. package/src/migrate/introspection/mongoIntrospector.spec.ts +75 -0
  302. package/src/migrate/introspection/mongoIntrospector.ts +47 -0
  303. package/src/migrate/introspection/mysqlIntrospector.spec.ts +113 -0
  304. package/src/migrate/introspection/mysqlIntrospector.ts +278 -0
  305. package/src/migrate/introspection/postgresIntrospector.spec.ts +112 -0
  306. package/src/migrate/introspection/postgresIntrospector.ts +329 -0
  307. package/src/migrate/introspection/sqliteIntrospector.spec.ts +112 -0
  308. package/src/migrate/introspection/sqliteIntrospector.ts +296 -0
  309. package/src/migrate/migrator-mongo.test.ts +54 -0
  310. package/src/migrate/migrator.spec.ts +255 -0
  311. package/src/migrate/migrator.test.ts +94 -0
  312. package/src/migrate/migrator.ts +719 -0
  313. package/src/migrate/namingStrategy.spec.ts +22 -0
  314. package/src/migrate/schemaGenerator-advanced.spec.ts +138 -0
  315. package/src/migrate/schemaGenerator.spec.ts +190 -0
  316. package/src/migrate/schemaGenerator.ts +478 -0
  317. package/src/migrate/storage/databaseStorage.spec.ts +69 -0
  318. package/src/migrate/storage/databaseStorage.ts +100 -0
  319. package/src/migrate/storage/index.ts +2 -0
  320. package/src/migrate/storage/jsonStorage.ts +58 -0
  321. package/src/migrate/type.ts +1 -0
  322. package/src/mongo/index.ts +3 -0
  323. package/src/mongo/mongoDialect.spec.ts +251 -0
  324. package/src/mongo/mongoDialect.ts +238 -0
  325. package/src/mongo/mongodbQuerier.test.ts +45 -0
  326. package/src/mongo/mongodbQuerier.ts +256 -0
  327. package/src/mongo/mongodbQuerierPool.test.ts +25 -0
  328. package/src/mongo/mongodbQuerierPool.ts +24 -0
  329. package/src/mysql/index.ts +3 -0
  330. package/src/mysql/mysql2Querier.test.ts +20 -0
  331. package/src/mysql/mysql2Querier.ts +49 -0
  332. package/src/mysql/mysql2QuerierPool.test.ts +20 -0
  333. package/src/mysql/mysql2QuerierPool.ts +21 -0
  334. package/src/mysql/mysqlDialect.spec.ts +20 -0
  335. package/src/mysql/mysqlDialect.ts +16 -0
  336. package/src/namingStrategy/defaultNamingStrategy.ts +18 -0
  337. package/src/namingStrategy/index.spec.ts +36 -0
  338. package/src/namingStrategy/index.ts +2 -0
  339. package/src/namingStrategy/snakeCaseNamingStrategy.ts +15 -0
  340. package/src/options.spec.ts +41 -0
  341. package/src/options.ts +18 -0
  342. package/src/postgres/index.ts +3 -0
  343. package/src/postgres/manual-types.d.ts +4 -0
  344. package/src/postgres/pgQuerier.test.ts +25 -0
  345. package/src/postgres/pgQuerier.ts +45 -0
  346. package/src/postgres/pgQuerierPool.test.ts +28 -0
  347. package/src/postgres/pgQuerierPool.ts +21 -0
  348. package/src/postgres/postgresDialect.spec.ts +428 -0
  349. package/src/postgres/postgresDialect.ts +144 -0
  350. package/src/querier/abstractQuerier-test.ts +584 -0
  351. package/src/querier/abstractQuerier.ts +353 -0
  352. package/src/querier/abstractQuerierPool-test.ts +20 -0
  353. package/src/querier/abstractQuerierPool.ts +18 -0
  354. package/src/querier/abstractSqlQuerier-spec.ts +979 -0
  355. package/src/querier/abstractSqlQuerier-test.ts +21 -0
  356. package/src/querier/abstractSqlQuerier.ts +138 -0
  357. package/src/querier/decorator/index.ts +3 -0
  358. package/src/querier/decorator/injectQuerier.spec.ts +74 -0
  359. package/src/querier/decorator/injectQuerier.ts +45 -0
  360. package/src/querier/decorator/serialized.spec.ts +98 -0
  361. package/src/querier/decorator/serialized.ts +13 -0
  362. package/src/querier/decorator/transactional.spec.ts +240 -0
  363. package/src/querier/decorator/transactional.ts +56 -0
  364. package/src/querier/index.ts +4 -0
  365. package/src/repository/genericRepository.spec.ts +111 -0
  366. package/src/repository/genericRepository.ts +74 -0
  367. package/src/repository/index.ts +1 -0
  368. package/src/sqlite/index.ts +3 -0
  369. package/src/sqlite/manual-types.d.ts +4 -0
  370. package/src/sqlite/sqliteDialect.spec.ts +155 -0
  371. package/src/sqlite/sqliteDialect.ts +76 -0
  372. package/src/sqlite/sqliteQuerier.spec.ts +36 -0
  373. package/src/sqlite/sqliteQuerier.test.ts +21 -0
  374. package/src/sqlite/sqliteQuerier.ts +37 -0
  375. package/src/sqlite/sqliteQuerierPool.test.ts +12 -0
  376. package/src/sqlite/sqliteQuerierPool.ts +38 -0
  377. package/src/test/entityMock.ts +375 -0
  378. package/src/test/index.ts +3 -0
  379. package/src/test/it.util.ts +69 -0
  380. package/src/test/spec.util.ts +57 -0
  381. package/src/type/entity.ts +218 -0
  382. package/src/type/index.ts +9 -0
  383. package/src/type/migration.ts +241 -0
  384. package/src/type/namingStrategy.ts +17 -0
  385. package/src/type/querier.ts +143 -0
  386. package/src/type/querierPool.ts +26 -0
  387. package/src/type/query.ts +506 -0
  388. package/src/type/repository.ts +142 -0
  389. package/src/type/universalQuerier.ts +133 -0
  390. package/src/type/utility.ts +21 -0
  391. package/src/util/dialect.util-extra.spec.ts +96 -0
  392. package/src/util/dialect.util.spec.ts +23 -0
  393. package/src/util/dialect.util.ts +134 -0
  394. package/src/util/index.ts +5 -0
  395. package/src/util/object.util.spec.ts +29 -0
  396. package/src/util/object.util.ts +27 -0
  397. package/src/util/raw.ts +11 -0
  398. package/src/util/sql.util-extra.spec.ts +17 -0
  399. package/src/util/sql.util.spec.ts +208 -0
  400. package/src/util/sql.util.ts +104 -0
  401. package/src/util/string.util.spec.ts +46 -0
  402. package/src/util/string.util.ts +35 -0
  403. package/tsconfig.build.json +5 -0
  404. package/tsconfig.json +8 -0
  405. package/README.md +0 -177
  406. package/dialect/abstractSqlDialect.d.ts +0 -30
  407. package/dialect/abstractSqlDialect.js +0 -365
  408. package/dialect/index.d.ts +0 -4
  409. package/dialect/index.js +0 -8
  410. package/dialect/mysqlDialect.d.ts +0 -6
  411. package/dialect/mysqlDialect.js +0 -21
  412. package/dialect/postgresDialect.d.ts +0 -8
  413. package/dialect/postgresDialect.js +0 -44
  414. package/dialect/sqliteDialect.d.ts +0 -4
  415. package/dialect/sqliteDialect.js +0 -11
  416. package/entity/decorator/definition.js +0 -223
  417. package/entity/decorator/entity.js +0 -11
  418. package/entity/decorator/field.js +0 -12
  419. package/entity/decorator/id.js +0 -12
  420. package/entity/decorator/index.d.ts +0 -5
  421. package/entity/decorator/index.js +0 -12
  422. package/entity/decorator/relation.js +0 -27
  423. package/entity/index.d.ts +0 -1
  424. package/entity/index.js +0 -5
  425. package/index.d.ts +0 -1
  426. package/index.js +0 -5
  427. package/options.js +0 -20
  428. package/querier/abstractQuerier.d.ts +0 -30
  429. package/querier/abstractQuerier.js +0 -230
  430. package/querier/abstractSqlQuerier.d.ts +0 -27
  431. package/querier/abstractSqlQuerier.js +0 -88
  432. package/querier/decorator/index.d.ts +0 -2
  433. package/querier/decorator/index.js +0 -6
  434. package/querier/decorator/injectQuerier.d.ts +0 -3
  435. package/querier/decorator/injectQuerier.js +0 -39
  436. package/querier/decorator/transactional.js +0 -52
  437. package/querier/index.d.ts +0 -3
  438. package/querier/index.js +0 -7
  439. package/repository/genericRepository.d.ts +0 -19
  440. package/repository/genericRepository.js +0 -52
  441. package/repository/index.d.ts +0 -1
  442. package/repository/index.js +0 -5
  443. package/type/entity.js +0 -5
  444. package/type/index.d.ts +0 -7
  445. package/type/index.js +0 -11
  446. package/type/querier.d.ts +0 -53
  447. package/type/querier.js +0 -3
  448. package/type/querierPool.js +0 -3
  449. package/type/query.js +0 -13
  450. package/type/repository.js +0 -3
  451. package/type/universalQuerier.js +0 -3
  452. package/type/utility.d.ts +0 -12
  453. package/type/utility.js +0 -3
  454. package/util/dialect.util.d.ts +0 -17
  455. package/util/dialect.util.js +0 -114
  456. package/util/index.d.ts +0 -5
  457. package/util/index.js +0 -9
  458. package/util/object.util.d.ts +0 -3
  459. package/util/object.util.js +0 -22
  460. package/util/raw.d.ts +0 -2
  461. package/util/raw.js +0 -9
  462. package/util/sql.util.d.ts +0 -2
  463. package/util/sql.util.js +0 -55
  464. package/util/string.util.js +0 -20
@@ -0,0 +1,24 @@
1
+ import type { MigrationStorage, QuerierPool, SqlQuerier } from '../../type/index.js';
2
+ /**
3
+ * Stores migration state in a database table.
4
+ * Uses the querier's dialect for escaping and placeholders.
5
+ */
6
+ export declare class DatabaseMigrationStorage implements MigrationStorage {
7
+ private readonly querierPool;
8
+ private readonly tableName;
9
+ private storageInitialized;
10
+ constructor(querierPool: QuerierPool, options?: {
11
+ tableName?: string;
12
+ });
13
+ ensureStorage(): Promise<void>;
14
+ private createTableIfNotExists;
15
+ executed(): Promise<string[]>;
16
+ /**
17
+ * Log a migration as executed - uses provided querier (within transaction)
18
+ */
19
+ logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
20
+ /**
21
+ * Unlog a migration - uses provided querier (within transaction)
22
+ */
23
+ unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
24
+ }
@@ -0,0 +1,77 @@
1
+ import { isSqlQuerier } from '../../type/index.js';
2
+ /**
3
+ * Stores migration state in a database table.
4
+ * Uses the querier's dialect for escaping and placeholders.
5
+ */
6
+ export class DatabaseMigrationStorage {
7
+ querierPool;
8
+ tableName;
9
+ storageInitialized = false;
10
+ constructor(querierPool, options = {}) {
11
+ this.querierPool = querierPool;
12
+ this.tableName = options.tableName ?? 'uql_migrations';
13
+ }
14
+ async ensureStorage() {
15
+ if (this.storageInitialized) {
16
+ return;
17
+ }
18
+ const querier = await this.querierPool.getQuerier();
19
+ if (!isSqlQuerier(querier)) {
20
+ await querier.release();
21
+ throw new Error('DatabaseMigrationStorage requires a SQL-based querier');
22
+ }
23
+ try {
24
+ await this.createTableIfNotExists(querier);
25
+ this.storageInitialized = true;
26
+ }
27
+ finally {
28
+ await querier.release();
29
+ }
30
+ }
31
+ async createTableIfNotExists(querier) {
32
+ const { escapeId } = querier.dialect;
33
+ const sql = `
34
+ CREATE TABLE IF NOT EXISTS ${escapeId(this.tableName)} (
35
+ ${escapeId('name')} VARCHAR(255) PRIMARY KEY,
36
+ ${escapeId('executed_at')} TIMESTAMP DEFAULT CURRENT_TIMESTAMP
37
+ )
38
+ `;
39
+ await querier.run(sql);
40
+ }
41
+ async executed() {
42
+ await this.ensureStorage();
43
+ const querier = await this.querierPool.getQuerier();
44
+ if (!isSqlQuerier(querier)) {
45
+ await querier.release();
46
+ throw new Error('DatabaseMigrationStorage requires a SQL-based querier');
47
+ }
48
+ try {
49
+ const { escapeId } = querier.dialect;
50
+ const sql = `SELECT ${escapeId('name')} FROM ${escapeId(this.tableName)} ORDER BY ${escapeId('name')} ASC`;
51
+ const results = await querier.all(sql);
52
+ return results.map((r) => r.name);
53
+ }
54
+ finally {
55
+ await querier.release();
56
+ }
57
+ }
58
+ /**
59
+ * Log a migration as executed - uses provided querier (within transaction)
60
+ */
61
+ async logWithQuerier(querier, migrationName) {
62
+ await this.ensureStorage();
63
+ const { escapeId, placeholder } = querier.dialect;
64
+ const sql = `INSERT INTO ${escapeId(this.tableName)} (${escapeId('name')}) VALUES (${placeholder(1)})`;
65
+ await querier.run(sql, [migrationName]);
66
+ }
67
+ /**
68
+ * Unlog a migration - uses provided querier (within transaction)
69
+ */
70
+ async unlogWithQuerier(querier, migrationName) {
71
+ await this.ensureStorage();
72
+ const { escapeId, placeholder } = querier.dialect;
73
+ const sql = `DELETE FROM ${escapeId(this.tableName)} WHERE ${escapeId('name')} = ${placeholder(1)}`;
74
+ await querier.run(sql, [migrationName]);
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2VTdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21pZ3JhdGUvc3RvcmFnZS9kYXRhYmFzZVN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVW5EOzs7R0FHRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFLaEI7SUFKRixTQUFTLENBQVM7SUFDM0Isa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBRW5DLFlBQ21CLFdBQXdCLEVBQ3pDLFVBRUksRUFBRTtRQUhXLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBS3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQztJQUN6RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVwRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLE9BQW1CO1FBQ3RELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHO21DQUNtQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztVQUNqRCxRQUFRLENBQUMsTUFBTSxDQUFDO1VBQ2hCLFFBQVEsQ0FBQyxhQUFhLENBQUM7O0tBRTVCLENBQUM7UUFFRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXBELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLFVBQVUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0csTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFrQixHQUFHLENBQUMsQ0FBQztZQUN4RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFtQixFQUFFLGFBQXFCO1FBQzdELE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxlQUFlLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3ZHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFtQixFQUFFLGFBQXFCO1FBQy9ELE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxlQUFlLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWlncmF0aW9uU3RvcmFnZSwgUXVlcmllclBvb2wsIFNxbFF1ZXJpZXIgfSBmcm9tICcuLi8uLi90eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IGlzU3FsUXVlcmllciB9IGZyb20gJy4uLy4uL3R5cGUvaW5kZXguanMnO1xuXG4vKipcbiAqIE1pZ3JhdGlvbiBtZXRhZGF0YSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlXG4gKi9cbmludGVyZmFjZSBNaWdyYXRpb25SZWNvcmQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGV4ZWN1dGVkX2F0OiBEYXRlIHwgbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0b3JlcyBtaWdyYXRpb24gc3RhdGUgaW4gYSBkYXRhYmFzZSB0YWJsZS5cbiAqIFVzZXMgdGhlIHF1ZXJpZXIncyBkaWFsZWN0IGZvciBlc2NhcGluZyBhbmQgcGxhY2Vob2xkZXJzLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VNaWdyYXRpb25TdG9yYWdlIGltcGxlbWVudHMgTWlncmF0aW9uU3RvcmFnZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RvcmFnZUluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBxdWVyaWVyUG9vbDogUXVlcmllclBvb2wsXG4gICAgb3B0aW9uczoge1xuICAgICAgdGFibGVOYW1lPzogc3RyaW5nO1xuICAgIH0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy50YWJsZU5hbWUgPSBvcHRpb25zLnRhYmxlTmFtZSA/PyAndXFsX21pZ3JhdGlvbnMnO1xuICB9XG5cbiAgYXN5bmMgZW5zdXJlU3RvcmFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdG9yYWdlSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyaWVyID0gYXdhaXQgdGhpcy5xdWVyaWVyUG9vbC5nZXRRdWVyaWVyKCk7XG5cbiAgICBpZiAoIWlzU3FsUXVlcmllcihxdWVyaWVyKSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yZWxlYXNlKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFiYXNlTWlncmF0aW9uU3RvcmFnZSByZXF1aXJlcyBhIFNRTC1iYXNlZCBxdWVyaWVyJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlVGFibGVJZk5vdEV4aXN0cyhxdWVyaWVyKTtcbiAgICAgIHRoaXMuc3RvcmFnZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcmllci5yZWxlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVUYWJsZUlmTm90RXhpc3RzKHF1ZXJpZXI6IFNxbFF1ZXJpZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGVzY2FwZUlkIH0gPSBxdWVyaWVyLmRpYWxlY3Q7XG4gICAgY29uc3Qgc3FsID0gYFxuICAgICAgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHtlc2NhcGVJZCh0aGlzLnRhYmxlTmFtZSl9IChcbiAgICAgICAgJHtlc2NhcGVJZCgnbmFtZScpfSBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksXG4gICAgICAgICR7ZXNjYXBlSWQoJ2V4ZWN1dGVkX2F0Jyl9IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QXG4gICAgICApXG4gICAgYDtcblxuICAgIGF3YWl0IHF1ZXJpZXIucnVuKHNxbCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlZCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVTdG9yYWdlKCk7XG5cbiAgICBjb25zdCBxdWVyaWVyID0gYXdhaXQgdGhpcy5xdWVyaWVyUG9vbC5nZXRRdWVyaWVyKCk7XG5cbiAgICBpZiAoIWlzU3FsUXVlcmllcihxdWVyaWVyKSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yZWxlYXNlKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFiYXNlTWlncmF0aW9uU3RvcmFnZSByZXF1aXJlcyBhIFNRTC1iYXNlZCBxdWVyaWVyJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZXNjYXBlSWQgfSA9IHF1ZXJpZXIuZGlhbGVjdDtcbiAgICAgIGNvbnN0IHNxbCA9IGBTRUxFQ1QgJHtlc2NhcGVJZCgnbmFtZScpfSBGUk9NICR7ZXNjYXBlSWQodGhpcy50YWJsZU5hbWUpfSBPUkRFUiBCWSAke2VzY2FwZUlkKCduYW1lJyl9IEFTQ2A7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcmllci5hbGw8TWlncmF0aW9uUmVjb3JkPihzcWwpO1xuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyOiBhbnkpID0+IHIubmFtZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgYSBtaWdyYXRpb24gYXMgZXhlY3V0ZWQgLSB1c2VzIHByb3ZpZGVkIHF1ZXJpZXIgKHdpdGhpbiB0cmFuc2FjdGlvbilcbiAgICovXG4gIGFzeW5jIGxvZ1dpdGhRdWVyaWVyKHF1ZXJpZXI6IFNxbFF1ZXJpZXIsIG1pZ3JhdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RvcmFnZSgpO1xuICAgIGNvbnN0IHsgZXNjYXBlSWQsIHBsYWNlaG9sZGVyIH0gPSBxdWVyaWVyLmRpYWxlY3Q7XG4gICAgY29uc3Qgc3FsID0gYElOU0VSVCBJTlRPICR7ZXNjYXBlSWQodGhpcy50YWJsZU5hbWUpfSAoJHtlc2NhcGVJZCgnbmFtZScpfSkgVkFMVUVTICgke3BsYWNlaG9sZGVyKDEpfSlgO1xuICAgIGF3YWl0IHF1ZXJpZXIucnVuKHNxbCwgW21pZ3JhdGlvbk5hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmxvZyBhIG1pZ3JhdGlvbiAtIHVzZXMgcHJvdmlkZWQgcXVlcmllciAod2l0aGluIHRyYW5zYWN0aW9uKVxuICAgKi9cbiAgYXN5bmMgdW5sb2dXaXRoUXVlcmllcihxdWVyaWVyOiBTcWxRdWVyaWVyLCBtaWdyYXRpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVN0b3JhZ2UoKTtcbiAgICBjb25zdCB7IGVzY2FwZUlkLCBwbGFjZWhvbGRlciB9ID0gcXVlcmllci5kaWFsZWN0O1xuICAgIGNvbnN0IHNxbCA9IGBERUxFVEUgRlJPTSAke2VzY2FwZUlkKHRoaXMudGFibGVOYW1lKX0gV0hFUkUgJHtlc2NhcGVJZCgnbmFtZScpfSA9ICR7cGxhY2Vob2xkZXIoMSl9YDtcbiAgICBhd2FpdCBxdWVyaWVyLnJ1bihzcWwsIFttaWdyYXRpb25OYW1lXSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './databaseStorage.js';
2
+ export * from './jsonStorage.js';
@@ -0,0 +1,3 @@
1
+ export * from './databaseStorage.js';
2
+ export * from './jsonStorage.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9zdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YWJhc2VTdG9yYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vanNvblN0b3JhZ2UuanMnO1xuIl19
@@ -0,0 +1,15 @@
1
+ import type { MigrationStorage, SqlQuerier } from '../../type/index.js';
2
+ /**
3
+ * Stores migration state in a JSON file (useful for development/testing)
4
+ */
5
+ export declare class JsonMigrationStorage implements MigrationStorage {
6
+ private readonly filePath;
7
+ private cache;
8
+ constructor(filePath?: string);
9
+ ensureStorage(): Promise<void>;
10
+ executed(): Promise<string[]>;
11
+ logWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void>;
12
+ unlogWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void>;
13
+ private load;
14
+ private save;
15
+ }
@@ -0,0 +1,51 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ /**
4
+ * Stores migration state in a JSON file (useful for development/testing)
5
+ */
6
+ export class JsonMigrationStorage {
7
+ filePath;
8
+ cache = null;
9
+ constructor(filePath = './migrations/.uql-migrations.json') {
10
+ this.filePath = filePath;
11
+ }
12
+ async ensureStorage() {
13
+ try {
14
+ await this.load();
15
+ }
16
+ catch {
17
+ // File doesn't exist, create it
18
+ await this.save([]);
19
+ }
20
+ }
21
+ async executed() {
22
+ await this.ensureStorage();
23
+ return this.cache ?? [];
24
+ }
25
+ async logWithQuerier(_querier, migrationName) {
26
+ const executed = await this.executed();
27
+ if (!executed.includes(migrationName)) {
28
+ executed.push(migrationName);
29
+ executed.sort();
30
+ await this.save(executed);
31
+ }
32
+ }
33
+ async unlogWithQuerier(_querier, migrationName) {
34
+ const executed = await this.executed();
35
+ const index = executed.indexOf(migrationName);
36
+ if (index !== -1) {
37
+ executed.splice(index, 1);
38
+ await this.save(executed);
39
+ }
40
+ }
41
+ async load() {
42
+ const content = await readFile(this.filePath, 'utf-8');
43
+ this.cache = JSON.parse(content);
44
+ }
45
+ async save(migrations) {
46
+ await mkdir(dirname(this.filePath), { recursive: true });
47
+ await writeFile(this.filePath, JSON.stringify(migrations, null, 2), 'utf-8');
48
+ this.cache = migrations;
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvblN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9zdG9yYWdlL2pzb25TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2QsUUFBUSxDQUFTO0lBQzFCLEtBQUssR0FBb0IsSUFBSSxDQUFDO0lBRXRDLFlBQVksUUFBUSxHQUFHLG1DQUFtQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGdDQUFnQztZQUNoQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBb0IsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFvQixFQUFFLGFBQXFCO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSTtRQUNoQixNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFvQjtRQUNyQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBNaWdyYXRpb25TdG9yYWdlLCBTcWxRdWVyaWVyIH0gZnJvbSAnLi4vLi4vdHlwZS9pbmRleC5qcyc7XG5cbi8qKlxuICogU3RvcmVzIG1pZ3JhdGlvbiBzdGF0ZSBpbiBhIEpTT04gZmlsZSAodXNlZnVsIGZvciBkZXZlbG9wbWVudC90ZXN0aW5nKVxuICovXG5leHBvcnQgY2xhc3MgSnNvbk1pZ3JhdGlvblN0b3JhZ2UgaW1wbGVtZW50cyBNaWdyYXRpb25TdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIGNhY2hlOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVQYXRoID0gJy4vbWlncmF0aW9ucy8udXFsLW1pZ3JhdGlvbnMuanNvbicpIHtcbiAgICB0aGlzLmZpbGVQYXRoID0gZmlsZVBhdGg7XG4gIH1cblxuICBhc3luYyBlbnN1cmVTdG9yYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoW10pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVkKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVN0b3JhZ2UoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZSA/PyBbXTtcbiAgfVxuXG4gIGFzeW5jIGxvZ1dpdGhRdWVyaWVyKF9xdWVyaWVyOiBTcWxRdWVyaWVyLCBtaWdyYXRpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZWQoKTtcbiAgICBpZiAoIWV4ZWN1dGVkLmluY2x1ZGVzKG1pZ3JhdGlvbk5hbWUpKSB7XG4gICAgICBleGVjdXRlZC5wdXNoKG1pZ3JhdGlvbk5hbWUpO1xuICAgICAgZXhlY3V0ZWQuc29ydCgpO1xuICAgICAgYXdhaXQgdGhpcy5zYXZlKGV4ZWN1dGVkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bmxvZ1dpdGhRdWVyaWVyKF9xdWVyaWVyOiBTcWxRdWVyaWVyLCBtaWdyYXRpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZWQoKTtcbiAgICBjb25zdCBpbmRleCA9IGV4ZWN1dGVkLmluZGV4T2YobWlncmF0aW9uTmFtZSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgZXhlY3V0ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZShleGVjdXRlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh0aGlzLmZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICB0aGlzLmNhY2hlID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShtaWdyYXRpb25zOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUodGhpcy5maWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZSh0aGlzLmZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShtaWdyYXRpb25zLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gICAgdGhpcy5jYWNoZSA9IG1pZ3JhdGlvbnM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from '../type/index.js';
@@ -0,0 +1,2 @@
1
+ export * from '../type/index.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRlL3R5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4uL3R5cGUvaW5kZXguanMnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './mongoDialect.js';
2
+ export * from './mongodbQuerier.js';
3
+ export * from './mongodbQuerierPool.js';
@@ -0,0 +1,4 @@
1
+ export * from './mongoDialect.js';
2
+ export * from './mongodbQuerier.js';
3
+ export * from './mongodbQuerierPool.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9uZ28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21vbmdvRGlhbGVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21vbmdvZGJRdWVyaWVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9uZ29kYlF1ZXJpZXJQb29sLmpzJztcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { type Document, type Filter, ObjectId, type Sort } from 'mongodb';
2
+ import { AbstractDialect } from '../dialect/index.js';
3
+ import type { EntityMeta, FieldValue, Query, QueryOptions, QuerySelect, QuerySelectMap, QuerySort, QueryWhere, RelationKey, Type } from '../type/index.js';
4
+ import { type CallbackKey } from '../util/index.js';
5
+ export declare class MongoDialect extends AbstractDialect {
6
+ where<E extends Document>(entity: Type<E>, where?: QueryWhere<E>, { softDelete }?: QueryOptions): Filter<E>;
7
+ select<E extends Document>(entity: Type<E>, select: QuerySelect<E>): QuerySelectMap<E>;
8
+ sort<E extends Document>(entity: Type<E>, sort: QuerySort<E>): Sort;
9
+ aggregationPipeline<E extends Document>(entity: Type<E>, q: Query<E>): MongoAggregationPipelineEntry<E>[];
10
+ normalizeIds<E extends Document>(meta: EntityMeta<E>, docs: E[]): E[];
11
+ normalizeId<E extends Document>(meta: EntityMeta<E>, doc: E): E;
12
+ getIdValue<T extends IdValue>(value: T): T;
13
+ getPersistable<E>(meta: EntityMeta<E>, payload: E, callbackKey: CallbackKey): E;
14
+ getPersistables<E>(meta: EntityMeta<E>, payload: E | E[], callbackKey: CallbackKey): E[];
15
+ }
16
+ type MongoAggregationPipelineEntry<E extends Document> = {
17
+ readonly $lookup?: MongoAggregationLookup<E>;
18
+ $match?: Filter<E> | Record<string, any>;
19
+ $sort?: Sort;
20
+ readonly $unwind?: MongoAggregationUnwind;
21
+ };
22
+ type MongoAggregationLookup<E extends Document> = {
23
+ readonly from?: string;
24
+ readonly foreignField?: string;
25
+ readonly localField?: string;
26
+ readonly pipeline?: MongoAggregationPipelineEntry<FieldValue<E>>[];
27
+ readonly as?: RelationKey<E>;
28
+ };
29
+ type MongoAggregationUnwind = {
30
+ readonly path?: string;
31
+ readonly preserveNullAndEmptyArrays?: boolean;
32
+ };
33
+ type IdValue = string | ObjectId;
34
+ export {};
@@ -0,0 +1,163 @@
1
+ import { ObjectId } from 'mongodb';
2
+ import { AbstractDialect } from '../dialect/index.js';
3
+ import { getMeta } from '../entity/index.js';
4
+ import { buildSortMap, buldQueryWhereAsMap, fillOnFields, filterFieldKeys, filterRelationKeys, getKeys, hasKeys, } from '../util/index.js';
5
+ export class MongoDialect extends AbstractDialect {
6
+ where(entity, where = {}, { softDelete } = {}) {
7
+ const meta = getMeta(entity);
8
+ where = buldQueryWhereAsMap(meta, where);
9
+ if (meta.softDelete && (softDelete || softDelete === undefined) && !where[meta.softDelete]) {
10
+ const field = meta.fields[meta.softDelete];
11
+ where[this.resolveColumnName(meta.softDelete, field)] = null;
12
+ }
13
+ return getKeys(where).reduce((acc, key) => {
14
+ let value = where[key];
15
+ if (key === '$and' || key === '$or') {
16
+ acc[key] = value.map((filterIt) => this.where(entity, filterIt));
17
+ }
18
+ else {
19
+ const field = meta.fields[key];
20
+ if (key === '_id' || key === meta.id) {
21
+ key = '_id';
22
+ value = this.getIdValue(value);
23
+ }
24
+ else if (field) {
25
+ key = this.resolveColumnName(key, field);
26
+ }
27
+ if (Array.isArray(value)) {
28
+ value = {
29
+ $in: value,
30
+ };
31
+ }
32
+ acc[key] = value;
33
+ }
34
+ return acc;
35
+ }, {});
36
+ }
37
+ select(entity, select) {
38
+ if (Array.isArray(select)) {
39
+ return select.reduce((acc, it) => {
40
+ acc[it] = true;
41
+ return acc;
42
+ }, {});
43
+ }
44
+ return select;
45
+ }
46
+ sort(entity, sort) {
47
+ return buildSortMap(sort);
48
+ }
49
+ aggregationPipeline(entity, q) {
50
+ const meta = getMeta(entity);
51
+ const where = this.where(entity, q.$where);
52
+ const sort = this.sort(entity, q.$sort);
53
+ const firstPipelineEntry = {};
54
+ if (hasKeys(where)) {
55
+ firstPipelineEntry.$match = where;
56
+ }
57
+ if (hasKeys(sort)) {
58
+ firstPipelineEntry.$sort = sort;
59
+ }
60
+ const pipeline = [];
61
+ if (hasKeys(firstPipelineEntry)) {
62
+ pipeline.push(firstPipelineEntry);
63
+ }
64
+ const relKeys = filterRelationKeys(meta, q.$select);
65
+ for (const relKey of relKeys) {
66
+ const relOpts = meta.relations[relKey];
67
+ if (relOpts.cardinality === '1m' || relOpts.cardinality === 'mm') {
68
+ // '1m' and 'mm' should be resolved in a higher layer because they will need multiple queries
69
+ continue;
70
+ }
71
+ const relEntity = relOpts.entity();
72
+ const relMeta = getMeta(relEntity);
73
+ if (relOpts.cardinality === 'm1') {
74
+ const localField = meta.fields[relOpts.references[0].local];
75
+ pipeline.push({
76
+ $lookup: {
77
+ from: this.resolveTableName(relEntity, relMeta),
78
+ localField: this.resolveColumnName(relOpts.references[0].local, localField),
79
+ foreignField: '_id',
80
+ as: relKey,
81
+ },
82
+ });
83
+ }
84
+ else {
85
+ const foreignField = relMeta.fields[relOpts.references[0].foreign];
86
+ const foreignFieldName = this.resolveColumnName(relOpts.references[0].foreign, foreignField);
87
+ const referenceWhere = this.where(relEntity, where);
88
+ const referenceSort = this.sort(relEntity, q.$sort);
89
+ const referencePipelineEntry = {
90
+ $match: { [foreignFieldName]: referenceWhere._id },
91
+ };
92
+ if (hasKeys(referenceSort)) {
93
+ referencePipelineEntry.$sort = referenceSort;
94
+ }
95
+ pipeline.push({
96
+ $lookup: {
97
+ from: this.resolveTableName(relEntity, relMeta),
98
+ pipeline: [referencePipelineEntry],
99
+ as: relKey,
100
+ },
101
+ });
102
+ }
103
+ pipeline.push({ $unwind: { path: `$${relKey}`, preserveNullAndEmptyArrays: true } });
104
+ }
105
+ return pipeline;
106
+ }
107
+ normalizeIds(meta, docs) {
108
+ return docs?.map((doc) => this.normalizeId(meta, doc));
109
+ }
110
+ normalizeId(meta, doc) {
111
+ if (!doc) {
112
+ return;
113
+ }
114
+ const res = doc;
115
+ if (res._id) {
116
+ res[meta.id] = res._id;
117
+ if (meta.id !== '_id') {
118
+ delete res._id;
119
+ }
120
+ }
121
+ for (const key of getKeys(meta.fields)) {
122
+ const field = meta.fields[key];
123
+ const dbName = this.resolveColumnName(key, field);
124
+ if (dbName !== key && res[dbName] !== undefined) {
125
+ res[key] = res[dbName];
126
+ delete res[dbName];
127
+ }
128
+ }
129
+ const relKeys = getKeys(meta.relations).filter((key) => res[key]);
130
+ for (const relKey of relKeys) {
131
+ const relOpts = meta.relations[relKey];
132
+ const relMeta = getMeta(relOpts.entity());
133
+ res[relKey] = Array.isArray(res[relKey])
134
+ ? this.normalizeIds(relMeta, res[relKey])
135
+ : this.normalizeId(relMeta, res[relKey]);
136
+ }
137
+ return res;
138
+ }
139
+ getIdValue(value) {
140
+ if (value instanceof ObjectId) {
141
+ return value;
142
+ }
143
+ try {
144
+ return new ObjectId(value);
145
+ }
146
+ catch (e) {
147
+ return value;
148
+ }
149
+ }
150
+ getPersistable(meta, payload, callbackKey) {
151
+ return this.getPersistables(meta, payload, callbackKey)[0];
152
+ }
153
+ getPersistables(meta, payload, callbackKey) {
154
+ const payloads = fillOnFields(meta, payload, callbackKey);
155
+ const persistableKeys = filterFieldKeys(meta, payloads[0], callbackKey);
156
+ return payloads.map((it) => persistableKeys.reduce((acc, key) => {
157
+ const field = meta.fields[key];
158
+ acc[this.resolveColumnName(key, field)] = it[key];
159
+ return acc;
160
+ }, {}));
161
+ }
162
+ }
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29EaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbmdvL21vbmdvRGlhbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThCLFFBQVEsRUFBYSxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBYTdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBRW5CLFlBQVksRUFDWixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxPQUFPLEdBQ1IsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLE9BQU8sWUFBYSxTQUFRLGVBQWU7SUFDL0MsS0FBSyxDQUFxQixNQUFlLEVBQUUsUUFBdUIsRUFBRSxFQUFFLEVBQUUsVUFBVSxLQUFtQixFQUFFO1FBQ3JHLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QixLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQzFCLENBQUMsR0FBRyxFQUFFLEdBQUcs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QUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFPLENBQUMsQ0FDWixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEb2N1bWVudCwgdHlwZSBGaWx0ZXIsIE9iamVjdElkLCB0eXBlIFNvcnQgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEFic3RyYWN0RGlhbGVjdCB9IGZyb20gJy4uL2RpYWxlY3QvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uL2VudGl0eS9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVudGl0eU1ldGEsXG4gIEZpZWxkVmFsdWUsXG4gIFF1ZXJ5LFxuICBRdWVyeU9wdGlvbnMsXG4gIFF1ZXJ5U2VsZWN0LFxuICBRdWVyeVNlbGVjdE1hcCxcbiAgUXVlcnlTb3J0LFxuICBRdWVyeVdoZXJlLFxuICBSZWxhdGlvbktleSxcbiAgVHlwZSxcbn0gZnJvbSAnLi4vdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBidWlsZFNvcnRNYXAsXG4gIGJ1bGRRdWVyeVdoZXJlQXNNYXAsXG4gIHR5cGUgQ2FsbGJhY2tLZXksXG4gIGZpbGxPbkZpZWxkcyxcbiAgZmlsdGVyRmllbGRLZXlzLFxuICBmaWx0ZXJSZWxhdGlvbktleXMsXG4gIGdldEtleXMsXG4gIGhhc0tleXMsXG59IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuXG5leHBvcnQgY2xhc3MgTW9uZ29EaWFsZWN0IGV4dGVuZHMgQWJzdHJhY3REaWFsZWN0IHtcbiAgd2hlcmU8RSBleHRlbmRzIERvY3VtZW50PihlbnRpdHk6IFR5cGU8RT4sIHdoZXJlOiBRdWVyeVdoZXJlPEU+ID0ge30sIHsgc29mdERlbGV0ZSB9OiBRdWVyeU9wdGlvbnMgPSB7fSk6IEZpbHRlcjxFPiB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcblxuICAgIHdoZXJlID0gYnVsZFF1ZXJ5V2hlcmVBc01hcChtZXRhLCB3aGVyZSk7XG5cbiAgICBpZiAobWV0YS5zb2Z0RGVsZXRlICYmIChzb2Z0RGVsZXRlIHx8IHNvZnREZWxldGUgPT09IHVuZGVmaW5lZCkgJiYgIXdoZXJlW21ldGEuc29mdERlbGV0ZV0pIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNbbWV0YS5zb2Z0RGVsZXRlXTtcbiAgICAgIHdoZXJlW3RoaXMucmVzb2x2ZUNvbHVtbk5hbWUobWV0YS5zb2Z0RGVsZXRlLCBmaWVsZCldID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0S2V5cyh3aGVyZSkucmVkdWNlKFxuICAgICAgKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHdoZXJlW2tleV07XG4gICAgICAgIGlmIChrZXkgPT09ICckYW5kJyB8fCBrZXkgPT09ICckb3InKSB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZS5tYXAoKGZpbHRlckl0OiBRdWVyeVdoZXJlPEU+KSA9PiB0aGlzLndoZXJlKGVudGl0eSwgZmlsdGVySXQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IG1ldGEuZmllbGRzW2tleV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19pZCcgfHwga2V5ID09PSBtZXRhLmlkKSB7XG4gICAgICAgICAgICBrZXkgPSAnX2lkJztcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRJZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBrZXkgPSB0aGlzLnJlc29sdmVDb2x1bW5OYW1lKGtleSwgZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICAkaW46IHZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBGaWx0ZXI8RT5dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBGaWx0ZXI8RT4sXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdDxFIGV4dGVuZHMgRG9jdW1lbnQ+KGVudGl0eTogVHlwZTxFPiwgc2VsZWN0OiBRdWVyeVNlbGVjdDxFPik6IFF1ZXJ5U2VsZWN0TWFwPEU+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3QpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0LnJlZHVjZShcbiAgICAgICAgKGFjYywgaXQpID0+IHtcbiAgICAgICAgICBhY2NbaXQgYXMgc3RyaW5nXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge30gc2F0aXNmaWVzIFF1ZXJ5U2VsZWN0TWFwPEU+LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdCBhcyBRdWVyeVNlbGVjdE1hcDxFPjtcbiAgfVxuXG4gIHNvcnQ8RSBleHRlbmRzIERvY3VtZW50PihlbnRpdHk6IFR5cGU8RT4sIHNvcnQ6IFF1ZXJ5U29ydDxFPik6IFNvcnQge1xuICAgIHJldHVybiBidWlsZFNvcnRNYXAoc29ydCkgYXMgU29ydDtcbiAgfVxuXG4gIGFnZ3JlZ2F0aW9uUGlwZWxpbmU8RSBleHRlbmRzIERvY3VtZW50PihlbnRpdHk6IFR5cGU8RT4sIHE6IFF1ZXJ5PEU+KTogTW9uZ29BZ2dyZWdhdGlvblBpcGVsaW5lRW50cnk8RT5bXSB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcblxuICAgIGNvbnN0IHdoZXJlID0gdGhpcy53aGVyZShlbnRpdHksIHEuJHdoZXJlKTtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5zb3J0KGVudGl0eSwgcS4kc29ydCk7XG4gICAgY29uc3QgZmlyc3RQaXBlbGluZUVudHJ5OiBNb25nb0FnZ3JlZ2F0aW9uUGlwZWxpbmVFbnRyeTxFPiA9IHt9O1xuXG4gICAgaWYgKGhhc0tleXMod2hlcmUpKSB7XG4gICAgICBmaXJzdFBpcGVsaW5lRW50cnkuJG1hdGNoID0gd2hlcmU7XG4gICAgfVxuICAgIGlmIChoYXNLZXlzKHNvcnQpKSB7XG4gICAgICBmaXJzdFBpcGVsaW5lRW50cnkuJHNvcnQgPSBzb3J0O1xuICAgIH1cblxuICAgIGNvbnN0IHBpcGVsaW5lOiBNb25nb0FnZ3JlZ2F0aW9uUGlwZWxpbmVFbnRyeTxFPltdID0gW107XG5cbiAgICBpZiAoaGFzS2V5cyhmaXJzdFBpcGVsaW5lRW50cnkpKSB7XG4gICAgICBwaXBlbGluZS5wdXNoKGZpcnN0UGlwZWxpbmVFbnRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsS2V5cyA9IGZpbHRlclJlbGF0aW9uS2V5cyhtZXRhLCBxLiRzZWxlY3QpO1xuXG4gICAgZm9yIChjb25zdCByZWxLZXkgb2YgcmVsS2V5cykge1xuICAgICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleV07XG5cbiAgICAgIGlmIChyZWxPcHRzLmNhcmRpbmFsaXR5ID09PSAnMW0nIHx8IHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgICAgLy8gJzFtJyBhbmQgJ21tJyBzaG91bGQgYmUgcmVzb2x2ZWQgaW4gYSBoaWdoZXIgbGF5ZXIgYmVjYXVzZSB0aGV5IHdpbGwgbmVlZCBtdWx0aXBsZSBxdWVyaWVzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgICAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcblxuICAgICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtMScpIHtcbiAgICAgICAgY29uc3QgbG9jYWxGaWVsZCA9IG1ldGEuZmllbGRzW3JlbE9wdHMucmVmZXJlbmNlc1swXS5sb2NhbF07XG4gICAgICAgIHBpcGVsaW5lLnB1c2goe1xuICAgICAgICAgICRsb29rdXA6IHtcbiAgICAgICAgICAgIGZyb206IHRoaXMucmVzb2x2ZVRhYmxlTmFtZShyZWxFbnRpdHksIHJlbE1ldGEpLFxuICAgICAgICAgICAgbG9jYWxGaWVsZDogdGhpcy5yZXNvbHZlQ29sdW1uTmFtZShyZWxPcHRzLnJlZmVyZW5jZXNbMF0ubG9jYWwsIGxvY2FsRmllbGQpLFxuICAgICAgICAgICAgZm9yZWlnbkZpZWxkOiAnX2lkJyxcbiAgICAgICAgICAgIGFzOiByZWxLZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmb3JlaWduRmllbGQgPSByZWxNZXRhLmZpZWxkc1tyZWxPcHRzLnJlZmVyZW5jZXNbMF0uZm9yZWlnbl07XG4gICAgICAgIGNvbnN0IGZvcmVpZ25GaWVsZE5hbWUgPSB0aGlzLnJlc29sdmVDb2x1bW5OYW1lKHJlbE9wdHMucmVmZXJlbmNlc1swXS5mb3JlaWduLCBmb3JlaWduRmllbGQpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VXaGVyZSA9IHRoaXMud2hlcmUocmVsRW50aXR5LCB3aGVyZSk7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVNvcnQgPSB0aGlzLnNvcnQocmVsRW50aXR5LCBxLiRzb3J0KTtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlUGlwZWxpbmVFbnRyeTogTW9uZ29BZ2dyZWdhdGlvblBpcGVsaW5lRW50cnk8RmllbGRWYWx1ZTxFPj4gPSB7XG4gICAgICAgICAgJG1hdGNoOiB7IFtmb3JlaWduRmllbGROYW1lXTogcmVmZXJlbmNlV2hlcmUuX2lkIH0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoYXNLZXlzKHJlZmVyZW5jZVNvcnQpKSB7XG4gICAgICAgICAgcmVmZXJlbmNlUGlwZWxpbmVFbnRyeS4kc29ydCA9IHJlZmVyZW5jZVNvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUucHVzaCh7XG4gICAgICAgICAgJGxvb2t1cDoge1xuICAgICAgICAgICAgZnJvbTogdGhpcy5yZXNvbHZlVGFibGVOYW1lKHJlbEVudGl0eSwgcmVsTWV0YSksXG4gICAgICAgICAgICBwaXBlbGluZTogW3JlZmVyZW5jZVBpcGVsaW5lRW50cnldLFxuICAgICAgICAgICAgYXM6IHJlbEtleSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcGlwZWxpbmUucHVzaCh7ICR1bndpbmQ6IHsgcGF0aDogYCQke3JlbEtleX1gLCBwcmVzZXJ2ZU51bGxBbmRFbXB0eUFycmF5czogdHJ1ZSB9IH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwaXBlbGluZTtcbiAgfVxuXG4gIG5vcm1hbGl6ZUlkczxFIGV4dGVuZHMgRG9jdW1lbnQ+KG1ldGE6IEVudGl0eU1ldGE8RT4sIGRvY3M6IEVbXSk6IEVbXSB7XG4gICAgcmV0dXJuIGRvY3M/Lm1hcCgoZG9jKSA9PiB0aGlzLm5vcm1hbGl6ZUlkKG1ldGEsIGRvYykpO1xuICB9XG5cbiAgbm9ybWFsaXplSWQ8RSBleHRlbmRzIERvY3VtZW50PihtZXRhOiBFbnRpdHlNZXRhPEU+LCBkb2M6IEUpOiBFIHtcbiAgICBpZiAoIWRvYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGRvYyBhcyBhbnk7XG5cbiAgICBpZiAocmVzLl9pZCkge1xuICAgICAgcmVzW21ldGEuaWRdID0gcmVzLl9pZDtcbiAgICAgIGlmIChtZXRhLmlkICE9PSAnX2lkJykge1xuICAgICAgICBkZWxldGUgcmVzLl9pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBnZXRLZXlzKG1ldGEuZmllbGRzKSkge1xuICAgICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXldO1xuICAgICAgY29uc3QgZGJOYW1lID0gdGhpcy5yZXNvbHZlQ29sdW1uTmFtZShrZXksIGZpZWxkKTtcbiAgICAgIGlmIChkYk5hbWUgIT09IGtleSAmJiByZXNbZGJOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc1trZXldID0gcmVzW2RiTmFtZV07XG4gICAgICAgIGRlbGV0ZSByZXNbZGJOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWxLZXlzID0gZ2V0S2V5cyhtZXRhLnJlbGF0aW9ucykuZmlsdGVyKChrZXkpID0+IHJlc1trZXldKSBhcyBSZWxhdGlvbktleTxFPltdO1xuXG4gICAgZm9yIChjb25zdCByZWxLZXkgb2YgcmVsS2V5cykge1xuICAgICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleV07XG4gICAgICBjb25zdCByZWxNZXRhID0gZ2V0TWV0YShyZWxPcHRzLmVudGl0eSgpKTtcbiAgICAgIHJlc1tyZWxLZXldID0gQXJyYXkuaXNBcnJheShyZXNbcmVsS2V5XSlcbiAgICAgICAgPyB0aGlzLm5vcm1hbGl6ZUlkcyhyZWxNZXRhLCByZXNbcmVsS2V5XSlcbiAgICAgICAgOiB0aGlzLm5vcm1hbGl6ZUlkKHJlbE1ldGEsIHJlc1tyZWxLZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgZ2V0SWRWYWx1ZTxUIGV4dGVuZHMgSWRWYWx1ZT4odmFsdWU6IFQpOiBUIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3RJZCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBPYmplY3RJZCh2YWx1ZSkgYXMgVDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGVyc2lzdGFibGU8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcGF5bG9hZDogRSwgY2FsbGJhY2tLZXk6IENhbGxiYWNrS2V5KTogRSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVyc2lzdGFibGVzKG1ldGEsIHBheWxvYWQsIGNhbGxiYWNrS2V5KVswXTtcbiAgfVxuXG4gIGdldFBlcnNpc3RhYmxlczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+LCBwYXlsb2FkOiBFIHwgRVtdLCBjYWxsYmFja0tleTogQ2FsbGJhY2tLZXkpOiBFW10ge1xuICAgIGNvbnN0IHBheWxvYWRzID0gZmlsbE9uRmllbGRzKG1ldGEsIHBheWxvYWQsIGNhbGxiYWNrS2V5KTtcbiAgICBjb25zdCBwZXJzaXN0YWJsZUtleXMgPSBmaWx0ZXJGaWVsZEtleXMobWV0YSwgcGF5bG9hZHNbMF0sIGNhbGxiYWNrS2V5KTtcbiAgICByZXR1cm4gcGF5bG9hZHMubWFwKChpdCkgPT5cbiAgICAgIHBlcnNpc3RhYmxlS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5XTtcbiAgICAgICAgYWNjW3RoaXMucmVzb2x2ZUNvbHVtbk5hbWUoa2V5LCBmaWVsZCldID0gaXRba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9IGFzIEUpLFxuICAgICk7XG4gIH1cbn1cblxudHlwZSBNb25nb0FnZ3JlZ2F0aW9uUGlwZWxpbmVFbnRyeTxFIGV4dGVuZHMgRG9jdW1lbnQ+ID0ge1xuICByZWFkb25seSAkbG9va3VwPzogTW9uZ29BZ2dyZWdhdGlvbkxvb2t1cDxFPjtcbiAgJG1hdGNoPzogRmlsdGVyPEU+IHwgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgJHNvcnQ/OiBTb3J0O1xuICByZWFkb25seSAkdW53aW5kPzogTW9uZ29BZ2dyZWdhdGlvblVud2luZDtcbn07XG5cbnR5cGUgTW9uZ29BZ2dyZWdhdGlvbkxvb2t1cDxFIGV4dGVuZHMgRG9jdW1lbnQ+ID0ge1xuICByZWFkb25seSBmcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBmb3JlaWduRmllbGQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvY2FsRmllbGQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lPzogTW9uZ29BZ2dyZWdhdGlvblBpcGVsaW5lRW50cnk8RmllbGRWYWx1ZTxFPj5bXTtcbiAgcmVhZG9ubHkgYXM/OiBSZWxhdGlvbktleTxFPjtcbn07XG5cbnR5cGUgTW9uZ29BZ2dyZWdhdGlvblVud2luZCA9IHtcbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXM/OiBib29sZWFuO1xufTtcblxudHlwZSBJZFZhbHVlID0gc3RyaW5nIHwgT2JqZWN0SWQ7XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import type { Document, MongoClient } from 'mongodb';
2
+ import { AbstractQuerier } from '../querier/index.js';
3
+ import type { ExtraOptions, IdValue, Query, QueryConflictPaths, QueryOptions, QuerySearch, Type } from '../type/index.js';
4
+ import type { MongoDialect } from './mongoDialect.js';
5
+ export declare class MongodbQuerier extends AbstractQuerier {
6
+ readonly dialect: MongoDialect;
7
+ readonly conn: MongoClient;
8
+ readonly extra?: ExtraOptions;
9
+ private session;
10
+ constructor(dialect: MongoDialect, conn: MongoClient, extra?: ExtraOptions);
11
+ private execute;
12
+ findMany<E extends Document>(entity: Type<E>, q: Query<E>): Promise<E[]>;
13
+ count<E extends Document>(entity: Type<E>, qm?: QuerySearch<E>): Promise<number>;
14
+ insertMany<E extends Document>(entity: Type<E>, payloads: E[]): Promise<IdValue<E>[]>;
15
+ updateMany<E extends Document>(entity: Type<E>, qm: QuerySearch<E>, payload: E): Promise<number>;
16
+ upsertOne<E extends Document>(entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E): Promise<{
17
+ firstId: string;
18
+ changes: number;
19
+ }>;
20
+ deleteMany<E extends Document>(entity: Type<E>, qm: QuerySearch<E>, opts?: QueryOptions): Promise<number>;
21
+ get hasOpenTransaction(): boolean;
22
+ collection<E extends Document>(entity: Type<E>): import("mongodb").Collection<E>;
23
+ get db(): import("mongodb").Db;
24
+ beginTransaction(): Promise<void>;
25
+ commitTransaction(): Promise<void>;
26
+ rollbackTransaction(): Promise<void>;
27
+ internalRelease(): Promise<void>;
28
+ }