velocious 1.0.108 → 1.0.109

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