orange-orm 3.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/.dockerignore +1 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.js +45 -0
  4. package/.gitattributes +3 -0
  5. package/CNAME +1 -0
  6. package/CONTRIBUTING.md +43 -0
  7. package/LICENSE +7 -0
  8. package/README.md +1969 -0
  9. package/SECURITY.md +12 -0
  10. package/bin/build.js +127 -0
  11. package/bin/compile.js +26 -0
  12. package/bin/rdb.js +4 -0
  13. package/docs/CODE_OF_CONDUCT.md +18 -0
  14. package/docs/changelog.md +461 -0
  15. package/docs/docs.md +2373 -0
  16. package/docs/orange.svg +32 -0
  17. package/docs/relations.png +0 -0
  18. package/package.json +139 -0
  19. package/src/applyPatch.js +105 -0
  20. package/src/client/axiosInterceptor.js +46 -0
  21. package/src/client/clientMap.js +72 -0
  22. package/src/client/createPatch.js +122 -0
  23. package/src/client/createProviders.js +121 -0
  24. package/src/client/index.js +997 -0
  25. package/src/client/index.mjs +6295 -0
  26. package/src/client/map.js +110 -0
  27. package/src/client/merge.js +9 -0
  28. package/src/client/netAdapter.js +133 -0
  29. package/src/client/rollup.config.js +12 -0
  30. package/src/client/self.js +4 -0
  31. package/src/client/stringify.js +22 -0
  32. package/src/client/toKeyPositionMap.js +30 -0
  33. package/src/clsTest.js +79 -0
  34. package/src/createDomain/negotiateForwardProperty.js +23 -0
  35. package/src/createDomain.js +31 -0
  36. package/src/dateToISOString.js +25 -0
  37. package/src/emitEvent.js +46 -0
  38. package/src/emptyFilter.js +35 -0
  39. package/src/flags.js +6 -0
  40. package/src/fromCompareObject.js +24 -0
  41. package/src/generic-pool.js +641 -0
  42. package/src/getManyDto/newQuery.js +18 -0
  43. package/src/getManyDto/query/newColumnSql.js +8 -0
  44. package/src/getManyDto/query/newSingleQuery.js +19 -0
  45. package/src/getManyDto/query/singleQuery/newJoinedColumnSql.js +25 -0
  46. package/src/getManyDto/query/singleQuery/newShallowColumnSql.js +25 -0
  47. package/src/getManyDto.js +255 -0
  48. package/src/getTSDefinition.js +510 -0
  49. package/src/hostExpress/executePath.js +433 -0
  50. package/src/hostExpress/getMeta.js +49 -0
  51. package/src/hostExpress.js +125 -0
  52. package/src/hostLocal.js +110 -0
  53. package/src/index.d.ts +324 -0
  54. package/src/index.js +116 -0
  55. package/src/jsconfig.json +8 -0
  56. package/src/lock/toIntKey.js +35 -0
  57. package/src/lock.js +26 -0
  58. package/src/map.d.ts +1729 -0
  59. package/src/mssql/encodeBuffer.js +7 -0
  60. package/src/mssql/newDatabase.js +129 -0
  61. package/src/mssql/newPool.js +19 -0
  62. package/src/mssql/newTransaction.js +69 -0
  63. package/src/mssql/pool/defaults.js +45 -0
  64. package/src/mssql/pool/end.js +13 -0
  65. package/src/mssql/pool/newGenericPool.js +62 -0
  66. package/src/mssql/wrapQuery.js +34 -0
  67. package/src/mySql/deleteFromSql.js +8 -0
  68. package/src/mySql/encodeBoolean.js +7 -0
  69. package/src/mySql/insert.js +21 -0
  70. package/src/mySql/insertSql.js +62 -0
  71. package/src/mySql/lastInsertedSql.js +11 -0
  72. package/src/mySql/limitAndOffset.js +18 -0
  73. package/src/mySql/newDatabase.js +127 -0
  74. package/src/mySql/newPool.js +19 -0
  75. package/src/mySql/newTransaction.js +54 -0
  76. package/src/mySql/pool/defaults.js +16 -0
  77. package/src/mySql/pool/end.js +13 -0
  78. package/src/mySql/pool/negotiatePoolOptions.js +12 -0
  79. package/src/mySql/pool/newGenericPool.js +67 -0
  80. package/src/mySql/selectForUpdateSql.js +3 -0
  81. package/src/mySql/wrapQuery.js +16 -0
  82. package/src/mySql/wrapQueryStream.js +9 -0
  83. package/src/newArray.js +3 -0
  84. package/src/newCollection.js +55 -0
  85. package/src/newId.js +1 -0
  86. package/src/newImmutable.js +22 -0
  87. package/src/newObject.js +5 -0
  88. package/src/oracle/deleteFromSql.js +8 -0
  89. package/src/oracle/encodeBoolean.js +7 -0
  90. package/src/oracle/encodeBuffer.js +7 -0
  91. package/src/oracle/encodeDate.js +7 -0
  92. package/src/oracle/formatDateIn.js +5 -0
  93. package/src/oracle/formatDateOut.js +5 -0
  94. package/src/oracle/insert.js +23 -0
  95. package/src/oracle/insertSql.js +73 -0
  96. package/src/oracle/lastInsertedSql.js +14 -0
  97. package/src/oracle/limitAndOffset.js +18 -0
  98. package/src/oracle/mergeSql.js +79 -0
  99. package/src/oracle/newDatabase.js +128 -0
  100. package/src/oracle/newInsertCommandCore.js +27 -0
  101. package/src/oracle/newPool.js +19 -0
  102. package/src/oracle/newTransaction.js +63 -0
  103. package/src/oracle/outputInsertedSql.js +5 -0
  104. package/src/oracle/pool/defaults.js +45 -0
  105. package/src/oracle/pool/end.js +13 -0
  106. package/src/oracle/pool/newGenericPool.js +64 -0
  107. package/src/oracle/replaceParamChar.js +14 -0
  108. package/src/oracle/selectForUpdateSql.js +3 -0
  109. package/src/oracle/wrapQuery.js +38 -0
  110. package/src/patchRow.js +13 -0
  111. package/src/patchTable.js +317 -0
  112. package/src/pg/deleteFromSql.js +8 -0
  113. package/src/pg/encodeBoolean.js +5 -0
  114. package/src/pg/encodeDate.js +7 -0
  115. package/src/pg/encodeJSON.js +15 -0
  116. package/src/pg/formatDateOut.js +5 -0
  117. package/src/pg/insert.js +14 -0
  118. package/src/pg/insertSql.js +70 -0
  119. package/src/pg/lastInsertedSql.js +11 -0
  120. package/src/pg/limitAndOffset.js +18 -0
  121. package/src/pg/newDatabase.js +153 -0
  122. package/src/pg/newPool.js +19 -0
  123. package/src/pg/newStreamableQuery.js +7 -0
  124. package/src/pg/newTransaction.js +58 -0
  125. package/src/pg/pool/defaults.js +45 -0
  126. package/src/pg/pool/end.js +13 -0
  127. package/src/pg/pool/newPgPool.js +82 -0
  128. package/src/pg/replaceParamChar.js +14 -0
  129. package/src/pg/schema.js +11 -0
  130. package/src/pg/selectForUpdateSql.js +3 -0
  131. package/src/pg/wrapQuery.js +33 -0
  132. package/src/pg/wrapQueryStream.js +20 -0
  133. package/src/pools.js +17 -0
  134. package/src/query/negotiateParameters.js +10 -0
  135. package/src/query/negotiateSql.js +14 -0
  136. package/src/query/wrapQuery.js +17 -0
  137. package/src/query.js +13 -0
  138. package/src/sap/deleteFromSql.js +8 -0
  139. package/src/sap/encodeBoolean.js +7 -0
  140. package/src/sap/encodeBuffer.js +7 -0
  141. package/src/sap/formatDateOut.js +5 -0
  142. package/src/sap/insert.js +21 -0
  143. package/src/sap/insertSql.js +64 -0
  144. package/src/sap/lastInsertedSql.js +12 -0
  145. package/src/sap/limitAndOffset.js +16 -0
  146. package/src/sap/mergeSql.js +73 -0
  147. package/src/sap/newDatabase.js +129 -0
  148. package/src/sap/newPool.js +19 -0
  149. package/src/sap/newTransaction.js +69 -0
  150. package/src/sap/pool/end.js +13 -0
  151. package/src/sap/selectForUpdateSql.js +3 -0
  152. package/src/sqlite/deleteFromSql.js +8 -0
  153. package/src/sqlite/encodeBoolean.js +7 -0
  154. package/src/sqlite/encodeBuffer.js +7 -0
  155. package/src/sqlite/insert.js +21 -0
  156. package/src/sqlite/insertSql.js +64 -0
  157. package/src/sqlite/lastInsertedSql.js +12 -0
  158. package/src/sqlite/limitAndOffset.js +18 -0
  159. package/src/sqlite/newDatabase.js +128 -0
  160. package/src/sqlite/newPool.js +19 -0
  161. package/src/sqlite/newTransaction.js +58 -0
  162. package/src/sqlite/pool/defaults.js +45 -0
  163. package/src/sqlite/pool/end.js +13 -0
  164. package/src/sqlite/pool/newGenericPool.js +59 -0
  165. package/src/sqlite/selectForUpdateSql.js +3 -0
  166. package/src/sqlite/wrapQuery.js +24 -0
  167. package/src/table/aggregate.js +9 -0
  168. package/src/table/begin.js +10 -0
  169. package/src/table/cascadeDelete.js +11 -0
  170. package/src/table/cloneStrategy.js +18 -0
  171. package/src/table/column/binary/newDecode.js +15 -0
  172. package/src/table/column/binary/newEncode.js +23 -0
  173. package/src/table/column/binary/purify.js +12 -0
  174. package/src/table/column/binary.js +12 -0
  175. package/src/table/column/boolean/newDecode.js +12 -0
  176. package/src/table/column/boolean/newEncode.js +36 -0
  177. package/src/table/column/boolean/purify.js +7 -0
  178. package/src/table/column/boolean.js +14 -0
  179. package/src/table/column/date/formatOut.js +11 -0
  180. package/src/table/column/date/newDecode.js +17 -0
  181. package/src/table/column/date/newEncode.js +47 -0
  182. package/src/table/column/date/purify.js +17 -0
  183. package/src/table/column/date/toISOString.js +25 -0
  184. package/src/table/column/date/tryParseISO.js +14 -0
  185. package/src/table/column/date.js +14 -0
  186. package/src/table/column/dateWithTimeZone/newEncode.js +41 -0
  187. package/src/table/column/dateWithTimeZone.js +14 -0
  188. package/src/table/column/encodeFilterArg.js +8 -0
  189. package/src/table/column/equal.js +15 -0
  190. package/src/table/column/extractAlias.js +7 -0
  191. package/src/table/column/greaterThan.js +12 -0
  192. package/src/table/column/greaterThanOrEqual.js +12 -0
  193. package/src/table/column/guid/newDecode.js +10 -0
  194. package/src/table/column/guid/newEncode.js +30 -0
  195. package/src/table/column/guid/purify.js +10 -0
  196. package/src/table/column/guid.js +12 -0
  197. package/src/table/column/in.js +24 -0
  198. package/src/table/column/json/formatOut.js +11 -0
  199. package/src/table/column/json/newDecode.js +21 -0
  200. package/src/table/column/json/newEncode.js +41 -0
  201. package/src/table/column/json/purify.js +7 -0
  202. package/src/table/column/json.js +22 -0
  203. package/src/table/column/lessThan.js +12 -0
  204. package/src/table/column/lessThanOrEqual.js +12 -0
  205. package/src/table/column/negotiateNextAndFilter.js +7 -0
  206. package/src/table/column/negotiateNextOrFilter.js +7 -0
  207. package/src/table/column/negotiateRawSqlFilter.js +74 -0
  208. package/src/table/column/newBoolean.js +54 -0
  209. package/src/table/column/newColumn.js +89 -0
  210. package/src/table/column/newDecodeCore.js +10 -0
  211. package/src/table/column/notEqual.js +15 -0
  212. package/src/table/column/numeric/negotiateDefault.js +5 -0
  213. package/src/table/column/numeric/newDecode.js +16 -0
  214. package/src/table/column/numeric/newEncode.js +25 -0
  215. package/src/table/column/numeric/purify.js +12 -0
  216. package/src/table/column/numeric.js +15 -0
  217. package/src/table/column/string/contains.js +3 -0
  218. package/src/table/column/string/containsCore.js +16 -0
  219. package/src/table/column/string/endsWith.js +3 -0
  220. package/src/table/column/string/endsWithCore.js +16 -0
  221. package/src/table/column/string/iContains.js +3 -0
  222. package/src/table/column/string/iEndsWith.js +3 -0
  223. package/src/table/column/string/iEqual.js +15 -0
  224. package/src/table/column/string/iStartsWith.js +3 -0
  225. package/src/table/column/string/newEncode.js +31 -0
  226. package/src/table/column/string/purify.js +7 -0
  227. package/src/table/column/string/startsWith.js +3 -0
  228. package/src/table/column/string/startsWithCore.js +16 -0
  229. package/src/table/column/string.js +55 -0
  230. package/src/table/column.js +154 -0
  231. package/src/table/commands/beginCommand.js +13 -0
  232. package/src/table/commands/commitCommand.js +9 -0
  233. package/src/table/commands/compressChanges.js +25 -0
  234. package/src/table/commands/delete/createAlias.js +6 -0
  235. package/src/table/commands/delete/newSingleCommand.js +17 -0
  236. package/src/table/commands/delete/singleCommand/joinSql.js +26 -0
  237. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +19 -0
  238. package/src/table/commands/delete/singleCommand/selectSql.js +11 -0
  239. package/src/table/commands/delete/singleCommand/subFilter.js +19 -0
  240. package/src/table/commands/delete/singleCommand/whereSql.js +25 -0
  241. package/src/table/commands/getChangeSet.js +6 -0
  242. package/src/table/commands/insert/getSqlTemplate.js +68 -0
  243. package/src/table/commands/lastCommandMatches.js +11 -0
  244. package/src/table/commands/negotiateEndEdit.js +7 -0
  245. package/src/table/commands/newDeleteCommand.js +23 -0
  246. package/src/table/commands/newGetLastInsertedCommand.js +49 -0
  247. package/src/table/commands/newGetLastInsertedCommandCore.js +42 -0
  248. package/src/table/commands/newInsertAndForgetCommand.js +55 -0
  249. package/src/table/commands/newInsertCommand.js +56 -0
  250. package/src/table/commands/newInsertCommandCore.js +27 -0
  251. package/src/table/commands/newRow.js +51 -0
  252. package/src/table/commands/newUpdateCommand.js +62 -0
  253. package/src/table/commands/newUpdateCommandCore.js +45 -0
  254. package/src/table/commands/pushCommand.js +10 -0
  255. package/src/table/commands/rollbackCommand.js +13 -0
  256. package/src/table/commit.js +30 -0
  257. package/src/table/count.js +29 -0
  258. package/src/table/createJSONReadStream.js +7 -0
  259. package/src/table/createJSONReadStreamDefault.js +33 -0
  260. package/src/table/createJSONReadStreamNative.js +31 -0
  261. package/src/table/createReadStream.js +24 -0
  262. package/src/table/createReadStreamCoreNative.js +40 -0
  263. package/src/table/createReadStreamDefault.js +102 -0
  264. package/src/table/createReadStreamNative.js +17 -0
  265. package/src/table/delete.js +20 -0
  266. package/src/table/deleteSessionContext.js +17 -0
  267. package/src/table/encodeDbSpecific.js +10 -0
  268. package/src/table/executeQueries/executeChanges.js +35 -0
  269. package/src/table/executeQueries/executeQueriesCore.js +12 -0
  270. package/src/table/executeQueries/executeQuery.js +8 -0
  271. package/src/table/executeQueries/resolveExecuteQuery.js +57 -0
  272. package/src/table/executeQueries.js +15 -0
  273. package/src/table/extractDeleteStrategy.js +9 -0
  274. package/src/table/fuzzyPromise.js +18 -0
  275. package/src/table/getById.js +33 -0
  276. package/src/table/getFirstFromDb.js +10 -0
  277. package/src/table/getFromDbById.js +17 -0
  278. package/src/table/getIdArgs.js +14 -0
  279. package/src/table/getMany.js +26 -0
  280. package/src/table/getManyDto/newQuery.js +32 -0
  281. package/src/table/getManyDto/pg/newQuery.js +8 -0
  282. package/src/table/getManyDto.js +10 -0
  283. package/src/table/getManyDtoFast/getSubRows.js +172 -0
  284. package/src/table/getManyDtoFast/newQuery.js +8 -0
  285. package/src/table/getManyDtoFast/newQueryCore.js +18 -0
  286. package/src/table/getManyDtoFast/query/newSingleQuery.js +20 -0
  287. package/src/table/getManyDtoFast/query/newSubQueries/joinLegToQuery.js +18 -0
  288. package/src/table/getManyDtoFast/query/newSubQueries/manyLegToQuery.js +20 -0
  289. package/src/table/getManyDtoFast/query/newSubQueries/oneLegToQuery.js +21 -0
  290. package/src/table/getManyDtoFast/query/newSubQueries.js +47 -0
  291. package/src/table/getManyDtoFast/query/singleQuery/newShallowColumnSql.js +21 -0
  292. package/src/table/getSessionContext.js +10 -0
  293. package/src/table/getSessionSingleton.js +5 -0
  294. package/src/table/groupBy/newQuery.js +25 -0
  295. package/src/table/groupBy.js +65 -0
  296. package/src/table/hasMany.js +33 -0
  297. package/src/table/hasOne.js +33 -0
  298. package/src/table/insert.js +91 -0
  299. package/src/table/insertDefault.js +88 -0
  300. package/src/table/join.js +42 -0
  301. package/src/table/joinRelation/getRelatives.js +64 -0
  302. package/src/table/log.js +39 -0
  303. package/src/table/negotiateAddStrategy.js +20 -0
  304. package/src/table/negotiateExpandInverse.js +13 -0
  305. package/src/table/newCache.js +96 -0
  306. package/src/table/newCascadeDeleteStrategy.js +30 -0
  307. package/src/table/newGetRelated.js +21 -0
  308. package/src/table/newJoinRelation.js +117 -0
  309. package/src/table/newManyRelation.js +61 -0
  310. package/src/table/newOneRelation.js +61 -0
  311. package/src/table/newPrimaryKeyFilter.js +13 -0
  312. package/src/table/newQuery.js +18 -0
  313. package/src/table/newRelatedTable.js +100 -0
  314. package/src/table/newRowCache.js +106 -0
  315. package/src/table/newThrow.js +11 -0
  316. package/src/table/nullPromise.js +1 -0
  317. package/src/table/objectToCallback.js +7 -0
  318. package/src/table/oneRelation/getRelatives.js +45 -0
  319. package/src/table/popChanges.js +19 -0
  320. package/src/table/promise.js +14 -0
  321. package/src/table/purifyStrategy.js +49 -0
  322. package/src/table/query/extractFilter.js +9 -0
  323. package/src/table/query/extractLimit.js +11 -0
  324. package/src/table/query/extractLimitQuery.js +23 -0
  325. package/src/table/query/extractOffset.js +11 -0
  326. package/src/table/query/extractOrderBy.js +57 -0
  327. package/src/table/query/extractSql.js +10 -0
  328. package/src/table/query/newParameterized.js +38 -0
  329. package/src/table/query/newSingleQuery.js +23 -0
  330. package/src/table/query/parameterized/extractParameters.js +8 -0
  331. package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +16 -0
  332. package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +27 -0
  333. package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +37 -0
  334. package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +13 -0
  335. package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +9 -0
  336. package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +11 -0
  337. package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +9 -0
  338. package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +25 -0
  339. package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +13 -0
  340. package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +10 -0
  341. package/src/table/query/singleQuery/negotiateExclusive.js +11 -0
  342. package/src/table/query/singleQuery/negotiateLimit.js +10 -0
  343. package/src/table/query/singleQuery/newColumnSql.js +8 -0
  344. package/src/table/query/singleQuery/newDiscriminatorSql.js +33 -0
  345. package/src/table/query/singleQuery/newJoinSql.js +41 -0
  346. package/src/table/query/singleQuery/newQueryContext.js +20 -0
  347. package/src/table/query/singleQuery/newWhereSql.js +19 -0
  348. package/src/table/readStream/extractLimit.js +7 -0
  349. package/src/table/readStream/extractOrderBy.js +55 -0
  350. package/src/table/readStream/mySql/newQuery.js +16 -0
  351. package/src/table/readStream/mySql/query/newSingleQuery.js +21 -0
  352. package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +19 -0
  353. package/src/table/readStream/mySql/query/newSubQueries/manyLegToQuery.js +22 -0
  354. package/src/table/readStream/mySql/query/newSubQueries/newQueryCore.js +9 -0
  355. package/src/table/readStream/mySql/query/newSubQueries/newSingleQueryCore.js +18 -0
  356. package/src/table/readStream/mySql/query/newSubQueries/oneLegToQuery.js +22 -0
  357. package/src/table/readStream/mySql/query/newSubQueries.js +47 -0
  358. package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +17 -0
  359. package/src/table/readStream/newQuery.js +32 -0
  360. package/src/table/readStream/newQueryStream.js +8 -0
  361. package/src/table/readStream/pg/newQuery.js +8 -0
  362. package/src/table/readStream/pg/newQueryCore.js +17 -0
  363. package/src/table/readStream/pg/query/newSingleQuery.js +19 -0
  364. package/src/table/readStream/pg/query/newSubQueries/joinLegToQuery.js +19 -0
  365. package/src/table/readStream/pg/query/newSubQueries/manyLegToQuery.js +22 -0
  366. package/src/table/readStream/pg/query/newSubQueries/oneLegToQuery.js +19 -0
  367. package/src/table/readStream/pg/query/newSubQueries.js +47 -0
  368. package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +19 -0
  369. package/src/table/readStreamDefault/createBatchFilter.js +39 -0
  370. package/src/table/relatedTable/aggregate/aggregateJoinSql.js +37 -0
  371. package/src/table/relatedTable/aggregate/joinSql.js +38 -0
  372. package/src/table/relatedTable/aggregate.js +48 -0
  373. package/src/table/relatedTable/all.js +24 -0
  374. package/src/table/relatedTable/any.js +70 -0
  375. package/src/table/relatedTable/childColumn.js +61 -0
  376. package/src/table/relatedTable/columnAggregate.js +16 -0
  377. package/src/table/relatedTable/columnAggregateGroup.js +59 -0
  378. package/src/table/relatedTable/joinSql.js +40 -0
  379. package/src/table/relatedTable/joinSqlArray.js +32 -0
  380. package/src/table/relatedTable/none.js +22 -0
  381. package/src/table/relatedTable/relatedColumn.js +49 -0
  382. package/src/table/relatedTable/relationFilter.js +16 -0
  383. package/src/table/relatedTable/selectSql.js +11 -0
  384. package/src/table/relatedTable/subFilter.js +16 -0
  385. package/src/table/relatedTable/where.js +50 -0
  386. package/src/table/relatedTable/whereSql.js +41 -0
  387. package/src/table/relation/manyCache/extractParentKey.js +17 -0
  388. package/src/table/relation/manyCache/synchronizeAdded.js +13 -0
  389. package/src/table/relation/manyCache/synchronizeChanged.js +31 -0
  390. package/src/table/relation/manyCache/synchronizeRemoved.js +13 -0
  391. package/src/table/relation/newExpanderCache.js +7 -0
  392. package/src/table/relation/newForeignKeyFilter.js +20 -0
  393. package/src/table/relation/newJoinLeg.js +23 -0
  394. package/src/table/relation/newManyCache.js +57 -0
  395. package/src/table/relation/newManyCacheCore.js +53 -0
  396. package/src/table/relation/newManyLeg.js +15 -0
  397. package/src/table/relation/newOneCache.js +28 -0
  398. package/src/table/relation/newOneLeg.js +25 -0
  399. package/src/table/releaseDbClient.js +15 -0
  400. package/src/table/resultToPromise.js +8 -0
  401. package/src/table/resultToRows/dbRowToRow.js +51 -0
  402. package/src/table/resultToRows/dbRowsToRows.js +13 -0
  403. package/src/table/resultToRows/decodeDbRow.js +25 -0
  404. package/src/table/resultToRows/delete/removeFromCache.js +33 -0
  405. package/src/table/resultToRows/delete.js +31 -0
  406. package/src/table/resultToRows/negotiateQueryContext.js +6 -0
  407. package/src/table/resultToRows/newDecodeDbRow.js +262 -0
  408. package/src/table/resultToRows/toDto/createDto.js +20 -0
  409. package/src/table/resultToRows/toDto/extractStrategy.js +41 -0
  410. package/src/table/resultToRows/toDto.js +92 -0
  411. package/src/table/resultToRows.js +37 -0
  412. package/src/table/rollback.js +31 -0
  413. package/src/table/rowArray/negotiateNextTick.js +11 -0
  414. package/src/table/rowArray/orderBy.js +51 -0
  415. package/src/table/rowArray.js +62 -0
  416. package/src/table/setSessionSingleton.js +5 -0
  417. package/src/table/strategyToSpan.js +49 -0
  418. package/src/table/tryGetById.js +13 -0
  419. package/src/table/tryGetFirstFromDb.js +23 -0
  420. package/src/table/tryGetFromCacheById.js +12 -0
  421. package/src/table/tryGetFromDbById/extractStrategy.js +9 -0
  422. package/src/table/tryGetFromDbById.js +19 -0
  423. package/src/table/tryGetSessionContext.js +16 -0
  424. package/src/table/tryReleaseDbClient.js +14 -0
  425. package/src/table/updateField.js +12 -0
  426. package/src/table/where.js +12 -0
  427. package/src/table.js +174 -0
  428. package/src/tedious/deleteFromSql.js +8 -0
  429. package/src/tedious/encodeBoolean.js +7 -0
  430. package/src/tedious/encodeBuffer.js +7 -0
  431. package/src/tedious/formatDateOut.js +5 -0
  432. package/src/tedious/formatJSONOut.js +5 -0
  433. package/src/tedious/getManyDto/newQuery.js +8 -0
  434. package/src/tedious/getManyDto/newQueryCore.js +18 -0
  435. package/src/tedious/getManyDto/query/newSingleQuery.js +29 -0
  436. package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +16 -0
  437. package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +16 -0
  438. package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +19 -0
  439. package/src/tedious/getManyDto/query/newSubQueries.js +48 -0
  440. package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +34 -0
  441. package/src/tedious/getManyDto.js +27 -0
  442. package/src/tedious/insert.js +13 -0
  443. package/src/tedious/insertSql.js +70 -0
  444. package/src/tedious/limitAndOffset.js +16 -0
  445. package/src/tedious/mergeSql.js +76 -0
  446. package/src/tedious/newDatabase.js +129 -0
  447. package/src/tedious/newPool.js +19 -0
  448. package/src/tedious/newTransaction.js +72 -0
  449. package/src/tedious/outputInsertedSql.js +11 -0
  450. package/src/tedious/pool/defaults.js +45 -0
  451. package/src/tedious/pool/end.js +13 -0
  452. package/src/tedious/pool/newGenericPool.js +71 -0
  453. package/src/tedious/pool/parseConnectionString.js +40 -0
  454. package/src/tedious/selectForUpdateSql.js +3 -0
  455. package/src/tedious/wrapQuery.js +112 -0
  456. package/src/toCompareObject.js +41 -0
  457. package/src/useHook.js +9 -0
  458. package/src/validateDeleteAllowed.js +49 -0
  459. package/src/validateDeleteConflict.js +92 -0
