velocious 1.0.107 → 1.0.109

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 (950) hide show
  1. package/README.md +5 -5
  2. package/dist/bin/velocious.d.ts +3 -0
  3. package/dist/bin/velocious.d.ts.map +1 -0
  4. package/dist/bin/velocious.js +27 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +1 -0
  8. package/dist/src/application.d.ts +67 -0
  9. package/dist/src/application.d.ts.map +1 -0
  10. package/dist/src/application.js +101 -0
  11. package/dist/src/cli/base-command.d.ts +32 -0
  12. package/dist/src/cli/base-command.d.ts.map +1 -0
  13. package/dist/src/cli/base-command.js +34 -0
  14. package/dist/src/cli/browser-cli.d.ts +22 -0
  15. package/dist/src/cli/browser-cli.d.ts.map +1 -0
  16. package/dist/src/cli/browser-cli.js +32 -0
  17. package/dist/src/cli/commands/db/create.d.ts +9 -0
  18. package/dist/src/cli/commands/db/create.d.ts.map +1 -0
  19. package/dist/src/cli/commands/db/create.js +62 -0
  20. package/dist/src/cli/commands/db/drop.d.ts +5 -0
  21. package/dist/src/cli/commands/db/drop.d.ts.map +1 -0
  22. package/dist/src/cli/commands/db/drop.js +14 -0
  23. package/dist/src/cli/commands/db/migrate.d.ts +5 -0
  24. package/dist/src/cli/commands/db/migrate.d.ts.map +1 -0
  25. package/dist/src/cli/commands/db/migrate.js +14 -0
  26. package/dist/src/cli/commands/db/reset.d.ts +5 -0
  27. package/dist/src/cli/commands/db/reset.d.ts.map +1 -0
  28. package/dist/src/cli/commands/db/reset.js +18 -0
  29. package/dist/src/cli/commands/db/rollback.d.ts +5 -0
  30. package/dist/src/cli/commands/db/rollback.d.ts.map +1 -0
  31. package/dist/src/cli/commands/db/rollback.js +13 -0
  32. package/dist/src/cli/commands/destroy/migration.d.ts +5 -0
  33. package/dist/src/cli/commands/destroy/migration.d.ts.map +1 -0
  34. package/dist/src/cli/commands/destroy/migration.js +6 -0
  35. package/dist/src/cli/commands/generate/base-models.d.ts +5 -0
  36. package/dist/src/cli/commands/generate/base-models.d.ts.map +1 -0
  37. package/dist/src/cli/commands/generate/base-models.js +6 -0
  38. package/dist/src/cli/commands/generate/migration.d.ts +5 -0
  39. package/dist/src/cli/commands/generate/migration.d.ts.map +1 -0
  40. package/dist/src/cli/commands/generate/migration.js +6 -0
  41. package/dist/src/cli/commands/generate/model.d.ts +5 -0
  42. package/dist/src/cli/commands/generate/model.d.ts.map +1 -0
  43. package/dist/src/cli/commands/generate/model.js +6 -0
  44. package/dist/src/cli/commands/init.d.ts +6 -0
  45. package/dist/src/cli/commands/init.d.ts.map +1 -0
  46. package/dist/src/cli/commands/init.js +8 -0
  47. package/dist/src/cli/commands/server.d.ts +5 -0
  48. package/dist/src/cli/commands/server.d.ts.map +1 -0
  49. package/dist/src/cli/commands/server.js +6 -0
  50. package/dist/src/cli/commands/test.d.ts +5 -0
  51. package/dist/src/cli/commands/test.d.ts.map +1 -0
  52. package/dist/src/cli/commands/test.js +6 -0
  53. package/dist/src/cli/index.d.ts +12 -0
  54. package/dist/src/cli/index.d.ts.map +1 -0
  55. package/dist/src/cli/index.js +34 -0
  56. package/dist/src/cli/use-browser-cli.d.ts +10 -0
  57. package/dist/src/cli/use-browser-cli.d.ts.map +1 -0
  58. package/dist/src/cli/use-browser-cli.js +21 -0
  59. package/dist/src/configuration-resolver.d.ts +7 -0
  60. package/dist/src/configuration-resolver.d.ts.map +1 -0
  61. package/dist/src/configuration-resolver.js +55 -0
  62. package/dist/src/configuration-types.d.ts +112 -0
  63. package/dist/src/configuration-types.d.ts.map +1 -0
  64. package/dist/src/configuration-types.js +54 -0
  65. package/dist/src/configuration.d.ts +193 -0
  66. package/dist/src/configuration.d.ts.map +1 -0
  67. package/dist/src/configuration.js +335 -0
  68. package/dist/src/controller.d.ts +73 -0
  69. package/dist/src/controller.d.ts.map +1 -0
  70. package/dist/src/controller.js +141 -0
  71. package/dist/src/database/drivers/base-column.d.ts +72 -0
  72. package/dist/src/database/drivers/base-column.d.ts.map +1 -0
  73. package/dist/src/database/drivers/base-column.js +120 -0
  74. package/dist/src/database/drivers/base-columns-index.d.ts +44 -0
  75. package/dist/src/database/drivers/base-columns-index.d.ts.map +1 -0
  76. package/dist/src/database/drivers/base-columns-index.js +62 -0
  77. package/dist/src/database/drivers/base-foreign-key.d.ts +52 -0
  78. package/dist/src/database/drivers/base-foreign-key.d.ts.map +1 -0
  79. package/dist/src/database/drivers/base-foreign-key.js +79 -0
  80. package/dist/src/database/drivers/base-table.d.ts +54 -0
  81. package/dist/src/database/drivers/base-table.d.ts.map +1 -0
  82. package/dist/src/database/drivers/base-table.js +106 -0
  83. package/dist/src/database/drivers/base.d.ts +365 -0
  84. package/dist/src/database/drivers/base.d.ts.map +1 -0
  85. package/dist/src/database/drivers/base.js +654 -0
  86. package/dist/src/database/drivers/mssql/column.d.ts +13 -0
  87. package/dist/src/database/drivers/mssql/column.d.ts.map +1 -0
  88. package/dist/src/database/drivers/mssql/column.js +61 -0
  89. package/dist/src/database/drivers/mssql/columns-index.d.ts +4 -0
  90. package/dist/src/database/drivers/mssql/columns-index.d.ts.map +1 -0
  91. package/dist/src/database/drivers/mssql/columns-index.js +4 -0
  92. package/dist/src/database/drivers/mssql/connect-connection.d.ts +2 -0
  93. package/dist/src/database/drivers/mssql/connect-connection.d.ts.map +1 -0
  94. package/dist/src/database/drivers/mssql/connect-connection.js +13 -0
  95. package/dist/src/database/drivers/mssql/foreign-key.d.ts +9 -0
  96. package/dist/src/database/drivers/mssql/foreign-key.d.ts.map +1 -0
  97. package/dist/src/database/drivers/mssql/foreign-key.js +10 -0
  98. package/dist/src/database/drivers/mssql/index.d.ts +33 -0
  99. package/dist/src/database/drivers/mssql/index.d.ts.map +1 -0
  100. package/dist/src/database/drivers/mssql/index.js +304 -0
  101. package/dist/src/database/drivers/mssql/options.d.ts +11 -0
  102. package/dist/src/database/drivers/mssql/options.d.ts.map +1 -0
  103. package/dist/src/database/drivers/mssql/options.js +65 -0
  104. package/dist/src/database/drivers/mssql/query-parser.d.ts +4 -0
  105. package/dist/src/database/drivers/mssql/query-parser.d.ts.map +1 -0
  106. package/dist/src/database/drivers/mssql/query-parser.js +4 -0
  107. package/dist/src/database/drivers/mssql/sql/alter-table.d.ts +4 -0
  108. package/dist/src/database/drivers/mssql/sql/alter-table.d.ts.map +1 -0
  109. package/dist/src/database/drivers/mssql/sql/alter-table.js +3 -0
  110. package/dist/src/database/drivers/mssql/sql/create-database.d.ts +4 -0
  111. package/dist/src/database/drivers/mssql/sql/create-database.d.ts.map +1 -0
  112. package/dist/src/database/drivers/mssql/sql/create-database.js +27 -0
  113. package/dist/src/database/drivers/mssql/sql/create-index.d.ts +4 -0
  114. package/dist/src/database/drivers/mssql/sql/create-index.d.ts.map +1 -0
  115. package/dist/src/database/drivers/mssql/sql/create-index.js +3 -0
  116. package/dist/src/database/drivers/mssql/sql/create-table.d.ts +4 -0
  117. package/dist/src/database/drivers/mssql/sql/create-table.d.ts.map +1 -0
  118. package/dist/src/database/drivers/mssql/sql/create-table.js +3 -0
  119. package/dist/src/database/drivers/mssql/sql/delete.d.ts +5 -0
  120. package/dist/src/database/drivers/mssql/sql/delete.d.ts.map +1 -0
  121. package/dist/src/database/drivers/mssql/sql/delete.js +16 -0
  122. package/dist/src/database/drivers/mssql/sql/drop-table.d.ts +4 -0
  123. package/dist/src/database/drivers/mssql/sql/drop-table.d.ts.map +1 -0
  124. package/dist/src/database/drivers/mssql/sql/drop-table.js +3 -0
  125. package/dist/src/database/drivers/mssql/sql/insert.d.ts +4 -0
  126. package/dist/src/database/drivers/mssql/sql/insert.d.ts.map +1 -0
  127. package/dist/src/database/drivers/mssql/sql/insert.js +3 -0
  128. package/dist/src/database/drivers/mssql/sql/update.d.ts +5 -0
  129. package/dist/src/database/drivers/mssql/sql/update.d.ts.map +1 -0
  130. package/dist/src/database/drivers/mssql/sql/update.js +26 -0
  131. package/dist/src/database/drivers/mssql/table.d.ts +15 -0
  132. package/dist/src/database/drivers/mssql/table.d.ts.map +1 -0
  133. package/dist/src/database/drivers/mssql/table.js +116 -0
  134. package/dist/src/database/drivers/mysql/column.d.ts +13 -0
  135. package/dist/src/database/drivers/mysql/column.d.ts.map +1 -0
  136. package/dist/src/database/drivers/mysql/column.js +87 -0
  137. package/dist/src/database/drivers/mysql/columns-index.d.ts +4 -0
  138. package/dist/src/database/drivers/mysql/columns-index.d.ts.map +1 -0
  139. package/dist/src/database/drivers/mysql/columns-index.js +4 -0
  140. package/dist/src/database/drivers/mysql/foreign-key.d.ts +9 -0
  141. package/dist/src/database/drivers/mysql/foreign-key.d.ts.map +1 -0
  142. package/dist/src/database/drivers/mysql/foreign-key.js +10 -0
  143. package/dist/src/database/drivers/mysql/index.d.ts +30 -0
  144. package/dist/src/database/drivers/mysql/index.d.ts.map +1 -0
  145. package/dist/src/database/drivers/mysql/index.js +234 -0
  146. package/dist/src/database/drivers/mysql/options.d.ts +11 -0
  147. package/dist/src/database/drivers/mysql/options.d.ts.map +1 -0
  148. package/dist/src/database/drivers/mysql/options.js +27 -0
  149. package/dist/src/database/drivers/mysql/query-parser.d.ts +4 -0
  150. package/dist/src/database/drivers/mysql/query-parser.d.ts.map +1 -0
  151. package/dist/src/database/drivers/mysql/query-parser.js +4 -0
  152. package/dist/src/database/drivers/mysql/query.d.ts +6 -0
  153. package/dist/src/database/drivers/mysql/query.d.ts.map +1 -0
  154. package/dist/src/database/drivers/mysql/query.js +27 -0
  155. package/dist/src/database/drivers/mysql/sql/alter-table.d.ts +4 -0
  156. package/dist/src/database/drivers/mysql/sql/alter-table.d.ts.map +1 -0
  157. package/dist/src/database/drivers/mysql/sql/alter-table.js +4 -0
  158. package/dist/src/database/drivers/mysql/sql/create-database.d.ts +4 -0
  159. package/dist/src/database/drivers/mysql/sql/create-database.d.ts.map +1 -0
  160. package/dist/src/database/drivers/mysql/sql/create-database.js +4 -0
  161. package/dist/src/database/drivers/mysql/sql/create-index.d.ts +4 -0
  162. package/dist/src/database/drivers/mysql/sql/create-index.d.ts.map +1 -0
  163. package/dist/src/database/drivers/mysql/sql/create-index.js +4 -0
  164. package/dist/src/database/drivers/mysql/sql/create-table.d.ts +4 -0
  165. package/dist/src/database/drivers/mysql/sql/create-table.d.ts.map +1 -0
  166. package/dist/src/database/drivers/mysql/sql/create-table.js +4 -0
  167. package/dist/src/database/drivers/mysql/sql/delete.d.ts +5 -0
  168. package/dist/src/database/drivers/mysql/sql/delete.d.ts.map +1 -0
  169. package/dist/src/database/drivers/mysql/sql/delete.js +17 -0
  170. package/dist/src/database/drivers/mysql/sql/drop-table.d.ts +4 -0
  171. package/dist/src/database/drivers/mysql/sql/drop-table.d.ts.map +1 -0
  172. package/dist/src/database/drivers/mysql/sql/drop-table.js +4 -0
  173. package/dist/src/database/drivers/mysql/sql/insert.d.ts +4 -0
  174. package/dist/src/database/drivers/mysql/sql/insert.d.ts.map +1 -0
  175. package/dist/src/database/drivers/mysql/sql/insert.js +4 -0
  176. package/dist/src/database/drivers/mysql/sql/update.d.ts +5 -0
  177. package/dist/src/database/drivers/mysql/sql/update.d.ts.map +1 -0
  178. package/dist/src/database/drivers/mysql/sql/update.js +27 -0
  179. package/dist/src/database/drivers/mysql/table.d.ts +15 -0
  180. package/dist/src/database/drivers/mysql/table.d.ts.map +1 -0
  181. package/dist/src/database/drivers/mysql/table.js +80 -0
  182. package/dist/src/database/drivers/pgsql/column.d.ts +13 -0
  183. package/dist/src/database/drivers/pgsql/column.d.ts.map +1 -0
  184. package/dist/src/database/drivers/pgsql/column.js +66 -0
  185. package/dist/src/database/drivers/pgsql/columns-index.d.ts +4 -0
  186. package/dist/src/database/drivers/pgsql/columns-index.d.ts.map +1 -0
  187. package/dist/src/database/drivers/pgsql/columns-index.js +4 -0
  188. package/dist/src/database/drivers/pgsql/foreign-key.d.ts +9 -0
  189. package/dist/src/database/drivers/pgsql/foreign-key.d.ts.map +1 -0
  190. package/dist/src/database/drivers/pgsql/foreign-key.js +10 -0
  191. package/dist/src/database/drivers/pgsql/index.d.ts +21 -0
  192. package/dist/src/database/drivers/pgsql/index.d.ts.map +1 -0
  193. package/dist/src/database/drivers/pgsql/index.js +211 -0
  194. package/dist/src/database/drivers/pgsql/options.d.ts +13 -0
  195. package/dist/src/database/drivers/pgsql/options.d.ts.map +1 -0
  196. package/dist/src/database/drivers/pgsql/options.js +26 -0
  197. package/dist/src/database/drivers/pgsql/query-parser.d.ts +4 -0
  198. package/dist/src/database/drivers/pgsql/query-parser.d.ts.map +1 -0
  199. package/dist/src/database/drivers/pgsql/query-parser.js +4 -0
  200. package/dist/src/database/drivers/pgsql/sql/alter-table.d.ts +4 -0
  201. package/dist/src/database/drivers/pgsql/sql/alter-table.d.ts.map +1 -0
  202. package/dist/src/database/drivers/pgsql/sql/alter-table.js +4 -0
  203. package/dist/src/database/drivers/pgsql/sql/create-database.d.ts +4 -0
  204. package/dist/src/database/drivers/pgsql/sql/create-database.d.ts.map +1 -0
  205. package/dist/src/database/drivers/pgsql/sql/create-database.js +33 -0
  206. package/dist/src/database/drivers/pgsql/sql/create-index.d.ts +4 -0
  207. package/dist/src/database/drivers/pgsql/sql/create-index.d.ts.map +1 -0
  208. package/dist/src/database/drivers/pgsql/sql/create-index.js +4 -0
  209. package/dist/src/database/drivers/pgsql/sql/create-table.d.ts +4 -0
  210. package/dist/src/database/drivers/pgsql/sql/create-table.d.ts.map +1 -0
  211. package/dist/src/database/drivers/pgsql/sql/create-table.js +4 -0
  212. package/dist/src/database/drivers/pgsql/sql/delete.d.ts +5 -0
  213. package/dist/src/database/drivers/pgsql/sql/delete.d.ts.map +1 -0
  214. package/dist/src/database/drivers/pgsql/sql/delete.js +17 -0
  215. package/dist/src/database/drivers/pgsql/sql/drop-table.d.ts +4 -0
  216. package/dist/src/database/drivers/pgsql/sql/drop-table.d.ts.map +1 -0
  217. package/dist/src/database/drivers/pgsql/sql/drop-table.js +4 -0
  218. package/dist/src/database/drivers/pgsql/sql/insert.d.ts +4 -0
  219. package/dist/src/database/drivers/pgsql/sql/insert.d.ts.map +1 -0
  220. package/dist/src/database/drivers/pgsql/sql/insert.js +4 -0
  221. package/dist/src/database/drivers/pgsql/sql/update.d.ts +5 -0
  222. package/dist/src/database/drivers/pgsql/sql/update.d.ts.map +1 -0
  223. package/dist/src/database/drivers/pgsql/sql/update.js +27 -0
  224. package/dist/src/database/drivers/pgsql/table.d.ts +15 -0
  225. package/dist/src/database/drivers/pgsql/table.d.ts.map +1 -0
  226. package/dist/src/database/drivers/pgsql/table.js +105 -0
  227. package/dist/src/database/drivers/sqlite/base.d.ts +41 -0
  228. package/dist/src/database/drivers/sqlite/base.d.ts.map +1 -0
  229. package/dist/src/database/drivers/sqlite/base.js +253 -0
  230. package/dist/src/database/drivers/sqlite/column.d.ts +19 -0
  231. package/dist/src/database/drivers/sqlite/column.d.ts.map +1 -0
  232. package/dist/src/database/drivers/sqlite/column.js +55 -0
  233. package/dist/src/database/drivers/sqlite/columns-index.d.ts +6 -0
  234. package/dist/src/database/drivers/sqlite/columns-index.d.ts.map +1 -0
  235. package/dist/src/database/drivers/sqlite/columns-index.js +24 -0
  236. package/dist/src/database/drivers/sqlite/connection-remote.d.ts +9 -0
  237. package/dist/src/database/drivers/sqlite/connection-remote.d.ts.map +1 -0
  238. package/dist/src/database/drivers/sqlite/connection-remote.js +11 -0
  239. package/dist/src/database/drivers/sqlite/connection-sql-js.d.ts +19 -0
  240. package/dist/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -0
  241. package/dist/src/database/drivers/sqlite/connection-sql-js.js +38 -0
  242. package/dist/src/database/drivers/sqlite/foreign-key.d.ts +17 -0
  243. package/dist/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -0
  244. package/dist/src/database/drivers/sqlite/foreign-key.js +19 -0
  245. package/dist/src/database/drivers/sqlite/index.d.ts +8 -0
  246. package/dist/src/database/drivers/sqlite/index.d.ts.map +1 -0
  247. package/dist/src/database/drivers/sqlite/index.js +42 -0
  248. package/dist/src/database/drivers/sqlite/index.native.d.ts +9 -0
  249. package/dist/src/database/drivers/sqlite/index.native.d.ts.map +1 -0
  250. package/dist/src/database/drivers/sqlite/index.native.js +57 -0
  251. package/dist/src/database/drivers/sqlite/index.web.d.ts +14 -0
  252. package/dist/src/database/drivers/sqlite/index.web.d.ts.map +1 -0
  253. package/dist/src/database/drivers/sqlite/index.web.js +50 -0
  254. package/dist/src/database/drivers/sqlite/options.d.ts +13 -0
  255. package/dist/src/database/drivers/sqlite/options.d.ts.map +1 -0
  256. package/dist/src/database/drivers/sqlite/options.js +26 -0
  257. package/dist/src/database/drivers/sqlite/query-parser.d.ts +4 -0
  258. package/dist/src/database/drivers/sqlite/query-parser.d.ts.map +1 -0
  259. package/dist/src/database/drivers/sqlite/query-parser.js +4 -0
  260. package/dist/src/database/drivers/sqlite/query.d.ts +7 -0
  261. package/dist/src/database/drivers/sqlite/query.d.ts.map +1 -0
  262. package/dist/src/database/drivers/sqlite/query.js +28 -0
  263. package/dist/src/database/drivers/sqlite/query.native.d.ts +2 -0
  264. package/dist/src/database/drivers/sqlite/query.native.d.ts.map +1 -0
  265. package/dist/src/database/drivers/sqlite/query.native.js +20 -0
  266. package/dist/src/database/drivers/sqlite/query.web.d.ts +7 -0
  267. package/dist/src/database/drivers/sqlite/query.web.d.ts.map +1 -0
  268. package/dist/src/database/drivers/sqlite/query.web.js +38 -0
  269. package/dist/src/database/drivers/sqlite/sql/alter-table.d.ts +6 -0
  270. package/dist/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -0
  271. package/dist/src/database/drivers/sqlite/sql/alter-table.js +122 -0
  272. package/dist/src/database/drivers/sqlite/sql/create-index.d.ts +4 -0
  273. package/dist/src/database/drivers/sqlite/sql/create-index.d.ts.map +1 -0
  274. package/dist/src/database/drivers/sqlite/sql/create-index.js +4 -0
  275. package/dist/src/database/drivers/sqlite/sql/create-table.d.ts +4 -0
  276. package/dist/src/database/drivers/sqlite/sql/create-table.d.ts.map +1 -0
  277. package/dist/src/database/drivers/sqlite/sql/create-table.js +4 -0
  278. package/dist/src/database/drivers/sqlite/sql/delete.d.ts +5 -0
  279. package/dist/src/database/drivers/sqlite/sql/delete.d.ts.map +1 -0
  280. package/dist/src/database/drivers/sqlite/sql/delete.js +20 -0
  281. package/dist/src/database/drivers/sqlite/sql/drop-table.d.ts +4 -0
  282. package/dist/src/database/drivers/sqlite/sql/drop-table.d.ts.map +1 -0
  283. package/dist/src/database/drivers/sqlite/sql/drop-table.js +4 -0
  284. package/dist/src/database/drivers/sqlite/sql/insert.d.ts +4 -0
  285. package/dist/src/database/drivers/sqlite/sql/insert.d.ts.map +1 -0
  286. package/dist/src/database/drivers/sqlite/sql/insert.js +4 -0
  287. package/dist/src/database/drivers/sqlite/sql/update.d.ts +5 -0
  288. package/dist/src/database/drivers/sqlite/sql/update.d.ts.map +1 -0
  289. package/dist/src/database/drivers/sqlite/sql/update.js +27 -0
  290. package/dist/src/database/drivers/sqlite/table.d.ts +21 -0
  291. package/dist/src/database/drivers/sqlite/table.d.ts.map +1 -0
  292. package/dist/src/database/drivers/sqlite/table.js +76 -0
  293. package/dist/src/database/handler.d.ts +7 -0
  294. package/dist/src/database/handler.d.ts.map +1 -0
  295. package/dist/src/database/handler.js +10 -0
  296. package/dist/src/database/initializer-from-require-context.d.ts +26 -0
  297. package/dist/src/database/initializer-from-require-context.d.ts.map +1 -0
  298. package/dist/src/database/initializer-from-require-context.js +40 -0
  299. package/dist/src/database/migration/index.d.ts +152 -0
  300. package/dist/src/database/migration/index.d.ts.map +1 -0
  301. package/dist/src/database/migration/index.js +286 -0
  302. package/dist/src/database/migrator/files-finder.d.ts +15 -0
  303. package/dist/src/database/migrator/files-finder.d.ts.map +1 -0
  304. package/dist/src/database/migrator/files-finder.js +40 -0
  305. package/dist/src/database/migrator/types.d.ts +17 -0
  306. package/dist/src/database/migrator/types.d.ts.map +1 -0
  307. package/dist/src/database/migrator/types.js +2 -0
  308. package/dist/src/database/migrator.d.ts +79 -0
  309. package/dist/src/database/migrator.d.ts.map +1 -0
  310. package/dist/src/database/migrator.js +377 -0
  311. package/dist/src/database/pool/async-tracked-multi-connection.d.ts +11 -0
  312. package/dist/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -0
  313. package/dist/src/database/pool/async-tracked-multi-connection.js +80 -0
  314. package/dist/src/database/pool/base-methods-forward.d.ts +6 -0
  315. package/dist/src/database/pool/base-methods-forward.d.ts.map +1 -0
  316. package/dist/src/database/pool/base-methods-forward.js +37 -0
  317. package/dist/src/database/pool/base.d.ts +76 -0
  318. package/dist/src/database/pool/base.d.ts.map +1 -0
  319. package/dist/src/database/pool/base.js +111 -0
  320. package/dist/src/database/pool/single-multi-use.d.ts +5 -0
  321. package/dist/src/database/pool/single-multi-use.d.ts.map +1 -0
  322. package/dist/src/database/pool/single-multi-use.js +35 -0
  323. package/dist/src/database/query/alter-table-base.d.ts +15 -0
  324. package/dist/src/database/query/alter-table-base.d.ts.map +1 -0
  325. package/dist/src/database/query/alter-table-base.js +55 -0
  326. package/dist/src/database/query/base.d.ts +26 -0
  327. package/dist/src/database/query/base.d.ts.map +1 -0
  328. package/dist/src/database/query/base.js +38 -0
  329. package/dist/src/database/query/create-database-base.d.ts +19 -0
  330. package/dist/src/database/query/create-database-base.d.ts.map +1 -0
  331. package/dist/src/database/query/create-database-base.js +29 -0
  332. package/dist/src/database/query/create-index-base.d.ts +31 -0
  333. package/dist/src/database/query/create-index-base.d.ts.map +1 -0
  334. package/dist/src/database/query/create-index-base.js +94 -0
  335. package/dist/src/database/query/create-table-base.d.ts +25 -0
  336. package/dist/src/database/query/create-table-base.d.ts.map +1 -0
  337. package/dist/src/database/query/create-table-base.js +136 -0
  338. package/dist/src/database/query/delete-base.d.ts +17 -0
  339. package/dist/src/database/query/delete-base.d.ts.map +1 -0
  340. package/dist/src/database/query/delete-base.js +15 -0
  341. package/dist/src/database/query/drop-table-base.d.ts +20 -0
  342. package/dist/src/database/query/drop-table-base.d.ts.map +1 -0
  343. package/dist/src/database/query/drop-table-base.js +44 -0
  344. package/dist/src/database/query/from-base.d.ts +19 -0
  345. package/dist/src/database/query/from-base.d.ts.map +1 -0
  346. package/dist/src/database/query/from-base.js +27 -0
  347. package/dist/src/database/query/from-plain.d.ts +9 -0
  348. package/dist/src/database/query/from-plain.d.ts.map +1 -0
  349. package/dist/src/database/query/from-plain.js +12 -0
  350. package/dist/src/database/query/from-table.d.ts +9 -0
  351. package/dist/src/database/query/from-table.d.ts.map +1 -0
  352. package/dist/src/database/query/from-table.js +14 -0
  353. package/dist/src/database/query/index.d.ts +219 -0
  354. package/dist/src/database/query/index.d.ts.map +1 -0
  355. package/dist/src/database/query/index.js +437 -0
  356. package/dist/src/database/query/insert-base.d.ts +41 -0
  357. package/dist/src/database/query/insert-base.d.ts.map +1 -0
  358. package/dist/src/database/query/insert-base.js +135 -0
  359. package/dist/src/database/query/join-base.d.ts +22 -0
  360. package/dist/src/database/query/join-base.d.ts.map +1 -0
  361. package/dist/src/database/query/join-base.js +33 -0
  362. package/dist/src/database/query/join-object.d.ts +24 -0
  363. package/dist/src/database/query/join-object.d.ts.map +1 -0
  364. package/dist/src/database/query/join-object.js +58 -0
  365. package/dist/src/database/query/join-plain.d.ts +10 -0
  366. package/dist/src/database/query/join-plain.d.ts.map +1 -0
  367. package/dist/src/database/query/join-plain.js +14 -0
  368. package/dist/src/database/query/order-base.d.ts +19 -0
  369. package/dist/src/database/query/order-base.d.ts.map +1 -0
  370. package/dist/src/database/query/order-base.js +26 -0
  371. package/dist/src/database/query/order-plain.d.ts +13 -0
  372. package/dist/src/database/query/order-plain.d.ts.map +1 -0
  373. package/dist/src/database/query/order-plain.js +22 -0
  374. package/dist/src/database/query/preloader/belongs-to.d.ts +15 -0
  375. package/dist/src/database/query/preloader/belongs-to.d.ts.map +1 -0
  376. package/dist/src/database/query/preloader/belongs-to.js +48 -0
  377. package/dist/src/database/query/preloader/has-many.d.ts +15 -0
  378. package/dist/src/database/query/preloader/has-many.d.ts.map +1 -0
  379. package/dist/src/database/query/preloader/has-many.js +63 -0
  380. package/dist/src/database/query/preloader/has-one.d.ts +15 -0
  381. package/dist/src/database/query/preloader/has-one.d.ts.map +1 -0
  382. package/dist/src/database/query/preloader/has-one.js +55 -0
  383. package/dist/src/database/query/preloader.d.ts +18 -0
  384. package/dist/src/database/query/preloader.d.ts.map +1 -0
  385. package/dist/src/database/query/preloader.js +52 -0
  386. package/dist/src/database/query/select-base.d.ts +17 -0
  387. package/dist/src/database/query/select-base.d.ts.map +1 -0
  388. package/dist/src/database/query/select-base.js +24 -0
  389. package/dist/src/database/query/select-plain.d.ts +9 -0
  390. package/dist/src/database/query/select-plain.d.ts.map +1 -0
  391. package/dist/src/database/query/select-plain.js +14 -0
  392. package/dist/src/database/query/select-table-and-column.d.ts +13 -0
  393. package/dist/src/database/query/select-table-and-column.d.ts.map +1 -0
  394. package/dist/src/database/query/select-table-and-column.js +22 -0
  395. package/dist/src/database/query/update-base.d.ts +25 -0
  396. package/dist/src/database/query/update-base.d.ts.map +1 -0
  397. package/dist/src/database/query/update-base.js +25 -0
  398. package/dist/src/database/query/where-base.d.ts +21 -0
  399. package/dist/src/database/query/where-base.d.ts.map +1 -0
  400. package/dist/src/database/query/where-base.js +30 -0
  401. package/dist/src/database/query/where-hash.d.ts +22 -0
  402. package/dist/src/database/query/where-hash.d.ts.map +1 -0
  403. package/dist/src/database/query/where-hash.js +56 -0
  404. package/dist/src/database/query/where-plain.d.ts +10 -0
  405. package/dist/src/database/query/where-plain.d.ts.map +1 -0
  406. package/dist/src/database/query/where-plain.js +16 -0
  407. package/dist/src/database/query-parser/base-query-parser.d.ts +15 -0
  408. package/dist/src/database/query-parser/base-query-parser.d.ts.map +1 -0
  409. package/dist/src/database/query-parser/base-query-parser.js +33 -0
  410. package/dist/src/database/query-parser/from-parser.d.ts +16 -0
  411. package/dist/src/database/query-parser/from-parser.d.ts.map +1 -0
  412. package/dist/src/database/query-parser/from-parser.js +35 -0
  413. package/dist/src/database/query-parser/group-parser.d.ts +18 -0
  414. package/dist/src/database/query-parser/group-parser.d.ts.map +1 -0
  415. package/dist/src/database/query-parser/group-parser.js +44 -0
  416. package/dist/src/database/query-parser/joins-parser.d.ts +16 -0
  417. package/dist/src/database/query-parser/joins-parser.d.ts.map +1 -0
  418. package/dist/src/database/query-parser/joins-parser.js +30 -0
  419. package/dist/src/database/query-parser/limit-parser.d.ts +15 -0
  420. package/dist/src/database/query-parser/limit-parser.d.ts.map +1 -0
  421. package/dist/src/database/query-parser/limit-parser.js +56 -0
  422. package/dist/src/database/query-parser/options.d.ts +58 -0
  423. package/dist/src/database/query-parser/options.d.ts.map +1 -0
  424. package/dist/src/database/query-parser/options.js +78 -0
  425. package/dist/src/database/query-parser/order-parser.d.ts +15 -0
  426. package/dist/src/database/query-parser/order-parser.d.ts.map +1 -0
  427. package/dist/src/database/query-parser/order-parser.js +39 -0
  428. package/dist/src/database/query-parser/select-parser.d.ts +15 -0
  429. package/dist/src/database/query-parser/select-parser.d.ts.map +1 -0
  430. package/dist/src/database/query-parser/select-parser.js +49 -0
  431. package/dist/src/database/query-parser/where-parser.d.ts +15 -0
  432. package/dist/src/database/query-parser/where-parser.d.ts.map +1 -0
  433. package/dist/src/database/query-parser/where-parser.js +39 -0
  434. package/dist/src/database/record/index.d.ts +495 -0
  435. package/dist/src/database/record/index.d.ts.map +1 -0
  436. package/dist/src/database/record/index.js +1408 -0
  437. package/dist/src/database/record/instance-relationships/base.d.ts +74 -0
  438. package/dist/src/database/record/instance-relationships/base.d.ts.map +1 -0
  439. package/dist/src/database/record/instance-relationships/base.js +81 -0
  440. package/dist/src/database/record/instance-relationships/belongs-to.d.ts +4 -0
  441. package/dist/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -0
  442. package/dist/src/database/record/instance-relationships/belongs-to.js +28 -0
  443. package/dist/src/database/record/instance-relationships/has-many.d.ts +8 -0
  444. package/dist/src/database/record/instance-relationships/has-many.d.ts.map +1 -0
  445. package/dist/src/database/record/instance-relationships/has-many.js +103 -0
  446. package/dist/src/database/record/instance-relationships/has-one.d.ts +7 -0
  447. package/dist/src/database/record/instance-relationships/has-one.d.ts.map +1 -0
  448. package/dist/src/database/record/instance-relationships/has-one.js +50 -0
  449. package/dist/src/database/record/record-not-found-error.d.ts +3 -0
  450. package/dist/src/database/record/record-not-found-error.d.ts.map +1 -0
  451. package/dist/src/database/record/record-not-found-error.js +3 -0
  452. package/dist/src/database/record/relationships/base.d.ts +68 -0
  453. package/dist/src/database/record/relationships/base.d.ts.map +1 -0
  454. package/dist/src/database/record/relationships/base.js +79 -0
  455. package/dist/src/database/record/relationships/belongs-to.d.ts +5 -0
  456. package/dist/src/database/record/relationships/belongs-to.d.ts.map +1 -0
  457. package/dist/src/database/record/relationships/belongs-to.js +37 -0
  458. package/dist/src/database/record/relationships/has-many.d.ts +5 -0
  459. package/dist/src/database/record/relationships/has-many.d.ts.map +1 -0
  460. package/dist/src/database/record/relationships/has-many.js +30 -0
  461. package/dist/src/database/record/relationships/has-one.d.ts +5 -0
  462. package/dist/src/database/record/relationships/has-one.d.ts.map +1 -0
  463. package/dist/src/database/record/relationships/has-one.js +30 -0
  464. package/dist/src/database/record/user-module.d.ts +15 -0
  465. package/dist/src/database/record/user-module.d.ts.map +1 -0
  466. package/dist/src/database/record/user-module.js +34 -0
  467. package/dist/src/database/record/validators/base.d.ts +25 -0
  468. package/dist/src/database/record/validators/base.d.ts.map +1 -0
  469. package/dist/src/database/record/validators/base.js +22 -0
  470. package/dist/src/database/record/validators/presence.d.ts +4 -0
  471. package/dist/src/database/record/validators/presence.d.ts.map +1 -0
  472. package/dist/src/database/record/validators/presence.js +17 -0
  473. package/dist/src/database/record/validators/uniqueness.d.ts +4 -0
  474. package/dist/src/database/record/validators/uniqueness.d.ts.map +1 -0
  475. package/dist/src/database/record/validators/uniqueness.js +33 -0
  476. package/dist/src/database/table-data/index.d.ts +141 -0
  477. package/dist/src/database/table-data/index.d.ts.map +1 -0
  478. package/dist/src/database/table-data/index.js +167 -0
  479. package/dist/src/database/table-data/table-column.d.ts +153 -0
  480. package/dist/src/database/table-data/table-column.d.ts.map +1 -0
  481. package/dist/src/database/table-data/table-column.js +246 -0
  482. package/dist/src/database/table-data/table-foreign-key.d.ts +55 -0
  483. package/dist/src/database/table-data/table-foreign-key.d.ts.map +1 -0
  484. package/dist/src/database/table-data/table-foreign-key.js +51 -0
  485. package/dist/src/database/table-data/table-index.d.ts +31 -0
  486. package/dist/src/database/table-data/table-index.d.ts.map +1 -0
  487. package/dist/src/database/table-data/table-index.js +33 -0
  488. package/dist/src/database/table-data/table-reference.d.ts +10 -0
  489. package/dist/src/database/table-data/table-reference.d.ts.map +1 -0
  490. package/dist/src/database/table-data/table-reference.js +11 -0
  491. package/dist/src/database/use-database.d.ts +11 -0
  492. package/dist/src/database/use-database.d.ts.map +1 -0
  493. package/dist/src/database/use-database.js +39 -0
  494. package/dist/src/environment-handlers/base.d.ts +128 -0
  495. package/dist/src/environment-handlers/base.d.ts.map +1 -0
  496. package/dist/src/environment-handlers/base.js +136 -0
  497. package/dist/src/environment-handlers/browser.d.ts +65 -0
  498. package/dist/src/environment-handlers/browser.d.ts.map +1 -0
  499. package/dist/src/environment-handlers/browser.js +160 -0
  500. package/dist/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +14 -0
  501. package/dist/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -0
  502. package/dist/src/environment-handlers/node/cli/commands/destroy/migration.js +34 -0
  503. package/dist/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +10 -0
  504. package/dist/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -0
  505. package/dist/src/environment-handlers/node/cli/commands/generate/base-models.js +219 -0
  506. package/dist/src/environment-handlers/node/cli/commands/generate/migration.d.ts +19 -0
  507. package/dist/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -0
  508. package/dist/src/environment-handlers/node/cli/commands/generate/migration.js +36 -0
  509. package/dist/src/environment-handlers/node/cli/commands/generate/model.d.ts +18 -0
  510. package/dist/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -0
  511. package/dist/src/environment-handlers/node/cli/commands/generate/model.js +36 -0
  512. package/dist/src/environment-handlers/node/cli/commands/init.d.ts +18 -0
  513. package/dist/src/environment-handlers/node/cli/commands/init.d.ts.map +1 -0
  514. package/dist/src/environment-handlers/node/cli/commands/init.js +60 -0
  515. package/dist/src/environment-handlers/node/cli/commands/server.d.ts +11 -0
  516. package/dist/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -0
  517. package/dist/src/environment-handlers/node/cli/commands/server.js +26 -0
  518. package/dist/src/environment-handlers/node/cli/commands/test.d.ts +5 -0
  519. package/dist/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -0
  520. package/dist/src/environment-handlers/node/cli/commands/test.js +41 -0
  521. package/dist/src/environment-handlers/node.d.ts +47 -0
  522. package/dist/src/environment-handlers/node.d.ts.map +1 -0
  523. package/dist/src/environment-handlers/node.js +188 -0
  524. package/dist/src/error-logger.d.ts +5 -0
  525. package/dist/src/error-logger.d.ts.map +1 -0
  526. package/dist/src/error-logger.js +32 -0
  527. package/dist/src/http-client/header.d.ts +13 -0
  528. package/dist/src/http-client/header.d.ts.map +1 -0
  529. package/dist/src/http-client/header.js +14 -0
  530. package/dist/src/http-client/index.d.ts +57 -0
  531. package/dist/src/http-client/index.d.ts.map +1 -0
  532. package/dist/src/http-client/index.js +118 -0
  533. package/dist/src/http-client/request.d.ts +39 -0
  534. package/dist/src/http-client/request.d.ts.map +1 -0
  535. package/dist/src/http-client/request.js +66 -0
  536. package/dist/src/http-client/response.d.ts +31 -0
  537. package/dist/src/http-client/response.d.ts.map +1 -0
  538. package/dist/src/http-client/response.js +119 -0
  539. package/dist/src/http-server/client/index.d.ts +37 -0
  540. package/dist/src/http-server/client/index.d.ts.map +1 -0
  541. package/dist/src/http-server/client/index.js +116 -0
  542. package/dist/src/http-server/client/params-to-object.d.ts +21 -0
  543. package/dist/src/http-server/client/params-to-object.d.ts.map +1 -0
  544. package/dist/src/http-server/client/params-to-object.js +80 -0
  545. package/dist/src/http-server/client/request-buffer/form-data-part.d.ts +21 -0
  546. package/dist/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -0
  547. package/dist/src/http-server/client/request-buffer/form-data-part.js +45 -0
  548. package/dist/src/http-server/client/request-buffer/header.d.ts +15 -0
  549. package/dist/src/http-server/client/request-buffer/header.d.ts.map +1 -0
  550. package/dist/src/http-server/client/request-buffer/header.js +16 -0
  551. package/dist/src/http-server/client/request-buffer/index.d.ts +95 -0
  552. package/dist/src/http-server/client/request-buffer/index.d.ts.map +1 -0
  553. package/dist/src/http-server/client/request-buffer/index.js +305 -0
  554. package/dist/src/http-server/client/request-parser.d.ts +52 -0
  555. package/dist/src/http-server/client/request-parser.d.ts.map +1 -0
  556. package/dist/src/http-server/client/request-parser.js +98 -0
  557. package/dist/src/http-server/client/request-runner.d.ts +24 -0
  558. package/dist/src/http-server/client/request-runner.d.ts.map +1 -0
  559. package/dist/src/http-server/client/request-runner.js +58 -0
  560. package/dist/src/http-server/client/request.d.ts +39 -0
  561. package/dist/src/http-server/client/request.d.ts.map +1 -0
  562. package/dist/src/http-server/client/request.js +54 -0
  563. package/dist/src/http-server/client/response.d.ts +56 -0
  564. package/dist/src/http-server/client/response.d.ts.map +1 -0
  565. package/dist/src/http-server/client/response.js +90 -0
  566. package/dist/src/http-server/index.d.ts +58 -0
  567. package/dist/src/http-server/index.d.ts.map +1 -0
  568. package/dist/src/http-server/index.js +147 -0
  569. package/dist/src/http-server/server-client.d.ts +43 -0
  570. package/dist/src/http-server/server-client.d.ts.map +1 -0
  571. package/dist/src/http-server/server-client.js +70 -0
  572. package/dist/src/http-server/worker-handler/index.d.ts +49 -0
  573. package/dist/src/http-server/worker-handler/index.d.ts.map +1 -0
  574. package/dist/src/http-server/worker-handler/index.js +104 -0
  575. package/dist/src/http-server/worker-handler/worker-script.d.ts +2 -0
  576. package/dist/src/http-server/worker-handler/worker-script.d.ts.map +1 -0
  577. package/dist/src/http-server/worker-handler/worker-script.js +4 -0
  578. package/dist/src/http-server/worker-handler/worker-thread.d.ts +47 -0
  579. package/dist/src/http-server/worker-handler/worker-thread.d.ts.map +1 -0
  580. package/dist/src/http-server/worker-handler/worker-thread.js +88 -0
  581. package/dist/src/initializer.d.ts +27 -0
  582. package/dist/src/initializer.d.ts.map +1 -0
  583. package/dist/src/initializer.js +29 -0
  584. package/dist/src/logger.d.ts +39 -0
  585. package/dist/src/logger.d.ts.map +1 -0
  586. package/dist/src/logger.js +154 -0
  587. package/dist/src/routes/app-routes.d.ts +8 -0
  588. package/dist/src/routes/app-routes.d.ts.map +1 -0
  589. package/dist/src/routes/app-routes.js +13 -0
  590. package/dist/src/routes/base-route.d.ts +60 -0
  591. package/dist/src/routes/base-route.d.ts.map +1 -0
  592. package/dist/src/routes/base-route.js +67 -0
  593. package/dist/src/routes/basic-route.d.ts +10 -0
  594. package/dist/src/routes/basic-route.d.ts.map +1 -0
  595. package/dist/src/routes/basic-route.js +61 -0
  596. package/dist/src/routes/built-in/errors/controller.d.ts +5 -0
  597. package/dist/src/routes/built-in/errors/controller.d.ts.map +1 -0
  598. package/dist/src/routes/built-in/errors/controller.js +6 -0
  599. package/dist/src/routes/get-route.d.ts +14 -0
  600. package/dist/src/routes/get-route.d.ts.map +1 -0
  601. package/dist/src/routes/get-route.js +33 -0
  602. package/dist/src/routes/index.d.ts +10 -0
  603. package/dist/src/routes/index.d.ts.map +1 -0
  604. package/dist/src/routes/index.js +16 -0
  605. package/dist/src/routes/namespace-route.d.ts +14 -0
  606. package/dist/src/routes/namespace-route.d.ts.map +1 -0
  607. package/dist/src/routes/namespace-route.js +34 -0
  608. package/dist/src/routes/post-route.d.ts +14 -0
  609. package/dist/src/routes/post-route.d.ts.map +1 -0
  610. package/dist/src/routes/post-route.js +33 -0
  611. package/dist/src/routes/resolver.d.ts +27 -0
  612. package/dist/src/routes/resolver.d.ts.map +1 -0
  613. package/dist/src/routes/resolver.js +92 -0
  614. package/dist/src/routes/resource-route.d.ts +14 -0
  615. package/dist/src/routes/resource-route.d.ts.map +1 -0
  616. package/dist/src/routes/resource-route.js +51 -0
  617. package/dist/src/routes/root-route.d.ts +4 -0
  618. package/dist/src/routes/root-route.d.ts.map +1 -0
  619. package/dist/src/routes/root-route.js +4 -0
  620. package/dist/src/testing/request-client.d.ts +35 -0
  621. package/dist/src/testing/request-client.d.ts.map +1 -0
  622. package/dist/src/testing/request-client.js +61 -0
  623. package/dist/src/testing/test-files-finder.d.ts +64 -0
  624. package/dist/src/testing/test-files-finder.d.ts.map +1 -0
  625. package/dist/src/testing/test-files-finder.js +159 -0
  626. package/dist/src/testing/test-runner.d.ts +163 -0
  627. package/dist/src/testing/test-runner.d.ts.map +1 -0
  628. package/dist/src/testing/test-runner.js +257 -0
  629. package/dist/src/testing/test.d.ts +157 -0
  630. package/dist/src/testing/test.d.ts.map +1 -0
  631. package/dist/src/testing/test.js +408 -0
  632. package/dist/src/utils/backtrace-cleaner.d.ts +17 -0
  633. package/dist/src/utils/backtrace-cleaner.d.ts.map +1 -0
  634. package/dist/src/utils/backtrace-cleaner.js +23 -0
  635. package/dist/src/utils/ensure-error.d.ts +6 -0
  636. package/dist/src/utils/ensure-error.d.ts.map +1 -0
  637. package/dist/src/utils/ensure-error.js +13 -0
  638. package/dist/src/utils/file-exists.d.ts +6 -0
  639. package/dist/src/utils/file-exists.d.ts.map +1 -0
  640. package/dist/src/utils/file-exists.js +15 -0
  641. package/dist/src/utils/nest-callbacks.d.ts +2 -0
  642. package/dist/src/utils/nest-callbacks.d.ts.map +1 -0
  643. package/dist/src/utils/nest-callbacks.js +11 -0
  644. package/dist/src/utils/rest-args-error.d.ts +6 -0
  645. package/dist/src/utils/rest-args-error.d.ts.map +1 -0
  646. package/dist/src/utils/rest-args-error.js +11 -0
  647. package/dist/src/utils/with-tracked-stack-async-hooks.d.ts +10 -0
  648. package/dist/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -0
  649. package/dist/src/utils/with-tracked-stack-async-hooks.js +69 -0
  650. package/dist/src/utils/with-tracked-stack.d.ts +8 -0
  651. package/dist/src/utils/with-tracked-stack.d.ts.map +1 -0
  652. package/dist/src/utils/with-tracked-stack.js +26 -0
  653. package/package.json +7 -3
  654. package/.github/dependabot.yml +0 -9
  655. package/bin/velocious.js +0 -34
  656. package/eslint.config.js +0 -34
  657. package/index.js +0 -1
  658. package/peak_flow.yml +0 -89
  659. package/run-tests.sh +0 -4
  660. package/spec/cli/commands/db/create-spec.js +0 -58
  661. package/spec/cli/commands/db/migrate-spec.js +0 -160
  662. package/spec/cli/commands/db/rollback-spec.js +0 -179
  663. package/spec/cli/commands/destroy/migration-spec.js +0 -19
  664. package/spec/cli/commands/generate/migration-spec.js +0 -22
  665. package/spec/cli/commands/init-spec.js +0 -23
  666. package/spec/cli/commands/test/test-files-finder-spec.js +0 -15
  667. package/spec/database/connection/drivers/mysql/query-parser-spec.js +0 -41
  668. package/spec/database/drivers/columns-spec.js +0 -27
  669. package/spec/database/drivers/create-sql/create-index-sql-spec.js +0 -24
  670. package/spec/database/drivers/mysql/connection-spec.js +0 -22
  671. package/spec/database/migration/column-exists-spec.js +0 -28
  672. package/spec/database/record/create-spec.js +0 -140
  673. package/spec/database/record/destroy-spec.js +0 -35
  674. package/spec/database/record/find-or-create-spec.js +0 -59
  675. package/spec/database/record/find-spec.js +0 -32
  676. package/spec/database/record/instance-relationships/belongs-to-relationship-spec.js +0 -21
  677. package/spec/database/record/instance-relationships/has-many-relationship-spec.js +0 -24
  678. package/spec/database/record/instance-relationships/has-one-relationship-spec.js +0 -24
  679. package/spec/database/record/last-spec.js +0 -29
  680. package/spec/database/record/preloader/belongs-to-spec.js +0 -15
  681. package/spec/database/record/preloader/has-many-spec.js +0 -29
  682. package/spec/database/record/preloader/has-one-spec.js +0 -15
  683. package/spec/database/record/query-spec.js +0 -120
  684. package/spec/database/record/translation-fallbacks-spec.js +0 -24
  685. package/spec/database/record/translations-spec.js +0 -10
  686. package/spec/database/record/update-spec.js +0 -31
  687. package/spec/database/record/validations-spec.js +0 -42
  688. package/spec/database/transactions-spec.js +0 -47
  689. package/spec/dummy/db/.keep +0 -0
  690. package/spec/dummy/dummy-directory.js +0 -13
  691. package/spec/dummy/index.js +0 -83
  692. package/spec/dummy/src/config/configuration.example.js +0 -70
  693. package/spec/dummy/src/config/configuration.peakflow.mariadb.js +0 -65
  694. package/spec/dummy/src/config/configuration.peakflow.mssql.js +0 -71
  695. package/spec/dummy/src/config/configuration.peakflow.pgsql.js +0 -65
  696. package/spec/dummy/src/config/configuration.peakflow.sqlite.js +0 -62
  697. package/spec/dummy/src/config/routes.js +0 -15
  698. package/spec/dummy/src/config/testing.js +0 -34
  699. package/spec/dummy/src/database/migrations/20230728075328-create-projects.js +0 -10
  700. package/spec/dummy/src/database/migrations/20230728075329-create-tasks.js +0 -12
  701. package/spec/dummy/src/database/migrations/20250605133926-create-project-translations.js +0 -16
  702. package/spec/dummy/src/database/migrations/20250903112845-create-accounts.js +0 -18
  703. package/spec/dummy/src/database/migrations/20250912183605-create-users.js +0 -16
  704. package/spec/dummy/src/database/migrations/20250912183606-create-authentication-tokens.js +0 -15
  705. package/spec/dummy/src/database/migrations/20250915085450-change-authentication-tokens-user-id-nullable.js +0 -11
  706. package/spec/dummy/src/database/migrations/20250916111330-rename_authentication_tokens_token_to_user_token.js +0 -11
  707. package/spec/dummy/src/database/migrations/20250921121002-create-project-details.js +0 -17
  708. package/spec/dummy/src/model-bases/account.js +0 -67
  709. package/spec/dummy/src/model-bases/authentication-token.js +0 -108
  710. package/spec/dummy/src/model-bases/project-detail.js +0 -101
  711. package/spec/dummy/src/model-bases/project-translation.js +0 -124
  712. package/spec/dummy/src/model-bases/project.js +0 -196
  713. package/spec/dummy/src/model-bases/task.js +0 -117
  714. package/spec/dummy/src/model-bases/user.js +0 -170
  715. package/spec/dummy/src/models/account.js +0 -8
  716. package/spec/dummy/src/models/authentication-token.js +0 -8
  717. package/spec/dummy/src/models/project-detail.js +0 -8
  718. package/spec/dummy/src/models/project.js +0 -11
  719. package/spec/dummy/src/models/task.js +0 -9
  720. package/spec/dummy/src/models/user.js +0 -18
  721. package/spec/dummy/src/routes/_root/controller.js +0 -11
  722. package/spec/dummy/src/routes/projects/controller.js +0 -33
  723. package/spec/dummy/src/routes/tasks/controller.js +0 -25
  724. package/spec/dummy/src/routes/tasks/index.ejs +0 -1
  725. package/spec/dummy/src/routes/tasks/show.ejs +0 -0
  726. package/spec/http-server/client-spec.js +0 -37
  727. package/spec/http-server/get-spec.js +0 -86
  728. package/spec/http-server/post-spec.js +0 -93
  729. package/spec/http-server/root-get-spec.js +0 -31
  730. package/src/application.js +0 -123
  731. package/src/cli/base-command.js +0 -40
  732. package/src/cli/browser-cli.js +0 -37
  733. package/src/cli/commands/db/create.js +0 -72
  734. package/src/cli/commands/db/drop.js +0 -18
  735. package/src/cli/commands/db/migrate.js +0 -17
  736. package/src/cli/commands/db/reset.js +0 -22
  737. package/src/cli/commands/db/rollback.js +0 -15
  738. package/src/cli/commands/destroy/migration.js +0 -7
  739. package/src/cli/commands/generate/base-models.js +0 -7
  740. package/src/cli/commands/generate/migration.js +0 -7
  741. package/src/cli/commands/generate/model.js +0 -7
  742. package/src/cli/commands/init.js +0 -11
  743. package/src/cli/commands/server.js +0 -7
  744. package/src/cli/commands/test.js +0 -7
  745. package/src/cli/index.js +0 -39
  746. package/src/cli/use-browser-cli.js +0 -27
  747. package/src/configuration-resolver.js +0 -61
  748. package/src/configuration-types.js +0 -61
  749. package/src/configuration.js +0 -395
  750. package/src/controller.js +0 -166
  751. package/src/database/drivers/base-column.js +0 -141
  752. package/src/database/drivers/base-columns-index.js +0 -72
  753. package/src/database/drivers/base-foreign-key.js +0 -91
  754. package/src/database/drivers/base-table.js +0 -129
  755. package/src/database/drivers/base.js +0 -751
  756. package/src/database/drivers/mssql/column.js +0 -72
  757. package/src/database/drivers/mssql/columns-index.js +0 -6
  758. package/src/database/drivers/mssql/connect-connection.js +0 -12
  759. package/src/database/drivers/mssql/foreign-key.js +0 -12
  760. package/src/database/drivers/mssql/index.js +0 -357
  761. package/src/database/drivers/mssql/options.js +0 -72
  762. package/src/database/drivers/mssql/query-parser.js +0 -6
  763. package/src/database/drivers/mssql/sql/alter-table.js +0 -4
  764. package/src/database/drivers/mssql/sql/create-database.js +0 -35
  765. package/src/database/drivers/mssql/sql/create-index.js +0 -4
  766. package/src/database/drivers/mssql/sql/create-table.js +0 -4
  767. package/src/database/drivers/mssql/sql/delete.js +0 -19
  768. package/src/database/drivers/mssql/sql/drop-table.js +0 -4
  769. package/src/database/drivers/mssql/sql/insert.js +0 -4
  770. package/src/database/drivers/mssql/sql/update.js +0 -31
  771. package/src/database/drivers/mssql/table.js +0 -132
  772. package/src/database/drivers/mysql/column.js +0 -105
  773. package/src/database/drivers/mysql/columns-index.js +0 -6
  774. package/src/database/drivers/mysql/foreign-key.js +0 -12
  775. package/src/database/drivers/mysql/index.js +0 -275
  776. package/src/database/drivers/mysql/options.js +0 -31
  777. package/src/database/drivers/mysql/query-parser.js +0 -6
  778. package/src/database/drivers/mysql/query.js +0 -31
  779. package/src/database/drivers/mysql/sql/alter-table.js +0 -6
  780. package/src/database/drivers/mysql/sql/create-database.js +0 -6
  781. package/src/database/drivers/mysql/sql/create-index.js +0 -6
  782. package/src/database/drivers/mysql/sql/create-table.js +0 -6
  783. package/src/database/drivers/mysql/sql/delete.js +0 -21
  784. package/src/database/drivers/mysql/sql/drop-table.js +0 -6
  785. package/src/database/drivers/mysql/sql/insert.js +0 -6
  786. package/src/database/drivers/mysql/sql/update.js +0 -33
  787. package/src/database/drivers/mysql/table.js +0 -96
  788. package/src/database/drivers/pgsql/column.js +0 -81
  789. package/src/database/drivers/pgsql/columns-index.js +0 -6
  790. package/src/database/drivers/pgsql/foreign-key.js +0 -12
  791. package/src/database/drivers/pgsql/index.js +0 -250
  792. package/src/database/drivers/pgsql/options.js +0 -30
  793. package/src/database/drivers/pgsql/query-parser.js +0 -6
  794. package/src/database/drivers/pgsql/sql/alter-table.js +0 -6
  795. package/src/database/drivers/pgsql/sql/create-database.js +0 -38
  796. package/src/database/drivers/pgsql/sql/create-index.js +0 -6
  797. package/src/database/drivers/pgsql/sql/create-table.js +0 -6
  798. package/src/database/drivers/pgsql/sql/delete.js +0 -21
  799. package/src/database/drivers/pgsql/sql/drop-table.js +0 -6
  800. package/src/database/drivers/pgsql/sql/insert.js +0 -6
  801. package/src/database/drivers/pgsql/sql/update.js +0 -33
  802. package/src/database/drivers/pgsql/table.js +0 -123
  803. package/src/database/drivers/sqlite/base.js +0 -303
  804. package/src/database/drivers/sqlite/column.js +0 -70
  805. package/src/database/drivers/sqlite/columns-index.js +0 -30
  806. package/src/database/drivers/sqlite/connection-remote.js +0 -12
  807. package/src/database/drivers/sqlite/connection-sql-js.js +0 -49
  808. package/src/database/drivers/sqlite/foreign-key.js +0 -22
  809. package/src/database/drivers/sqlite/index.js +0 -52
  810. package/src/database/drivers/sqlite/index.native.js +0 -68
  811. package/src/database/drivers/sqlite/index.web.js +0 -63
  812. package/src/database/drivers/sqlite/options.js +0 -30
  813. package/src/database/drivers/sqlite/query-parser.js +0 -6
  814. package/src/database/drivers/sqlite/query.js +0 -32
  815. package/src/database/drivers/sqlite/query.native.js +0 -25
  816. package/src/database/drivers/sqlite/query.web.js +0 -46
  817. package/src/database/drivers/sqlite/sql/alter-table.js +0 -153
  818. package/src/database/drivers/sqlite/sql/create-index.js +0 -6
  819. package/src/database/drivers/sqlite/sql/create-table.js +0 -6
  820. package/src/database/drivers/sqlite/sql/delete.js +0 -26
  821. package/src/database/drivers/sqlite/sql/drop-table.js +0 -6
  822. package/src/database/drivers/sqlite/sql/insert.js +0 -6
  823. package/src/database/drivers/sqlite/sql/update.js +0 -33
  824. package/src/database/drivers/sqlite/table.js +0 -97
  825. package/src/database/handler.js +0 -12
  826. package/src/database/initializer-from-require-context.js +0 -50
  827. package/src/database/migration/index.js +0 -345
  828. package/src/database/migrator/files-finder.js +0 -51
  829. package/src/database/migrator/types.js +0 -31
  830. package/src/database/migrator.js +0 -434
  831. package/src/database/pool/async-tracked-multi-connection.js +0 -103
  832. package/src/database/pool/base-methods-forward.js +0 -40
  833. package/src/database/pool/base.js +0 -133
  834. package/src/database/pool/single-multi-use.js +0 -43
  835. package/src/database/query/alter-table-base.js +0 -62
  836. package/src/database/query/base.js +0 -46
  837. package/src/database/query/create-database-base.js +0 -35
  838. package/src/database/query/create-index-base.js +0 -114
  839. package/src/database/query/create-table-base.js +0 -169
  840. package/src/database/query/delete-base.js +0 -17
  841. package/src/database/query/drop-table-base.js +0 -56
  842. package/src/database/query/from-base.js +0 -31
  843. package/src/database/query/from-plain.js +0 -15
  844. package/src/database/query/from-table.js +0 -17
  845. package/src/database/query/index.js +0 -530
  846. package/src/database/query/insert-base.js +0 -156
  847. package/src/database/query/join-base.js +0 -39
  848. package/src/database/query/join-object.js +0 -67
  849. package/src/database/query/join-plain.js +0 -17
  850. package/src/database/query/order-base.js +0 -30
  851. package/src/database/query/order-plain.js +0 -27
  852. package/src/database/query/preloader/belongs-to.js +0 -63
  853. package/src/database/query/preloader/has-many.js +0 -83
  854. package/src/database/query/preloader/has-one.js +0 -74
  855. package/src/database/query/preloader.js +0 -61
  856. package/src/database/query/select-base.js +0 -27
  857. package/src/database/query/select-plain.js +0 -17
  858. package/src/database/query/select-table-and-column.js +0 -27
  859. package/src/database/query/update-base.js +0 -28
  860. package/src/database/query/where-base.js +0 -34
  861. package/src/database/query/where-hash.js +0 -66
  862. package/src/database/query/where-plain.js +0 -19
  863. package/src/database/query-parser/base-query-parser.js +0 -39
  864. package/src/database/query-parser/from-parser.js +0 -45
  865. package/src/database/query-parser/group-parser.js +0 -53
  866. package/src/database/query-parser/joins-parser.js +0 -36
  867. package/src/database/query-parser/limit-parser.js +0 -61
  868. package/src/database/query-parser/options.js +0 -85
  869. package/src/database/query-parser/order-parser.js +0 -44
  870. package/src/database/query-parser/select-parser.js +0 -60
  871. package/src/database/query-parser/where-parser.js +0 -45
  872. package/src/database/record/index.js +0 -1682
  873. package/src/database/record/instance-relationships/base.js +0 -103
  874. package/src/database/record/instance-relationships/belongs-to.js +0 -37
  875. package/src/database/record/instance-relationships/has-many.js +0 -116
  876. package/src/database/record/instance-relationships/has-one.js +0 -66
  877. package/src/database/record/record-not-found-error.js +0 -3
  878. package/src/database/record/relationships/base.js +0 -91
  879. package/src/database/record/relationships/belongs-to.js +0 -46
  880. package/src/database/record/relationships/has-many.js +0 -39
  881. package/src/database/record/relationships/has-one.js +0 -39
  882. package/src/database/record/user-module.js +0 -41
  883. package/src/database/record/validators/base.js +0 -24
  884. package/src/database/record/validators/presence.js +0 -20
  885. package/src/database/record/validators/uniqueness.js +0 -42
  886. package/src/database/table-data/index.js +0 -199
  887. package/src/database/table-data/table-column.js +0 -283
  888. package/src/database/table-data/table-foreign-key.js +0 -61
  889. package/src/database/table-data/table-index.js +0 -41
  890. package/src/database/table-data/table-reference.js +0 -12
  891. package/src/database/use-database.js +0 -48
  892. package/src/environment-handlers/base.js +0 -158
  893. package/src/environment-handlers/browser.js +0 -193
  894. package/src/environment-handlers/node/cli/commands/destroy/migration.js +0 -42
  895. package/src/environment-handlers/node/cli/commands/generate/base-models.js +0 -258
  896. package/src/environment-handlers/node/cli/commands/generate/migration.js +0 -40
  897. package/src/environment-handlers/node/cli/commands/generate/model.js +0 -40
  898. package/src/environment-handlers/node/cli/commands/init.js +0 -66
  899. package/src/environment-handlers/node/cli/commands/server.js +0 -30
  900. package/src/environment-handlers/node/cli/commands/test.js +0 -47
  901. package/src/environment-handlers/node.js +0 -227
  902. package/src/error-logger.js +0 -32
  903. package/src/http-client/header.js +0 -16
  904. package/src/http-client/index.js +0 -135
  905. package/src/http-client/request.js +0 -83
  906. package/src/http-client/response.js +0 -136
  907. package/src/http-server/client/index.js +0 -137
  908. package/src/http-server/client/params-to-object.js +0 -88
  909. package/src/http-server/client/request-buffer/form-data-part.js +0 -53
  910. package/src/http-server/client/request-buffer/header.js +0 -18
  911. package/src/http-server/client/request-buffer/index.js +0 -345
  912. package/src/http-server/client/request-parser.js +0 -118
  913. package/src/http-server/client/request-runner.js +0 -68
  914. package/src/http-server/client/request.js +0 -63
  915. package/src/http-server/client/response.js +0 -100
  916. package/src/http-server/index.js +0 -180
  917. package/src/http-server/server-client.js +0 -81
  918. package/src/http-server/worker-handler/index.js +0 -120
  919. package/src/http-server/worker-handler/worker-script.js +0 -6
  920. package/src/http-server/worker-handler/worker-thread.js +0 -106
  921. package/src/initializer.js +0 -35
  922. package/src/logger.js +0 -174
  923. package/src/routes/app-routes.js +0 -16
  924. package/src/routes/base-route.js +0 -82
  925. package/src/routes/basic-route.js +0 -76
  926. package/src/routes/built-in/errors/controller.js +0 -7
  927. package/src/routes/built-in/errors/not-found.ejs +0 -1
  928. package/src/routes/get-route.js +0 -42
  929. package/src/routes/index.js +0 -19
  930. package/src/routes/namespace-route.js +0 -42
  931. package/src/routes/post-route.js +0 -41
  932. package/src/routes/resolver.js +0 -102
  933. package/src/routes/resource-route.js +0 -61
  934. package/src/routes/root-route.js +0 -6
  935. package/src/templates/configuration.js +0 -60
  936. package/src/templates/generate-migration.js +0 -11
  937. package/src/templates/generate-model.js +0 -6
  938. package/src/templates/routes.js +0 -11
  939. package/src/testing/request-client.js +0 -77
  940. package/src/testing/test-files-finder.js +0 -191
  941. package/src/testing/test-runner.js +0 -301
  942. package/src/testing/test.js +0 -462
  943. package/src/utils/backtrace-cleaner.js +0 -27
  944. package/src/utils/ensure-error.js +0 -13
  945. package/src/utils/file-exists.js +0 -17
  946. package/src/utils/nest-callbacks.js +0 -15
  947. package/src/utils/rest-args-error.js +0 -13
  948. package/src/utils/with-tracked-stack-async-hooks.js +0 -85
  949. package/src/utils/with-tracked-stack.js +0 -30
  950. package/tsconfig.json +0 -15
