velocious 1.0.108 → 1.0.110

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 (952) 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 +221 -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 +10 -5
  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 -19
  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/api/controller.js +0 -9
  723. package/spec/dummy/src/routes/projects/controller.js +0 -33
  724. package/spec/dummy/src/routes/tasks/controller.js +0 -25
  725. package/spec/dummy/src/routes/tasks/index.ejs +0 -1
  726. package/spec/dummy/src/routes/tasks/show.ejs +0 -0
  727. package/spec/http-server/client-spec.js +0 -37
  728. package/spec/http-server/get-spec.js +0 -86
  729. package/spec/http-server/namespace-spec.js +0 -17
  730. package/spec/http-server/post-spec.js +0 -93
  731. package/spec/http-server/root-get-spec.js +0 -31
  732. package/src/application.js +0 -123
  733. package/src/cli/base-command.js +0 -40
  734. package/src/cli/browser-cli.js +0 -37
  735. package/src/cli/commands/db/create.js +0 -72
  736. package/src/cli/commands/db/drop.js +0 -18
  737. package/src/cli/commands/db/migrate.js +0 -17
  738. package/src/cli/commands/db/reset.js +0 -22
  739. package/src/cli/commands/db/rollback.js +0 -15
  740. package/src/cli/commands/destroy/migration.js +0 -7
  741. package/src/cli/commands/generate/base-models.js +0 -7
  742. package/src/cli/commands/generate/migration.js +0 -7
  743. package/src/cli/commands/generate/model.js +0 -7
  744. package/src/cli/commands/init.js +0 -11
  745. package/src/cli/commands/server.js +0 -7
  746. package/src/cli/commands/test.js +0 -7
  747. package/src/cli/index.js +0 -39
  748. package/src/cli/use-browser-cli.js +0 -27
  749. package/src/configuration-resolver.js +0 -61
  750. package/src/configuration-types.js +0 -61
  751. package/src/configuration.js +0 -395
  752. package/src/controller.js +0 -166
  753. package/src/database/drivers/base-column.js +0 -141
  754. package/src/database/drivers/base-columns-index.js +0 -72
  755. package/src/database/drivers/base-foreign-key.js +0 -91
  756. package/src/database/drivers/base-table.js +0 -129
  757. package/src/database/drivers/base.js +0 -751
  758. package/src/database/drivers/mssql/column.js +0 -72
  759. package/src/database/drivers/mssql/columns-index.js +0 -6
  760. package/src/database/drivers/mssql/connect-connection.js +0 -12
  761. package/src/database/drivers/mssql/foreign-key.js +0 -12
  762. package/src/database/drivers/mssql/index.js +0 -357
  763. package/src/database/drivers/mssql/options.js +0 -72
  764. package/src/database/drivers/mssql/query-parser.js +0 -6
  765. package/src/database/drivers/mssql/sql/alter-table.js +0 -4
  766. package/src/database/drivers/mssql/sql/create-database.js +0 -35
  767. package/src/database/drivers/mssql/sql/create-index.js +0 -4
  768. package/src/database/drivers/mssql/sql/create-table.js +0 -4
  769. package/src/database/drivers/mssql/sql/delete.js +0 -19
  770. package/src/database/drivers/mssql/sql/drop-table.js +0 -4
  771. package/src/database/drivers/mssql/sql/insert.js +0 -4
  772. package/src/database/drivers/mssql/sql/update.js +0 -31
  773. package/src/database/drivers/mssql/table.js +0 -132
  774. package/src/database/drivers/mysql/column.js +0 -105
  775. package/src/database/drivers/mysql/columns-index.js +0 -6
  776. package/src/database/drivers/mysql/foreign-key.js +0 -12
  777. package/src/database/drivers/mysql/index.js +0 -275
  778. package/src/database/drivers/mysql/options.js +0 -31
  779. package/src/database/drivers/mysql/query-parser.js +0 -6
  780. package/src/database/drivers/mysql/query.js +0 -31
  781. package/src/database/drivers/mysql/sql/alter-table.js +0 -6
  782. package/src/database/drivers/mysql/sql/create-database.js +0 -6
  783. package/src/database/drivers/mysql/sql/create-index.js +0 -6
  784. package/src/database/drivers/mysql/sql/create-table.js +0 -6
  785. package/src/database/drivers/mysql/sql/delete.js +0 -21
  786. package/src/database/drivers/mysql/sql/drop-table.js +0 -6
  787. package/src/database/drivers/mysql/sql/insert.js +0 -6
  788. package/src/database/drivers/mysql/sql/update.js +0 -33
  789. package/src/database/drivers/mysql/table.js +0 -96
  790. package/src/database/drivers/pgsql/column.js +0 -81
  791. package/src/database/drivers/pgsql/columns-index.js +0 -6
  792. package/src/database/drivers/pgsql/foreign-key.js +0 -12
  793. package/src/database/drivers/pgsql/index.js +0 -250
  794. package/src/database/drivers/pgsql/options.js +0 -30
  795. package/src/database/drivers/pgsql/query-parser.js +0 -6
  796. package/src/database/drivers/pgsql/sql/alter-table.js +0 -6
  797. package/src/database/drivers/pgsql/sql/create-database.js +0 -38
  798. package/src/database/drivers/pgsql/sql/create-index.js +0 -6
  799. package/src/database/drivers/pgsql/sql/create-table.js +0 -6
  800. package/src/database/drivers/pgsql/sql/delete.js +0 -21
  801. package/src/database/drivers/pgsql/sql/drop-table.js +0 -6
  802. package/src/database/drivers/pgsql/sql/insert.js +0 -6
  803. package/src/database/drivers/pgsql/sql/update.js +0 -33
  804. package/src/database/drivers/pgsql/table.js +0 -123
  805. package/src/database/drivers/sqlite/base.js +0 -303
  806. package/src/database/drivers/sqlite/column.js +0 -70
  807. package/src/database/drivers/sqlite/columns-index.js +0 -30
  808. package/src/database/drivers/sqlite/connection-remote.js +0 -12
  809. package/src/database/drivers/sqlite/connection-sql-js.js +0 -49
  810. package/src/database/drivers/sqlite/foreign-key.js +0 -22
  811. package/src/database/drivers/sqlite/index.js +0 -52
  812. package/src/database/drivers/sqlite/index.native.js +0 -68
  813. package/src/database/drivers/sqlite/index.web.js +0 -63
  814. package/src/database/drivers/sqlite/options.js +0 -30
  815. package/src/database/drivers/sqlite/query-parser.js +0 -6
  816. package/src/database/drivers/sqlite/query.js +0 -32
  817. package/src/database/drivers/sqlite/query.native.js +0 -25
  818. package/src/database/drivers/sqlite/query.web.js +0 -46
  819. package/src/database/drivers/sqlite/sql/alter-table.js +0 -153
  820. package/src/database/drivers/sqlite/sql/create-index.js +0 -6
  821. package/src/database/drivers/sqlite/sql/create-table.js +0 -6
  822. package/src/database/drivers/sqlite/sql/delete.js +0 -26
  823. package/src/database/drivers/sqlite/sql/drop-table.js +0 -6
  824. package/src/database/drivers/sqlite/sql/insert.js +0 -6
  825. package/src/database/drivers/sqlite/sql/update.js +0 -33
  826. package/src/database/drivers/sqlite/table.js +0 -97
  827. package/src/database/handler.js +0 -12
  828. package/src/database/initializer-from-require-context.js +0 -50
  829. package/src/database/migration/index.js +0 -345
  830. package/src/database/migrator/files-finder.js +0 -51
  831. package/src/database/migrator/types.js +0 -31
  832. package/src/database/migrator.js +0 -434
  833. package/src/database/pool/async-tracked-multi-connection.js +0 -103
  834. package/src/database/pool/base-methods-forward.js +0 -40
  835. package/src/database/pool/base.js +0 -133
  836. package/src/database/pool/single-multi-use.js +0 -43
  837. package/src/database/query/alter-table-base.js +0 -62
  838. package/src/database/query/base.js +0 -46
  839. package/src/database/query/create-database-base.js +0 -35
  840. package/src/database/query/create-index-base.js +0 -114
  841. package/src/database/query/create-table-base.js +0 -169
  842. package/src/database/query/delete-base.js +0 -17
  843. package/src/database/query/drop-table-base.js +0 -56
  844. package/src/database/query/from-base.js +0 -31
  845. package/src/database/query/from-plain.js +0 -15
  846. package/src/database/query/from-table.js +0 -17
  847. package/src/database/query/index.js +0 -530
  848. package/src/database/query/insert-base.js +0 -156
  849. package/src/database/query/join-base.js +0 -39
  850. package/src/database/query/join-object.js +0 -67
  851. package/src/database/query/join-plain.js +0 -17
  852. package/src/database/query/order-base.js +0 -30
  853. package/src/database/query/order-plain.js +0 -27
  854. package/src/database/query/preloader/belongs-to.js +0 -63
  855. package/src/database/query/preloader/has-many.js +0 -83
  856. package/src/database/query/preloader/has-one.js +0 -74
  857. package/src/database/query/preloader.js +0 -61
  858. package/src/database/query/select-base.js +0 -27
  859. package/src/database/query/select-plain.js +0 -17
  860. package/src/database/query/select-table-and-column.js +0 -27
  861. package/src/database/query/update-base.js +0 -28
  862. package/src/database/query/where-base.js +0 -34
  863. package/src/database/query/where-hash.js +0 -66
  864. package/src/database/query/where-plain.js +0 -19
  865. package/src/database/query-parser/base-query-parser.js +0 -39
  866. package/src/database/query-parser/from-parser.js +0 -45
  867. package/src/database/query-parser/group-parser.js +0 -53
  868. package/src/database/query-parser/joins-parser.js +0 -36
  869. package/src/database/query-parser/limit-parser.js +0 -61
  870. package/src/database/query-parser/options.js +0 -85
  871. package/src/database/query-parser/order-parser.js +0 -44
  872. package/src/database/query-parser/select-parser.js +0 -60
  873. package/src/database/query-parser/where-parser.js +0 -45
  874. package/src/database/record/index.js +0 -1682
  875. package/src/database/record/instance-relationships/base.js +0 -103
  876. package/src/database/record/instance-relationships/belongs-to.js +0 -37
  877. package/src/database/record/instance-relationships/has-many.js +0 -116
  878. package/src/database/record/instance-relationships/has-one.js +0 -66
  879. package/src/database/record/record-not-found-error.js +0 -3
  880. package/src/database/record/relationships/base.js +0 -91
  881. package/src/database/record/relationships/belongs-to.js +0 -46
  882. package/src/database/record/relationships/has-many.js +0 -39
  883. package/src/database/record/relationships/has-one.js +0 -39
  884. package/src/database/record/user-module.js +0 -41
  885. package/src/database/record/validators/base.js +0 -24
  886. package/src/database/record/validators/presence.js +0 -20
  887. package/src/database/record/validators/uniqueness.js +0 -42
  888. package/src/database/table-data/index.js +0 -199
  889. package/src/database/table-data/table-column.js +0 -283
  890. package/src/database/table-data/table-foreign-key.js +0 -61
  891. package/src/database/table-data/table-index.js +0 -41
  892. package/src/database/table-data/table-reference.js +0 -12
  893. package/src/database/use-database.js +0 -48
  894. package/src/environment-handlers/base.js +0 -158
  895. package/src/environment-handlers/browser.js +0 -193
  896. package/src/environment-handlers/node/cli/commands/destroy/migration.js +0 -42
  897. package/src/environment-handlers/node/cli/commands/generate/base-models.js +0 -258
  898. package/src/environment-handlers/node/cli/commands/generate/migration.js +0 -40
  899. package/src/environment-handlers/node/cli/commands/generate/model.js +0 -40
  900. package/src/environment-handlers/node/cli/commands/init.js +0 -66
  901. package/src/environment-handlers/node/cli/commands/server.js +0 -30
  902. package/src/environment-handlers/node/cli/commands/test.js +0 -47
  903. package/src/environment-handlers/node.js +0 -227
  904. package/src/error-logger.js +0 -32
  905. package/src/http-client/header.js +0 -16
  906. package/src/http-client/index.js +0 -135
  907. package/src/http-client/request.js +0 -83
  908. package/src/http-client/response.js +0 -136
  909. package/src/http-server/client/index.js +0 -137
  910. package/src/http-server/client/params-to-object.js +0 -88
  911. package/src/http-server/client/request-buffer/form-data-part.js +0 -53
  912. package/src/http-server/client/request-buffer/header.js +0 -18
  913. package/src/http-server/client/request-buffer/index.js +0 -345
  914. package/src/http-server/client/request-parser.js +0 -118
  915. package/src/http-server/client/request-runner.js +0 -68
  916. package/src/http-server/client/request.js +0 -63
  917. package/src/http-server/client/response.js +0 -100
  918. package/src/http-server/index.js +0 -180
  919. package/src/http-server/server-client.js +0 -81
  920. package/src/http-server/worker-handler/index.js +0 -120
  921. package/src/http-server/worker-handler/worker-script.js +0 -6
  922. package/src/http-server/worker-handler/worker-thread.js +0 -106
  923. package/src/initializer.js +0 -35
  924. package/src/logger.js +0 -174
  925. package/src/routes/app-routes.js +0 -16
  926. package/src/routes/base-route.js +0 -82
  927. package/src/routes/basic-route.js +0 -76
  928. package/src/routes/built-in/errors/controller.js +0 -7
  929. package/src/routes/built-in/errors/not-found.ejs +0 -1
  930. package/src/routes/get-route.js +0 -42
  931. package/src/routes/index.js +0 -19
  932. package/src/routes/namespace-route.js +0 -42
  933. package/src/routes/post-route.js +0 -41
  934. package/src/routes/resolver.js +0 -102
  935. package/src/routes/resource-route.js +0 -61
  936. package/src/routes/root-route.js +0 -6
  937. package/src/templates/configuration.js +0 -60
  938. package/src/templates/generate-migration.js +0 -11
  939. package/src/templates/generate-model.js +0 -6
  940. package/src/templates/routes.js +0 -11
  941. package/src/testing/request-client.js +0 -77
  942. package/src/testing/test-files-finder.js +0 -191
  943. package/src/testing/test-runner.js +0 -301
  944. package/src/testing/test.js +0 -462
  945. package/src/utils/backtrace-cleaner.js +0 -27
  946. package/src/utils/ensure-error.js +0 -13
  947. package/src/utils/file-exists.js +0 -17
  948. package/src/utils/nest-callbacks.js +0 -15
  949. package/src/utils/rest-args-error.js +0 -13
  950. package/src/utils/with-tracked-stack-async-hooks.js +0 -85
  951. package/src/utils/with-tracked-stack.js +0 -30
  952. 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;