velocious 1.0.430 → 1.0.431

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 (811) hide show
  1. package/bin/velocious.js +48 -0
  2. package/build/bin/velocious.js +39 -34
  3. package/build/index.js +1 -2
  4. package/build/src/application.js +214 -187
  5. package/build/src/authorization/ability.d.ts +24 -23
  6. package/build/src/authorization/ability.d.ts.map +1 -1
  7. package/build/src/authorization/ability.js +300 -252
  8. package/build/src/authorization/base-resource.d.ts +20 -26
  9. package/build/src/authorization/base-resource.d.ts.map +1 -1
  10. package/build/src/authorization/base-resource.js +136 -118
  11. package/build/src/background-jobs/client.js +47 -43
  12. package/build/src/background-jobs/cron-expression.js +166 -127
  13. package/build/src/background-jobs/forked-runner-child.js +47 -37
  14. package/build/src/background-jobs/job-record.js +10 -8
  15. package/build/src/background-jobs/job-registry.js +84 -72
  16. package/build/src/background-jobs/job-runner.js +81 -74
  17. package/build/src/background-jobs/job.js +72 -62
  18. package/build/src/background-jobs/json-socket.js +70 -65
  19. package/build/src/background-jobs/main.js +900 -841
  20. package/build/src/background-jobs/normalize-error.js +11 -12
  21. package/build/src/background-jobs/scheduler.js +247 -205
  22. package/build/src/background-jobs/socket-request.js +65 -60
  23. package/build/src/background-jobs/status-reporter.js +96 -86
  24. package/build/src/background-jobs/store.js +980 -862
  25. package/build/src/background-jobs/types.js +3 -2
  26. package/build/src/background-jobs/web/authorization.js +50 -38
  27. package/build/src/background-jobs/web/controller.js +268 -232
  28. package/build/src/background-jobs/web/index.js +40 -36
  29. package/build/src/background-jobs/web/path-matcher.js +48 -45
  30. package/build/src/background-jobs/web/registry.js +14 -9
  31. package/build/src/background-jobs/worker.js +639 -585
  32. package/build/src/beacon/client.js +293 -264
  33. package/build/src/beacon/in-process-broker.js +25 -20
  34. package/build/src/beacon/in-process-client.js +116 -104
  35. package/build/src/beacon/server.js +126 -110
  36. package/build/src/beacon/types.js +8 -2
  37. package/build/src/cli/base-command.js +57 -49
  38. package/build/src/cli/browser-cli.js +42 -37
  39. package/build/src/cli/commands/background-jobs-main.js +5 -5
  40. package/build/src/cli/commands/background-jobs-runner.js +5 -5
  41. package/build/src/cli/commands/background-jobs-worker.js +5 -5
  42. package/build/src/cli/commands/beacon.js +5 -5
  43. package/build/src/cli/commands/console.js +10 -10
  44. package/build/src/cli/commands/db/base-command.js +76 -71
  45. package/build/src/cli/commands/db/create.js +61 -53
  46. package/build/src/cli/commands/db/drop.js +71 -62
  47. package/build/src/cli/commands/db/migrate.js +15 -13
  48. package/build/src/cli/commands/db/reset.js +19 -16
  49. package/build/src/cli/commands/db/rollback.js +13 -12
  50. package/build/src/cli/commands/db/schema/dump.js +9 -9
  51. package/build/src/cli/commands/db/schema/load.js +9 -9
  52. package/build/src/cli/commands/db/seed.js +9 -9
  53. package/build/src/cli/commands/db/tenants/check.js +35 -32
  54. package/build/src/cli/commands/db/tenants/create.js +29 -26
  55. package/build/src/cli/commands/db/tenants/migrate.js +44 -40
  56. package/build/src/cli/commands/destroy/migration.js +5 -5
  57. package/build/src/cli/commands/generate/base-models.js +5 -5
  58. package/build/src/cli/commands/generate/frontend-models.js +9 -9
  59. package/build/src/cli/commands/generate/migration.js +5 -5
  60. package/build/src/cli/commands/generate/model.js +5 -5
  61. package/build/src/cli/commands/init.js +9 -7
  62. package/build/src/cli/commands/routes.js +6 -6
  63. package/build/src/cli/commands/run-script.js +9 -9
  64. package/build/src/cli/commands/runner.js +9 -9
  65. package/build/src/cli/commands/server.js +6 -6
  66. package/build/src/cli/commands/test.js +7 -6
  67. package/build/src/cli/index.js +141 -127
  68. package/build/src/cli/tenant-database-command-helper.js +185 -154
  69. package/build/src/cli/use-browser-cli.js +20 -15
  70. package/build/src/configuration-resolver.js +54 -47
  71. package/build/src/configuration-types.d.ts +21 -2
  72. package/build/src/configuration-types.d.ts.map +1 -1
  73. package/build/src/configuration-types.js +60 -3
  74. package/build/src/configuration.js +2547 -2240
  75. package/build/src/controller.js +407 -363
  76. package/build/src/current-configuration.js +12 -9
  77. package/build/src/current.js +75 -70
  78. package/build/src/database/annotations-async-hooks.js +22 -16
  79. package/build/src/database/annotations.js +18 -12
  80. package/build/src/database/drivers/base-column.js +179 -155
  81. package/build/src/database/drivers/base-columns-index.js +78 -69
  82. package/build/src/database/drivers/base-foreign-key.js +101 -89
  83. package/build/src/database/drivers/base-table.js +149 -124
  84. package/build/src/database/drivers/base.js +1489 -1306
  85. package/build/src/database/drivers/mssql/column.js +50 -39
  86. package/build/src/database/drivers/mssql/columns-index.js +3 -2
  87. package/build/src/database/drivers/mssql/connect-connection.js +9 -11
  88. package/build/src/database/drivers/mssql/foreign-key.js +9 -8
  89. package/build/src/database/drivers/mssql/index.js +587 -507
  90. package/build/src/database/drivers/mssql/options.js +75 -68
  91. package/build/src/database/drivers/mssql/query-parser.js +3 -2
  92. package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
  93. package/build/src/database/drivers/mssql/sql/create-database.js +31 -24
  94. package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
  95. package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
  96. package/build/src/database/drivers/mssql/sql/delete.js +16 -14
  97. package/build/src/database/drivers/mssql/sql/drop-database.js +31 -24
  98. package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
  99. package/build/src/database/drivers/mssql/sql/insert.js +2 -2
  100. package/build/src/database/drivers/mssql/sql/update.js +28 -24
  101. package/build/src/database/drivers/mssql/sql/upsert.js +20 -18
  102. package/build/src/database/drivers/mssql/structure-sql.js +114 -102
  103. package/build/src/database/drivers/mssql/table.js +96 -81
  104. package/build/src/database/drivers/mysql/column.js +92 -75
  105. package/build/src/database/drivers/mysql/columns-index.js +19 -16
  106. package/build/src/database/drivers/mysql/foreign-key.js +9 -8
  107. package/build/src/database/drivers/mysql/index.js +457 -396
  108. package/build/src/database/drivers/mysql/options.js +30 -26
  109. package/build/src/database/drivers/mysql/query-parser.js +3 -2
  110. package/build/src/database/drivers/mysql/query.js +29 -26
  111. package/build/src/database/drivers/mysql/sql/alter-table.js +3 -2
  112. package/build/src/database/drivers/mysql/sql/create-database.js +28 -23
  113. package/build/src/database/drivers/mysql/sql/create-index.js +3 -2
  114. package/build/src/database/drivers/mysql/sql/create-table.js +3 -2
  115. package/build/src/database/drivers/mysql/sql/delete.js +17 -14
  116. package/build/src/database/drivers/mysql/sql/drop-database.js +3 -2
  117. package/build/src/database/drivers/mysql/sql/drop-table.js +3 -2
  118. package/build/src/database/drivers/mysql/sql/insert.js +3 -2
  119. package/build/src/database/drivers/mysql/sql/update.js +29 -24
  120. package/build/src/database/drivers/mysql/sql/upsert.js +10 -8
  121. package/build/src/database/drivers/mysql/structure-sql.js +88 -79
  122. package/build/src/database/drivers/mysql/table.js +98 -83
  123. package/build/src/database/drivers/pgsql/column.js +72 -56
  124. package/build/src/database/drivers/pgsql/columns-index.js +3 -2
  125. package/build/src/database/drivers/pgsql/foreign-key.js +9 -8
  126. package/build/src/database/drivers/pgsql/index.js +438 -377
  127. package/build/src/database/drivers/pgsql/options.js +28 -25
  128. package/build/src/database/drivers/pgsql/query-parser.js +3 -2
  129. package/build/src/database/drivers/pgsql/sql/alter-table.js +3 -2
  130. package/build/src/database/drivers/pgsql/sql/create-database.js +23 -19
  131. package/build/src/database/drivers/pgsql/sql/create-index.js +3 -2
  132. package/build/src/database/drivers/pgsql/sql/create-table.js +3 -2
  133. package/build/src/database/drivers/pgsql/sql/delete.js +17 -14
  134. package/build/src/database/drivers/pgsql/sql/drop-database.js +3 -2
  135. package/build/src/database/drivers/pgsql/sql/drop-table.js +3 -2
  136. package/build/src/database/drivers/pgsql/sql/insert.js +3 -2
  137. package/build/src/database/drivers/pgsql/sql/update.js +29 -24
  138. package/build/src/database/drivers/pgsql/sql/upsert.js +11 -9
  139. package/build/src/database/drivers/pgsql/structure-sql.js +120 -108
  140. package/build/src/database/drivers/pgsql/table.js +77 -60
  141. package/build/src/database/drivers/sqlite/base.js +478 -405
  142. package/build/src/database/drivers/sqlite/column.js +69 -54
  143. package/build/src/database/drivers/sqlite/columns-index.js +27 -22
  144. package/build/src/database/drivers/sqlite/connection-sql-js.js +42 -35
  145. package/build/src/database/drivers/sqlite/foreign-key.js +21 -18
  146. package/build/src/database/drivers/sqlite/index.js +373 -330
  147. package/build/src/database/drivers/sqlite/index.native.js +64 -55
  148. package/build/src/database/drivers/sqlite/index.web.js +87 -69
  149. package/build/src/database/drivers/sqlite/options.js +28 -25
  150. package/build/src/database/drivers/sqlite/query-parser.js +3 -2
  151. package/build/src/database/drivers/sqlite/query.js +24 -21
  152. package/build/src/database/drivers/sqlite/query.native.js +25 -20
  153. package/build/src/database/drivers/sqlite/query.web.js +37 -30
  154. package/build/src/database/drivers/sqlite/sql/alter-table.js +179 -159
  155. package/build/src/database/drivers/sqlite/sql/create-index.js +3 -2
  156. package/build/src/database/drivers/sqlite/sql/create-table.js +3 -2
  157. package/build/src/database/drivers/sqlite/sql/delete.js +22 -17
  158. package/build/src/database/drivers/sqlite/sql/drop-table.js +3 -2
  159. package/build/src/database/drivers/sqlite/sql/insert.js +3 -2
  160. package/build/src/database/drivers/sqlite/sql/update.js +29 -24
  161. package/build/src/database/drivers/sqlite/sql/upsert.js +11 -9
  162. package/build/src/database/drivers/sqlite/structure-sql.js +52 -49
  163. package/build/src/database/drivers/sqlite/table-rebuilder.js +75 -62
  164. package/build/src/database/drivers/sqlite/table.js +125 -102
  165. package/build/src/database/drivers/structure-sql/utils.js +17 -14
  166. package/build/src/database/handler.js +10 -9
  167. package/build/src/database/initializer-from-require-context.js +87 -76
  168. package/build/src/database/migration/index.js +395 -332
  169. package/build/src/database/migrator/files-finder.js +50 -40
  170. package/build/src/database/migrator/types.js +30 -2
  171. package/build/src/database/migrator.js +526 -454
  172. package/build/src/database/pool/async-tracked-multi-connection.js +1147 -997
  173. package/build/src/database/pool/base-methods-forward.js +43 -40
  174. package/build/src/database/pool/base.js +343 -298
  175. package/build/src/database/pool/single-multi-use.js +110 -93
  176. package/build/src/database/query/alter-table-base.js +99 -84
  177. package/build/src/database/query/base.js +46 -39
  178. package/build/src/database/query/create-database-base.js +30 -25
  179. package/build/src/database/query/create-index-base.js +94 -75
  180. package/build/src/database/query/create-table-base.js +193 -151
  181. package/build/src/database/query/delete-base.js +16 -14
  182. package/build/src/database/query/drop-database-base.js +28 -23
  183. package/build/src/database/query/drop-table-base.js +53 -42
  184. package/build/src/database/query/from-base.js +33 -30
  185. package/build/src/database/query/from-plain.js +13 -11
  186. package/build/src/database/query/from-table.js +15 -13
  187. package/build/src/database/query/index.js +472 -410
  188. package/build/src/database/query/insert-base.js +164 -143
  189. package/build/src/database/query/join-base.js +40 -35
  190. package/build/src/database/query/join-object.js +153 -128
  191. package/build/src/database/query/join-plain.js +15 -13
  192. package/build/src/database/query/join-tracker.js +90 -76
  193. package/build/src/database/query/model-class-query.js +1370 -1134
  194. package/build/src/database/query/order-base.js +30 -27
  195. package/build/src/database/query/order-column.js +53 -44
  196. package/build/src/database/query/order-plain.js +24 -20
  197. package/build/src/database/query/preloader/belongs-to.js +258 -210
  198. package/build/src/database/query/preloader/ensure-model-class-initialized.js +9 -8
  199. package/build/src/database/query/preloader/has-many.js +301 -240
  200. package/build/src/database/query/preloader/has-one.js +117 -91
  201. package/build/src/database/query/preloader/selection.js +129 -117
  202. package/build/src/database/query/preloader.js +185 -160
  203. package/build/src/database/query/query-data.js +201 -157
  204. package/build/src/database/query/select-base.js +27 -25
  205. package/build/src/database/query/select-plain.js +15 -13
  206. package/build/src/database/query/select-table-and-column.js +25 -21
  207. package/build/src/database/query/update-base.js +38 -35
  208. package/build/src/database/query/upsert-base.js +100 -93
  209. package/build/src/database/query/where-base.js +35 -32
  210. package/build/src/database/query/where-combinator.d.ts.map +1 -1
  211. package/build/src/database/query/where-combinator.js +28 -26
  212. package/build/src/database/query/where-hash.js +68 -61
  213. package/build/src/database/query/where-model-class-hash.js +469 -414
  214. package/build/src/database/query/where-not.js +20 -18
  215. package/build/src/database/query/where-plain.js +17 -15
  216. package/build/src/database/query/with-count.js +159 -125
  217. package/build/src/database/query-parser/base-query-parser.js +37 -32
  218. package/build/src/database/query-parser/from-parser.js +45 -36
  219. package/build/src/database/query-parser/group-parser.js +50 -42
  220. package/build/src/database/query-parser/joins-parser.js +33 -28
  221. package/build/src/database/query-parser/limit-parser.js +70 -67
  222. package/build/src/database/query-parser/options.js +82 -75
  223. package/build/src/database/query-parser/order-parser.js +40 -36
  224. package/build/src/database/query-parser/select-parser.js +60 -49
  225. package/build/src/database/query-parser/where-parser.js +41 -36
  226. package/build/src/database/record/acts-as-list.js +273 -235
  227. package/build/src/database/record/attachments/download.js +45 -44
  228. package/build/src/database/record/attachments/handle.js +161 -141
  229. package/build/src/database/record/attachments/normalize-input.js +138 -128
  230. package/build/src/database/record/attachments/storage-drivers/filesystem.js +91 -77
  231. package/build/src/database/record/attachments/storage-drivers/native.js +121 -112
  232. package/build/src/database/record/attachments/storage-drivers/s3.js +208 -177
  233. package/build/src/database/record/attachments/store.d.ts +1 -1
  234. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  235. package/build/src/database/record/attachments/store.js +540 -468
  236. package/build/src/database/record/index.d.ts +17 -15
  237. package/build/src/database/record/index.d.ts.map +1 -1
  238. package/build/src/database/record/index.js +3894 -3361
  239. package/build/src/database/record/instance-relationships/base.js +268 -234
  240. package/build/src/database/record/instance-relationships/belongs-to.js +73 -58
  241. package/build/src/database/record/instance-relationships/has-many.js +264 -225
  242. package/build/src/database/record/instance-relationships/has-one.js +105 -85
  243. package/build/src/database/record/record-not-found-error.js +2 -3
  244. package/build/src/database/record/relationships/base.d.ts +2 -2
  245. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  246. package/build/src/database/record/relationships/base.js +167 -145
  247. package/build/src/database/record/relationships/belongs-to.js +51 -44
  248. package/build/src/database/record/relationships/has-many.js +40 -32
  249. package/build/src/database/record/relationships/has-one.js +40 -32
  250. package/build/src/database/record/state-machine.js +208 -156
  251. package/build/src/database/record/user-module.js +38 -32
  252. package/build/src/database/record/validators/base.js +24 -22
  253. package/build/src/database/record/validators/format.js +46 -36
  254. package/build/src/database/record/validators/presence.js +20 -18
  255. package/build/src/database/record/validators/uniqueness.js +117 -99
  256. package/build/src/database/table-data/index.js +231 -199
  257. package/build/src/database/table-data/table-column.js +382 -338
  258. package/build/src/database/table-data/table-foreign-key.js +66 -57
  259. package/build/src/database/table-data/table-index.js +36 -29
  260. package/build/src/database/table-data/table-reference.js +10 -10
  261. package/build/src/database/use-database.js +40 -32
  262. package/build/src/environment-handlers/base.js +544 -484
  263. package/build/src/environment-handlers/browser.js +294 -241
  264. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +19 -16
  265. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +21 -18
  266. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +29 -22
  267. package/build/src/environment-handlers/node/cli/commands/beacon.js +19 -16
  268. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +15 -14
  269. package/build/src/environment-handlers/node/cli/commands/console.js +120 -99
  270. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +39 -34
  271. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +63 -57
  272. package/build/src/environment-handlers/node/cli/commands/db/seed.js +63 -51
  273. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +40 -32
  274. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  275. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +353 -298
  276. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +844 -729
  277. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +38 -34
  278. package/build/src/environment-handlers/node/cli/commands/generate/model.js +38 -34
  279. package/build/src/environment-handlers/node/cli/commands/init.js +61 -56
  280. package/build/src/environment-handlers/node/cli/commands/routes.js +59 -51
  281. package/build/src/environment-handlers/node/cli/commands/run-script.js +68 -54
  282. package/build/src/environment-handlers/node/cli/commands/runner.js +74 -56
  283. package/build/src/environment-handlers/node/cli/commands/server.js +106 -93
  284. package/build/src/environment-handlers/node/cli/commands/test.js +113 -97
  285. package/build/src/environment-handlers/node.js +874 -753
  286. package/build/src/error-logger.js +21 -22
  287. package/build/src/frontend-model-controller.d.ts +6 -6
  288. package/build/src/frontend-model-controller.d.ts.map +1 -1
  289. package/build/src/frontend-model-controller.js +3288 -2788
  290. package/build/src/frontend-model-resource/base-resource.d.ts +18 -17
  291. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  292. package/build/src/frontend-model-resource/base-resource.js +869 -759
  293. package/build/src/frontend-models/base.d.ts +19 -12
  294. package/build/src/frontend-models/base.d.ts.map +1 -1
  295. package/build/src/frontend-models/base.js +3602 -3114
  296. package/build/src/frontend-models/clear-pending-debounced-callback.js +8 -7
  297. package/build/src/frontend-models/event-hook-models.js +21 -16
  298. package/build/src/frontend-models/model-registry.js +11 -9
  299. package/build/src/frontend-models/outgoing-event-buffer.js +17 -10
  300. package/build/src/frontend-models/preloader.d.ts +6 -6
  301. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  302. package/build/src/frontend-models/preloader.js +149 -131
  303. package/build/src/frontend-models/query.d.ts.map +1 -1
  304. package/build/src/frontend-models/query.js +1855 -1560
  305. package/build/src/frontend-models/resource-config-validation.js +37 -27
  306. package/build/src/frontend-models/resource-definition.js +288 -234
  307. package/build/src/frontend-models/transport-serialization.js +266 -203
  308. package/build/src/frontend-models/use-created-event.js +7 -5
  309. package/build/src/frontend-models/use-destroyed-event.js +93 -80
  310. package/build/src/frontend-models/use-model-class-event.js +91 -79
  311. package/build/src/frontend-models/use-updated-event.js +97 -84
  312. package/build/src/frontend-models/websocket-channel.js +441 -381
  313. package/build/src/frontend-models/websocket-publishers.js +173 -140
  314. package/build/src/http-client/header.js +14 -13
  315. package/build/src/http-client/index.js +132 -116
  316. package/build/src/http-client/request.js +87 -71
  317. package/build/src/http-client/response.js +140 -122
  318. package/build/src/http-client/websocket-client.js +17 -15
  319. package/build/src/http-server/client/index.js +465 -409
  320. package/build/src/http-server/client/params-to-object.js +135 -124
  321. package/build/src/http-server/client/request-buffer/form-data-part.js +132 -111
  322. package/build/src/http-server/client/request-buffer/header.js +16 -15
  323. package/build/src/http-server/client/request-buffer/index.js +506 -446
  324. package/build/src/http-server/client/request-parser.js +186 -163
  325. package/build/src/http-server/client/request-runner.js +259 -226
  326. package/build/src/http-server/client/request-timing.js +151 -132
  327. package/build/src/http-server/client/request.js +108 -96
  328. package/build/src/http-server/client/response.js +235 -213
  329. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +29 -25
  330. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +29 -25
  331. package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
  332. package/build/src/http-server/client/websocket-request.js +137 -114
  333. package/build/src/http-server/client/websocket-session.js +1657 -1452
  334. package/build/src/http-server/cookie.js +236 -216
  335. package/build/src/http-server/development-reloader.js +221 -190
  336. package/build/src/http-server/index.js +525 -451
  337. package/build/src/http-server/remote-address.js +50 -38
  338. package/build/src/http-server/server-client.js +208 -181
  339. package/build/src/http-server/server-lock.js +167 -153
  340. package/build/src/http-server/websocket-channel-subscribers.js +93 -81
  341. package/build/src/http-server/websocket-channel.js +117 -104
  342. package/build/src/http-server/websocket-connection.js +104 -96
  343. package/build/src/http-server/websocket-event-log-store.js +404 -350
  344. package/build/src/http-server/websocket-events-host.js +164 -145
  345. package/build/src/http-server/websocket-events.js +47 -47
  346. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +14 -13
  347. package/build/src/http-server/worker-handler/in-process.js +141 -123
  348. package/build/src/http-server/worker-handler/index.js +349 -313
  349. package/build/src/http-server/worker-handler/worker-script.js +5 -4
  350. package/build/src/http-server/worker-handler/worker-thread.js +269 -240
  351. package/build/src/initializer.js +36 -31
  352. package/build/src/jobs/mail-delivery.js +15 -13
  353. package/build/src/logger/base-logger.js +26 -24
  354. package/build/src/logger/console-logger.js +23 -21
  355. package/build/src/logger/file-logger.js +31 -29
  356. package/build/src/logger/outputs/array-output.js +42 -37
  357. package/build/src/logger/outputs/console-output.js +24 -20
  358. package/build/src/logger/outputs/file-output.js +48 -43
  359. package/build/src/logger/outputs/stdout-output.js +48 -39
  360. package/build/src/logger.js +394 -338
  361. package/build/src/mailer/backends/smtp.js +163 -134
  362. package/build/src/mailer/base.js +251 -211
  363. package/build/src/mailer/delivery.js +64 -56
  364. package/build/src/mailer/index.js +22 -4
  365. package/build/src/mailer.js +13 -4
  366. package/build/src/plugins/sqljs-wasm-route-controller.js +52 -42
  367. package/build/src/plugins/sqljs-wasm-route.js +38 -28
  368. package/build/src/record-payload-values.js +28 -25
  369. package/build/src/routes/app-routes.js +14 -12
  370. package/build/src/routes/base-route.js +130 -112
  371. package/build/src/routes/basic-route.js +102 -83
  372. package/build/src/routes/built-in/debug/controller.js +10 -10
  373. package/build/src/routes/built-in/errors/controller.js +5 -5
  374. package/build/src/routes/get-route.js +63 -50
  375. package/build/src/routes/hooks/frontend-model-command-route-hook.js +80 -66
  376. package/build/src/routes/index.js +43 -36
  377. package/build/src/routes/namespace-route.js +47 -38
  378. package/build/src/routes/plugin-routes.js +124 -107
  379. package/build/src/routes/post-route.js +62 -51
  380. package/build/src/routes/resolver.js +494 -422
  381. package/build/src/routes/resource-route.js +143 -124
  382. package/build/src/routes/root-route.js +8 -7
  383. package/build/src/testing/base-expect.js +14 -13
  384. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +405 -329
  385. package/build/src/testing/browser-test-app.js +29 -23
  386. package/build/src/testing/expect-to-change.js +50 -41
  387. package/build/src/testing/expect-utils.js +184 -139
  388. package/build/src/testing/expect.js +731 -638
  389. package/build/src/testing/request-client.js +85 -70
  390. package/build/src/testing/test-files-finder.js +339 -285
  391. package/build/src/testing/test-filter-parser.js +155 -124
  392. package/build/src/testing/test-runner.js +1020 -883
  393. package/build/src/testing/test-suite-splitter.js +142 -114
  394. package/build/src/testing/test.js +256 -216
  395. package/build/src/utils/backtrace-cleaner-node.js +69 -62
  396. package/build/src/utils/backtrace-cleaner.js +216 -188
  397. package/build/src/utils/ensure-error.js +7 -7
  398. package/build/src/utils/event-emitter.js +6 -4
  399. package/build/src/utils/file-exists.js +10 -9
  400. package/build/src/utils/format-value.js +76 -67
  401. package/build/src/utils/model-scope.js +31 -27
  402. package/build/src/utils/nest-callbacks.js +13 -10
  403. package/build/src/utils/plain-object.js +6 -5
  404. package/build/src/utils/ransack.d.ts.map +1 -1
  405. package/build/src/utils/ransack.js +563 -449
  406. package/build/src/utils/rest-args-error.js +6 -5
  407. package/build/src/utils/singularize-model-name.js +11 -9
  408. package/build/src/utils/split-sql-statements.js +79 -68
  409. package/build/src/utils/to-import-specifier.js +30 -24
  410. package/build/src/utils/with-tracked-stack-async-hooks.js +74 -60
  411. package/build/src/utils/with-tracked-stack.js +18 -14
  412. package/build/src/velocious-error.js +30 -27
  413. package/index.js +1 -0
  414. package/package.json +10 -4
  415. package/scripts/clean-build.js +8 -0
  416. package/scripts/ensure-bin-executable.js +13 -0
  417. package/scripts/run-tests.js +37 -0
  418. package/scripts/test-browser.js +486 -0
  419. package/src/application.js +229 -0
  420. package/src/authorization/ability.js +329 -0
  421. package/src/authorization/base-resource.js +143 -0
  422. package/src/background-jobs/client.js +50 -0
  423. package/src/background-jobs/cron-expression.js +277 -0
  424. package/src/background-jobs/forked-runner-child.js +86 -0
  425. package/src/background-jobs/job-record.js +13 -0
  426. package/src/background-jobs/job-registry.js +92 -0
  427. package/src/background-jobs/job-runner.js +107 -0
  428. package/src/background-jobs/job.js +77 -0
  429. package/src/background-jobs/json-socket.js +78 -0
  430. package/src/background-jobs/main.js +926 -0
  431. package/src/background-jobs/normalize-error.js +26 -0
  432. package/src/background-jobs/scheduler.js +274 -0
  433. package/src/background-jobs/socket-request.js +68 -0
  434. package/src/background-jobs/status-reporter.js +101 -0
  435. package/src/background-jobs/store.js +994 -0
  436. package/src/background-jobs/types.js +70 -0
  437. package/src/background-jobs/web/authorization.js +89 -0
  438. package/src/background-jobs/web/controller.js +280 -0
  439. package/src/background-jobs/web/index.js +57 -0
  440. package/src/background-jobs/web/path-matcher.js +74 -0
  441. package/src/background-jobs/web/registry.js +49 -0
  442. package/src/background-jobs/worker.js +683 -0
  443. package/src/beacon/client.js +330 -0
  444. package/src/beacon/in-process-broker.js +71 -0
  445. package/src/beacon/in-process-client.js +139 -0
  446. package/src/beacon/server.js +148 -0
  447. package/src/beacon/types.js +55 -0
  448. package/src/cli/base-command.js +67 -0
  449. package/src/cli/browser-cli.js +45 -0
  450. package/src/cli/commands/background-jobs-main.js +7 -0
  451. package/src/cli/commands/background-jobs-runner.js +7 -0
  452. package/src/cli/commands/background-jobs-worker.js +7 -0
  453. package/src/cli/commands/beacon.js +7 -0
  454. package/src/cli/commands/console.js +12 -0
  455. package/src/cli/commands/db/base-command.js +82 -0
  456. package/src/cli/commands/db/create.js +64 -0
  457. package/src/cli/commands/db/drop.js +75 -0
  458. package/src/cli/commands/db/migrate.js +17 -0
  459. package/src/cli/commands/db/reset.js +22 -0
  460. package/src/cli/commands/db/rollback.js +15 -0
  461. package/src/cli/commands/db/schema/dump.js +12 -0
  462. package/src/cli/commands/db/schema/load.js +12 -0
  463. package/src/cli/commands/db/seed.js +12 -0
  464. package/src/cli/commands/db/tenants/check.js +38 -0
  465. package/src/cli/commands/db/tenants/create.js +33 -0
  466. package/src/cli/commands/db/tenants/migrate.js +49 -0
  467. package/src/cli/commands/destroy/migration.js +7 -0
  468. package/src/cli/commands/generate/base-models.js +7 -0
  469. package/src/cli/commands/generate/frontend-models.js +12 -0
  470. package/src/cli/commands/generate/migration.js +7 -0
  471. package/src/cli/commands/generate/model.js +7 -0
  472. package/src/cli/commands/init.js +11 -0
  473. package/src/cli/commands/routes.js +7 -0
  474. package/src/cli/commands/run-script.js +12 -0
  475. package/src/cli/commands/runner.js +12 -0
  476. package/src/cli/commands/server.js +7 -0
  477. package/src/cli/commands/test.js +9 -0
  478. package/src/cli/index.js +152 -0
  479. package/src/cli/tenant-database-command-helper.js +198 -0
  480. package/src/cli/use-browser-cli.js +30 -0
  481. package/src/configuration-resolver.js +65 -0
  482. package/src/configuration-types.js +429 -0
  483. package/src/configuration.js +2590 -0
  484. package/src/controller.js +421 -0
  485. package/src/current-configuration.js +31 -0
  486. package/src/current.js +80 -0
  487. package/src/database/annotations-async-hooks.js +47 -0
  488. package/src/database/annotations.js +40 -0
  489. package/src/database/drivers/base-column.js +182 -0
  490. package/src/database/drivers/base-columns-index.js +81 -0
  491. package/src/database/drivers/base-foreign-key.js +104 -0
  492. package/src/database/drivers/base-table.js +156 -0
  493. package/src/database/drivers/base.js +1609 -0
  494. package/src/database/drivers/mssql/column.js +74 -0
  495. package/src/database/drivers/mssql/columns-index.js +6 -0
  496. package/src/database/drivers/mssql/connect-connection.js +16 -0
  497. package/src/database/drivers/mssql/foreign-key.js +12 -0
  498. package/src/database/drivers/mssql/index.js +590 -0
  499. package/src/database/drivers/mssql/options.js +79 -0
  500. package/src/database/drivers/mssql/query-parser.js +6 -0
  501. package/src/database/drivers/mssql/sql/alter-table.js +4 -0
  502. package/src/database/drivers/mssql/sql/create-database.js +36 -0
  503. package/src/database/drivers/mssql/sql/create-index.js +4 -0
  504. package/src/database/drivers/mssql/sql/create-table.js +4 -0
  505. package/src/database/drivers/mssql/sql/delete.js +19 -0
  506. package/src/database/drivers/mssql/sql/drop-database.js +36 -0
  507. package/src/database/drivers/mssql/sql/drop-table.js +4 -0
  508. package/src/database/drivers/mssql/sql/insert.js +4 -0
  509. package/src/database/drivers/mssql/sql/update.js +31 -0
  510. package/src/database/drivers/mssql/sql/upsert.js +23 -0
  511. package/src/database/drivers/mssql/structure-sql.js +120 -0
  512. package/src/database/drivers/mssql/table.js +145 -0
  513. package/src/database/drivers/mysql/column.js +112 -0
  514. package/src/database/drivers/mysql/columns-index.js +22 -0
  515. package/src/database/drivers/mysql/foreign-key.js +12 -0
  516. package/src/database/drivers/mysql/index.js +473 -0
  517. package/src/database/drivers/mysql/options.js +34 -0
  518. package/src/database/drivers/mysql/query-parser.js +6 -0
  519. package/src/database/drivers/mysql/query.js +37 -0
  520. package/src/database/drivers/mysql/sql/alter-table.js +6 -0
  521. package/src/database/drivers/mysql/sql/create-database.js +39 -0
  522. package/src/database/drivers/mysql/sql/create-index.js +6 -0
  523. package/src/database/drivers/mysql/sql/create-table.js +6 -0
  524. package/src/database/drivers/mysql/sql/delete.js +21 -0
  525. package/src/database/drivers/mysql/sql/drop-database.js +6 -0
  526. package/src/database/drivers/mysql/sql/drop-table.js +6 -0
  527. package/src/database/drivers/mysql/sql/insert.js +6 -0
  528. package/src/database/drivers/mysql/sql/update.js +33 -0
  529. package/src/database/drivers/mysql/sql/upsert.js +13 -0
  530. package/src/database/drivers/mysql/structure-sql.js +93 -0
  531. package/src/database/drivers/mysql/table.js +121 -0
  532. package/src/database/drivers/pgsql/column.js +90 -0
  533. package/src/database/drivers/pgsql/columns-index.js +6 -0
  534. package/src/database/drivers/pgsql/foreign-key.js +12 -0
  535. package/src/database/drivers/pgsql/index.js +441 -0
  536. package/src/database/drivers/pgsql/options.js +32 -0
  537. package/src/database/drivers/pgsql/query-parser.js +6 -0
  538. package/src/database/drivers/pgsql/sql/alter-table.js +6 -0
  539. package/src/database/drivers/pgsql/sql/create-database.js +38 -0
  540. package/src/database/drivers/pgsql/sql/create-index.js +6 -0
  541. package/src/database/drivers/pgsql/sql/create-table.js +6 -0
  542. package/src/database/drivers/pgsql/sql/delete.js +21 -0
  543. package/src/database/drivers/pgsql/sql/drop-database.js +6 -0
  544. package/src/database/drivers/pgsql/sql/drop-table.js +6 -0
  545. package/src/database/drivers/pgsql/sql/insert.js +6 -0
  546. package/src/database/drivers/pgsql/sql/update.js +33 -0
  547. package/src/database/drivers/pgsql/sql/upsert.js +14 -0
  548. package/src/database/drivers/pgsql/structure-sql.js +126 -0
  549. package/src/database/drivers/pgsql/table.js +135 -0
  550. package/src/database/drivers/sqlite/base.js +509 -0
  551. package/src/database/drivers/sqlite/column.js +75 -0
  552. package/src/database/drivers/sqlite/columns-index.js +30 -0
  553. package/src/database/drivers/sqlite/connection-sql-js.js +46 -0
  554. package/src/database/drivers/sqlite/foreign-key.js +24 -0
  555. package/src/database/drivers/sqlite/index.js +394 -0
  556. package/src/database/drivers/sqlite/index.native.js +72 -0
  557. package/src/database/drivers/sqlite/index.web.js +99 -0
  558. package/src/database/drivers/sqlite/options.js +32 -0
  559. package/src/database/drivers/sqlite/query-parser.js +6 -0
  560. package/src/database/drivers/sqlite/query.js +35 -0
  561. package/src/database/drivers/sqlite/query.native.js +35 -0
  562. package/src/database/drivers/sqlite/query.web.js +49 -0
  563. package/src/database/drivers/sqlite/sql/alter-table.js +187 -0
  564. package/src/database/drivers/sqlite/sql/create-index.js +6 -0
  565. package/src/database/drivers/sqlite/sql/create-table.js +6 -0
  566. package/src/database/drivers/sqlite/sql/delete.js +26 -0
  567. package/src/database/drivers/sqlite/sql/drop-table.js +6 -0
  568. package/src/database/drivers/sqlite/sql/insert.js +6 -0
  569. package/src/database/drivers/sqlite/sql/update.js +33 -0
  570. package/src/database/drivers/sqlite/sql/upsert.js +14 -0
  571. package/src/database/drivers/sqlite/structure-sql.js +56 -0
  572. package/src/database/drivers/sqlite/table-rebuilder.js +96 -0
  573. package/src/database/drivers/sqlite/table.js +131 -0
  574. package/src/database/drivers/structure-sql/utils.js +35 -0
  575. package/src/database/handler.js +13 -0
  576. package/src/database/initializer-from-require-context.js +101 -0
  577. package/src/database/migration/index.js +438 -0
  578. package/src/database/migrator/files-finder.js +55 -0
  579. package/src/database/migrator/types.js +31 -0
  580. package/src/database/migrator.js +557 -0
  581. package/src/database/pool/async-tracked-multi-connection.js +1164 -0
  582. package/src/database/pool/base-methods-forward.js +52 -0
  583. package/src/database/pool/base.js +380 -0
  584. package/src/database/pool/single-multi-use.js +118 -0
  585. package/src/database/query/alter-table-base.js +104 -0
  586. package/src/database/query/base.js +49 -0
  587. package/src/database/query/create-database-base.js +42 -0
  588. package/src/database/query/create-index-base.js +117 -0
  589. package/src/database/query/create-table-base.js +205 -0
  590. package/src/database/query/delete-base.js +19 -0
  591. package/src/database/query/drop-database-base.js +38 -0
  592. package/src/database/query/drop-table-base.js +58 -0
  593. package/src/database/query/from-base.js +36 -0
  594. package/src/database/query/from-plain.js +16 -0
  595. package/src/database/query/from-table.js +18 -0
  596. package/src/database/query/index.js +533 -0
  597. package/src/database/query/insert-base.js +172 -0
  598. package/src/database/query/join-base.js +43 -0
  599. package/src/database/query/join-object.js +167 -0
  600. package/src/database/query/join-plain.js +18 -0
  601. package/src/database/query/join-tracker.js +93 -0
  602. package/src/database/query/model-class-query.js +1577 -0
  603. package/src/database/query/order-base.js +33 -0
  604. package/src/database/query/order-column.js +77 -0
  605. package/src/database/query/order-plain.js +28 -0
  606. package/src/database/query/preloader/belongs-to.js +267 -0
  607. package/src/database/query/preloader/ensure-model-class-initialized.js +18 -0
  608. package/src/database/query/preloader/has-many.js +316 -0
  609. package/src/database/query/preloader/has-one.js +123 -0
  610. package/src/database/query/preloader/selection.js +152 -0
  611. package/src/database/query/preloader.js +201 -0
  612. package/src/database/query/query-data.js +305 -0
  613. package/src/database/query/select-base.js +30 -0
  614. package/src/database/query/select-plain.js +18 -0
  615. package/src/database/query/select-table-and-column.js +28 -0
  616. package/src/database/query/update-base.js +41 -0
  617. package/src/database/query/upsert-base.js +103 -0
  618. package/src/database/query/where-base.js +38 -0
  619. package/src/database/query/where-combinator.js +31 -0
  620. package/src/database/query/where-hash.js +77 -0
  621. package/src/database/query/where-model-class-hash.js +505 -0
  622. package/src/database/query/where-not.js +23 -0
  623. package/src/database/query/where-plain.js +20 -0
  624. package/src/database/query/with-count.js +219 -0
  625. package/src/database/query-parser/base-query-parser.js +40 -0
  626. package/src/database/query-parser/from-parser.js +49 -0
  627. package/src/database/query-parser/group-parser.js +55 -0
  628. package/src/database/query-parser/joins-parser.js +37 -0
  629. package/src/database/query-parser/limit-parser.js +77 -0
  630. package/src/database/query-parser/options.js +94 -0
  631. package/src/database/query-parser/order-parser.js +45 -0
  632. package/src/database/query-parser/select-parser.js +67 -0
  633. package/src/database/query-parser/where-parser.js +46 -0
  634. package/src/database/record/acts-as-list.js +374 -0
  635. package/src/database/record/attachments/download.js +49 -0
  636. package/src/database/record/attachments/handle.js +188 -0
  637. package/src/database/record/attachments/normalize-input.js +213 -0
  638. package/src/database/record/attachments/storage-drivers/filesystem.js +114 -0
  639. package/src/database/record/attachments/storage-drivers/native.js +146 -0
  640. package/src/database/record/attachments/storage-drivers/s3.js +245 -0
  641. package/src/database/record/attachments/store.js +591 -0
  642. package/src/database/record/index.js +3970 -0
  643. package/src/database/record/instance-relationships/base.js +289 -0
  644. package/src/database/record/instance-relationships/belongs-to.js +84 -0
  645. package/src/database/record/instance-relationships/has-many.js +284 -0
  646. package/src/database/record/instance-relationships/has-one.js +117 -0
  647. package/src/database/record/record-not-found-error.js +3 -0
  648. package/src/database/record/relationships/base.js +195 -0
  649. package/src/database/record/relationships/belongs-to.js +57 -0
  650. package/src/database/record/relationships/has-many.js +46 -0
  651. package/src/database/record/relationships/has-one.js +46 -0
  652. package/src/database/record/state-machine.js +278 -0
  653. package/src/database/record/user-module.js +43 -0
  654. package/src/database/record/validators/base.js +27 -0
  655. package/src/database/record/validators/format.js +50 -0
  656. package/src/database/record/validators/presence.js +24 -0
  657. package/src/database/record/validators/uniqueness.js +124 -0
  658. package/src/database/table-data/index.js +241 -0
  659. package/src/database/table-data/table-column.js +416 -0
  660. package/src/database/table-data/table-foreign-key.js +69 -0
  661. package/src/database/table-data/table-index.js +46 -0
  662. package/src/database/table-data/table-reference.js +13 -0
  663. package/src/database/use-database.js +48 -0
  664. package/src/environment-handlers/base.js +561 -0
  665. package/src/environment-handlers/browser.js +338 -0
  666. package/src/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
  667. package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
  668. package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
  669. package/src/environment-handlers/node/cli/commands/beacon.js +21 -0
  670. package/src/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
  671. package/src/environment-handlers/node/cli/commands/console.js +149 -0
  672. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
  673. package/src/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
  674. package/src/environment-handlers/node/cli/commands/db/seed.js +79 -0
  675. package/src/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
  676. package/src/environment-handlers/node/cli/commands/generate/base-models.js +367 -0
  677. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
  678. package/src/environment-handlers/node/cli/commands/generate/migration.js +45 -0
  679. package/src/environment-handlers/node/cli/commands/generate/model.js +45 -0
  680. package/src/environment-handlers/node/cli/commands/init.js +68 -0
  681. package/src/environment-handlers/node/cli/commands/routes.js +63 -0
  682. package/src/environment-handlers/node/cli/commands/run-script.js +85 -0
  683. package/src/environment-handlers/node/cli/commands/runner.js +84 -0
  684. package/src/environment-handlers/node/cli/commands/server.js +151 -0
  685. package/src/environment-handlers/node/cli/commands/test.js +118 -0
  686. package/src/environment-handlers/node.js +887 -0
  687. package/src/error-logger.js +30 -0
  688. package/src/frontend-model-controller.js +3491 -0
  689. package/src/frontend-model-resource/base-resource.js +935 -0
  690. package/src/frontend-models/base.js +4004 -0
  691. package/src/frontend-models/clear-pending-debounced-callback.js +16 -0
  692. package/src/frontend-models/event-hook-models.js +49 -0
  693. package/src/frontend-models/model-registry.js +28 -0
  694. package/src/frontend-models/outgoing-event-buffer.js +51 -0
  695. package/src/frontend-models/preloader.js +169 -0
  696. package/src/frontend-models/query.js +2245 -0
  697. package/src/frontend-models/resource-config-validation.js +56 -0
  698. package/src/frontend-models/resource-definition.js +399 -0
  699. package/src/frontend-models/transport-serialization.js +369 -0
  700. package/src/frontend-models/use-created-event.js +21 -0
  701. package/src/frontend-models/use-destroyed-event.js +148 -0
  702. package/src/frontend-models/use-model-class-event.js +164 -0
  703. package/src/frontend-models/use-updated-event.js +152 -0
  704. package/src/frontend-models/websocket-channel.js +494 -0
  705. package/src/frontend-models/websocket-publishers.js +224 -0
  706. package/src/http-client/header.js +17 -0
  707. package/src/http-client/index.js +139 -0
  708. package/src/http-client/request.js +94 -0
  709. package/src/http-client/response.js +151 -0
  710. package/src/http-client/websocket-client.js +27 -0
  711. package/src/http-server/client/index.js +507 -0
  712. package/src/http-server/client/params-to-object.js +152 -0
  713. package/src/http-server/client/request-buffer/form-data-part.js +139 -0
  714. package/src/http-server/client/request-buffer/header.js +19 -0
  715. package/src/http-server/client/request-buffer/index.js +535 -0
  716. package/src/http-server/client/request-parser.js +195 -0
  717. package/src/http-server/client/request-runner.js +321 -0
  718. package/src/http-server/client/request-timing.js +171 -0
  719. package/src/http-server/client/request.js +114 -0
  720. package/src/http-server/client/response.js +251 -0
  721. package/src/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
  722. package/src/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
  723. package/src/http-server/client/uploaded-file/uploaded-file.js +36 -0
  724. package/src/http-server/client/websocket-request.js +147 -0
  725. package/src/http-server/client/websocket-session.js +1755 -0
  726. package/src/http-server/cookie.js +245 -0
  727. package/src/http-server/development-reloader.js +240 -0
  728. package/src/http-server/index.js +561 -0
  729. package/src/http-server/remote-address.js +77 -0
  730. package/src/http-server/server-client.js +222 -0
  731. package/src/http-server/server-lock.js +178 -0
  732. package/src/http-server/websocket-channel-subscribers.js +110 -0
  733. package/src/http-server/websocket-channel.js +137 -0
  734. package/src/http-server/websocket-connection.js +118 -0
  735. package/src/http-server/websocket-event-log-store.js +433 -0
  736. package/src/http-server/websocket-events-host.js +170 -0
  737. package/src/http-server/websocket-events.js +50 -0
  738. package/src/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
  739. package/src/http-server/worker-handler/in-process.js +155 -0
  740. package/src/http-server/worker-handler/index.js +370 -0
  741. package/src/http-server/worker-handler/worker-script.js +6 -0
  742. package/src/http-server/worker-handler/worker-thread.js +286 -0
  743. package/src/initializer.js +39 -0
  744. package/src/jobs/.gitkeep +1 -0
  745. package/src/jobs/mail-delivery.js +22 -0
  746. package/src/logger/base-logger.js +34 -0
  747. package/src/logger/console-logger.js +28 -0
  748. package/src/logger/file-logger.js +36 -0
  749. package/src/logger/outputs/array-output.js +50 -0
  750. package/src/logger/outputs/console-output.js +32 -0
  751. package/src/logger/outputs/file-output.js +55 -0
  752. package/src/logger/outputs/stdout-output.js +64 -0
  753. package/src/logger.js +507 -0
  754. package/src/mailer/backends/smtp.js +197 -0
  755. package/src/mailer/base.js +337 -0
  756. package/src/mailer/delivery.js +70 -0
  757. package/src/mailer/index.js +24 -0
  758. package/src/mailer.js +15 -0
  759. package/src/plugins/sqljs-wasm-route-controller.js +70 -0
  760. package/src/plugins/sqljs-wasm-route.js +71 -0
  761. package/src/record-payload-values.js +83 -0
  762. package/src/routes/app-routes.js +17 -0
  763. package/src/routes/base-route.js +133 -0
  764. package/src/routes/basic-route.js +109 -0
  765. package/src/routes/built-in/debug/controller.js +12 -0
  766. package/src/routes/built-in/errors/controller.js +7 -0
  767. package/src/routes/built-in/errors/not-found.ejs +1 -0
  768. package/src/routes/get-route.js +75 -0
  769. package/src/routes/hooks/frontend-model-command-route-hook.js +100 -0
  770. package/src/routes/index.js +50 -0
  771. package/src/routes/namespace-route.js +51 -0
  772. package/src/routes/plugin-routes.js +141 -0
  773. package/src/routes/post-route.js +74 -0
  774. package/src/routes/resolver.js +535 -0
  775. package/src/routes/resource-route.js +154 -0
  776. package/src/routes/root-route.js +11 -0
  777. package/src/templates/configuration.js +61 -0
  778. package/src/templates/generate-migration.js +11 -0
  779. package/src/templates/generate-model.js +6 -0
  780. package/src/templates/routes.js +11 -0
  781. package/src/testing/base-expect.js +17 -0
  782. package/src/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  783. package/src/testing/browser-test-app.js +32 -0
  784. package/src/testing/expect-to-change.js +55 -0
  785. package/src/testing/expect-utils.js +269 -0
  786. package/src/testing/expect.js +763 -0
  787. package/src/testing/request-client.js +90 -0
  788. package/src/testing/test-files-finder.js +364 -0
  789. package/src/testing/test-filter-parser.js +198 -0
  790. package/src/testing/test-runner.js +1168 -0
  791. package/src/testing/test-suite-splitter.js +177 -0
  792. package/src/testing/test.js +370 -0
  793. package/src/types/external-modules.d.ts +57 -0
  794. package/src/utils/backtrace-cleaner-node.js +87 -0
  795. package/src/utils/backtrace-cleaner.js +266 -0
  796. package/src/utils/ensure-error.js +15 -0
  797. package/src/utils/event-emitter.js +8 -0
  798. package/src/utils/file-exists.js +18 -0
  799. package/src/utils/format-value.js +101 -0
  800. package/src/utils/model-scope.js +56 -0
  801. package/src/utils/nest-callbacks.js +22 -0
  802. package/src/utils/plain-object.js +14 -0
  803. package/src/utils/ransack.js +859 -0
  804. package/src/utils/rest-args-error.js +14 -0
  805. package/src/utils/singularize-model-name.js +18 -0
  806. package/src/utils/split-sql-statements.js +88 -0
  807. package/src/utils/to-import-specifier.js +53 -0
  808. package/src/utils/with-tracked-stack-async-hooks.js +103 -0
  809. package/src/utils/with-tracked-stack.js +38 -0
  810. package/src/velocious-error.js +34 -0
  811. package/tsconfig.json +16 -0