package/src/map.d.ts ADDED
@@ -0,0 +1,1729 @@
1
+ import type { Options } from 'ajv';
2
+ import type { ConnectionConfiguration } from 'tedious';
3
+ import type { PoolAttributes } from 'oracledb';
4
+ import type { AxiosInterceptorManager, InternalAxiosRequestConfig, AxiosResponse } from 'axios';
5
+
6
+ export type MappedDbDef<T> = {
7
+ map<V extends AllowedDbMap<V>>(
8
+ callback: (mapper: DbMapper<T>) => V
9
+ ): MappedDbDef<MergeProperties<T, V>>;
10
+ <O extends DbOptions<T>>(concurrency: O): NegotiateDbInstance<T, O>;
11
+ } & T & DbConnectable<T>;
12
+
13
+ type MergeProperties<T, V> = {
14
+ [K in keyof T | keyof V]:
15
+ K extends keyof T ? (T[K] extends MappedTableDef<infer M>
16
+ ? (K extends keyof V ? (V[K] extends MappedTableDef<infer N> ? MappedTableDef<M & N> : V[K]) : T[K])
17
+ : T[K])
18
+ : (K extends keyof V ? V[K] : never);
19
+ };
20
+
21
+
22
+ export type DbMapper<T> = {
23
+ table(tableName: string): MappedTableDefInit<{}>;
24
+ } & T;
25
+
26
+ type MappedDb<T> = {
27
+ <O extends DbOptions<T>>(concurrency: O): NegotiateDbInstance<T, O>;
28
+ } & DbConnectable<T>;
29
+
30
+ type DbConnectable<T> = {
31
+ http(url: string): MappedDbInstance<T>;
32
+ postgres(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
33
+ sqlite(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
34
+ sap(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
35
+ mssql(connectionConfig: ConnectionConfiguration, options?: PoolOptions): MappedDbInstance<T>;
36
+ mssql(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
37
+ mssqlNative(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
38
+ mysql(connectionString: string, options?: PoolOptions): MappedDbInstance<T>;
39
+ oracle(config: PoolAttributes, options?: PoolOptions): MappedDbInstance<T>;
40
+ };
41
+
42
+ type NegotiateDbInstance<T, C> = C extends WithDb
43
+ ? MappedDbInstance<T>
44
+ : MappedDb<T>;
45
+
46
+ type WithDb = {
47
+ db: Pool | ((connectors: Connectors) => Pool | Promise<Pool>)
48
+ };
49
+
50
+ type DbOptions<T> = {
51
+ [K in keyof T]?: T[K] extends MappedTableDef<infer U>
52
+ ? Concurrency<U>
53
+ : never;
54
+ } & {
55
+ concurrency?: ConcurrencyValues;
56
+ readonly?: boolean;
57
+ db?: Pool | ((connectors: Connectors) => Pool | Promise<Pool>);
58
+ };
59
+
60
+ interface Connectors {
61
+ http(url: string): Pool;
62
+ postgres(connectionString: string, options?: PoolOptions): Pool;
63
+ sqlite(connectionString: string, options?: PoolOptions): Pool;
64
+ sap(connectionString: string, options?: PoolOptions): Pool;
65
+ mssql(connectionConfig: ConnectionConfiguration, options?: PoolOptions): Pool;
66
+ mssql(connectionString: string, options?: PoolOptions): Pool;
67
+ oracle(config: PoolAttributes, options?: PoolOptions): Pool;
68
+ }
69
+
70
+ export interface Pool {
71
+ end(): Promise<void>;
72
+ }
73
+
74
+ export interface PoolOptions {
75
+ size?: number;
76
+ }
77
+
78
+ type MappedDbInstance<T> = {
79
+ [K in keyof T]: T[K] extends MappedTableDef<infer U>
80
+ ? MappedTable<T[K]>
81
+ : never;
82
+ } & {
83
+ filter: Filter;
84
+ and(filter: Filter | RawFilter[], ...filters: RawFilter[]): Filter;
85
+ or(filter: Filter | RawFilter[], ...filters: RawFilter[]): Filter;
86
+ not(): Filter;
87
+ query(filter: RawFilter | string): Promise<unknown[]>;
88
+ query<T>(filter: RawFilter | string): Promise<T[]>;
89
+ createPatch(original: any[], modified: any[]): JsonPatch;
90
+ createPatch(original: any, modified: any): JsonPatch;
91
+ <O extends DbOptions<T>>(concurrency: O): MappedDbInstance<T>;
92
+ transaction(
93
+ fn: (db: MappedDbInstance<T>) => Promise<unknown>
94
+ ): Promise<void>;
95
+ saveChanges(arraysOrRow: { saveChanges(): Promise<void> }): Promise<void>;
96
+ express(): import('express').RequestHandler;
97
+ express(config: ExpressConfig<T>): import('express').RequestHandler;
98
+ readonly metaData: DbConcurrency<T>;
99
+ interceptors: WithInterceptors;
100
+ } & DbConnectable<T> & WithInterceptors;
101
+
102
+ interface WithInterceptors {
103
+ request: AxiosInterceptorManager<InternalAxiosRequestConfig>;
104
+ response: AxiosInterceptorManager<AxiosResponse>;
105
+ }
106
+
107
+
108
+ type ExpressConfig<T> = {
109
+ [K in keyof T]?: T[K] extends MappedTableDef<infer U>
110
+ ? ExpressTableConfig<T>
111
+ : never;
112
+ } & {
113
+ db?: Pool | ((connectors: Connectors) => Pool | Promise<Pool>);
114
+ }
115
+
116
+ type ExpressTableConfig<T> = {
117
+ baseFilter?: RawFilter | ((db: MappedDbInstance<T>, req: import('express').Request, res: import('express').Response) => RawFilter);
118
+ }
119
+
120
+
121
+ type JsonPatch = Array<{
122
+ op: 'add' | 'remove' | 'replace' | 'copy' | 'move' | 'test';
123
+ path: string;
124
+ value?: any;
125
+ from?: string;
126
+ }>;
127
+
128
+ type ToJsonType<M> = M extends JsonOf<infer N> ? N : JsonType;
129
+
130
+ type PrimaryRowFilter<T> = StrategyToRowDataPrimary<ExtractPrimary<T>>;
131
+ type StrategyToRowDataPrimary<T> = {
132
+ [K in keyof T]: T[K] extends StringColumnSymbol
133
+ ? string
134
+ : T[K] extends UuidColumnSymbol
135
+ ? string
136
+ : T[K] extends NumericColumnSymbol
137
+ ? number
138
+ : T[K] extends DateColumnSymbol
139
+ ? string | Date
140
+ : T[K] extends DateWithTimeZoneColumnSymbol
141
+ ? string | Date
142
+ : T[K] extends BinaryColumnSymbol
143
+ ? string
144
+ : T[K] extends BooleanColumnSymbol
145
+ ? boolean
146
+ : T[K] extends JSONColumnType<infer M>
147
+ ? ToJsonType<M>
148
+ : never;
149
+ };
150
+
151
+
152
+ type ExpandedFetchingStrategy<T> = {
153
+ [K in keyof T &
154
+ keyof RemoveNever<
155
+ AllowedColumnsAndTablesStrategy<T>
156
+ >]?: T[K] extends ColumnSymbols
157
+ ? true
158
+ : ExpandedFetchingStrategy<T[K]>;
159
+ };
160
+
161
+ type ExpandedMappedTable<T, FL = ExpandedFetchingStrategy<T>> = {
162
+ getOne(
163
+ filter?: Filter | PrimaryRowFilter<T>
164
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
165
+ getOne<FS extends FetchingStrategy<T>>(
166
+ filter?: Filter | PrimaryRowFilter<T>,
167
+ fetchingStrategy?: FS
168
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
169
+
170
+
171
+ update(
172
+ row: StrategyToInsertRowData<T>
173
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
174
+ updateChanges(
175
+ row: StrategyToInsertRowData<T>,
176
+ originalRow: StrategyToInsertRowData<T>
177
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
178
+
179
+ update(
180
+ rows: StrategyToInsertRowData<T>[]
181
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
182
+ updateChanges(
183
+ rows: StrategyToInsertRowData<T>[],
184
+ originalRows: StrategyToInsertRowData<T>[]
185
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
186
+
187
+ update<FS extends FetchingStrategy<T>>(
188
+ row: StrategyToInsertRowData<T>,
189
+ strategy: FS
190
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
191
+ updateChanges<FS extends FetchingStrategy<T>>(
192
+ row: StrategyToInsertRowData<T>,
193
+ originalRow: StrategyToInsertRowData<T>,
194
+ strategy: FS
195
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
196
+
197
+ update<FS extends FetchingStrategy<T>>(
198
+ rows: StrategyToInsertRowData<T>[],
199
+ strategy: FS
200
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
201
+ updateChanges<FS extends FetchingStrategy<T>>(
202
+ rows: StrategyToInsertRowData<T>[],
203
+ originalRows: StrategyToInsertRowData<T>[],
204
+ strategy: FS
205
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
206
+
207
+ insert(
208
+ row: StrategyToInsertRowData<T>
209
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
210
+
211
+ insert(
212
+ rows: StrategyToInsertRowData<T>[]
213
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
214
+
215
+ insert<FS extends FetchingStrategy<T>>(
216
+ row: StrategyToInsertRowData<T>,
217
+ strategy: FS
218
+ ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
219
+
220
+ insert<FS extends FetchingStrategy<T>>(
221
+ rows: StrategyToInsertRowData<T>[],
222
+ strategy: FS
223
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
224
+
225
+ insertAndForget(
226
+ row: StrategyToRowData<T>
227
+ ): Promise<void>;
228
+
229
+ insertAndForget(
230
+ row: StrategyToRowData<T>[]
231
+ ): Promise<void>;
232
+
233
+ getMany(
234
+ filter?: Filter | PrimaryRowFilter<T>[]
235
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
236
+ getMany<FS extends FetchingStrategy<T>>(
237
+ filter?: Filter | PrimaryRowFilter<T>[],
238
+ fetchingStrategy?: FS
239
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
240
+ getAll(): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
241
+ getAll<FS extends FetchingStrategy<T>>(
242
+ fetchingStrategy: FS
243
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
244
+ aggregate<FS extends AggregateStrategy<T>>(
245
+ fetchingStrategy: FS
246
+ ): Promise<StrategyToRowData<FetchedAggregateProperties<T, FL>>[]>;
247
+ count(filter?: Filter | PrimaryRowFilter<T>[]): Promise<number>;
248
+ delete(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
249
+ deleteCascade(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
250
+
251
+ proxify(
252
+ row: StrategyToInsertRowData<T>
253
+ ): StrategyToRow<FetchedProperties<T, FL>, T>;
254
+
255
+ proxify(
256
+ row: StrategyToInsertRowData<T>[]
257
+ ): StrategyToRowArray<FetchedProperties<T, FL>, T>;
258
+
259
+ proxify<FS extends FetchingStrategy<T>>(
260
+ row: StrategyToInsertRowData<T>,
261
+ strategy: FS
262
+ ): StrategyToRow<FetchedProperties<T, FL>, T>;
263
+
264
+ proxify<FS extends FetchingStrategy<T>>(
265
+ row: StrategyToInsertRowData<T>[],
266
+ strategy: FS
267
+ ): StrategyToRowArray<FetchedProperties<T, FL>, T>;
268
+
269
+
270
+ patch<C extends Concurrency<T>>(
271
+ patch: JsonPatch,
272
+ concurrency?: C
273
+ ): Promise<void>;
274
+
275
+ tsType<FS extends FetchingStrategy<T>>(
276
+ strategy: FS
277
+ ): StrategyToRowData<FetchedProperties<T, FS>>;
278
+ tsType(
279
+ ): StrategyToRowData<FetchedProperties<T, FL>>;
280
+
281
+ readonly metaData: Concurrency<T>;
282
+ } & MappedColumnsAndRelations<T> &
283
+ GetById<T, CountProperties<ExtractPrimary<T>>>;
284
+
285
+ type ReturnArrayOrObj<W, V1, V2> =
286
+ W extends any[] ? V2 :
287
+ V1;
288
+
289
+ type MappedTable<T> = {
290
+ expand(): ExpandedMappedTable<T>
291
+ getOne(
292
+ filter?: Filter | PrimaryRowFilter<T>
293
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
294
+ getOne<FS extends FetchingStrategy<T>>(
295
+ filter?: Filter | PrimaryRowFilter<T>,
296
+ fetchingStrategy?: FS
297
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
298
+
299
+ update(
300
+ row: StrategyToInsertRowData<T>
301
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
302
+ updateChanges(
303
+ modifiedRow: StrategyToInsertRowData<T>,
304
+ originalRow: StrategyToInsertRowData<T>
305
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
306
+
307
+ update(
308
+ rows: StrategyToInsertRowData<T>[]
309
+ ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
310
+ updateChanges(
311
+ modifiedRows: StrategyToInsertRowData<T>[],
312
+ originalRows: StrategyToInsertRowData<T>[]
313
+ ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
314
+
315
+ update<FS extends FetchingStrategy<T>>(
316
+ row: StrategyToInsertRowData<T>,
317
+ strategy: FS
318
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
319
+ updateChanges<FS extends FetchingStrategy<T>>(
320
+ modifiedRow: StrategyToInsertRowData<T>,
321
+ originalRow: StrategyToInsertRowData<T>,
322
+ strategy: FS
323
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
324
+
325
+ update<FS extends FetchingStrategy<T>>(
326
+ rows: StrategyToInsertRowData<T>[],
327
+ strategy: FS
328
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
329
+ updateChanges<FS extends FetchingStrategy<T>>(
330
+ modifiedRows: StrategyToInsertRowData<T>[],
331
+ originalRows: StrategyToInsertRowData<T>[],
332
+ strategy: FS
333
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
334
+
335
+ insert(
336
+ row: StrategyToInsertRowData<T>
337
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
338
+
339
+ insert(
340
+ rows: StrategyToInsertRowData<T>[]
341
+ ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
342
+
343
+ insert<FS extends FetchingStrategy<T>>(
344
+ row: StrategyToInsertRowData<T>,
345
+ strategy: FS
346
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
347
+
348
+ insert<FS extends FetchingStrategy<T>>(
349
+ rows: StrategyToInsertRowData<T>[],
350
+ strategy: FS
351
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
352
+
353
+ insertAndForget<TRow extends StrategyToInsertRowData<T> | StrategyToInsertRowData<T>[]>(
354
+ row: TRow
355
+ ): Promise<void>;
356
+ getMany(
357
+ filter?: Filter | PrimaryRowFilter<T>[]
358
+ ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
359
+ getMany<FS extends FetchingStrategy<T>>(
360
+ filter?: Filter | PrimaryRowFilter<T>[],
361
+ fetchingStrategy?: FS
362
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
363
+ getAll(): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
364
+ getAll<FS extends FetchingStrategy<T>>(
365
+ fetchingStrategy: FS
366
+ ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
367
+
368
+ aggregate<FS extends AggregateStrategy<T>>(
369
+ fetchingStrategy: FS
370
+ ): Promise<StrategyToRowData<FetchedAggregateProperties<T, FS>>[]>;
371
+
372
+ count(filter?: Filter | PrimaryRowFilter<T>[]): Promise<number>;
373
+ delete(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
374
+ deleteCascade(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
375
+
376
+ proxify(
377
+ row: StrategyToInsertRowData<T>
378
+ ): StrategyToRow<FetchedProperties<T, {}>, T>;
379
+
380
+ proxify(
381
+ row: StrategyToInsertRowData<T>[]
382
+ ): StrategyToRowArray<FetchedProperties<T, {}>, T>;
383
+
384
+ proxify<FS extends FetchingStrategy<T>>(
385
+ row: StrategyToInsertRowData<T>,
386
+ strategy: FS
387
+ ): StrategyToRow<FetchedProperties<T, FS>, T>;
388
+
389
+ proxify<FS extends FetchingStrategy<T>>(
390
+ row: StrategyToInsertRowData<T>[],
391
+ strategy: FS
392
+ ): StrategyToRowArray<FetchedProperties<T, FS>, T>;
393
+
394
+ patch<C extends Concurrency<T>>(
395
+ patch: JsonPatch,
396
+ concurrency?: C
397
+ ): Promise<void>;
398
+
399
+ tsType<FS extends FetchingStrategy<T>>(
400
+ strategy: FS
401
+ ): StrategyToRowData<FetchedProperties<T, FS>>;
402
+ tsType(
403
+ ): StrategyToRowData<FetchedProperties<T, {}>>;
404
+
405
+ readonly metaData: Concurrency<T>;
406
+ } & MappedColumnsAndRelations<T> &
407
+ GetById<T, CountProperties<ExtractPrimary<T>>>;
408
+
409
+ type GetById<T, Count extends number> = Count extends 1
410
+ ? {
411
+ getById(
412
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>
413
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
414
+ getById<FS extends FetchingStrategy<T>>(
415
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
416
+ fetchingStrategy: FS
417
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
418
+ }
419
+ : Count extends 2
420
+ ? {
421
+ getById(
422
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
423
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>
424
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
425
+ getById<FS extends FetchingStrategy<T>>(
426
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
427
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
428
+ fetchingStrategy: FS
429
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
430
+ }
431
+ : Count extends 3
432
+ ? {
433
+ getById(
434
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
435
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
436
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>
437
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
438
+ getById<FS extends FetchingStrategy<T>>(
439
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
440
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
441
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
442
+ fetchingStrategy: FS
443
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
444
+ }
445
+ : Count extends 4
446
+ ? {
447
+ getById(
448
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
449
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
450
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
451
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>
452
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
453
+ getById<FS extends FetchingStrategy<T>>(
454
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
455
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
456
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
457
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
458
+ fetchingStrategy: FS
459
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
460
+ }
461
+ : Count extends 5
462
+ ? {
463
+ getById(
464
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
465
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
466
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
467
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
468
+ id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>
469
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
470
+ getById<FS extends FetchingStrategy<T>>(
471
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
472
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
473
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
474
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
475
+ id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
476
+ fetchingStrategy: FS
477
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
478
+ }
479
+ : Count extends 6
480
+ ? {
481
+ getById(
482
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
483
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
484
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
485
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
486
+ id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
487
+ id6: ColumnToType<PickPropertyValue6<PickTypesOf<T, IsPrimary>>>
488
+ ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
489
+ getById<FS extends FetchingStrategy<T>>(
490
+ id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
491
+ id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
492
+ id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
493
+ id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
494
+ id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
495
+ id6: ColumnToType<PickPropertyValue6<PickTypesOf<T, IsPrimary>>>,
496
+ fetchingStrategy: FS
497
+ ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
498
+ }
499
+ : never;
500
+
501
+ type ColumnToType<T> = T extends UuidColumnSymbol
502
+ ? string
503
+ : T extends StringColumnSymbol
504
+ ? string
505
+ : T extends NumericColumnSymbol
506
+ ? number
507
+ : T extends DateColumnSymbol
508
+ ? string | Date
509
+ : T extends DateWithTimeZoneColumnSymbol
510
+ ? string | Date
511
+ : T extends BinaryColumnSymbol
512
+ ? string
513
+ : T extends BooleanColumnSymbol
514
+ ? boolean
515
+ : T extends JsonOf<infer M>
516
+ ? M
517
+ : T extends JSONColumnSymbol
518
+ ? JsonType
519
+ : never;
520
+
521
+ type MappedColumnsAndRelations<T> = RemoveNeverFlat<{
522
+ [K in keyof T]: T[K] extends StringColumnTypeDef<infer M>
523
+ ? StringColumnType<M>
524
+ : T[K] extends UuidColumnTypeDef<infer M>
525
+ ? UuidColumnType<M>
526
+ : T[K] extends NumericColumnTypeDef<infer M>
527
+ ? NumericColumnType<M>
528
+ : T[K] extends DateColumnTypeDef<infer M>
529
+ ? DateColumnType<M>
530
+ : T[K] extends DateWithTimeZoneColumnTypeDef<infer M>
531
+ ? DateWithTimeZoneColumnType<M>
532
+ : T[K] extends BinaryColumnTypeDef<infer M>
533
+ ? BinaryColumnType<M>
534
+ : T[K] extends BooleanColumnTypeDef<infer M>
535
+ ? BooleanColumnType<M>
536
+ : T[K] extends JSONColumnTypeDef<infer M>
537
+ ? JSONColumnType<M>
538
+ : T[K] extends ManyRelation
539
+ ? MappedColumnsAndRelations<T[K]> &
540
+ ManyTable<T[K]> & OneOrJoinTable<T[K]>
541
+ : T[K] extends RelatedTable
542
+ ? MappedColumnsAndRelations<T[K]> & OneOrJoinTable<T[K]>
543
+ : never;
544
+ }>;
545
+
546
+ type OneOrJoinTable<T> = ((
547
+ fn: (table: MappedColumnsAndRelations<T>) => RawFilter
548
+ ) => Filter) & {
549
+ exists: () => Filter;
550
+ };
551
+
552
+ type ManyTable<T> = ((
553
+ ) => Filter) & {
554
+ all(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
555
+ any(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
556
+ none(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
557
+ };
558
+
559
+ export type AllowedDbMap<T> = {
560
+ [P in keyof T]: T[P] extends MappedTableDef<infer U> ? T[P] : never;
561
+ };
562
+
563
+ type AllowedColumnsAndTablesStrategy<T> = {
564
+ [P in keyof T]: T[P] extends ColumnAndTableTypes ? T[P] : never;
565
+ };
566
+ type AllowedColumnsAndTablesConcurrency<T> = {
567
+ [P in keyof T]: T[P] extends ColumnAndTableTypes ? T[P] : never;
568
+ };
569
+
570
+
571
+ type FetchingStrategy<T> = FetchingStrategyBase<T> | AggType<T>
572
+
573
+ type AggregateStrategy<T> = AggregateStrategyBase<T> | AggType<T>
574
+
575
+ type AggType<T> = {
576
+ [name: string]: AggregationFunction<T>;
577
+ } & {
578
+ where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
579
+ };
580
+
581
+ type AggregateStrategyBase<T> =
582
+ {
583
+ limit?: number;
584
+ offset?: number;
585
+ where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
586
+ };
587
+
588
+ type FetchingStrategyBase<T> = {
589
+ [K in keyof T &
590
+ keyof RemoveNever<
591
+ AllowedColumnsAndTablesStrategy<T>
592
+ >]?: T[K] extends ColumnSymbols
593
+ ? boolean
594
+ : boolean | FetchingStrategyBase<T[K]> | AggType<T[K]>;
595
+ } & {
596
+ orderBy?:
597
+ | OrderBy<Extract<keyof AllowedColumns<T>, string>>[]
598
+ | OrderBy<Extract<keyof AllowedColumns<T>, string>>;
599
+ limit?: number;
600
+ offset?: number;
601
+ where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
602
+
603
+ };
604
+ type ExtractAggregates<Agg> = {
605
+ [K in keyof Agg as
606
+ Required<Agg>[K] extends (agg: Aggregate<infer V>) => ColumnSymbols
607
+ ? K extends 'where' ? never : K
608
+ : never
609
+ ]: Agg[K] extends (agg: Aggregate<infer V>) => infer R ? R : never;
610
+ }
611
+
612
+ type AggregationFunction<T> = (agg: Aggregate<T>) => ColumnSymbols;
613
+
614
+ type Aggregate<T> =
615
+ RelatedColumns<T> &
616
+ {
617
+ sum(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
618
+ avg(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
619
+ min(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
620
+ max(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
621
+ count(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
622
+ }
623
+
624
+ type RelatedColumns<T> = RemoveNeverFlat<{
625
+ [K in keyof T]:
626
+ T[K] extends StringColumnTypeDef<infer M> ? StringColumnSymbol
627
+ : T[K] extends UuidColumnTypeDef<infer M> ? UuidColumnSymbol
628
+ : T[K] extends NumericColumnTypeDef<infer M> ? NumericColumnSymbol
629
+ : T[K] extends DateColumnTypeDef<infer M> ? DateColumnSymbol
630
+ : T[K] extends DateWithTimeZoneColumnTypeDef<infer M> ? DateWithTimeZoneColumnSymbol
631
+ : T[K] extends BinaryColumnTypeDef<infer M> ? BinaryColumnSymbol
632
+ : T[K] extends BooleanColumnTypeDef<infer M> ? BooleanColumnSymbol
633
+ : T[K] extends JSONColumnTypeDef<infer M> ? JSONColumnSymbol
634
+ : T[K] extends ManyRelation
635
+ ? RelatedColumns<T[K]>
636
+ : T[K] extends RelatedTable
637
+ ? RelatedColumns<T[K]>
638
+ : never;
639
+ }>;
640
+
641
+
642
+ type AggregateColumns<T> = RemoveNeverFlat<{
643
+ [K in keyof T]:
644
+ T[K] extends ManyRelation
645
+ ? AggregateColumns2<T[K]>
646
+ : T[K] extends RelatedTable
647
+ ? AggregateColumns2<T[K]>
648
+ : never;
649
+ }>;
650
+
651
+ type AggregateColumns2<T> = RemoveNeverFlat<{
652
+ [K in keyof T]:
653
+ T[K] extends NumericColumnTypeDef<infer M> ? NumericColumnSymbol
654
+ : T[K] extends ManyRelation
655
+ ? AggregateColumns2<T[K]>
656
+ : T[K] extends RelatedTable
657
+ ? AggregateColumns2<T[K]>
658
+ : never;
659
+ }>;
660
+
661
+ type TablesDeep<T> = RemoveNeverFlat<{
662
+ [K in keyof T]:
663
+ T[K] extends ManyRelation
664
+ ? TablesDeep<T[K]>
665
+ : T[K] extends RelatedTable
666
+ ? TablesDeep<T[K]>
667
+ : never;
668
+ }>;
669
+
670
+ type ColumnConcurrency = {
671
+ readonly?: boolean;
672
+ concurrency?: ConcurrencyValues;
673
+ };
674
+
675
+ type ColumnSymbols =
676
+ | StringColumnSymbol
677
+ | UuidColumnSymbol
678
+ | NumericColumnSymbol
679
+ | DateColumnSymbol
680
+ | DateWithTimeZoneColumnSymbol
681
+ | BooleanColumnSymbol
682
+ | BinaryColumnSymbol
683
+ | JSONColumnSymbol;
684
+
685
+ type Concurrency<T> = {
686
+ [K in keyof T &
687
+ keyof RemoveNever<
688
+ AllowedColumnsAndTablesConcurrency<T>
689
+ >]?: T[K] extends ColumnSymbols ? ColumnConcurrency : Concurrency<T[K]>;
690
+ } & {
691
+ readonly?: boolean;
692
+ concurrency?: ConcurrencyValues;
693
+ };
694
+
695
+ type DbConcurrency<T> = {
696
+ [K in keyof T]: T[K] extends MappedTableDef<infer U>
697
+ ? Concurrency<U>
698
+ : never;
699
+ } & {
700
+ readonly?: boolean;
701
+ concurrency?: ConcurrencyValues;
702
+ };
703
+
704
+
705
+ type ConcurrencyValues = 'optimistic' | 'skipOnConflict' | 'overwrite';
706
+
707
+
708
+ type OrderBy<T extends string> = `${T} ${'asc' | 'desc'}` | T;
709
+
710
+ type RelatedTable = {
711
+ [' relatedTable']: boolean;
712
+ };
713
+
714
+ type PickTypesOf<T, U> = {
715
+ [K in keyof T as T[K] extends U ? K : never]: T[K];
716
+ };
717
+
718
+ type ExtractPrimary<T> = PickTypesOf<T, IsPrimary>;
719
+ type ExtractPrimary1<T> = PickTypesOf<
720
+ T,
721
+ PickPropertyValue1<PickTypesOf<T, IsPrimary>>
722
+ >;
723
+
724
+ type ExtractPrimary2<T> = PickTypesOf<
725
+ T,
726
+ PickPropertyValue2<PickTypesOf<T, IsPrimary>>
727
+ >;
728
+ type ExtractPrimary3<T> = PickTypesOf<
729
+ T,
730
+ PickPropertyValue3<PickTypesOf<T, IsPrimary>>
731
+ >;
732
+ type ExtractPrimary4<T> = PickTypesOf<
733
+ T,
734
+ PickPropertyValue4<PickTypesOf<T, IsPrimary>>
735
+ >;
736
+ type ExtractPrimary5<T> = PickTypesOf<
737
+ T,
738
+ PickPropertyValue5<PickTypesOf<T, IsPrimary>>
739
+ >;
740
+ type ExtractPrimary6<T> = PickTypesOf<
741
+ T,
742
+ PickPropertyValue6<PickTypesOf<T, IsPrimary>>
743
+ >;
744
+
745
+ type ToColumnTypes<T> = {
746
+ [K in keyof T]: T[K] extends UuidColumnSymbol
747
+ ? UuidColumnSymbol
748
+ : T[K] extends StringColumnSymbol
749
+ ? StringColumnSymbol
750
+ : T[K] extends NumericColumnSymbol
751
+ ? NumericColumnSymbol
752
+ : T[K] extends DateColumnSymbol
753
+ ? DateColumnSymbol
754
+ : T[K] extends DateWithTimeZoneColumnSymbol
755
+ ? DateWithTimeZoneColumnSymbol
756
+ : T[K] extends BinaryColumnSymbol
757
+ ? BinaryColumnSymbol
758
+ : T[K] extends BooleanColumnSymbol
759
+ ? BooleanColumnSymbol
760
+ : T[K] extends JSONColumnSymbol
761
+ ? JSONColumnSymbol
762
+ : never;
763
+ }[keyof T];
764
+
765
+ type KeyCandidates1<TFrom, TTo> = PickTypesOf<
766
+ TFrom,
767
+ ToColumnTypes<ExtractPrimary1<TTo>>
768
+ >;
769
+ type KeyCandidates2<TFrom, TTo> = PickTypesOf<
770
+ TFrom,
771
+ ToColumnTypes<ExtractPrimary2<TTo>>
772
+ >;
773
+ type KeyCandidates3<TFrom, TTo> = PickTypesOf<
774
+ TFrom,
775
+ ToColumnTypes<ExtractPrimary3<TTo>>
776
+ >;
777
+ type KeyCandidates4<TFrom, TTo> = PickTypesOf<
778
+ TFrom,
779
+ ToColumnTypes<ExtractPrimary4<TTo>>
780
+ >;
781
+ type KeyCandidates5<TFrom, TTo> = PickTypesOf<
782
+ TFrom,
783
+ ToColumnTypes<ExtractPrimary5<TTo>>
784
+ >;
785
+ type KeyCandidates6<TFrom, TTo> = PickTypesOf<
786
+ TFrom,
787
+ ToColumnTypes<ExtractPrimary6<TTo>>
788
+ >;
789
+ type ReferenceMapper<TFrom, TTo> = ReferenceMapperHelper<
790
+ TFrom,
791
+ TTo,
792
+ CountProperties<ExtractPrimary<TTo>>
793
+ >;
794
+ type OneMapper<TFrom, TTo> = HasMapperHelper<
795
+ TFrom,
796
+ TTo,
797
+ CountProperties<ExtractPrimary<TFrom>>,
798
+ OneRelation
799
+ >;
800
+ type ManyMapper<TFrom, TTo> = HasMapperHelper<
801
+ TFrom,
802
+ TTo,
803
+ CountProperties<ExtractPrimary<TFrom>>,
804
+ ManyRelation
805
+ >;
806
+
807
+ type ReferenceMapperHelper<TFrom, TTo, TPrimaryCount> =
808
+ 6 extends TPrimaryCount
809
+ ? {
810
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>, C3 extends keyof KeyCandidates2<TFrom, TTo>, C4 extends keyof KeyCandidates2<TFrom, TTo>, C5 extends keyof KeyCandidates2<TFrom, TTo>, C6 extends keyof KeyCandidates2<TFrom, TTo>>(
811
+ column: C1,
812
+ column2: C2,
813
+ column3: C3,
814
+ column4: C4,
815
+ column5: C5,
816
+ column6: C6
817
+ ): MappedTableDef<TTo> & RelatedTable;
818
+ }
819
+ : 5 extends TPrimaryCount
820
+ ? {
821
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>, C3 extends keyof KeyCandidates2<TFrom, TTo>, C4 extends keyof KeyCandidates2<TFrom, TTo>, C5 extends keyof KeyCandidates2<TFrom, TTo>>(
822
+ column: C1,
823
+ column2: C2,
824
+ column3: C3,
825
+ column4: C4,
826
+ column5: C5
827
+ ): MappedTableDef<TTo> & RelatedTable;
828
+ }
829
+ : 4 extends TPrimaryCount
830
+ ? {
831
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>, C3 extends keyof KeyCandidates2<TFrom, TTo>, C4 extends keyof KeyCandidates2<TFrom, TTo>>(
832
+ column: C1,
833
+ column2: C2,
834
+ column3: C3,
835
+ column4: C4
836
+ ): MappedTableDef<TTo> & RelatedTable;
837
+ }
838
+ : 3 extends TPrimaryCount
839
+ ? {
840
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>, C3 extends keyof KeyCandidates2<TFrom, TTo>>(
841
+ column: C1,
842
+ column2: C2,
843
+ column3: C3
844
+ ): MappedTableDef<TTo> & RelatedTable;
845
+ }
846
+ : 2 extends TPrimaryCount
847
+ ? {
848
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>>(
849
+ column: C1,
850
+ column2: C2
851
+ ): MappedTableDef<TTo> & RelatedTable;
852
+ }
853
+ : 1 extends TPrimaryCount
854
+ ? {
855
+ by<C1 extends keyof KeyCandidates1<TFrom, TTo>>(
856
+ column: C1
857
+ ): MappedTableDef<TTo> & RelatedTable;
858
+ }
859
+ : {};
860
+
861
+ type HasMapperHelper<
862
+ TFrom,
863
+ TTo,
864
+ TPrimaryCount,
865
+ TExtra = {}
866
+ > = 6 extends TPrimaryCount
867
+ ? {
868
+ by(
869
+ column: keyof KeyCandidates1<TTo, TFrom>,
870
+ column2: keyof KeyCandidates2<TTo, TFrom>,
871
+ column3: keyof KeyCandidates3<TTo, TFrom>,
872
+ column4: keyof KeyCandidates4<TTo, TFrom>,
873
+ column5: keyof KeyCandidates5<TTo, TFrom>,
874
+ column6: keyof KeyCandidates6<TTo, TFrom>
875
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
876
+ }
877
+ : 5 extends TPrimaryCount
878
+ ? {
879
+ by(
880
+ column: keyof KeyCandidates1<TTo, TFrom>,
881
+ column2: keyof KeyCandidates2<TTo, TFrom>,
882
+ column3: keyof KeyCandidates3<TTo, TFrom>,
883
+ column4: keyof KeyCandidates4<TTo, TFrom>,
884
+ column5: keyof KeyCandidates5<TTo, TFrom>
885
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
886
+ }
887
+ : 4 extends TPrimaryCount
888
+ ? {
889
+ by(
890
+ column: keyof KeyCandidates1<TTo, TFrom>,
891
+ column2: keyof KeyCandidates2<TTo, TFrom>,
892
+ column3: keyof KeyCandidates3<TTo, TFrom>,
893
+ column4: keyof KeyCandidates4<TTo, TFrom>
894
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
895
+ }
896
+ : 3 extends TPrimaryCount
897
+ ? {
898
+ by(
899
+ column: keyof KeyCandidates1<TTo, TFrom>,
900
+ column2: keyof KeyCandidates2<TTo, TFrom>,
901
+ column3: keyof KeyCandidates3<TTo, TFrom>
902
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
903
+ }
904
+ : 2 extends TPrimaryCount
905
+ ? {
906
+ by(
907
+ column: keyof KeyCandidates1<TTo, TFrom>,
908
+ column2: keyof KeyCandidates2<TTo, TFrom>
909
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
910
+ }
911
+ : 1 extends TPrimaryCount
912
+ ? {
913
+ by(
914
+ column: keyof KeyCandidates1<TTo, TFrom>
915
+ ): MappedTableDef<TTo> & RelatedTable & TExtra;
916
+ }
917
+ : {};
918
+
919
+ type ColumnMapperInit<T> = {
920
+ column(columnName: string): ColumnType<{}>;
921
+ primaryColumn(columnName: string): ColumnType<IsPrimary>;
922
+ };
923
+
924
+ type ColumnMapper<T> = {
925
+ references<TTo>(mappedTable: MappedTableDef<TTo>): ReferenceMapper<T, TTo>;
926
+ hasOne<TTo>(mappedTable: MappedTableDef<TTo>): OneMapper<T, TTo>;
927
+ hasMany<TTo>(mappedTable: MappedTableDef<TTo>): ManyMapper<T, TTo>;
928
+ };
929
+
930
+ type ManyRelation = {
931
+ [' isManyRelation']: true;
932
+ };
933
+
934
+ type OneRelation = {
935
+ [' isOneRelation']: true;
936
+ };
937
+
938
+ type MappedTableDefInit<T> = {
939
+ map<V extends AllowedColumnsAndTablesWithPrimaryMap<V>>(
940
+ callback: (mapper: ColumnMapperInit<T>) => V
941
+ ): MappedTableDef<T & V>;
942
+ } & T;
943
+
944
+ type MappedTableDef<T> = {
945
+ map<V extends AllowedColumnsAndTablesMap<V>>(
946
+ callback: (mapper: ColumnMapper<T>) => V
947
+ ): MappedTableDef<T & V>;
948
+ formulaDiscriminators(...discriminators: string[]): MappedTableDef<T>;
949
+ columnDiscriminators(...discriminators: string[]): MappedTableDef<T>;
950
+ } & T;
951
+
952
+ type NotNullProperties<T> = Pick<
953
+ T,
954
+ { [K in keyof T]: T[K] extends NotNull ? K : T[K] extends ManyRelation ? K : never }[keyof T]
955
+ >;
956
+
957
+
958
+ type NullProperties<T> = Pick<
959
+ T,
960
+ { [K in keyof T]: T[K] extends NotNull | ManyRelation ? never : K }[keyof T]
961
+ >;
962
+
963
+ type NotNullInsertProperties<T> = Pick<
964
+ T,
965
+ { [K in keyof T]: T[K] extends NotNullExceptInsert
966
+ ? never
967
+ : T[K] extends NotNull ? K : never
968
+ }[keyof T]
969
+ >;
970
+ type NullInsertProperties<T> = Pick<
971
+ T,
972
+ { [K in keyof T]: T[K] extends NotNullExceptInsert
973
+ ? K
974
+ : T[K] extends NotNull ? never : K
975
+ }[keyof T]
976
+ >;
977
+
978
+ type ColumnTypes = ColumnSymbols;
979
+ type ColumnAndTableTypes = ColumnSymbols | RelatedTable;
980
+
981
+ type StrategyToRow<T, U> = StrategyToRowData<T> & {
982
+ saveChanges(): Promise<void>;
983
+ saveChanges<C extends Concurrency<U>>(concurrency?: C): Promise<void>;
984
+ acceptChanges(): void;
985
+ clearChanges(): void;
986
+ refresh(): Promise<void>;
987
+ refresh<FS extends FetchingStrategy<U>>(
988
+ fetchingStrategy?: FS
989
+ ): Promise<StrategyToRow<FetchedProperties<U, FS>, U>>;
990
+ delete(): Promise<void>;
991
+ delete(concurrency: Concurrency<U>): Promise<void>;
992
+ };
993
+
994
+
995
+ type StrategyToRowArray<T, U> = StrategyToRowData<T>[] & {
996
+ saveChanges(): Promise<void>;
997
+ saveChanges<C extends Concurrency<U>>(concurrency?: C): Promise<void>;
998
+ acceptChanges(): void;
999
+ clearChanges(): void;
1000
+ refresh(): Promise<void>;
1001
+ refresh<FS extends FetchingStrategy<U>>(
1002
+ fetchingStrategy?: FS
1003
+ ): Promise<StrategyToRowArray<FetchedProperties<U, FS>, U>>;
1004
+ delete(): Promise<void>;
1005
+ delete(concurrency: Concurrency<U>): Promise<void>;
1006
+ };
1007
+
1008
+ type JsonValue = null | boolean | number | string | JsonArray | JsonObject;
1009
+
1010
+ interface JsonArray extends Array<JsonValue> { }
1011
+
1012
+ interface JsonObject {
1013
+ [key: string]: JsonValue;
1014
+ }
1015
+
1016
+ type JsonType = JsonArray | JsonObject;
1017
+
1018
+ type AllowedColumnsAndTablesMap<T> = {
1019
+ [P in keyof T]: T[P] extends ColumnTypeOf<infer U> | RelatedTable
1020
+ ? T[P]
1021
+ : never;
1022
+ };
1023
+
1024
+ type AllowedColumnsAndTablesWithPrimaryMap<T> = 1 extends CountFirstPrimary<
1025
+ ExtractPrimary<T>
1026
+ >
1027
+ ? {
1028
+ [P in keyof T]: T[P] extends ColumnTypeOf<infer U> | RelatedTable
1029
+ ? T[P]
1030
+ : never;
1031
+ }
1032
+ : NeedsPrimaryKey;
1033
+
1034
+ type NeedsPrimaryKey = {
1035
+ ['Primary column']: void;
1036
+ };
1037
+
1038
+ type CountFirstPrimary<T> = UnionOfTypes<MapPropertiesTo1<T>>;
1039
+
1040
+ type AllowedColumns<T> = RemoveNever<{
1041
+ [P in keyof T]: T[P] extends ColumnTypes ? T[P] : never;
1042
+ }>;
1043
+
1044
+ type AtLeastOneOf<T, U> = {
1045
+ [K in keyof T]: T[K] extends U ? true : never;
1046
+ }[keyof T] extends never
1047
+ ? false
1048
+ : true;
1049
+
1050
+ type AtLeastOneTrue<T> = {
1051
+ [K in keyof T]: T[K] extends true ? true : never;
1052
+ }[keyof T] extends never
1053
+ ? false
1054
+ : true;
1055
+
1056
+ type ExtractColumnBools<T, TStrategy> = RemoveNever<{
1057
+ [K in keyof TStrategy]: K extends keyof T
1058
+ ? T[K] extends ColumnSymbols
1059
+ ? TStrategy[K]
1060
+ : never
1061
+ : never;
1062
+ }>;
1063
+
1064
+ type NegotiateNotNull<T> = T extends NotNull ? NotNull : {};
1065
+
1066
+ type FetchedProperties<T, TStrategy> = FetchedColumnProperties<T, TStrategy> & FetchedRelationProperties<T, TStrategy> & ExtractAggregates<TStrategy>
1067
+ type FetchedAggregateProperties<T, TStrategy> = FetchedColumnProperties<T, TStrategy> & ExtractAggregates<TStrategy>
1068
+
1069
+
1070
+ type FetchedRelationProperties<T, TStrategy> = RemoveNeverFlat<{
1071
+ [K in keyof T]: K extends keyof TStrategy
1072
+ ? TStrategy[K] extends true
1073
+ ? T[K] extends ColumnSymbols
1074
+ ? never
1075
+ : T[K] extends ManyRelation
1076
+ ? FetchedProperties<T[K], {}> & ManyRelation
1077
+ : FetchedProperties<T[K], {}> & NegotiateNotNull<T[K]>
1078
+ : TStrategy[K] extends false
1079
+ ? never
1080
+ : T[K] extends ManyRelation
1081
+ ? FetchedProperties<T[K], TStrategy[K]> & ManyRelation
1082
+ : FetchedProperties<T[K], TStrategy[K]> & NegotiateNotNull<T[K]>
1083
+ : never;
1084
+ }>;
1085
+
1086
+ type FetchedColumnProperties<T, TStrategy> = RemoveNeverFlat<
1087
+ AtLeastOneTrue<ExtractColumnBools<T, TStrategy>> extends true
1088
+ ? {
1089
+ [K in keyof T]: K extends keyof TStrategy
1090
+ ? TStrategy[K] extends true
1091
+ ? T[K] extends ColumnSymbols
1092
+ ? T[K]
1093
+ : never
1094
+ : never
1095
+ : never;
1096
+ }
1097
+ : {
1098
+ [K in keyof T]: K extends keyof TStrategy
1099
+ ? TStrategy[K] extends true
1100
+ ? T[K] extends ColumnSymbols
1101
+ ? T[K]
1102
+ : never
1103
+ : never
1104
+ : NegotiateDefaultStrategy<T[K]>;
1105
+ }
1106
+ >;
1107
+
1108
+ type StrategyToRowData<T> = {
1109
+ [K in keyof RemoveNever<
1110
+ NotNullProperties<T>
1111
+ >]: T[K] extends StringColumnSymbol
1112
+ ? string
1113
+ : T[K] extends UuidColumnSymbol
1114
+ ? string
1115
+ : T[K] extends NumericColumnSymbol
1116
+ ? number
1117
+ : T[K] extends DateColumnSymbol
1118
+ ? string | Date
1119
+ : T[K] extends DateWithTimeZoneColumnSymbol
1120
+ ? string | Date
1121
+ : T[K] extends BinaryColumnSymbol
1122
+ ? string
1123
+ : T[K] extends BooleanColumnSymbol
1124
+ ? boolean
1125
+ : T[K] extends JsonOf<infer M>
1126
+ ? M
1127
+ : T[K] extends JSONColumnSymbol
1128
+ ? JsonType
1129
+ : T[K] extends ManyRelation
1130
+ ? StrategyToRowData<T[K]>[]
1131
+ : StrategyToRowData<T[K]>;
1132
+ } & {
1133
+ [K in keyof RemoveNever<
1134
+ NullProperties<T>
1135
+ >]?: T[K] extends StringColumnSymbol
1136
+ ? string | null
1137
+ : T[K] extends UuidColumnSymbol
1138
+ ? string | null
1139
+ : T[K] extends NumericColumnSymbol
1140
+ ? number | null
1141
+ : T[K] extends DateColumnSymbol
1142
+ ? string | Date | null
1143
+ : T[K] extends DateWithTimeZoneColumnSymbol
1144
+ ? string | Date | null
1145
+ : T[K] extends BinaryColumnSymbol
1146
+ ? string | null
1147
+ : T[K] extends BooleanColumnSymbol
1148
+ ? boolean | null
1149
+ : T[K] extends JsonOf<infer M>
1150
+ ? M | null
1151
+ : T[K] extends JSONColumnSymbol
1152
+ ? JsonType | null
1153
+ : T[K] extends ManyRelation
1154
+ ? StrategyToRowData<T[K]>[]
1155
+ : StrategyToRowData<T[K]>;
1156
+ };
1157
+
1158
+ type StrategyToInsertRowData<T> = Omit<{
1159
+ [K in keyof RemoveNever<
1160
+ NotNullInsertProperties<T>
1161
+ >]: T[K] extends StringColumnSymbol
1162
+ ? string
1163
+ : T[K] extends UuidColumnSymbol
1164
+ ? string
1165
+ : T[K] extends NumericColumnSymbol
1166
+ ? number
1167
+ : T[K] extends DateColumnSymbol
1168
+ ? string | Date
1169
+ : T[K] extends DateWithTimeZoneColumnSymbol
1170
+ ? string | Date
1171
+ : T[K] extends BinaryColumnSymbol
1172
+ ? string
1173
+ : T[K] extends BooleanColumnSymbol
1174
+ ? boolean
1175
+ : T[K] extends JsonOf<infer M>
1176
+ ? M
1177
+ : T[K] extends JSONColumnSymbol
1178
+ ? JsonType
1179
+ : T[K] extends ManyRelation
1180
+ ? StrategyToInsertRowData<T[K]>[]
1181
+ : StrategyToInsertRowData<T[K]>;
1182
+ } & {
1183
+ [K in keyof RemoveNever<
1184
+ NullInsertProperties<T>
1185
+ >]?: T[K] extends StringColumnSymbol
1186
+ ? string | null
1187
+ : T[K] extends UuidColumnSymbol
1188
+ ? string | null
1189
+ : T[K] extends NumericColumnSymbol
1190
+ ? number | null
1191
+ : T[K] extends DateColumnSymbol
1192
+ ? string | Date | null
1193
+ : T[K] extends DateWithTimeZoneColumnSymbol
1194
+ ? string | Date | null
1195
+ : T[K] extends BinaryColumnSymbol
1196
+ ? string | null
1197
+ : T[K] extends BooleanColumnSymbol
1198
+ ? boolean | null
1199
+ : T[K] extends JsonOf<infer M>
1200
+ ? M | null
1201
+ : T[K] extends JSONColumnSymbol
1202
+ ? JsonType | null
1203
+ : T[K] extends ManyRelation
1204
+ ? StrategyToInsertRowData<T[K]>[]
1205
+ : StrategyToInsertRowData<T[K]>;
1206
+ }, 'formulaDiscriminators' | 'columnDiscriminators' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1207
+ ;
1208
+
1209
+ type NegotiateDefaultStrategy<T> = T extends ColumnSymbols ? T : never;
1210
+
1211
+ type RemoveNever<T> = {
1212
+ [K in keyof T as T[K] extends never ? never : K]: T[K] extends object
1213
+ ? RemoveNever<T[K]>
1214
+ : T[K];
1215
+ };
1216
+
1217
+ type RemoveNeverFlat<T> = {
1218
+ [K in keyof T as T[K] extends never ? never : K]: T[K];
1219
+ };
1220
+
1221
+ type UuidColumnSymbol = {
1222
+ [' isUuid']: true;
1223
+ };
1224
+ type UuidColumnType<M> = {
1225
+ equal(value: string | null | undefined): Filter;
1226
+ eq(value: string | null | undefined): Filter;
1227
+ notEqual(value: string | null | undefined): Filter;
1228
+ ne(value: string | null | undefined): Filter;
1229
+ lessThan(value: string | null | undefined): Filter;
1230
+ lt(value: string | null | undefined): Filter;
1231
+ lessThanOrEqual(value: string | null | undefined): Filter;
1232
+ le(value: string | null | undefined): Filter;
1233
+ greaterThan(value: string | null | undefined): Filter;
1234
+ gt(value: string | null | undefined): Filter;
1235
+ greaterThanOrEqual(value: string | null | undefined): Filter;
1236
+ ge(value: string | null | undefined): Filter;
1237
+ between(from: string | null | undefined, to: string | null | undefined): Filter;
1238
+ in(values: Array<string | null | undefined>): Filter;
1239
+ } & M &
1240
+ UuidColumnSymbol;
1241
+
1242
+ type BinaryColumnSymbol = {
1243
+ [' isBinary']: true;
1244
+ };
1245
+ type BinaryColumnType<M> = {
1246
+ equal(value: string | null | undefined): Filter;
1247
+ eq(value: string | null | undefined): Filter;
1248
+ notEqual(value: string | null | undefined): Filter;
1249
+ ne(value: string | null | undefined): Filter;
1250
+ lessThan(value: string | null | undefined): Filter;
1251
+ lt(value: string | null | undefined): Filter;
1252
+ lessThanOrEqual(value: string | null | undefined): Filter;
1253
+ le(value: string | null | undefined): Filter;
1254
+ greaterThan(value: string | null | undefined): Filter;
1255
+ gt(value: string | null | undefined): Filter;
1256
+ greaterThanOrEqual(value: string | null | undefined): Filter;
1257
+ ge(value: string | null | undefined): Filter;
1258
+ between(from: string | null | undefined, to: string | null | undefined): Filter;
1259
+ in(values: Array<string | null | undefined>): Filter;
1260
+ } & M &
1261
+ BinaryColumnSymbol;
1262
+
1263
+ type BooleanColumnSymbol = {
1264
+ [' isBoolean']: true;
1265
+ };
1266
+
1267
+ type BooleanColumnType<M> = {
1268
+ equal(value: boolean | null | undefined): Filter;
1269
+ eq(value: boolean | null | undefined): Filter;
1270
+ notEqual(value: boolean | null | undefined): Filter;
1271
+ ne(value: boolean | null | undefined): Filter;
1272
+ lessThan(value: boolean | null | undefined): Filter;
1273
+ lt(value: boolean | null | undefined): Filter;
1274
+ lessThanOrEqual(value: boolean | null | undefined): Filter;
1275
+ le(value: boolean | null | undefined): Filter;
1276
+ greaterThan(value: boolean | null | undefined): Filter;
1277
+ gt(value: boolean | null | undefined): Filter;
1278
+ greaterThanOrEqual(value: boolean | null | undefined): Filter;
1279
+ ge(value: boolean | null | undefined): Filter;
1280
+ between(from: boolean | null | undefined, to: boolean | null | undefined): Filter;
1281
+ in(values: Array<boolean | null | undefined>): Filter;
1282
+ } & M &
1283
+ BooleanColumnSymbol;
1284
+
1285
+ type DateColumnSymbol = {
1286
+ [' isDate']: true;
1287
+ };
1288
+
1289
+ type DateColumnType<M> = {
1290
+ equal(value: string | Date | null | undefined): Filter;
1291
+ eq(value: string | Date | null | undefined): Filter;
1292
+ notEqual(value: string | Date | null | undefined): Filter;
1293
+ ne(value: string | Date | null | undefined): Filter;
1294
+ lessThan(value: string | Date | null | undefined): Filter;
1295
+ lt(value: string | Date | null | undefined): Filter;
1296
+ lessThanOrEqual(value: string | Date | null | undefined): Filter;
1297
+ le(value: string | Date | null | undefined): Filter;
1298
+ greaterThan(value: string | Date | null | undefined): Filter;
1299
+ gt(value: string | Date | null | undefined): Filter;
1300
+ greaterThanOrEqual(value: string | Date | null | undefined): Filter;
1301
+ ge(value: string | Date | null | undefined): Filter;
1302
+ between(from: string | Date, to: string | Date | null | undefined): Filter;
1303
+ in(values: Array<string | Date | null | undefined>): Filter;
1304
+ } & M &
1305
+ DateColumnSymbol;
1306
+
1307
+ type DateWithTimeZoneColumnSymbol = {
1308
+ [' isDateTimeZone']: true;
1309
+ };
1310
+
1311
+ type DateWithTimeZoneColumnType<M> = {
1312
+ equal(value: string | Date | null | undefined): Filter;
1313
+ eq(value: string | Date | null | undefined): Filter;
1314
+ notEqual(value: string | Date | null | undefined): Filter;
1315
+ ne(value: string | Date | null | undefined): Filter;
1316
+ lessThan(value: string | Date | null | undefined): Filter;
1317
+ lt(value: string | Date | null | undefined): Filter;
1318
+ lessThanOrEqual(value: string | Date | null | undefined): Filter;
1319
+ le(value: string | Date | null | undefined): Filter;
1320
+ greaterThan(value: string | Date | null | undefined): Filter;
1321
+ gt(value: string | Date | null | undefined): Filter;
1322
+ greaterThanOrEqual(value: string | Date | null | undefined): Filter;
1323
+ ge(value: string | Date | null | undefined): Filter;
1324
+ between(from: string | Date, to: string | Date | null | undefined): Filter;
1325
+ in(values: Array<string | Date | null | undefined>): Filter;
1326
+ } & M &
1327
+ DateWithTimeZoneColumnSymbol;
1328
+
1329
+ type StringColumnSymbol = {
1330
+ [' isString']: true;
1331
+ };
1332
+
1333
+ type StringColumnType<M> = {
1334
+ equal(value: string | null | undefined): Filter;
1335
+ eq(value: string | null | undefined): Filter;
1336
+ notEqual(value: string | null | undefined): Filter;
1337
+ ne(value: string | null | undefined): Filter;
1338
+ lessThan(value: string | null | undefined): Filter;
1339
+ lt(value: string | null | undefined): Filter;
1340
+ lessThanOrEqual(value: string | null | undefined): Filter;
1341
+ le(value: string | null | undefined): Filter;
1342
+ greaterThan(value: string | null | undefined): Filter;
1343
+ gt(value: string | null | undefined): Filter;
1344
+ greaterThanOrEqual(value: string | null | undefined): Filter;
1345
+ ge(value: string | null | undefined): Filter;
1346
+ between(from: string | null | undefined, to: string | null | undefined): Filter;
1347
+ in(values: Array<string | null | undefined>): Filter;
1348
+
1349
+ startsWith(value: string | null | undefined): Filter;
1350
+ endsWith(value: string | null | undefined): Filter;
1351
+ contains(value: string | null | undefined): Filter;
1352
+ iStartsWith(value: string | null | undefined): Filter;
1353
+ iEndsWith(value: string | null | undefined): Filter;
1354
+ iContains(value: string | null | undefined): Filter;
1355
+ iEqual(value: string | null | undefined): Filter;
1356
+ ieq(value: string | null | undefined): Filter;
1357
+ } & M &
1358
+ StringColumnSymbol;
1359
+
1360
+ type NumericColumnSymbol = {
1361
+ [' isNumeric']: true;
1362
+ };
1363
+ type NumericColumnType<M> = {
1364
+ equal(value: number | null | undefined): Filter;
1365
+ eq(value: number | null | undefined): Filter;
1366
+ notEqual(value: number | null | undefined): Filter;
1367
+ ne(value: number | null | undefined): Filter;
1368
+ lessThan(value: number | null | undefined): Filter;
1369
+ lt(value: number | null | undefined): Filter;
1370
+ lessThanOrEqual(value: number | null | undefined): Filter;
1371
+ le(value: number | null | undefined): Filter;
1372
+ greaterThan(value: number | null | undefined): Filter;
1373
+ gt(value: number | null | undefined): Filter;
1374
+ greaterThanOrEqual(value: number | null | undefined): Filter;
1375
+ ge(value: number | null | undefined): Filter;
1376
+ between(from: number, to: number | null | undefined): Filter;
1377
+ in(values: Array<number | null | undefined>): Filter;
1378
+ } & M &
1379
+ NumericColumnSymbol;
1380
+
1381
+ type JSONColumnSymbol = {
1382
+ [' isJSON']: true;
1383
+ };
1384
+
1385
+ type JSONColumnType<M> = {
1386
+ equal(value: ToJsonType<M> | null | undefined): Filter;
1387
+ eq(value: ToJsonType<M> | null | undefined): Filter;
1388
+ notEqual(value: ToJsonType<M> | null | undefined): Filter;
1389
+ ne(value: ToJsonType<M> | null | undefined): Filter;
1390
+ lessThan(value: ToJsonType<M> | null | undefined): Filter;
1391
+ lt(value: ToJsonType<M> | null | undefined): Filter;
1392
+ lessThanOrEqual(value: ToJsonType<M> | null | undefined): Filter;
1393
+ le(value: ToJsonType<M> | null | undefined): Filter;
1394
+ greaterThan(value: ToJsonType<M> | null | undefined): Filter;
1395
+ gt(value: ToJsonType<M> | null | undefined): Filter;
1396
+ greaterThanOrEqual(value: ToJsonType<M> | null | undefined): Filter;
1397
+ ge(value: ToJsonType<M> | null | undefined): Filter;
1398
+ between(from: ToJsonType<M>, to: ToJsonType<M> | null | undefined): Filter;
1399
+ in(values: Array<ToJsonType<M> | null | undefined>): Filter;
1400
+ } & M &
1401
+ JSONColumnSymbol;
1402
+
1403
+ interface IsPrimary {
1404
+ [' isPrimary']: boolean;
1405
+ }
1406
+
1407
+ type NotNull = {
1408
+ [' notNull']: boolean;
1409
+ };
1410
+
1411
+ type NotNullExceptInsert = {
1412
+ [' notNullExceptInsert']: boolean;
1413
+ };
1414
+
1415
+ type JsonOf<T> = {
1416
+ [' isjsonOf']: boolean;
1417
+ type: T;
1418
+ };
1419
+
1420
+ interface ColumnType<M> {
1421
+ string(): StringColumnTypeDef<M & StringColumnSymbol>;
1422
+ uuid(): UuidColumnTypeDef<M & UuidColumnSymbol>;
1423
+ numeric(): NumericColumnTypeDef<M & NumericColumnSymbol>;
1424
+ date(): DateColumnTypeDef<M & DateColumnSymbol>;
1425
+ dateWithTimeZone(): DateWithTimeZoneColumnTypeDef<M & DateWithTimeZoneColumnSymbol>;
1426
+ binary(): BinaryColumnTypeDef<M & BinaryColumnSymbol>;
1427
+ boolean(): BooleanColumnTypeDef<M & BooleanColumnSymbol>;
1428
+ json(): JSONColumnTypeDef<M & JSONColumnSymbol>;
1429
+ jsonOf<T>(): JSONColumnTypeDef<M & JSONColumnSymbol & JsonOf<T>>;
1430
+ jsonOf<T>(helper: T): JSONColumnTypeDef<M & JSONColumnSymbol & JsonOf<T>>;
1431
+ }
1432
+
1433
+ type UuidValidator<M> = M extends NotNull
1434
+ ? {
1435
+ validate(validator: (value: string) => void): UuidColumnTypeDef<M>;
1436
+ }
1437
+ : {
1438
+ validate(
1439
+ validator: (value?: string | null) => void
1440
+ ): UuidColumnTypeDef<M>;
1441
+ };
1442
+ type StringValidator<M> = M extends NotNull
1443
+ ? {
1444
+ validate(validator: (value: string) => void): StringColumnTypeDef<M>;
1445
+ }
1446
+ : {
1447
+ validate(
1448
+ validator: (value?: string | null) => void
1449
+ ): StringColumnTypeDef<M>;
1450
+ };
1451
+ type NumericValidator<M> = M extends NotNull
1452
+ ? {
1453
+ validate(validator: (value: number) => void): NumericColumnTypeDef<M>;
1454
+ }
1455
+ : {
1456
+ validate(
1457
+ validator: (value?: number | null) => void
1458
+ ): NumericColumnTypeDef<M>;
1459
+ };
1460
+ type BinaryValidator<M> = M extends NotNull
1461
+ ? {
1462
+ validate(validator: (value: string) => void): BinaryColumnTypeDef<M>;
1463
+ }
1464
+ : {
1465
+ validate(
1466
+ validator: (value?: string | null) => void
1467
+ ): BinaryColumnTypeDef<M>;
1468
+ };
1469
+ type BooleanValidator<M> = M extends NotNull
1470
+ ? {
1471
+ validate(validator: (value: boolean) => void): BooleanColumnTypeDef<M>;
1472
+ }
1473
+ : {
1474
+ validate(
1475
+ validator: (value?: boolean | null) => void
1476
+ ): BooleanColumnTypeDef<M>;
1477
+ };
1478
+ type JSONValidator<M> = M extends NotNull
1479
+ ? {
1480
+ validate(
1481
+ validator: (value: ToJsonType<M>) => void
1482
+ ): JSONColumnTypeDef<M>;
1483
+ }
1484
+ : {
1485
+ validate(
1486
+ validator: (value?: ToJsonType<M> | null) => void
1487
+ ): JSONColumnTypeDef<M>;
1488
+ };
1489
+ type DateValidator<M> = M extends NotNull
1490
+ ? {
1491
+ validate(
1492
+ validator: (value: string | Date) => void
1493
+ ): DateColumnTypeDef<M>;
1494
+ }
1495
+ : {
1496
+ validate(
1497
+ validator: (value?: string | Date | null) => void
1498
+ ): DateColumnTypeDef<M>;
1499
+ };
1500
+
1501
+ type DateWithTimeZoneValidator<M> = M extends NotNull
1502
+ ? {
1503
+ validate(
1504
+ validator: (value: string | Date) => void
1505
+ ): DateWithTimeZoneColumnTypeDef<M>;
1506
+ }
1507
+ : {
1508
+ validate(
1509
+ validator: (value?: string | Date | null) => void
1510
+ ): DateWithTimeZoneColumnTypeDef<M>;
1511
+ };
1512
+
1513
+ type StringColumnTypeDef<M> = StringValidator<M> & {
1514
+ primary(): StringColumnTypeDef<M & IsPrimary> & IsPrimary;
1515
+ notNull(): StringColumnTypeDef<M & NotNull> & NotNull;
1516
+ notNullExceptInsert(): StringColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1517
+ serializable(value: boolean): StringColumnTypeDef<M>;
1518
+ JSONSchema(schema: object, options?: Options): StringColumnTypeDef<M>;
1519
+ default(value: string | null | undefined | (() => string | null | undefined)): StringColumnTypeDef<M>;
1520
+ dbNull(value: string): StringColumnTypeDef<M>;
1521
+ } & ColumnTypeOf<StringColumnType<M>> &
1522
+ M;
1523
+
1524
+ type NumericColumnTypeDef<M> = NumericValidator<M> & {
1525
+ primary(): NumericColumnTypeDef<M & IsPrimary> & IsPrimary;
1526
+ notNull(): NumericColumnTypeDef<M & NotNull> & NotNull;
1527
+ notNullExceptInsert(): NumericColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1528
+ serializable(value: boolean): NumericColumnTypeDef<M>;
1529
+ JSONSchema(schema: object, options?: Options): NumericColumnTypeDef<M>;
1530
+ default(value: number | null | undefined | (() => string | null | undefined)): NumericColumnTypeDef<M>;
1531
+ dbNull(value: number): NumericColumnTypeDef<M>;
1532
+ } & ColumnTypeOf<NumericColumnType<M>> &
1533
+ M;
1534
+
1535
+ type UuidColumnTypeDef<M> = UuidValidator<M> & {
1536
+ primary(): UuidColumnTypeDef<M & IsPrimary> & IsPrimary;
1537
+ notNull(): UuidColumnTypeDef<M & NotNull> & NotNull;
1538
+ notNullExceptInsert(): UuidColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1539
+ serializable(value: boolean): UuidColumnTypeDef<M>;
1540
+ JSONSchema(schema: object, options?: Options): UuidColumnTypeDef<M>;
1541
+ default(value: string | null | undefined | (() => string | null | undefined)): UuidColumnTypeDef<M>;
1542
+ dbNull(value: string): UuidColumnTypeDef<M>;
1543
+ } & ColumnTypeOf<UuidColumnType<M>> &
1544
+ M;
1545
+
1546
+ type JSONColumnTypeDef<M> = JSONValidator<M> & {
1547
+ primary(): JSONColumnTypeDef<M & IsPrimary> & IsPrimary;
1548
+ notNull(): JSONColumnTypeDef<M & NotNull> & NotNull;
1549
+ notNullExceptInsert(): JSONColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1550
+ serializable(value: boolean): JSONColumnTypeDef<M>;
1551
+ JSONSchema(schema: object, options?: Options): JSONColumnTypeDef<M>;
1552
+ default(value: ToJsonType<M> | null | undefined | (() => string | null | undefined)): JSONColumnTypeDef<M>;
1553
+ dbNull(value: ToJsonType<M>): JSONColumnTypeDef<M>;
1554
+ } & ColumnTypeOf<JSONColumnType<M>> &
1555
+ M;
1556
+
1557
+ type BinaryColumnTypeDef<M> = BinaryValidator<M> & {
1558
+ primary(): BinaryColumnTypeDef<M & IsPrimary> & IsPrimary;
1559
+ notNull(): BinaryColumnTypeDef<M & NotNull> & NotNull;
1560
+ notNullExceptInsert(): BinaryColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1561
+ serializable(value: boolean): BinaryColumnTypeDef<M>;
1562
+ JSONSchema(schema: object, options?: Options): BinaryColumnTypeDef<M>;
1563
+ default(value: string | null | undefined | (() => string | null | undefined)): BinaryColumnTypeDef<M>;
1564
+ dbNull(value: string): BinaryColumnTypeDef<M>;
1565
+ } & ColumnTypeOf<BinaryColumnType<M>> &
1566
+ M;
1567
+
1568
+ type BooleanColumnTypeDef<M> = BooleanValidator<M> & {
1569
+ primary(): BooleanColumnTypeDef<M & IsPrimary> & IsPrimary;
1570
+ notNull(): BooleanColumnTypeDef<M & NotNull> & NotNull;
1571
+ notNullExceptInsert(): BooleanColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1572
+ serializable(value: boolean): BooleanColumnTypeDef<M>;
1573
+ JSONSchema(schema: object, options?: Options): BooleanColumnTypeDef<M>;
1574
+ default(value: boolean | null | undefined | (() => string | null | undefined)): BooleanColumnTypeDef<M>;
1575
+ dbNull(value: boolean): BooleanColumnTypeDef<M>;
1576
+ } & ColumnTypeOf<BooleanColumnType<M>> &
1577
+ M;
1578
+
1579
+ type DateColumnTypeDef<M> = DateValidator<M> & {
1580
+ primary(): DateColumnTypeDef<M & IsPrimary> & IsPrimary;
1581
+ notNull(): DateColumnTypeDef<M & NotNull> & NotNull;
1582
+ notNullExceptInsert(): DateColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1583
+ serializable(value: boolean): DateColumnTypeDef<M>;
1584
+ JSONSchema(schema: object, options?: Options): DateColumnTypeDef<M>;
1585
+ default(value: string | Date | null | undefined | (() => string | Date | null | undefined)): DateColumnTypeDef<M>;
1586
+ dbNull(value: String | Date): DateColumnTypeDef<M>;
1587
+ } & ColumnTypeOf<DateColumnType<M>> &
1588
+ M;
1589
+
1590
+ type DateWithTimeZoneColumnTypeDef<M> = DateValidator<M> & {
1591
+ primary(): DateWithTimeZoneColumnTypeDef<M & IsPrimary> & IsPrimary;
1592
+ notNull(): DateWithTimeZoneColumnTypeDef<M & NotNull> & NotNull;
1593
+ notNullExceptInsert(): DateWithTimeZoneColumnTypeDef<M & NotNull & NotNullExceptInsert> & NotNull & NotNullExceptInsert;
1594
+ serializable(value: boolean): DateWithTimeZoneColumnTypeDef<M>;
1595
+ JSONSchema(schema: object, options?: Options): DateWithTimeZoneColumnTypeDef<M>;
1596
+ default(value: string | Date | null | undefined | (() => string | Date | null | undefined)): DateWithTimeZoneColumnTypeDef<M>;
1597
+ dbNull(value: String | Date): DateWithTimeZoneColumnTypeDef<M>;
1598
+ } & ColumnTypeOf<DateWithTimeZoneColumnType<M>> &
1599
+ M;
1600
+
1601
+ interface ColumnTypeOf<T> {
1602
+ [' type']: T;
1603
+ }
1604
+
1605
+ type MapPropertiesTo1<T, V extends number = 1> = { [K in keyof T]: V };
1606
+ type MapPropertiesTo2<T, V extends number = 2> = {
1607
+ [K in keyof T]: UnionOfTypes<MapPropertiesTo1<Omit<T, K>, V>>;
1608
+ };
1609
+ type MapPropertiesTo3<T, V extends number = 3> = {
1610
+ [K in keyof T]: UnionOfTypes<MapPropertiesTo2<Omit<T, K>, V>>;
1611
+ };
1612
+ type MapPropertiesTo4<T, V extends number = 4> = {
1613
+ [K in keyof T]: UnionOfTypes<MapPropertiesTo3<Omit<T, K>, V>>;
1614
+ };
1615
+ type MapPropertiesTo5<T, V extends number = 5> = {
1616
+ [K in keyof T]: UnionOfTypes<MapPropertiesTo4<Omit<T, K>, V>>;
1617
+ };
1618
+ type MapPropertiesTo6<T, V extends number = 6> = {
1619
+ [K in keyof T]: UnionOfTypes<MapPropertiesTo5<Omit<T, K>, V>>;
1620
+ };
1621
+ type UnionOfTypes<T> = T[keyof T];
1622
+
1623
+ interface RawFilter {
1624
+ sql: string | (() => string);
1625
+ parameters?: any[];
1626
+ }
1627
+
1628
+ interface Filter extends RawFilter {
1629
+ and(filter: RawFilter | RawFilter[], ...filters: RawFilter[]): Filter;
1630
+ or(filter: RawFilter | RawFilter[], ...filters: RawFilter[]): Filter;
1631
+ not(): Filter;
1632
+ }
1633
+
1634
+ type UnionToIntersection<U> = (
1635
+ U extends any ? (k: U) => void : never
1636
+ ) extends (k: infer I) => void
1637
+ ? I
1638
+ : never;
1639
+
1640
+ type PopFront<T extends any[]> = ((...t: T) => void) extends (
1641
+ _: any,
1642
+ ...rest: infer R
1643
+ ) => void
1644
+ ? R
1645
+ : never;
1646
+
1647
+ type TupleToUnion<T extends any[]> = T extends (infer First)[]
1648
+ ? First
1649
+ : T extends []
1650
+ ? never
1651
+ : T extends [infer First, ...infer Rest]
1652
+ ? First | TupleToUnion<Rest>
1653
+ : never;
1654
+
1655
+ type First<T extends any[]> = T extends [infer Target, ...any[]]
1656
+ ? Target
1657
+ : never;
1658
+
1659
+ type UnionToTuple<T> = UnionToIntersection<
1660
+ T extends any ? (t: T) => void : never
1661
+ > extends (t: infer T1) => void
1662
+ ? [...UnionToTuple<Exclude<T, T1>>, T1]
1663
+ : [];
1664
+
1665
+ type FirstOfUnion<T> = First<UnionToTuple<T>>;
1666
+
1667
+ type ToKeyObjects<T> = {
1668
+ [K in keyof T]: { name: K; value: T[K] };
1669
+ }[keyof T];
1670
+
1671
+ type ToKeys<T> = {
1672
+ [K in keyof T]: K;
1673
+ }[keyof T];
1674
+
1675
+ type GetKeys<T> = {
1676
+ [K in keyof T]: T[K];
1677
+ }[keyof T];
1678
+
1679
+ type ToUnionTuple<T> = UnionToTuple<ToKeyObjects<T>>;
1680
+ type PropertyToTuple<T> = FirstOfUnion<ToKeyObjects<T>>;
1681
+
1682
+ type PickProperty<T> = PropertyToTuple<T>;
1683
+ type PickProperty2<T> = FirstOfUnion<TupleToUnion<PopFront<ToUnionTuple<T>>>>;
1684
+ type PickProperty3<T> = FirstOfUnion<
1685
+ TupleToUnion<PopFront<PopFront<ToUnionTuple<T>>>>
1686
+ >;
1687
+ type PickProperty4<T> = FirstOfUnion<
1688
+ TupleToUnion<PopFront<PopFront<PopFront<ToUnionTuple<T>>>>>
1689
+ >;
1690
+ type PickProperty5<T> = FirstOfUnion<
1691
+ TupleToUnion<PopFront<PopFront<PopFront<PopFront<ToUnionTuple<T>>>>>>
1692
+ >;
1693
+ type PickProperty6<T> = FirstOfUnion<
1694
+ TupleToUnion<
1695
+ PopFront<PopFront<PopFront<PopFront<PopFront<ToUnionTuple<T>>>>>>
1696
+ >
1697
+ >;
1698
+
1699
+ type PickPropertyName1<T> = GetKeys<Omit<PickProperty<T>, 'value'>>;
1700
+ type PickPropertyName2<T> = GetKeys<Omit<PickProperty2<T>, 'value'>>;
1701
+ type PickPropertyName3<T> = GetKeys<Omit<PickProperty3<T>, 'value'>>;
1702
+ type PickPropertyName4<T> = GetKeys<Omit<PickProperty4<T>, 'value'>>;
1703
+ type PickPropertyName5<T> = GetKeys<Omit<PickProperty5<T>, 'value'>>;
1704
+ type PickPropertyName6<T> = GetKeys<Omit<PickProperty6<T>, 'value'>>;
1705
+
1706
+ type PickPropertyValue1<T> = GetKeys<Omit<PickProperty<T>, 'name'>>;
1707
+ type PickPropertyValue2<T> = GetKeys<Omit<PickProperty2<T>, 'name'>>;
1708
+ type PickPropertyValue3<T> = GetKeys<Omit<PickProperty3<T>, 'name'>>;
1709
+ type PickPropertyValue4<T> = GetKeys<Omit<PickProperty4<T>, 'name'>>;
1710
+ type PickPropertyValue5<T> = GetKeys<Omit<PickProperty5<T>, 'name'>>;
1711
+ type PickPropertyValue6<T> = GetKeys<Omit<PickProperty6<T>, 'name'>>;
1712
+
1713
+ type CountProperties<T> = CountPropertiesHelper<UnionToTuple<ToKeys<T>>>;
1714
+ type CountPropertiesHelper<
1715
+ T extends any[],
1716
+ C extends number = 0
1717
+ > = T extends [] ? C : CountPropertiesHelper<PopFront<T>, Increment<C>>;
1718
+
1719
+ type Increment<C extends number> = C extends 0
1720
+ ? 1
1721
+ : C extends 1
1722
+ ? 2
1723
+ : C extends 2
1724
+ ? 3
1725
+ : C extends 3
1726
+ ? 4
1727
+ : C extends 4
1728
+ ? 5
1729
+ : 0;