@@ -0,0 +1,1408 @@
1
+ // @ts-check
2
+ /**
3
+ * @typedef {{type: string, message: string}} ValidationErrorObjectType
4
+ */
5
+ import BelongsToInstanceRelationship from "./instance-relationships/belongs-to.js";
6
+ import BelongsToRelationship from "./relationships/belongs-to.js";
7
+ import Configuration from "../../configuration.js";
8
+ import FromTable from "../query/from-table.js";
9
+ import Handler from "../handler.js";
10
+ import HasManyInstanceRelationship from "./instance-relationships/has-many.js";
11
+ import HasManyRelationship from "./relationships/has-many.js";
12
+ import HasOneInstanceRelationship from "./instance-relationships/has-one.js";
13
+ import HasOneRelationship from "./relationships/has-one.js";
14
+ import * as inflection from "inflection";
15
+ import Query from "../query/index.js";
16
+ import restArgsError from "../../utils/rest-args-error.js";
17
+ import ValidatorsPresence from "./validators/presence.js";
18
+ import ValidatorsUniqueness from "./validators/uniqueness.js";
19
+ class ValidationError extends Error {
20
+ /**
21
+ * @returns {VelociousDatabaseRecord}
22
+ */
23
+ getModel() {
24
+ if (!this._model)
25
+ throw new Error("Model hasn't been set");
26
+ return this._model;
27
+ }
28
+ /**
29
+ * @param {VelociousDatabaseRecord} model
30
+ */
31
+ setModel(model) {
32
+ this._model = model;
33
+ }
34
+ /**
35
+ * @returns {Record<string, ValidationErrorObjectType[]>}
36
+ */
37
+ getValidationErrors() {
38
+ if (!this._validationErrors)
39
+ throw new Error("Validation errors hasn't been set");
40
+ return this._validationErrors;
41
+ }
42
+ /**
43
+ * @param {Record<string, ValidationErrorObjectType[]>} validationErrors
44
+ */
45
+ setValidationErrors(validationErrors) {
46
+ this._validationErrors = validationErrors;
47
+ }
48
+ }
49
+ class VelociousDatabaseRecord {
50
+ static getAttributeNameToColumnNameMap() {
51
+ if (!this._attributeNameToColumnName) {
52
+ /** @type {Record<string, string>} */
53
+ this._attributeNameToColumnName = {};
54
+ }
55
+ return this._attributeNameToColumnName;
56
+ }
57
+ static getColumnNameToAttributeNameMap() {
58
+ if (!this._columnNameToAttributeName) {
59
+ /** @type {Record<string, string>} */
60
+ this._columnNameToAttributeName = {};
61
+ }
62
+ return this._columnNameToAttributeName;
63
+ }
64
+ static getTranslationsMap() {
65
+ if (!this._translations) {
66
+ /** @type {Record<string, object>} */
67
+ this._translations = {};
68
+ }
69
+ return this._translations;
70
+ }
71
+ static getValidatorsMap() {
72
+ if (!this._validators) {
73
+ /** @type {Record<string, import("./validators/base.js").default[]>} */
74
+ this._validators = {};
75
+ }
76
+ return this._validators;
77
+ }
78
+ static getValidatorTypesMap() {
79
+ if (!this._validatorTypes) {
80
+ /** @type {Record<string, typeof import("./validators/base.js").default>} */
81
+ this._validatorTypes = {};
82
+ }
83
+ return this._validatorTypes;
84
+ }
85
+ /** @type {Record<string, any>} */
86
+ _attributes = {};
87
+ /** @type {Record<string, any>} */
88
+ _changes = {};
89
+ /** @type {Record<string, import("../drivers/base-column.js").default>} */
90
+ _columnsAsHash = {};
91
+ /** @type {import("../drivers/base.js").default | undefined} */
92
+ __connection = undefined;
93
+ /** @type {Record<string, import("./instance-relationships/base.js").default>} */
94
+ _instanceRelationships = {};
95
+ /** @type {string | undefined} */
96
+ __tableName = undefined;
97
+ /** @type {Record<string, ValidationErrorObjectType[]>} */
98
+ _validationErrors = {};
99
+ static validatorTypes() {
100
+ return this.getValidatorTypesMap();
101
+ }
102
+ /**
103
+ * @param {string} name
104
+ * @param {typeof import("./validators/base.js").default} validatorClass
105
+ */
106
+ static registerValidatorType(name, validatorClass) {
107
+ this.validatorTypes()[name] = validatorClass;
108
+ }
109
+ /**
110
+ * @param {string} validatorName
111
+ * @returns {typeof import("./validators/base.js").default}
112
+ */
113
+ static getValidatorType(validatorName) {
114
+ if (!(validatorName in this.validatorTypes()))
115
+ throw new Error(`Validator type ${validatorName} not found`);
116
+ return this.validatorTypes()[validatorName];
117
+ }
118
+ /**
119
+ * @param {string} relationshipName
120
+ * @returns {boolean}
121
+ */
122
+ static _relationshipExists(relationshipName) {
123
+ if (relationshipName in this.getRelationshipsMap()) {
124
+ return true;
125
+ }
126
+ return false;
127
+ }
128
+ /**
129
+ * @typedef {object} RelationshipDataArgumentType
130
+ * @property {string} [className]
131
+ * @property {typeof VelociousDatabaseRecord} [klass]
132
+ * @property {string} [type]
133
+ */
134
+ /**
135
+ * @param {string} relationshipName
136
+ * @param {RelationshipDataArgumentType} data
137
+ */
138
+ static _defineRelationship(relationshipName, data) {
139
+ if (!relationshipName)
140
+ throw new Error(`Invalid relationship name given: ${relationshipName}`);
141
+ if (this._relationshipExists(relationshipName))
142
+ throw new Error(`Relationship ${relationshipName} already exists`);
143
+ const actualData = Object.assign({
144
+ modelClass: this,
145
+ relationshipName,
146
+ type: "hasMany"
147
+ }, data);
148
+ if (!actualData.className && !actualData.klass) {
149
+ actualData.className = inflection.camelize(inflection.singularize(relationshipName));
150
+ }
151
+ let relationship;
152
+ if (actualData.type == "belongsTo") {
153
+ relationship = new BelongsToRelationship(actualData);
154
+ this.prototype[relationshipName] = function () {
155
+ const relationship = this.getRelationshipByName(relationshipName);
156
+ return relationship.loaded();
157
+ };
158
+ this.prototype[`build${inflection.camelize(relationshipName)}`] = function (attributes) {
159
+ const instanceRelationship = this.getRelationshipByName(relationshipName);
160
+ const record = instanceRelationship.build(attributes);
161
+ const inverseOf = instanceRelationship.getRelationship().getInverseOf();
162
+ if (inverseOf) {
163
+ const inverseInstanceRelationship = record.getRelationshipByName(inverseOf);
164
+ inverseInstanceRelationship.setAutoSave(false);
165
+ if (inverseInstanceRelationship.getType() == "hasOne") {
166
+ inverseInstanceRelationship.setLoaded(this);
167
+ }
168
+ else if (inverseInstanceRelationship.getType() == "hasMany") {
169
+ inverseInstanceRelationship.addToLoaded(this);
170
+ }
171
+ else {
172
+ throw new Error(`Unknown relationship type: ${inverseInstanceRelationship.getType()}`);
173
+ }
174
+ }
175
+ return record;
176
+ };
177
+ this.prototype[`load${inflection.camelize(relationshipName)}`] = async function () {
178
+ await this.getRelationshipByName(relationshipName).load();
179
+ };
180
+ this.prototype[`set${inflection.camelize(relationshipName)}`] = function (model) {
181
+ const relationship = this.getRelationshipByName(relationshipName);
182
+ relationship.setLoaded(model);
183
+ relationship.setDirty(true);
184
+ };
185
+ }
186
+ else if (actualData.type == "hasMany") {
187
+ relationship = new HasManyRelationship(actualData);
188
+ this.prototype[relationshipName] = function () {
189
+ return /** @type {import("./instance-relationships/has-many.js").default} */ (this.getRelationshipByName(relationshipName));
190
+ };
191
+ this.prototype[`${relationshipName}Loaded`] = function () {
192
+ return this.getRelationshipByName(relationshipName).loaded();
193
+ };
194
+ this.prototype[`load${inflection.camelize(relationshipName)}`] = async function () {
195
+ await this.getRelationshipByName(relationshipName).load();
196
+ };
197
+ }
198
+ else if (actualData.type == "hasOne") {
199
+ relationship = new HasOneRelationship(actualData);
200
+ this.prototype[relationshipName] = function () {
201
+ return this.getRelationshipByName(relationshipName).loaded();
202
+ };
203
+ this.prototype[`build${inflection.camelize(relationshipName)}`] = function (attributes) {
204
+ const instanceRelationship = this.getRelationshipByName(relationshipName);
205
+ const record = instanceRelationship.build(attributes);
206
+ const inverseOf = instanceRelationship.getRelationship().getInverseOf();
207
+ if (inverseOf) {
208
+ const inverseInstanceRelationship = record.getRelationshipByName(inverseOf);
209
+ inverseInstanceRelationship.setAutoSave(false);
210
+ inverseInstanceRelationship.setLoaded(this);
211
+ }
212
+ return record;
213
+ };
214
+ this.prototype[`load${inflection.camelize(relationshipName)}`] = async function () {
215
+ await this.getRelationshipByName(relationshipName).load();
216
+ };
217
+ }
218
+ else {
219
+ throw new Error(`Unknown relationship type: ${actualData.type}`);
220
+ }
221
+ this.getRelationshipsMap()[relationshipName] = relationship;
222
+ }
223
+ /**
224
+ * @param {string} relationshipName
225
+ * @returns {import("./relationships/base.js").default}
226
+ */
227
+ static getRelationshipByName(relationshipName) {
228
+ const relationship = this.getRelationshipsMap()[relationshipName];
229
+ if (!relationship)
230
+ throw new Error(`No relationship by that name: ${relationshipName}`);
231
+ return relationship;
232
+ }
233
+ /**
234
+ * @returns {Array<import("./relationships/base.js").default>}
235
+ */
236
+ static getRelationships() {
237
+ return Object.values(this.getRelationshipsMap());
238
+ }
239
+ static getRelationshipsMap() {
240
+ if (!this._relationships) {
241
+ /** @type {Record<string, import("./relationships/base.js").default>} */
242
+ this._relationships = {};
243
+ }
244
+ return this._relationships;
245
+ }
246
+ /**
247
+ * @returns {Array<string>}
248
+ */
249
+ static getRelationshipNames() {
250
+ return this.getRelationships().map((relationship) => relationship.getRelationshipName());
251
+ }
252
+ /**
253
+ * @param {string} relationshipName
254
+ * @returns {import("./instance-relationships/base.js").default}
255
+ */
256
+ getRelationshipByName(relationshipName) {
257
+ if (!(relationshipName in this._instanceRelationships)) {
258
+ const modelClassRelationship = this.getModelClass().getRelationshipByName(relationshipName);
259
+ const relationshipType = modelClassRelationship.getType();
260
+ let instanceRelationship;
261
+ if (relationshipType == "belongsTo") {
262
+ instanceRelationship = new BelongsToInstanceRelationship({ model: this, relationship: modelClassRelationship });
263
+ }
264
+ else if (relationshipType == "hasMany") {
265
+ instanceRelationship = new HasManyInstanceRelationship({ model: this, relationship: modelClassRelationship });
266
+ }
267
+ else if (relationshipType == "hasOne") {
268
+ instanceRelationship = new HasOneInstanceRelationship({ model: this, relationship: modelClassRelationship });
269
+ }
270
+ else {
271
+ throw new Error(`Unknown relationship type: ${relationshipType}`);
272
+ }
273
+ this._instanceRelationships[relationshipName] = instanceRelationship;
274
+ }
275
+ return this._instanceRelationships[relationshipName];
276
+ }
277
+ /**
278
+ * Adds a belongs-to-relationship to the model.
279
+ * @param {string} relationshipName The name of the relationship.
280
+ * @param {object} [options] The options for the relationship.
281
+ */
282
+ static belongsTo(relationshipName, options) {
283
+ this._defineRelationship(relationshipName, Object.assign({ type: "belongsTo" }, options));
284
+ }
285
+ /**
286
+ * @returns {import("../drivers/base.js").default}
287
+ */
288
+ static connection() {
289
+ const databasePool = this._getConfiguration().getDatabasePool(this.getDatabaseIdentifier());
290
+ const connection = databasePool.getCurrentConnection();
291
+ if (!connection)
292
+ throw new Error("No connection?");
293
+ return connection;
294
+ }
295
+ /**
296
+ * @param {Record<string, any>} [attributes]
297
+ * @returns {Promise<InstanceType<typeof this>>}
298
+ */
299
+ static async create(attributes) {
300
+ const record = new this(attributes);
301
+ await record.save();
302
+ return record;
303
+ }
304
+ /**
305
+ * @returns {import("../../configuration.js").default}
306
+ */
307
+ static _getConfiguration() {
308
+ if (!this._configuration) {
309
+ this._configuration = Configuration.current();
310
+ if (!this._configuration) {
311
+ throw new Error("Configuration hasn't been set (model class probably hasn't been initialized)");
312
+ }
313
+ }
314
+ return this._configuration;
315
+ }
316
+ /**
317
+ * @returns {import("../../configuration.js").default}
318
+ */
319
+ _getConfiguration() {
320
+ return this.getModelClass()._getConfiguration();
321
+ }
322
+ /**
323
+ * Adds a has-many-relationship to the model class.
324
+ * @param {string} relationshipName The name of the relationship (e.g. "posts")
325
+ * @param {object} options The options for the relationship (e.g. {className: "Post"})
326
+ * @returns {void}
327
+ */
328
+ static hasMany(relationshipName, options = {}) {
329
+ return this._defineRelationship(relationshipName, Object.assign({ type: "hasMany" }, options));
330
+ }
331
+ /**
332
+ * Adds a has-one-relationship to the model class.
333
+ * @param {string} relationshipName The name of the relationship (e.g. "post")
334
+ * @param {object} options The options for the relationship (e.g. {className: "Post"})
335
+ * @returns {void}
336
+ */
337
+ static hasOne(relationshipName, options = {}) {
338
+ return this._defineRelationship(relationshipName, Object.assign({ type: "hasOne" }, options));
339
+ }
340
+ /**
341
+ * @param {string} attributeName
342
+ * @returns {string}
343
+ */
344
+ static humanAttributeName(attributeName) {
345
+ const modelNameKey = inflection.underscore(this.constructor.name);
346
+ return this._getConfiguration().getTranslator()(`velocious.database.record.attributes.${modelNameKey}.${attributeName}`, { defaultValue: inflection.camelize(attributeName) });
347
+ }
348
+ /**
349
+ * @returns {string}
350
+ */
351
+ static getDatabaseType() {
352
+ if (!this._databaseType)
353
+ throw new Error("Database type hasn't been set");
354
+ return this._databaseType;
355
+ }
356
+ /**
357
+ * @param {object} args
358
+ * @param {import("../../configuration.js").default} args.configuration
359
+ * @returns {Promise<void>}
360
+ */
361
+ static async initializeRecord({ configuration, ...restArgs }) {
362
+ restArgsError(restArgs);
363
+ if (!configuration)
364
+ throw new Error(`No configuration given for ${this.name}`);
365
+ this._configuration = configuration;
366
+ this._configuration.registerModelClass(this);
367
+ this._databaseType = this.connection().getType();
368
+ this._table = await this.connection().getTableByName(this.tableName());
369
+ this._columns = await this._getTable().getColumns();
370
+ /** @type {Record<string, import("../drivers/base-column.js").default>} */
371
+ this._columnsAsHash = {};
372
+ const columnNameToAttributeName = this.getColumnNameToAttributeNameMap();
373
+ const attributeNameToColumnName = this.getAttributeNameToColumnNameMap();
374
+ for (const column of this._columns) {
375
+ this._columnsAsHash[column.getName()] = column;
376
+ const camelizedColumnName = inflection.camelize(column.getName(), true);
377
+ const camelizedColumnNameBigFirst = inflection.camelize(column.getName());
378
+ attributeNameToColumnName[camelizedColumnName] = column.getName();
379
+ columnNameToAttributeName[column.getName()] = camelizedColumnName;
380
+ this.prototype[camelizedColumnName] = function () {
381
+ return this.readAttribute(camelizedColumnName);
382
+ };
383
+ this.prototype[`set${camelizedColumnNameBigFirst}`] = function (newValue) {
384
+ return this._setColumnAttribute(camelizedColumnName, newValue);
385
+ };
386
+ this.prototype[`has${camelizedColumnNameBigFirst}`] = function () {
387
+ let value = this[camelizedColumnName]();
388
+ return this._hasAttribute(value);
389
+ };
390
+ }
391
+ await this._defineTranslationMethods();
392
+ this._initialized = true;
393
+ }
394
+ /**
395
+ * @param {any} value
396
+ * @returns {boolean}
397
+ */
398
+ _hasAttribute(value) {
399
+ if (typeof value == "string") {
400
+ value = value.trim();
401
+ }
402
+ if (value) {
403
+ return true;
404
+ }
405
+ return false;
406
+ }
407
+ /**
408
+ * @returns {boolean}
409
+ */
410
+ static isInitialized() {
411
+ if (this._initialized)
412
+ return true;
413
+ return false;
414
+ }
415
+ static async _defineTranslationMethods() {
416
+ if (this._translations) {
417
+ const locales = this._getConfiguration().getLocales();
418
+ if (!locales)
419
+ throw new Error("Locales hasn't been set in the configuration");
420
+ await this.getTranslationClass().initializeRecord({ configuration: this._getConfiguration() });
421
+ for (const name in this._translations) {
422
+ const nameCamelized = inflection.camelize(name);
423
+ const setterMethodName = `set${nameCamelized}`;
424
+ this.prototype[name] = function getTranslatedAttribute() {
425
+ const locale = this._getConfiguration().getLocale();
426
+ return this._getTranslatedAttributeWithFallback(name, locale);
427
+ };
428
+ this.prototype[`has${nameCamelized}`] = function hasTranslatedAttribute() {
429
+ const candidate = this[name];
430
+ if (typeof candidate == "function") {
431
+ const value = candidate.bind(this)();
432
+ return this._hasAttribute(value);
433
+ }
434
+ else {
435
+ throw new Error(`Expected candidate to be a function but it was: ${typeof candidate}`);
436
+ }
437
+ };
438
+ this.prototype[setterMethodName] = function setTranslatedAttribute(newValue) {
439
+ const locale = this._getConfiguration().getLocale();
440
+ return this._setTranslatedAttribute(name, locale, newValue);
441
+ };
442
+ for (const locale of locales) {
443
+ const localeCamelized = inflection.camelize(locale);
444
+ const getterMethodNameLocalized = `${name}${localeCamelized}`;
445
+ const setterMethodNameLocalized = `${setterMethodName}${localeCamelized}`;
446
+ const hasMethodNameLocalized = `has${inflection.camelize(name)}${localeCamelized}`;
447
+ this.prototype[getterMethodNameLocalized] = function getTranslatedAttributeWithLocale() {
448
+ return this._getTranslatedAttribute(name, locale);
449
+ };
450
+ this.prototype[setterMethodNameLocalized] = function setTranslatedAttributeWithLocale(newValue) {
451
+ return this._setTranslatedAttribute(name, locale, newValue);
452
+ };
453
+ this.prototype[hasMethodNameLocalized] = function hasTranslatedAttribute() {
454
+ const candidate = this[getterMethodNameLocalized];
455
+ if (typeof candidate == "function") {
456
+ const value = candidate.bind(this)();
457
+ return this._hasAttribute(value);
458
+ }
459
+ else {
460
+ throw new Error(`Expected candidate to be a function but it was: ${typeof candidate}`);
461
+ }
462
+ };
463
+ }
464
+ }
465
+ }
466
+ }
467
+ /**
468
+ * @returns {string}
469
+ */
470
+ static getDatabaseIdentifier() {
471
+ return this._databaseIdentifier || "default";
472
+ }
473
+ /**
474
+ * @param {string} databaseIdentifier
475
+ * @returns {void}
476
+ */
477
+ static setDatabaseIdentifier(databaseIdentifier) {
478
+ this._databaseIdentifier = databaseIdentifier;
479
+ }
480
+ /**
481
+ * @param {string} name
482
+ * @returns {*}
483
+ */
484
+ getAttribute(name) {
485
+ const columnName = inflection.underscore(name);
486
+ if (!this.isNewRecord() && !(columnName in this._attributes)) {
487
+ throw new Error(`${this.constructor.name}#${name} attribute hasn't been loaded yet in ${Object.keys(this._attributes).join(", ")}`);
488
+ }
489
+ return this._attributes[columnName];
490
+ }
491
+ /** @returns {typeof VelociousDatabaseRecord} */
492
+ getModelClass() {
493
+ const modelClass = /** @type {typeof VelociousDatabaseRecord} */ (this.constructor);
494
+ return modelClass;
495
+ }
496
+ /**
497
+ * @param {string} name
498
+ * @param {*} newValue
499
+ * @returns {void}
500
+ */
501
+ setAttribute(name, newValue) {
502
+ const setterName = `set${inflection.camelize(name)}`;
503
+ if (!this.getModelClass().isInitialized())
504
+ throw new Error(`${this.constructor.name} model isn't initialized yet`);
505
+ if (!(setterName in this))
506
+ throw new Error(`No such setter method: ${this.constructor.name}#${setterName}`);
507
+ this[setterName](newValue);
508
+ }
509
+ /**
510
+ * @param {string} name
511
+ * @param {any} newValue
512
+ */
513
+ _setColumnAttribute(name, newValue) {
514
+ if (!this.getModelClass()._attributeNameToColumnName)
515
+ throw new Error("No attribute-to-column mapping. Has record been initialized?");
516
+ const columnName = this.getModelClass().getAttributeNameToColumnNameMap()[name];
517
+ if (!columnName)
518
+ throw new Error(`Couldn't figure out column name for attribute: ${name}`);
519
+ if (this._attributes[columnName] != newValue) {
520
+ this._changes[columnName] = newValue;
521
+ }
522
+ }
523
+ /**
524
+ * @returns {import("../drivers/base-column.js").default[]}
525
+ */
526
+ static getColumns() {
527
+ if (!this._columns)
528
+ throw new Error(`${this.name} hasn't been initialized yet`);
529
+ return this._columns;
530
+ }
531
+ /**
532
+ * @returns {Array<string>}
533
+ */
534
+ static getColumnNames() {
535
+ if (!this._columnNames) {
536
+ this._columnNames = this.getColumns().map((column) => column.getName());
537
+ }
538
+ return this._columnNames;
539
+ }
540
+ /**
541
+ * @returns {import("../drivers/base-table.js").default}
542
+ */
543
+ static _getTable() {
544
+ if (!this._table)
545
+ throw new Error(`${this.name} hasn't been initialized yet`);
546
+ return this._table;
547
+ }
548
+ /**
549
+ * @param {Array<string>} columns
550
+ * @param {Array<Array<string>>} rows
551
+ * @returns {Promise<void>}
552
+ */
553
+ static async insertMultiple(columns, rows) {
554
+ return await this.connection().insertMultiple(this.tableName(), columns, rows);
555
+ }
556
+ /**
557
+ * @returns {Promise<number>}
558
+ */
559
+ static async nextPrimaryKey() {
560
+ const primaryKey = this.primaryKey();
561
+ const tableName = this.tableName();
562
+ const connection = this.connection();
563
+ const newestRecord = await this.order(`${connection.quoteTable(tableName)}.${connection.quoteColumn(primaryKey)}`).last();
564
+ if (newestRecord) {
565
+ const id = newestRecord.id();
566
+ if (typeof id == "number") {
567
+ return id + 1;
568
+ }
569
+ else {
570
+ throw new Error("ID from newest record wasn't a number");
571
+ }
572
+ }
573
+ else {
574
+ return 1;
575
+ }
576
+ }
577
+ /**
578
+ * @param {string} primaryKey
579
+ * @returns {void}
580
+ */
581
+ static setPrimaryKey(primaryKey) {
582
+ this._primaryKey = primaryKey;
583
+ }
584
+ /**
585
+ * @returns {string}
586
+ */
587
+ static primaryKey() {
588
+ if (this._primaryKey)
589
+ return this._primaryKey;
590
+ return "id";
591
+ }
592
+ /**
593
+ * @returns {Promise<void>}
594
+ */
595
+ async save() {
596
+ const isNewRecord = this.isNewRecord();
597
+ let result;
598
+ await this._getConfiguration().ensureConnections(async () => {
599
+ await this._runValidations();
600
+ await this.getModelClass().transaction(async () => {
601
+ // If any belongs-to-relationships was saved, then updated-at should still be set on this record.
602
+ const { savedCount } = await this._autoSaveBelongsToRelationships();
603
+ if (this.isPersisted()) {
604
+ // If any has-many-relationships will be saved, then updated-at should still be set on this record.
605
+ const autoSaveHasManyrelationships = this._autoSaveHasManyAndHasOneRelationshipsToSave();
606
+ if (this._hasChanges() || savedCount > 0 || autoSaveHasManyrelationships.length > 0) {
607
+ result = await this._updateRecordWithChanges();
608
+ }
609
+ }
610
+ else {
611
+ result = await this._createNewRecord();
612
+ }
613
+ await this._autoSaveHasManyAndHasOneRelationships({ isNewRecord });
614
+ });
615
+ });
616
+ return result;
617
+ }
618
+ async _autoSaveBelongsToRelationships() {
619
+ let savedCount = 0;
620
+ for (const relationshipName in this._instanceRelationships) {
621
+ const instanceRelationship = this._instanceRelationships[relationshipName];
622
+ if (instanceRelationship.getType() != "belongsTo") {
623
+ continue;
624
+ }
625
+ if (instanceRelationship.getAutoSave() === false) {
626
+ continue;
627
+ }
628
+ const model = instanceRelationship.loaded();
629
+ if (model) {
630
+ if (model instanceof VelociousDatabaseRecord) {
631
+ if (model.isChanged()) {
632
+ await model.save();
633
+ const foreignKey = instanceRelationship.getForeignKey();
634
+ this.setAttribute(foreignKey, model.id());
635
+ instanceRelationship.setPreloaded(true);
636
+ instanceRelationship.setDirty(false);
637
+ savedCount++;
638
+ }
639
+ }
640
+ else {
641
+ throw new Error(`Expected a record but got: ${typeof model}`);
642
+ }
643
+ }
644
+ }
645
+ return { savedCount };
646
+ }
647
+ _autoSaveHasManyAndHasOneRelationshipsToSave() {
648
+ const relationships = [];
649
+ for (const relationshipName in this._instanceRelationships) {
650
+ const instanceRelationship = this._instanceRelationships[relationshipName];
651
+ if (instanceRelationship.getType() != "hasMany" && instanceRelationship.getType() != "hasOne") {
652
+ continue;
653
+ }
654
+ if (instanceRelationship.getAutoSave() === false) {
655
+ continue;
656
+ }
657
+ /** @type {VelociousDatabaseRecord[]} */
658
+ let loaded;
659
+ const hasManyOrOneLoaded = instanceRelationship.getLoadedOrUndefined();
660
+ if (hasManyOrOneLoaded) {
661
+ if (Array.isArray(hasManyOrOneLoaded)) {
662
+ loaded = hasManyOrOneLoaded;
663
+ }
664
+ else if (hasManyOrOneLoaded instanceof VelociousDatabaseRecord) {
665
+ loaded = [hasManyOrOneLoaded];
666
+ }
667
+ else {
668
+ throw new Error(`Expected hasOneLoaded to be a record but it wasn't: ${typeof hasManyOrOneLoaded}`);
669
+ }
670
+ }
671
+ else {
672
+ continue;
673
+ }
674
+ let useRelationship = false;
675
+ if (loaded) {
676
+ for (const model of loaded) {
677
+ const foreignKey = instanceRelationship.getForeignKey();
678
+ model.setAttribute(foreignKey, this.id());
679
+ if (model.isChanged()) {
680
+ useRelationship = true;
681
+ continue;
682
+ }
683
+ }
684
+ }
685
+ if (useRelationship)
686
+ relationships.push(instanceRelationship);
687
+ }
688
+ return relationships;
689
+ }
690
+ /**
691
+ * @param {object} args
692
+ * @param {boolean} args.isNewRecord
693
+ */
694
+ async _autoSaveHasManyAndHasOneRelationships({ isNewRecord }) {
695
+ for (const instanceRelationship of this._autoSaveHasManyAndHasOneRelationshipsToSave()) {
696
+ let hasManyOrOneLoaded = instanceRelationship.getLoadedOrUndefined();
697
+ /** @type {VelociousDatabaseRecord[]} */
698
+ let loaded;
699
+ if (hasManyOrOneLoaded === undefined) {
700
+ loaded = [];
701
+ }
702
+ else if (hasManyOrOneLoaded instanceof VelociousDatabaseRecord) {
703
+ loaded = [hasManyOrOneLoaded];
704
+ }
705
+ else if (Array.isArray(hasManyOrOneLoaded)) {
706
+ loaded = hasManyOrOneLoaded;
707
+ }
708
+ else {
709
+ throw new Error(`Unexpected type for hasManyOrOneLoaded: ${typeof hasManyOrOneLoaded}`);
710
+ }
711
+ for (const model of loaded) {
712
+ const foreignKey = instanceRelationship.getForeignKey();
713
+ model.setAttribute(foreignKey, this.id());
714
+ if (model.isChanged()) {
715
+ await model.save();
716
+ }
717
+ }
718
+ if (isNewRecord) {
719
+ instanceRelationship.setPreloaded(true);
720
+ }
721
+ }
722
+ }
723
+ /**
724
+ * @returns {string}
725
+ */
726
+ static tableName() {
727
+ if (!this._tableName)
728
+ this._tableName = inflection.underscore(inflection.pluralize(this.name));
729
+ return this._tableName;
730
+ }
731
+ /**
732
+ * @param {string} tableName
733
+ * @returns {void}
734
+ */
735
+ static setTableName(tableName) {
736
+ this._tableName = tableName;
737
+ }
738
+ /**
739
+ * @param {function() : Promise<void>} callback
740
+ * @returns {Promise<*>}
741
+ */
742
+ static async transaction(callback) {
743
+ const useTransactions = this.connection().getArgs().record?.transactions;
744
+ if (useTransactions !== false) {
745
+ return await this.connection().transaction(callback);
746
+ }
747
+ else {
748
+ return await callback();
749
+ }
750
+ }
751
+ /**
752
+ * @param {...string} names
753
+ * @returns {void}
754
+ */
755
+ static translates(...names) {
756
+ const translations = this.getTranslationsMap();
757
+ for (const name of names) {
758
+ if (name in translations)
759
+ throw new Error(`Translation already exists: ${name}`);
760
+ translations[name] = {};
761
+ if (!this._relationshipExists("translations")) {
762
+ this._defineRelationship("translations", { klass: this.getTranslationClass(), type: "hasMany" });
763
+ }
764
+ }
765
+ }
766
+ /**
767
+ * @returns {typeof VelociousDatabaseRecord}
768
+ */
769
+ static getTranslationClass() {
770
+ if (this._translationClass)
771
+ return this._translationClass;
772
+ if (this.tableName().endsWith("_translations"))
773
+ throw new Error("Trying to define a translations class for a translation class");
774
+ const className = `${this.name}Translation`;
775
+ const TranslationClass = class Translation extends VelociousDatabaseRecord {
776
+ };
777
+ const belongsTo = `${inflection.camelize(inflection.singularize(this.tableName()), true)}`;
778
+ Object.defineProperty(TranslationClass, "name", { value: className });
779
+ TranslationClass.setTableName(this.getTranslationsTableName());
780
+ TranslationClass.belongsTo(belongsTo);
781
+ this._translationClass = TranslationClass;
782
+ return this._translationClass;
783
+ }
784
+ /**
785
+ * @returns {string}
786
+ */
787
+ static getTranslationsTableName() {
788
+ const tableNameParts = this.tableName().split("_");
789
+ tableNameParts[tableNameParts.length - 1] = inflection.singularize(tableNameParts[tableNameParts.length - 1]);
790
+ return `${tableNameParts.join("_")}_translations`;
791
+ }
792
+ /**
793
+ * @returns {Promise<boolean>}
794
+ */
795
+ static async hasTranslationsTable() {
796
+ try {
797
+ await this.connection().getTableByName(this.getTranslationsTableName());
798
+ return true;
799
+ }
800
+ catch {
801
+ return false;
802
+ }
803
+ }
804
+ /**
805
+ * Adds a validation to an attribute.
806
+ * @param {string} attributeName The name of the attribute to validate.
807
+ * @param {Record<string, boolean | Record<string, any>>} validators The validators to add. Key is the validator name, value is the validator arguments.
808
+ */
809
+ static async validates(attributeName, validators) {
810
+ for (const validatorName in validators) {
811
+ /** @type {Record<string, any>} */
812
+ let validatorArgs;
813
+ /** @type {boolean} */
814
+ let useValidator = true;
815
+ const validatorArgsCandidate = validators[validatorName];
816
+ if (typeof validatorArgsCandidate == "boolean") {
817
+ validatorArgs = {};
818
+ useValidator;
819
+ if (!validatorArgsCandidate) {
820
+ useValidator = false;
821
+ }
822
+ }
823
+ else {
824
+ validatorArgs = validatorArgsCandidate;
825
+ }
826
+ if (!useValidator) {
827
+ continue;
828
+ }
829
+ const ValidatorClass = this.getValidatorType(validatorName);
830
+ const validator = new ValidatorClass({ attributeName, args: validatorArgs });
831
+ if (!this._validators)
832
+ this._validators = {};
833
+ if (!(attributeName in this._validators))
834
+ this._validators[attributeName] = [];
835
+ this._validators[attributeName].push(validator);
836
+ }
837
+ }
838
+ /**
839
+ * @abstract
840
+ * @returns {TranslationBase[]}
841
+ */
842
+ translationsLoaded() {
843
+ throw new Error("'translationsLoaded' not implemented");
844
+ }
845
+ /**
846
+ * @param {string} name
847
+ * @param {string} locale
848
+ * @returns {*}
849
+ */
850
+ _getTranslatedAttribute(name, locale) {
851
+ const translation = this.translationsLoaded().find((translation) => translation.locale() == locale);
852
+ if (translation) {
853
+ /** @type {Record<string, unknown>} */
854
+ // @ts-expect-error
855
+ const dict = translation;
856
+ const attributeMethod = /** @type {function() : any | undefined} */ (dict[name]);
857
+ if (typeof attributeMethod == "function") {
858
+ return attributeMethod.bind(translation)();
859
+ }
860
+ else {
861
+ throw new Error(`No such translated method: ${name} (${typeof attributeMethod})`);
862
+ }
863
+ }
864
+ }
865
+ /**
866
+ * @param {string} name
867
+ * @param {string} locale
868
+ * @returns {*}
869
+ */
870
+ _getTranslatedAttributeWithFallback(name, locale) {
871
+ let localesInOrder;
872
+ const fallbacks = this._getConfiguration().getLocaleFallbacks();
873
+ if (fallbacks && locale in fallbacks) {
874
+ localesInOrder = fallbacks[locale];
875
+ }
876
+ else {
877
+ localesInOrder = [locale];
878
+ }
879
+ for (const fallbackLocale of localesInOrder) {
880
+ const result = this._getTranslatedAttribute(name, fallbackLocale);
881
+ if (result && result.trim() != "") {
882
+ return result;
883
+ }
884
+ }
885
+ }
886
+ /**
887
+ * @param {string} name
888
+ * @param {string} locale
889
+ * @param {*} newValue
890
+ * @returns {void}
891
+ */
892
+ _setTranslatedAttribute(name, locale, newValue) {
893
+ /** @type {VelociousDatabaseRecord | TranslationBase | undefined} */
894
+ let translation;
895
+ translation = this.translationsLoaded()?.find((translation) => translation.locale() == locale);
896
+ if (!translation) {
897
+ const instanceRelationship = this.getRelationshipByName("translations");
898
+ translation = instanceRelationship.build({ locale });
899
+ }
900
+ /** @type {Record<string, any>} */
901
+ const assignments = {};
902
+ assignments[name] = newValue;
903
+ translation.assign(assignments);
904
+ }
905
+ /**
906
+ * @returns {Query}
907
+ */
908
+ static _newQuery() {
909
+ const handler = new Handler();
910
+ const query = new Query({
911
+ driver: this.connection(),
912
+ handler,
913
+ modelClass: this
914
+ });
915
+ return query.from(new FromTable(this.tableName()));
916
+ }
917
+ /**
918
+ * @returns {string}
919
+ */
920
+ static orderableColumn() {
921
+ // FIXME: Allow to change to 'created_at' if using UUID?
922
+ return this.primaryKey();
923
+ }
924
+ /**
925
+ * @returns {Query}
926
+ */
927
+ static all() {
928
+ return this._newQuery();
929
+ }
930
+ /**
931
+ * @returns {Promise<number>}
932
+ */
933
+ static async count() {
934
+ return await this._newQuery().count();
935
+ }
936
+ static async destroyAll() {
937
+ return await this._newQuery().destroyAll();
938
+ }
939
+ /**
940
+ * @param {number|string} recordId
941
+ * @returns {Promise<InstanceType<typeof this>>}
942
+ */
943
+ static async find(recordId) {
944
+ return await this._newQuery().find(recordId);
945
+ }
946
+ /**
947
+ * @param {{[key: string]: any}} conditions
948
+ * @returns {Promise<InstanceType<typeof this> | null>}
949
+ */
950
+ static async findBy(conditions) {
951
+ return await this._newQuery().findBy(conditions);
952
+ }
953
+ /**
954
+ * @param {{[key: string]: any}} conditions
955
+ * @returns {Promise<InstanceType<typeof this>>}
956
+ */
957
+ static async findByOrFail(conditions) {
958
+ return await this._newQuery().findByOrFail(conditions);
959
+ }
960
+ /**
961
+ * @param {{[key: string]: any}} conditions
962
+ * @param {function() : void} callback
963
+ * @returns {Promise<InstanceType<typeof this>>}
964
+ */
965
+ static async findOrCreateBy(conditions, callback) {
966
+ return await this._newQuery().findOrCreateBy(conditions, callback);
967
+ }
968
+ /**
969
+ * @param {object} conditions
970
+ * @param {function(import("../record/index.js").default) : void} callback
971
+ * @returns {Promise<InstanceType<typeof this>>}
972
+ */
973
+ static async findOrInitializeBy(conditions, callback) {
974
+ return await this._newQuery().findOrInitializeBy(conditions, callback);
975
+ }
976
+ /**
977
+ * @returns {Promise<InstanceType<typeof this>>}
978
+ */
979
+ static async first() {
980
+ return await this._newQuery().first();
981
+ }
982
+ /**
983
+ * @param {string|{[key: string]: any}} join
984
+ * @returns {Query}
985
+ */
986
+ static joins(join) {
987
+ return this._newQuery().joins(join);
988
+ }
989
+ /**
990
+ * @returns {Promise<InstanceType<typeof this>>}
991
+ */
992
+ static async last() {
993
+ return await this._newQuery().last();
994
+ }
995
+ /**
996
+ * @param {number} value
997
+ * @returns {Query}
998
+ */
999
+ static limit(value) {
1000
+ return this._newQuery().limit(value);
1001
+ }
1002
+ /**
1003
+ * @param {string | number} order
1004
+ * @returns {Query}
1005
+ */
1006
+ static order(order) {
1007
+ return this._newQuery().order(order);
1008
+ }
1009
+ /**
1010
+ * @param {import("../query/index.js").NestedPreloadRecord} preload
1011
+ * @returns {Query}
1012
+ */
1013
+ static preload(preload) {
1014
+ return this._newQuery().preload(preload);
1015
+ }
1016
+ /**
1017
+ * @param {import("../query/index.js").SelectArgumentType} select
1018
+ * @returns {Query}
1019
+ */
1020
+ static select(select) {
1021
+ return this._newQuery().select(select);
1022
+ }
1023
+ /**
1024
+ * @returns {Promise<VelociousDatabaseRecord[]>}
1025
+ */
1026
+ static toArray() {
1027
+ return this._newQuery().toArray();
1028
+ }
1029
+ /**
1030
+ * @param {import("../query/index.js").WhereArgumentType} where
1031
+ * @returns {Query}
1032
+ */
1033
+ static where(where) {
1034
+ return this._newQuery().where(where);
1035
+ }
1036
+ /**
1037
+ * @param {Record<string, any>} changes
1038
+ */
1039
+ constructor(changes = {}) {
1040
+ this._attributes = {};
1041
+ this._changes = {};
1042
+ this._isNewRecord = true;
1043
+ for (const key in changes) {
1044
+ this.setAttribute(key, changes[key]);
1045
+ }
1046
+ }
1047
+ /**
1048
+ * @param {object} attributes
1049
+ * @returns {void}
1050
+ */
1051
+ loadExistingRecord(attributes) {
1052
+ this._attributes = attributes;
1053
+ this._isNewRecord = false;
1054
+ }
1055
+ /**
1056
+ * Assigns the given attributes to the record.
1057
+ * @param {Record<string, any>} attributesToAssign
1058
+ * @returns {void}
1059
+ */
1060
+ assign(attributesToAssign) {
1061
+ for (const attributeToAssign in attributesToAssign) {
1062
+ this.setAttribute(attributeToAssign, attributesToAssign[attributeToAssign]);
1063
+ }
1064
+ }
1065
+ /**
1066
+ * Returns a the current attributes of the record (original attributes from database plus changes)
1067
+ * @returns {Record<string, any>}
1068
+ */
1069
+ attributes() {
1070
+ return Object.assign({}, this._attributes, this._changes);
1071
+ }
1072
+ /**
1073
+ * @returns {import("../drivers/base.js").default}
1074
+ */
1075
+ _connection() {
1076
+ if (this.__connection)
1077
+ return this.__connection;
1078
+ return this.getModelClass().connection();
1079
+ }
1080
+ /**
1081
+ * Destroys the record in the database and all of its dependent records.
1082
+ * @returns {Promise<void>}
1083
+ */
1084
+ async destroy() {
1085
+ for (const relationship of this.getModelClass().getRelationships()) {
1086
+ if (relationship.getDependent() != "destroy") {
1087
+ continue;
1088
+ }
1089
+ const instanceRelationship = this.getRelationshipByName(relationship.getRelationshipName());
1090
+ /** @type {VelociousDatabaseRecord[]} */
1091
+ let models;
1092
+ if (instanceRelationship.getType() == "belongsTo") {
1093
+ if (!instanceRelationship.isLoaded()) {
1094
+ await instanceRelationship.load();
1095
+ }
1096
+ const model = instanceRelationship.loaded();
1097
+ if (model instanceof VelociousDatabaseRecord) {
1098
+ models = [model];
1099
+ }
1100
+ else {
1101
+ throw new Error(`Unexpected loaded type: ${typeof model}`);
1102
+ }
1103
+ }
1104
+ else if (instanceRelationship.getType() == "hasMany") {
1105
+ if (!instanceRelationship.isLoaded()) {
1106
+ await instanceRelationship.load();
1107
+ }
1108
+ const loadedModels = instanceRelationship.loaded();
1109
+ if (Array.isArray(loadedModels)) {
1110
+ models = loadedModels;
1111
+ }
1112
+ else {
1113
+ throw new Error(`Unexpected loaded type: ${typeof loadedModels}`);
1114
+ }
1115
+ }
1116
+ else {
1117
+ throw new Error(`Unhandled relationship type: ${instanceRelationship.getType()}`);
1118
+ }
1119
+ for (const model of models) {
1120
+ if (model.isPersisted()) {
1121
+ await model.destroy();
1122
+ }
1123
+ }
1124
+ }
1125
+ /** @type {Record<string, any>} */
1126
+ const conditions = {};
1127
+ conditions[this.getModelClass().primaryKey()] = this.id();
1128
+ const sql = this._connection().deleteSql({
1129
+ conditions,
1130
+ tableName: this._tableName()
1131
+ });
1132
+ await this._connection().query(sql);
1133
+ }
1134
+ /** @returns {boolean} */
1135
+ _hasChanges() { return Object.keys(this._changes).length > 0; }
1136
+ /**
1137
+ * Returns true if the model has been changed since it was loaded from the database.
1138
+ * @returns {boolean}
1139
+ */
1140
+ isChanged() {
1141
+ if (this.isNewRecord() || this._hasChanges()) {
1142
+ return true;
1143
+ }
1144
+ // Check if a loaded sub-model of a relationship is changed and should be saved along with this model.
1145
+ if (this._instanceRelationships) {
1146
+ for (const instanceRelationshipName in this._instanceRelationships) {
1147
+ const instanceRelationship = this._instanceRelationships[instanceRelationshipName];
1148
+ let loaded = instanceRelationship._loaded;
1149
+ if (instanceRelationship.getAutoSave() === false) {
1150
+ continue;
1151
+ }
1152
+ if (!loaded)
1153
+ continue;
1154
+ if (!Array.isArray(loaded))
1155
+ loaded = [loaded];
1156
+ for (const model of loaded) {
1157
+ if (model.isChanged()) {
1158
+ return true;
1159
+ }
1160
+ }
1161
+ }
1162
+ }
1163
+ return false;
1164
+ }
1165
+ /** Returns the changes that have been made to this record since it was loaded from the database. */
1166
+ changes() {
1167
+ /** @type {Record<string, any[]>} */
1168
+ const changes = {};
1169
+ for (const changeKey in this._changes) {
1170
+ const changeValue = this._changes[changeKey];
1171
+ changes[changeKey] = [this._attributes[changeKey], changeValue];
1172
+ }
1173
+ return changes;
1174
+ }
1175
+ /**
1176
+ * @returns {string}
1177
+ */
1178
+ _tableName() {
1179
+ if (this.__tableName)
1180
+ return this.__tableName;
1181
+ return this.getModelClass().tableName();
1182
+ }
1183
+ /**
1184
+ * Reads an attribute value from the record.
1185
+ * @param {string} attributeName The name of the attribute to read. This is the attribute name, not the column name.
1186
+ * @returns {any}
1187
+ */
1188
+ readAttribute(attributeName) {
1189
+ const columnName = this.getModelClass().getAttributeNameToColumnNameMap()[attributeName];
1190
+ if (!columnName)
1191
+ throw new Error(`Couldn't figure out column name for attribute: ${attributeName} from these mappings: ${Object.keys(this.getModelClass().getAttributeNameToColumnNameMap()).join(", ")}`);
1192
+ return this.readColumn(columnName);
1193
+ }
1194
+ /**
1195
+ * Reads a column value from the record.
1196
+ * @param {string} attributeName The name of the column to read. This is the column name, not the attribute name.
1197
+ */
1198
+ readColumn(attributeName) {
1199
+ const column = this.getModelClass().getColumns().find((column) => column.getName() == attributeName);
1200
+ let result;
1201
+ if (attributeName in this._changes) {
1202
+ result = this._changes[attributeName];
1203
+ }
1204
+ else if (attributeName in this._attributes) {
1205
+ result = this._attributes[attributeName];
1206
+ }
1207
+ else if (this.isPersisted()) {
1208
+ throw new Error(`No such attribute or not selected ${this.constructor.name}#${attributeName}`);
1209
+ }
1210
+ if (column && this.getModelClass().getDatabaseType() == "sqlite") {
1211
+ if (result && (column.getType() == "date" || column.getType() == "datetime")) {
1212
+ result = new Date(Date.parse(result));
1213
+ }
1214
+ }
1215
+ return result;
1216
+ }
1217
+ _belongsToChanges() {
1218
+ /** @type {Record<string, any>} */
1219
+ const belongsToChanges = {};
1220
+ if (this._instanceRelationships) {
1221
+ for (const relationshipName in this._instanceRelationships) {
1222
+ const relationship = this._instanceRelationships[relationshipName];
1223
+ if (relationship.getType() == "belongsTo" && relationship.getDirty()) {
1224
+ const model = relationship.loaded();
1225
+ if (model) {
1226
+ if (model instanceof VelociousDatabaseRecord) {
1227
+ belongsToChanges[relationship.getForeignKey()] = model?.id();
1228
+ }
1229
+ else {
1230
+ throw new Error(`Unexpected model type: ${typeof model}`);
1231
+ }
1232
+ }
1233
+ }
1234
+ }
1235
+ }
1236
+ return belongsToChanges;
1237
+ }
1238
+ /**
1239
+ * @returns {Promise<void>}
1240
+ */
1241
+ async _createNewRecord() {
1242
+ if (!this.getModelClass().connection()["insertSql"]) {
1243
+ throw new Error(`No insertSql on ${this.getModelClass().connection().constructor.name}`);
1244
+ }
1245
+ const createdAtColumn = this.getModelClass().getColumns().find((column) => column.getName() == "created_at");
1246
+ const updatedAtColumn = this.getModelClass().getColumns().find((column) => column.getName() == "updated_at");
1247
+ const data = Object.assign({}, this._belongsToChanges(), this.attributes());
1248
+ const currentDate = new Date();
1249
+ if (createdAtColumn)
1250
+ data.created_at = currentDate;
1251
+ if (updatedAtColumn)
1252
+ data.updated_at = currentDate;
1253
+ const columnNames = this.getModelClass().getColumnNames();
1254
+ const sql = this._connection().insertSql({
1255
+ returnLastInsertedColumnNames: columnNames,
1256
+ tableName: this._tableName(),
1257
+ data
1258
+ });
1259
+ const insertResult = await this._connection().query(sql);
1260
+ const primaryKey = this.getModelClass().primaryKey();
1261
+ if (Array.isArray(insertResult) && insertResult[0] && insertResult[0][primaryKey]) {
1262
+ this._attributes = insertResult[0];
1263
+ this._changes = {};
1264
+ }
1265
+ else {
1266
+ const id = await this._connection().lastInsertID();
1267
+ await this._reloadWithId(id);
1268
+ }
1269
+ this.setIsNewRecord(false);
1270
+ // Mark all relationships as preloaded, since we don't expect anything to have magically appeared since we created the record.
1271
+ for (const relationship of this.getModelClass().getRelationships()) {
1272
+ const instanceRelationship = this.getRelationshipByName(relationship.getRelationshipName());
1273
+ if (instanceRelationship.getType() == "hasMany" && instanceRelationship.getLoadedOrUndefined() === null) {
1274
+ instanceRelationship.setLoaded([]);
1275
+ }
1276
+ instanceRelationship.setPreloaded(true);
1277
+ }
1278
+ }
1279
+ /**
1280
+ * @returns {Promise<void>}
1281
+ */
1282
+ async _updateRecordWithChanges() {
1283
+ /** @type {Record<string, any>} */
1284
+ const conditions = {};
1285
+ conditions[this.getModelClass().primaryKey()] = this.id();
1286
+ const changes = Object.assign({}, this._belongsToChanges(), this._changes);
1287
+ const updatedAtColumn = this.getModelClass().getColumns().find((column) => column.getName() == "updated_at");
1288
+ const currentDate = new Date();
1289
+ if (updatedAtColumn)
1290
+ changes.updated_at = currentDate;
1291
+ if (Object.keys(changes).length > 0) {
1292
+ const sql = this._connection().updateSql({
1293
+ tableName: this._tableName(),
1294
+ data: changes,
1295
+ conditions
1296
+ });
1297
+ await this._connection().query(sql);
1298
+ await this._reloadWithId(this.id());
1299
+ }
1300
+ }
1301
+ /**
1302
+ * @returns {number|string}
1303
+ */
1304
+ id() {
1305
+ if (!this.getModelClass()._columnNameToAttributeName) {
1306
+ throw new Error(`Column names mapping hasn't been set on ${this.constructor.name}. Has the model been initialized?`);
1307
+ }
1308
+ const primaryKey = this.getModelClass().primaryKey();
1309
+ const attributeName = this.getModelClass().getColumnNameToAttributeNameMap()[primaryKey];
1310
+ if (attributeName === undefined) {
1311
+ throw new Error(`Primary key ${primaryKey} doesn't exist in columns: ${Object.keys(this.getModelClass().getColumnNameToAttributeNameMap()).join(", ")}`);
1312
+ }
1313
+ return this.readAttribute(attributeName);
1314
+ }
1315
+ /**
1316
+ * @returns {boolean}
1317
+ */
1318
+ isPersisted() { return !this._isNewRecord; }
1319
+ /**
1320
+ * @returns {boolean}
1321
+ */
1322
+ isNewRecord() { return this._isNewRecord; }
1323
+ /**
1324
+ * @param {boolean} newIsNewRecord
1325
+ * @returns {void}
1326
+ */
1327
+ setIsNewRecord(newIsNewRecord) {
1328
+ this._isNewRecord = newIsNewRecord;
1329
+ }
1330
+ /**
1331
+ * @param {string | number} id
1332
+ */
1333
+ async _reloadWithId(id) {
1334
+ const primaryKey = this.getModelClass().primaryKey();
1335
+ /** @type {Record<string, any>} */
1336
+ const whereObject = {};
1337
+ whereObject[primaryKey] = id;
1338
+ const query = this.getModelClass().where(whereObject);
1339
+ const reloadedModel = await query.first();
1340
+ if (!reloadedModel)
1341
+ throw new Error(`${this.constructor.name}#${id} couldn't be reloaded - record didn't exist`);
1342
+ this._attributes = reloadedModel.attributes();
1343
+ this._changes = {};
1344
+ }
1345
+ /**
1346
+ * @returns {Promise<void>}
1347
+ */
1348
+ async reload() {
1349
+ this._reloadWithId(this.readAttribute("id"));
1350
+ }
1351
+ async _runValidations() {
1352
+ /** @type {Record<string, {type: string, message: string}>} */
1353
+ this._validationErrors = {};
1354
+ const validators = this.getModelClass()._validators;
1355
+ if (validators) {
1356
+ for (const attributeName in validators) {
1357
+ const attributeValidators = validators[attributeName];
1358
+ for (const validator of attributeValidators) {
1359
+ await validator.validate({ model: this, attributeName });
1360
+ }
1361
+ }
1362
+ }
1363
+ if (Object.keys(this._validationErrors).length > 0) {
1364
+ const validationError = new ValidationError(this.fullErrorMessages().join(". "));
1365
+ validationError.setValidationErrors(this._validationErrors);
1366
+ validationError.setModel(this);
1367
+ throw validationError;
1368
+ }
1369
+ }
1370
+ /**
1371
+ * @returns {string[]}
1372
+ */
1373
+ fullErrorMessages() {
1374
+ /** @type {string[]} */
1375
+ const validationErrorMessages = [];
1376
+ if (this._validationErrors) {
1377
+ for (const attributeName in this._validationErrors) {
1378
+ for (const validationError of this._validationErrors[attributeName]) {
1379
+ const message = `${this.getModelClass().humanAttributeName(attributeName)} ${validationError.message}`;
1380
+ validationErrorMessages.push(message);
1381
+ }
1382
+ }
1383
+ }
1384
+ return validationErrorMessages;
1385
+ }
1386
+ /**
1387
+ * Assigns the attributes to the record and saves it.
1388
+ * @param {object} attributesToAssign - The attributes to assign to the record.
1389
+ */
1390
+ async update(attributesToAssign) {
1391
+ if (attributesToAssign)
1392
+ this.assign(attributesToAssign);
1393
+ await this.save();
1394
+ }
1395
+ }
1396
+ class TranslationBase extends VelociousDatabaseRecord {
1397
+ /**
1398
+ * @abstract
1399
+ * @returns {string}
1400
+ */
1401
+ locale() {
1402
+ throw new Error("'locale' not implemented");
1403
+ }
1404
+ }
1405
+ VelociousDatabaseRecord.registerValidatorType("presence", ValidatorsPresence);
1406
+ VelociousDatabaseRecord.registerValidatorType("uniqueness", ValidatorsUniqueness);
1407
+ export { ValidationError };
1408
+ export default VelociousDatabaseRecord;