@@ -0,0 +1,763 @@
1
+ // @ts-check
2
+
3
+ import {formatValue, minifiedStringify} from "../utils/format-value.js"
4
+ import {anythingDifferent} from "set-state-compare/build/diff-utils.js"
5
+ import BaseExpect from "./base-expect.js"
6
+ import ExpectToChange from "./expect-to-change.js"
7
+ import {
8
+ isArrayContaining,
9
+ isObjectContaining,
10
+ matchArrayContaining,
11
+ matchObject
12
+ } from "./expect-utils.js"
13
+
14
+ export default class Expect extends BaseExpect {
15
+ /**
16
+ * Runs constructor.
17
+ * @param {?} object - Object.
18
+ */
19
+ constructor(object) {
20
+ super()
21
+ this._object = object
22
+
23
+ /**
24
+ * Narrows the runtime value to the documented type.
25
+ @type {Array<Expect | ExpectToChange>} */
26
+ this.expectations = []
27
+ }
28
+
29
+ /**
30
+ * Runs and change.
31
+ * @param {function(): Promise<number>} changeCallback - Change callback.
32
+ * @returns {ExpectToChange} - The and change.
33
+ */
34
+ andChange(changeCallback) {
35
+ return this.toChange(changeCallback)
36
+ }
37
+
38
+ /**
39
+ * Returns not.
40
+ * @returns {this} - A value.
41
+ */
42
+ get not() {
43
+ this._not = true
44
+
45
+ return this
46
+ }
47
+
48
+ /**
49
+ * Runs to be.
50
+ * @param {?} result - Result.
51
+ * @returns {void} - No return value.
52
+ */
53
+ toBe(result) {
54
+ if (this._not) {
55
+ if (this._object === result) {
56
+ const objectPrint = formatValue(this._object)
57
+ const resultPrint = formatValue(result)
58
+
59
+ throw new Error(`${objectPrint} was unexpected not to be ${resultPrint}`)
60
+ }
61
+ } else {
62
+ if (this._object !== result) {
63
+ const objectPrint = formatValue(this._object)
64
+ const resultPrint = formatValue(result)
65
+
66
+ throw new Error(`${objectPrint} wasn't expected be ${resultPrint}`)
67
+ }
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Runs to be less than.
73
+ * @param {number} result - Result.
74
+ * @returns {void} - No return value.
75
+ */
76
+ toBeLessThan(result) {
77
+ if (typeof this._object !== "number" || typeof result !== "number") {
78
+ throw new Error(`Expected numbers but got ${typeof this._object} and ${typeof result}`)
79
+ }
80
+
81
+ if (this._not) {
82
+ if (this._object < result) {
83
+ const objectPrint = formatValue(this._object)
84
+ const resultPrint = formatValue(result)
85
+
86
+ throw new Error(`${objectPrint} was unexpected to be less than ${resultPrint}`)
87
+ }
88
+ } else {
89
+ if (this._object >= result) {
90
+ const objectPrint = formatValue(this._object)
91
+ const resultPrint = formatValue(result)
92
+
93
+ throw new Error(`${objectPrint} wasn't expected to be greater than or equal to ${resultPrint}`)
94
+ }
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Runs to be less than or equal.
100
+ * @param {number} result - Result.
101
+ * @returns {void} - No return value.
102
+ */
103
+ toBeLessThanOrEqual(result) {
104
+ if (typeof this._object !== "number" || typeof result !== "number") {
105
+ throw new Error(`Expected numbers but got ${typeof this._object} and ${typeof result}`)
106
+ }
107
+
108
+ if (this._not) {
109
+ if (this._object <= result) {
110
+ const objectPrint = formatValue(this._object)
111
+ const resultPrint = formatValue(result)
112
+
113
+ throw new Error(`${objectPrint} was unexpected to be less than or equal to ${resultPrint}`)
114
+ }
115
+ } else {
116
+ if (this._object > result) {
117
+ const objectPrint = formatValue(this._object)
118
+ const resultPrint = formatValue(result)
119
+
120
+ throw new Error(`${objectPrint} wasn't expected to be greater than ${resultPrint}`)
121
+ }
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Runs to be greater than.
127
+ * @param {number} result - Result.
128
+ * @returns {void} - No return value.
129
+ */
130
+ toBeGreaterThan(result) {
131
+ if (typeof this._object !== "number" || typeof result !== "number") {
132
+ throw new Error(`Expected numbers but got ${typeof this._object} and ${typeof result}`)
133
+ }
134
+
135
+ if (this._not) {
136
+ if (this._object > result) {
137
+ const objectPrint = formatValue(this._object)
138
+ const resultPrint = formatValue(result)
139
+
140
+ throw new Error(`${objectPrint} was unexpected to be greater than ${resultPrint}`)
141
+ }
142
+ } else {
143
+ if (this._object <= result) {
144
+ const objectPrint = formatValue(this._object)
145
+ const resultPrint = formatValue(result)
146
+
147
+ throw new Error(`${objectPrint} wasn't expected to be less than or equal to ${resultPrint}`)
148
+ }
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Runs to be greater than or equal.
154
+ * @param {number} result - Result.
155
+ * @returns {void} - No return value.
156
+ */
157
+ toBeGreaterThanOrEqual(result) {
158
+ if (typeof this._object !== "number" || typeof result !== "number") {
159
+ throw new Error(`Expected numbers but got ${typeof this._object} and ${typeof result}`)
160
+ }
161
+
162
+ if (this._not) {
163
+ if (this._object >= result) {
164
+ const objectPrint = formatValue(this._object)
165
+ const resultPrint = formatValue(result)
166
+
167
+ throw new Error(`${objectPrint} was unexpected to be greater than or equal to ${resultPrint}`)
168
+ }
169
+ } else {
170
+ if (this._object < result) {
171
+ const objectPrint = formatValue(this._object)
172
+ const resultPrint = formatValue(result)
173
+
174
+ throw new Error(`${objectPrint} wasn't expected to be less than ${resultPrint}`)
175
+ }
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Runs to be close to.
181
+ * @param {number} result - Result.
182
+ * @param {number} [precision] - Decimal precision.
183
+ * @returns {void} - No return value.
184
+ */
185
+ toBeCloseTo(result, precision = 2) {
186
+ if (typeof this._object !== "number" || typeof result !== "number") {
187
+ throw new Error(`Expected numbers but got ${typeof this._object} and ${typeof result}`)
188
+ }
189
+
190
+ if (typeof precision !== "number" || !Number.isFinite(precision)) {
191
+ throw new Error(`Expected precision to be a number but got ${typeof precision}`)
192
+ }
193
+
194
+ const tolerance = 0.5 * Math.pow(10, -precision)
195
+ const diff = Math.abs(this._object - result)
196
+ const isClose = diff <= tolerance
197
+
198
+ if (this._not) {
199
+ if (isClose) {
200
+ const objectPrint = formatValue(this._object)
201
+ const resultPrint = formatValue(result)
202
+
203
+ throw new Error(`${objectPrint} was unexpected to be close to ${resultPrint}`)
204
+ }
205
+ } else {
206
+ if (!isClose) {
207
+ const objectPrint = formatValue(this._object)
208
+ const resultPrint = formatValue(result)
209
+
210
+ throw new Error(`${objectPrint} wasn't expected to be close to ${resultPrint}`)
211
+ }
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Runs to have length.
217
+ * @param {number} result - Expected length.
218
+ * @returns {void} - No return value.
219
+ */
220
+ toHaveLength(result) {
221
+ if (typeof result !== "number") {
222
+ throw new Error(`Expected length number but got ${typeof result}`)
223
+ }
224
+
225
+ if (this._object === null || this._object === undefined || typeof this._object.length !== "number") {
226
+ throw new Error(`Expected value with length but got ${typeof this._object}`)
227
+ }
228
+
229
+ const objectPrint = formatValue(this._object)
230
+ const resultPrint = formatValue(result)
231
+ const lengthValue = this._object.length
232
+
233
+ if (this._not) {
234
+ if (lengthValue === result) {
235
+ throw new Error(`${objectPrint} was unexpected to have length ${resultPrint}`)
236
+ }
237
+ } else if (lengthValue !== result) {
238
+ throw new Error(`${objectPrint} wasn't expected to have length ${resultPrint}`)
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Runs to be defined.
244
+ * @returns {void} - No return value.
245
+ */
246
+ toBeDefined() {
247
+ if (this._not) {
248
+ if (this._object !== undefined) {
249
+ const objectPrint = formatValue(this._object)
250
+
251
+ throw new Error(`${objectPrint} wasn´t expected to be defined`)
252
+ }
253
+ } else {
254
+ if (this._object === undefined) {
255
+ const objectPrint = formatValue(this._object)
256
+
257
+ throw new Error(`${objectPrint} wasn't expected be undefined`)
258
+ }
259
+ }
260
+ }
261
+
262
+ /**
263
+ * Runs to be instance of.
264
+ * @param {new (...args: Array<?>) => ?} klass - Class constructor to check against (e.g. a built-in like Error).
265
+ * @returns {void} - No return value.
266
+ */
267
+ toBeInstanceOf(klass) {
268
+ if (!(this._object instanceof klass)) {
269
+ const objectPrint = formatValue(this._object)
270
+
271
+ throw new Error(`Expected ${objectPrint} to be a ${klass.name} but it wasn't`)
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Runs to be false.
277
+ * @returns {void} - No return value.
278
+ */
279
+ toBeFalse() {
280
+ this.toBe(false)
281
+ }
282
+
283
+ /**
284
+ * Runs to be null.
285
+ * @returns {void} - No return value.
286
+ */
287
+ toBeNull() {
288
+ this.toBe(null)
289
+ }
290
+
291
+ /**
292
+ * Runs to be undefined.
293
+ * @returns {void} - No return value.
294
+ */
295
+ toBeUndefined() {
296
+ this.toBe(undefined)
297
+ }
298
+
299
+ /**
300
+ * Runs to be true.
301
+ * @returns {void} - No return value.
302
+ */
303
+ toBeTrue() {
304
+ this.toBe(true)
305
+ }
306
+
307
+ /**
308
+ * Runs to be truthy.
309
+ * @returns {void} - No return value.
310
+ */
311
+ toBeTruthy() {
312
+ const objectPrint = formatValue(this._object)
313
+
314
+ if (this._not) {
315
+ if (this._object) {
316
+ throw new Error(`${objectPrint} was unexpected to be truthy`)
317
+ }
318
+ } else {
319
+ if (!this._object) {
320
+ throw new Error(`${objectPrint} wasn't expected to be truthy`)
321
+ }
322
+ }
323
+ }
324
+
325
+ /**
326
+ * Runs to change.
327
+ * @param {function(): Promise<number>} changeCallback - Change callback.
328
+ * @returns {ExpectToChange} - The change.
329
+ */
330
+ toChange(changeCallback) {
331
+ if (this._not) throw new Error("not stub")
332
+
333
+ const expectToChange = new ExpectToChange({changeCallback, expect: this})
334
+
335
+ this.expectations.push(expectToChange)
336
+
337
+ return expectToChange
338
+ }
339
+
340
+ /**
341
+ * Runs to contain.
342
+ * @param {?} valueToContain - Value to contain.
343
+ * @returns {void} - No return value.
344
+ */
345
+ toContain(valueToContain) {
346
+ if (typeof this._object == "string") {
347
+ const matches = this._object.includes(String(valueToContain))
348
+ const objectPrint = minifiedStringify(this._object)
349
+ const valuePrint = typeof valueToContain == "string"
350
+ ? minifiedStringify(valueToContain)
351
+ : formatValue(valueToContain)
352
+
353
+ if (this._not) {
354
+ if (matches) {
355
+ throw new Error(`${objectPrint} was unexpected to contain ${valuePrint}`)
356
+ }
357
+ } else if (!matches) {
358
+ throw new Error(`${objectPrint} doesn't contain ${valuePrint}`)
359
+ }
360
+
361
+ return
362
+ }
363
+
364
+ if (!Array.isArray(this._object)) {
365
+ throw new Error(`Expected array or string but got ${typeof this._object}`)
366
+ }
367
+
368
+ const matches = this._object.includes(valueToContain)
369
+ const objectPrint = formatValue(this._object)
370
+ const valuePrint = typeof valueToContain == "string"
371
+ ? minifiedStringify(valueToContain)
372
+ : formatValue(valueToContain)
373
+
374
+ if (this._not) {
375
+ if (matches) {
376
+ throw new Error(`${objectPrint} was unexpected to contain ${valuePrint}`)
377
+ }
378
+ } else if (!matches) {
379
+ throw new Error(`${objectPrint} doesn't contain ${valuePrint}`)
380
+ }
381
+ }
382
+
383
+ /**
384
+ * Runs to contain equal.
385
+ * @param {?} valueToContain - Value to contain.
386
+ * @returns {void} - No return value.
387
+ */
388
+ toContainEqual(valueToContain) {
389
+ if (!Array.isArray(this._object)) {
390
+ throw new Error(`Expected array but got ${typeof this._object}`)
391
+ }
392
+
393
+ const matches = this._object.some((item) => !anythingDifferent(item, valueToContain))
394
+ const objectPrint = formatValue(this._object)
395
+ const valuePrint = typeof valueToContain == "string"
396
+ ? minifiedStringify(valueToContain)
397
+ : formatValue(valueToContain)
398
+
399
+ if (this._not) {
400
+ if (matches) {
401
+ throw new Error(`${objectPrint} was unexpected to contain ${valuePrint}`)
402
+ }
403
+ } else if (!matches) {
404
+ throw new Error(`${objectPrint} doesn't contain ${valuePrint}`)
405
+ }
406
+ }
407
+
408
+ /**
409
+ * Runs to equal.
410
+ * @param {?} result - Result.
411
+ * @returns {void} - No return value.
412
+ */
413
+ toEqual(result) {
414
+ if (this._object instanceof Set && result instanceof Set) {
415
+ const objectPrint = formatValue(this._object)
416
+ const resultPrint = formatValue(result)
417
+ const actualItems = Array.from(this._object)
418
+ const expectedItems = Array.from(result)
419
+ const missingItems = expectedItems.filter((expectedItem) => {
420
+ return !actualItems.some((actualItem) => !anythingDifferent(actualItem, expectedItem))
421
+ })
422
+ const unexpectedItems = actualItems.filter((actualItem) => {
423
+ return !expectedItems.some((expectedItem) => !anythingDifferent(actualItem, expectedItem))
424
+ })
425
+ const isEqual = missingItems.length === 0 && unexpectedItems.length === 0
426
+
427
+ if (this._not) {
428
+ if (isEqual) {
429
+ throw new Error(`${objectPrint} was unexpected equal to ${resultPrint}`)
430
+ }
431
+ } else if (!isEqual) {
432
+ const missingStrings = missingItems.map((item) => minifiedStringify(item))
433
+ const unexpectedStrings = unexpectedItems.map((item) => minifiedStringify(item))
434
+ const diffParts = []
435
+
436
+ if (missingStrings.length > 0) diffParts.push(`missing ${missingStrings.join(", ")}`)
437
+ if (unexpectedStrings.length > 0) diffParts.push(`unexpected ${unexpectedStrings.join(", ")}`)
438
+
439
+ const diffMessage = diffParts.length > 0 ? ` (diff: ${diffParts.join("; ")})` : ""
440
+
441
+ throw new Error(`${objectPrint} wasn't equal to ${resultPrint}${diffMessage}`)
442
+ }
443
+
444
+ return
445
+ }
446
+
447
+ if (isObjectContaining(result)) {
448
+ const expectedValue = /**
449
+ * Narrows the runtime value to the documented type.
450
+ @type {?} */ (result).value
451
+ const {matches, differences} = matchObject(this._object, expectedValue)
452
+ const objectPrint = formatValue(this._object)
453
+ const expectedPrint = formatValue(expectedValue)
454
+
455
+ if (this._not) {
456
+ if (matches) {
457
+ throw new Error(`Expected ${objectPrint} not to match ${expectedPrint}`)
458
+ }
459
+ } else if (!matches) {
460
+ const diffPrint = Object.keys(differences).length > 0 ? ` (diff: ${minifiedStringify(differences)})` : ""
461
+
462
+ throw new Error(`Expected ${objectPrint} to match ${expectedPrint}${diffPrint}`)
463
+ }
464
+
465
+ return
466
+ }
467
+
468
+ if (isArrayContaining(result)) {
469
+ const expectedValue = /**
470
+ * Narrows the runtime value to the documented type.
471
+ @type {Array<?>} */ (/**
472
+ * Narrows the runtime value to the documented type.
473
+ @type {?} */ (result).value)
474
+ const {matches, differences} = matchArrayContaining(this._object, expectedValue)
475
+ const objectPrint = formatValue(this._object)
476
+ const expectedPrint = formatValue(expectedValue)
477
+
478
+ if (this._not) {
479
+ if (matches) {
480
+ throw new Error(`Expected ${objectPrint} not to match ${expectedPrint}`)
481
+ }
482
+ } else if (!matches) {
483
+ const diffPrint = Object.keys(differences).length > 0 ? ` (diff: ${minifiedStringify(differences)})` : ""
484
+
485
+ throw new Error(`Expected ${objectPrint} to match ${expectedPrint}${diffPrint}`)
486
+ }
487
+
488
+ return
489
+ }
490
+
491
+ if (this._not) {
492
+ if (typeof this._object == "object" && typeof result == "object") {
493
+ if (!anythingDifferent(this._object, result)) {
494
+ const objectPrint = formatValue(this._object)
495
+ const resultPrint = formatValue(result)
496
+
497
+ throw new Error(`${objectPrint} was unexpected equal to ${resultPrint}`)
498
+ }
499
+ } else {
500
+ if (this._object == result) {
501
+ const objectPrint = formatValue(this._object)
502
+ const resultPrint = formatValue(result)
503
+
504
+ throw new Error(`${objectPrint} was unexpected equal to ${resultPrint}`)
505
+ }
506
+ }
507
+ } else {
508
+ if (typeof this._object == "object" && typeof result == "object") {
509
+ if (anythingDifferent(this._object, result)) {
510
+ const objectPrint = formatValue(this._object)
511
+ const resultPrint = formatValue(result)
512
+
513
+ if (Array.isArray(this._object) && Array.isArray(result)) {
514
+ const actualStrings = this._object.map((item) => minifiedStringify(item))
515
+ const expectedStrings = result.map((item) => minifiedStringify(item))
516
+
517
+ const missingItems = expectedStrings.filter((item) => !actualStrings.includes(item))
518
+ const unexpectedItems = actualStrings.filter((item) => !expectedStrings.includes(item))
519
+
520
+ const diffParts = []
521
+
522
+ if (missingItems.length > 0) diffParts.push(`missing ${missingItems.join(", ")}`)
523
+ if (unexpectedItems.length > 0) diffParts.push(`unexpected ${unexpectedItems.join(", ")}`)
524
+
525
+ const diffMessage = diffParts.length > 0 ? ` (diff: ${diffParts.join("; ")})` : ""
526
+
527
+ throw new Error(`${objectPrint} wasn't equal to ${resultPrint}${diffMessage}`)
528
+ }
529
+
530
+ throw new Error(`${objectPrint} wasn't equal to ${resultPrint}`)
531
+ }
532
+ } else {
533
+ if (this._object != result) {
534
+ const objectPrint = formatValue(this._object)
535
+ const resultPrint = formatValue(result)
536
+
537
+ throw new Error(`${objectPrint} wasn't equal to ${resultPrint}`)
538
+ }
539
+ }
540
+ }
541
+ }
542
+
543
+ /**
544
+ * Runs to match.
545
+ * @param {RegExp} regex - Regex.
546
+ * @returns {void} - No return value.
547
+ */
548
+ toMatch(regex) {
549
+ if (typeof this._object !== "string") {
550
+ throw new Error(`Expected string but got ${typeof this._object}`)
551
+ }
552
+
553
+ const match = this._object.match(regex)
554
+ const objectPrint = minifiedStringify(this._object)
555
+
556
+ if (this._not) {
557
+ if (match) {
558
+ throw new Error(`${objectPrint} shouldn't match ${regex}`)
559
+ }
560
+ } else {
561
+ if (!match) {
562
+ throw new Error(`${objectPrint} didn't match ${regex}`)
563
+ }
564
+ }
565
+ }
566
+
567
+ /**
568
+ * Runs to match object.
569
+ * @param {Record<string, ?> | Array<?>} expected - Expected partial object.
570
+ * @returns {void} - No return value.
571
+ */
572
+ toMatchObject(expected) {
573
+ if (expected === null || typeof expected !== "object") {
574
+ throw new Error(`Expected object but got ${typeof expected}`)
575
+ }
576
+
577
+ const {matches, differences} = matchObject(this._object, expected)
578
+ const objectPrint = formatValue(this._object)
579
+ const expectedPrint = formatValue(expected)
580
+
581
+ if (this._not) {
582
+ if (matches) {
583
+ throw new Error(`Expected ${objectPrint} not to match ${expectedPrint}`)
584
+ }
585
+ } else if (!matches) {
586
+ const diffPrint = Object.keys(differences).length > 0 ? ` (diff: ${minifiedStringify(differences)})` : ""
587
+
588
+ throw new Error(`Expected ${objectPrint} to match ${expectedPrint}${diffPrint}`)
589
+ }
590
+ }
591
+
592
+ /**
593
+ * Runs to throw error.
594
+ * @template T extends Error
595
+ * @param {string|T} expectedError - Expected error.
596
+ * @returns {Promise<void>} - Resolves when complete.
597
+ */
598
+ async toThrowError(expectedError) {
599
+ if (this._not) throw new Error("not stub")
600
+
601
+ let failedError
602
+
603
+ try {
604
+ if (typeof this._object !== "function") {
605
+ throw new Error(`Expected function but got ${typeof this._object}`)
606
+ }
607
+
608
+ await this._object()
609
+ } catch (error) {
610
+ failedError = error
611
+ }
612
+
613
+ if (!failedError) throw new Error("Expected to fail but didn't")
614
+
615
+ let expectedErrorMessage, failedErrorMessage
616
+
617
+ if (typeof failedError == "string") {
618
+ failedErrorMessage = failedError
619
+ } else if (failedError instanceof Error) {
620
+ failedErrorMessage = failedError.message
621
+ } else {
622
+ failedErrorMessage = String(failedError)
623
+ }
624
+
625
+ if (typeof expectedError == "string") {
626
+ expectedErrorMessage = expectedError
627
+ } else if (expectedError instanceof Error) {
628
+ expectedErrorMessage = expectedError.message
629
+ } else {
630
+ expectedErrorMessage = String(expectedError)
631
+ }
632
+
633
+ if (failedErrorMessage != expectedErrorMessage) {
634
+ throw new Error(`Expected to fail with '${expectedErrorMessage}' but failed with '${failedErrorMessage}'`)
635
+ }
636
+ }
637
+
638
+ /**
639
+ * Runs to throw.
640
+ * @param {string|RegExp|Error|((new (...args: Array<?>) => Error))} [expected] - Expected error.
641
+ * @returns {Promise<void>} - Resolves when complete.
642
+ */
643
+ async toThrow(expected) {
644
+ if (typeof this._object !== "function") {
645
+ throw new Error(`Expected function but got ${typeof this._object}`)
646
+ }
647
+
648
+ let failedError
649
+
650
+ try {
651
+ await this._object()
652
+ } catch (error) {
653
+ failedError = error
654
+ }
655
+
656
+ const objectPrint = formatValue(this._object)
657
+
658
+ if (this._not) {
659
+ if (failedError) {
660
+ throw new Error(`${objectPrint} was unexpected to throw`)
661
+ }
662
+
663
+ return
664
+ }
665
+
666
+ if (!failedError) throw new Error("Expected to fail but didn't")
667
+ if (expected === undefined) return
668
+
669
+ const failedErrorMessage = failedError instanceof Error ? failedError.message : String(failedError)
670
+ const failedErrorName = failedError instanceof Error ? failedError.name : typeof failedError
671
+
672
+ if (expected instanceof RegExp) {
673
+ if (!expected.test(failedErrorMessage)) {
674
+ throw new Error(`Expected to fail with message matching ${expected} but failed with '${failedErrorMessage}'`)
675
+ }
676
+
677
+ return
678
+ }
679
+
680
+ if (typeof expected === "function" && (expected.prototype instanceof Error || expected === Error)) {
681
+ if (!(failedError instanceof expected)) {
682
+ throw new Error(`Expected to throw ${expected.name} but threw ${failedErrorName}`)
683
+ }
684
+
685
+ return
686
+ }
687
+
688
+ let expectedMessage
689
+
690
+ if (typeof expected === "string") {
691
+ expectedMessage = expected
692
+ } else if (expected instanceof Error) {
693
+ expectedMessage = expected.message
694
+ } else {
695
+ expectedMessage = String(expected)
696
+ }
697
+
698
+ if (failedErrorMessage != expectedMessage) {
699
+ throw new Error(`Expected to fail with '${expectedMessage}' but failed with '${failedErrorMessage}'`)
700
+ }
701
+ }
702
+
703
+ /**
704
+ * Runs execute.
705
+ * @returns {Promise<?>} - Resolves with the execute.
706
+ */
707
+ async execute() {
708
+ for (const expectation of this.expectations) {
709
+ await expectation.runBefore()
710
+ }
711
+
712
+ if (typeof this._object !== "function") {
713
+ throw new Error(`Expected function but got ${typeof this._object}`)
714
+ }
715
+
716
+ const result = await this._object()
717
+
718
+ for (const expectation of this.expectations) {
719
+ await expectation.runAfter()
720
+ }
721
+
722
+ for (const expectation of this.expectations) {
723
+ await expectation.execute()
724
+ }
725
+
726
+ return result
727
+ }
728
+
729
+ /**
730
+ * Runs to have attributes.
731
+ * @param {Record<string, ?>} result - Result.
732
+ * @returns {void} - No return value.
733
+ */
734
+ toHaveAttributes(result) {
735
+ if (this._not) throw new Error("not stub")
736
+
737
+ /**
738
+ * Differences.
739
+ @type {Record<string, Array<?>>} */
740
+ const differences = {}
741
+ const objectAsRecord = /**
742
+ * Narrows the runtime value to the documented type.
743
+ @type {Record<string, ?>} */ (this._object)
744
+
745
+ for (const key in result) {
746
+ const value = result[key]
747
+
748
+ if (!(key in objectAsRecord)) throw new Error(`${this._object.constructor.name} doesn't respond to ${key}`)
749
+
750
+ const objectValue = /**
751
+ * Narrows the runtime value to the documented type.
752
+ @type {() => ?} */ (objectAsRecord[key])()
753
+
754
+ if (value != objectValue) {
755
+ differences[key] = [value, objectValue]
756
+ }
757
+ }
758
+
759
+ if (Object.keys(differences).length > 0) {
760
+ throw new Error(`Object had differet values: ${minifiedStringify(differences)}`)
761
+ }
762
+ }
763
+ }