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
@@ -1,7 +1,9 @@
1
1
  // @ts-check
2
- import BelongsToPreloader from "../../query/preloader/belongs-to.js";
3
- import HasManyPreloader from "../../query/preloader/has-many.js";
4
- import HasOnePreloader from "../../query/preloader/has-one.js";
2
+
3
+ import BelongsToPreloader from "../../query/preloader/belongs-to.js"
4
+ import HasManyPreloader from "../../query/preloader/has-many.js"
5
+ import HasOnePreloader from "../../query/preloader/has-one.js"
6
+
5
7
  /**
6
8
  * InstanceRelationshipsBaseArgs type.
7
9
  * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
@@ -10,246 +12,278 @@ import HasOnePreloader from "../../query/preloader/has-one.js";
10
12
  * @property {InstanceType<MC>} model - Parent model instance.
11
13
  * @property {import("../relationships/base.js").default} relationship - Relationship metadata definition.
12
14
  */
15
+
13
16
  /**
14
17
  * A generic query over some model type.
15
18
  * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
16
19
  * @template {typeof import("../index.js").default} [TMC=typeof import("../index.js").default]
17
20
  */
18
21
  export default class VelociousDatabaseRecordBaseInstanceRelationship {
19
- /**
20
- * Auto save.
21
- @type {boolean | undefined} */
22
- _autoSave = undefined;
23
- /**
24
- * Preloaded.
25
- @type {boolean | undefined} */
26
- _preloaded = undefined;
27
- /**
28
- * Loaded.
29
- @type {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} */
30
- _loaded = undefined;
31
- /**
32
- * Runs constructor.
33
- * @param {InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
34
- */
35
- constructor({ model, relationship }) {
36
- this._dirty = false;
37
- this.model = model;
38
- this.relationship = relationship;
39
- }
40
- /**
41
- * Runs add to loaded.
42
- * @abstract
43
- * @param {InstanceType<TMC>[] | InstanceType<TMC>} models - Model instances.
44
- * @returns {void} - No return value.
45
- */
46
- addToLoaded(models) {
47
- throw new Error("addToLoaded not implemented");
48
- }
49
- /**
50
- * Runs build.
51
- * @abstract
52
- * @param {Record<string, ?>} attributes - Attributes.
53
- * @returns {InstanceType<TMC>} - The build.
54
- */
55
- build(attributes) {
56
- throw new Error("'build' not implemented");
57
- }
58
- /**
59
- * Runs get auto save.
60
- * @returns {boolean | undefined} Whether the relationship should be auto-saved before saving the parent model
61
- */
62
- getAutoSave() { return this._autoSave; }
63
- /**
64
- * Runs set auto save.
65
- * @param {boolean} newAutoSaveValue Whether the relationship should be auto-saved before saving the parent model
66
- * @returns {void} - No return value.
67
- */
68
- setAutoSave(newAutoSaveValue) { this._autoSave = newAutoSaveValue; }
69
- /**
70
- * Runs set dirty.
71
- * @param {boolean} newValue Whether the relationship is dirty (has been modified)
72
- * @returns {void} - No return value.
73
- */
74
- setDirty(newValue) { this._dirty = newValue; }
75
- /**
76
- * Runs get dirty.
77
- * @returns {boolean} Whether the relationship is dirty (has been modified)
78
- */
79
- getDirty() { return this._dirty; }
80
- /**
81
- * Runs load.
82
- * @abstract
83
- * @returns {Promise<InstanceType<TMC> | Array<InstanceType<TMC>> | undefined>} - Resolves with loaded relationship value.
84
- */
85
- load() {
86
- throw new Error("'load' not implemented");
87
- }
88
- /**
89
- * Loads the relationship if not already loaded. When the parent record was
90
- * loaded as part of a batch (cohort) and autoload is enabled, siblings in
91
- * the cohort that share this relationship and have not preloaded it yet
92
- * are batched into a single query via the existing preloader path.
93
- * @returns {Promise<InstanceType<TMC> | Array<InstanceType<TMC>> | undefined>} - Resolves with loaded relationship value.
94
- */
95
- async autoloadOrLoad() {
96
- if (this._loaded !== undefined)
97
- return this._loaded;
98
- const batched = await this._tryCohortPreload();
99
- if (!batched)
100
- await this.load();
101
- return this._loaded;
22
+ /**
23
+ * Auto save.
24
+ @type {boolean | undefined} */
25
+ _autoSave = undefined
26
+ /**
27
+ * Preloaded.
28
+ @type {boolean | undefined} */
29
+ _preloaded = undefined
30
+ /**
31
+ * Loaded.
32
+ @type {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} */
33
+ _loaded = undefined
34
+
35
+ /**
36
+ * Runs constructor.
37
+ * @param {InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
38
+ */
39
+ constructor({model, relationship}) {
40
+ this._dirty = false
41
+ this.model = model
42
+ this.relationship = relationship
43
+ }
44
+
45
+ /**
46
+ * Runs add to loaded.
47
+ * @abstract
48
+ * @param {InstanceType<TMC>[] | InstanceType<TMC>} models - Model instances.
49
+ * @returns {void} - No return value.
50
+ */
51
+ addToLoaded(models) { // eslint-disable-line no-unused-vars
52
+ throw new Error("addToLoaded not implemented")
53
+ }
54
+
55
+ /**
56
+ * Runs build.
57
+ * @abstract
58
+ * @param {Record<string, ?>} attributes - Attributes.
59
+ * @returns {InstanceType<TMC>} - The build.
60
+ */
61
+ build(attributes) { // eslint-disable-line no-unused-vars
62
+ throw new Error("'build' not implemented")
63
+ }
64
+
65
+ /**
66
+ * Runs get auto save.
67
+ * @returns {boolean | undefined} Whether the relationship should be auto-saved before saving the parent model
68
+ */
69
+ getAutoSave() { return this._autoSave }
70
+
71
+ /**
72
+ * Runs set auto save.
73
+ * @param {boolean} newAutoSaveValue Whether the relationship should be auto-saved before saving the parent model
74
+ * @returns {void} - No return value.
75
+ */
76
+ setAutoSave(newAutoSaveValue) { this._autoSave = newAutoSaveValue }
77
+
78
+ /**
79
+ * Runs set dirty.
80
+ * @param {boolean} newValue Whether the relationship is dirty (has been modified)
81
+ * @returns {void} - No return value.
82
+ */
83
+ setDirty(newValue) { this._dirty = newValue }
84
+
85
+ /**
86
+ * Runs get dirty.
87
+ * @returns {boolean} Whether the relationship is dirty (has been modified)
88
+ */
89
+ getDirty() { return this._dirty }
90
+
91
+ /**
92
+ * Runs load.
93
+ * @abstract
94
+ * @returns {Promise<InstanceType<TMC> | Array<InstanceType<TMC>> | undefined>} - Resolves with loaded relationship value.
95
+ */
96
+ load() {
97
+ throw new Error("'load' not implemented")
98
+ }
99
+
100
+ /**
101
+ * Loads the relationship if not already loaded. When the parent record was
102
+ * loaded as part of a batch (cohort) and autoload is enabled, siblings in
103
+ * the cohort that share this relationship and have not preloaded it yet
104
+ * are batched into a single query via the existing preloader path.
105
+ * @returns {Promise<InstanceType<TMC> | Array<InstanceType<TMC>> | undefined>} - Resolves with loaded relationship value.
106
+ */
107
+ async autoloadOrLoad() {
108
+ if (this._loaded !== undefined) return this._loaded
109
+
110
+ const batched = await this._tryCohortPreload()
111
+
112
+ if (!batched) await this.load()
113
+
114
+ return this._loaded
115
+ }
116
+
117
+ /**
118
+ * Attempts to batch-load this relationship across cohort siblings via the
119
+ * existing preloader path. Returns true when a batch ran (self is always
120
+ * included because callers reset their own `_preloaded` state before
121
+ * calling), false when autoload is off, there is no cohort, or no batch
122
+ * candidates remain. Siblings that have already preloaded this relationship
123
+ * are skipped so their cached value is preserved.
124
+ * @returns {Promise<boolean>} - Whether a cohort batch preload ran.
125
+ */
126
+ async _tryCohortPreload() {
127
+ const relationshipDef = this.getRelationship()
128
+ const configuration = relationshipDef.getConfiguration()
129
+ const cohort = /**
130
+ * Narrows the runtime value to the documented type.
131
+ @type {Array<import("../index.js").default> | undefined} */ (/**
132
+ * Narrows the runtime value to the documented type.
133
+ @type {?} */ (this.model)._loadCohort)
134
+
135
+ if (!configuration.getAutoload() || !relationshipDef.getAutoload() || !cohort || cohort.length <= 1) {
136
+ return false
102
137
  }
138
+
139
+ const relationshipName = relationshipDef.getRelationshipName()
140
+ const OwnerModelClass = /**
141
+ * Narrows the runtime value to the documented type.
142
+ @type {?} */ (this.model).constructor
103
143
  /**
104
- * Attempts to batch-load this relationship across cohort siblings via the
105
- * existing preloader path. Returns true when a batch ran (self is always
106
- * included because callers reset their own `_preloaded` state before
107
- * calling), false when autoload is off, there is no cohort, or no batch
108
- * candidates remain. Siblings that have already preloaded this relationship
109
- * are skipped so their cached value is preserved.
110
- * @returns {Promise<boolean>} - Whether a cohort batch preload ran.
111
- */
112
- async _tryCohortPreload() {
113
- const relationshipDef = this.getRelationship();
114
- const configuration = relationshipDef.getConfiguration();
115
- const cohort = /**
116
- * Narrows the runtime value to the documented type.
117
- @type {Array<import("../index.js").default> | undefined} */ ( /**
118
- * Narrows the runtime value to the documented type.
119
- @type {?} */(this.model)._loadCohort);
120
- if (!configuration.getAutoload() || !relationshipDef.getAutoload() || !cohort || cohort.length <= 1) {
121
- return false;
122
- }
123
- const relationshipName = relationshipDef.getRelationshipName();
124
- const OwnerModelClass = /**
125
- * Narrows the runtime value to the documented type.
126
- @type {?} */ (this.model).constructor;
127
- /**
128
- * Batch.
129
- @type {Array<import("../index.js").default>} */
130
- const batch = [];
131
- // Exact same class, persisted, no existing in-memory relationship state.
132
- // Skip siblings where `_loaded` is already set — they may have been
133
- // preloaded (preserve cache) OR locally manipulated via `build...` /
134
- // `set...` (preserve unsaved edits). Either way the preloader would
135
- // overwrite that state.
136
- for (const sibling of cohort) {
137
- if (sibling.constructor !== OwnerModelClass)
138
- continue;
139
- if (!sibling.isPersisted())
140
- continue;
141
- const siblingInstanceRelationship = sibling.getRelationshipByName(relationshipName);
142
- if (siblingInstanceRelationship.getLoadedOrUndefined() !== undefined)
143
- continue;
144
- batch.push(sibling);
145
- }
146
- if (batch.length === 0)
147
- return false;
148
- const type = relationshipDef.getType();
149
- if (type == "belongsTo") {
150
- const belongsToRelationship = /**
151
- * Narrows the runtime value to the documented type.
152
- @type {import("../relationships/belongs-to.js").default} */ (relationshipDef);
153
- const preloader = new BelongsToPreloader({ models: batch, relationship: belongsToRelationship });
154
- await preloader.run();
155
- }
156
- else if (type == "hasMany") {
157
- const hasManyRelationship = /**
158
- * Narrows the runtime value to the documented type.
159
- @type {import("../relationships/has-many.js").default} */ (relationshipDef);
160
- const preloader = new HasManyPreloader({ models: batch, relationship: hasManyRelationship });
161
- await preloader.run();
162
- }
163
- else if (type == "hasOne") {
164
- const hasOneRelationship = /**
165
- * Narrows the runtime value to the documented type.
166
- @type {import("../relationships/has-one.js").default} */ (relationshipDef);
167
- const preloader = new HasOnePreloader({ models: batch, relationship: hasOneRelationship });
168
- await preloader.run();
169
- }
170
- else {
171
- throw new Error(`Unknown relationship type: ${type}`);
172
- }
173
- return true;
144
+ * Batch.
145
+ @type {Array<import("../index.js").default>} */
146
+ const batch = []
147
+
148
+ // Exact same class, persisted, no existing in-memory relationship state.
149
+ // Skip siblings where `_loaded` is already set — they may have been
150
+ // preloaded (preserve cache) OR locally manipulated via `build...` /
151
+ // `set...` (preserve unsaved edits). Either way the preloader would
152
+ // overwrite that state.
153
+ for (const sibling of cohort) {
154
+ if (sibling.constructor !== OwnerModelClass) continue
155
+ if (!sibling.isPersisted()) continue
156
+
157
+ const siblingInstanceRelationship = sibling.getRelationshipByName(relationshipName)
158
+
159
+ if (siblingInstanceRelationship.getLoadedOrUndefined() !== undefined) continue
160
+
161
+ batch.push(sibling)
174
162
  }
175
- /**
176
- * Runs is loaded.
177
- * @returns {boolean} Whether the relationship has been preloaded
178
- */
179
- isLoaded() { return Boolean(this._loaded); }
180
- /**
181
- * Runs loaded.
182
- * @returns {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} The loaded model or models (depending on relationship type)
183
- */
184
- loaded() {
185
- if (!this._preloaded && this.model.isPersisted()) {
186
- throw new Error(`${this.model.constructor.name}#${this.relationship.getRelationshipName()} hasn't been preloaded`);
187
- }
188
- return this._loaded;
189
- }
190
- /**
191
- * Runs set loaded.
192
- * @param {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} model - Related model(s) to mark as loaded.
193
- */
194
- setLoaded(model) { this._loaded = model; }
195
- /**
196
- * Runs get loaded or undefined.
197
- * @returns {InstanceType<TMC> | InstanceType<TMC>[] | undefined} - The loaded or undefined.
198
- */
199
- getLoadedOrUndefined() { return this._loaded; }
200
- /**
201
- * Runs get preloaded.
202
- * @returns {boolean} The loaded model or models (depending on relationship type)
203
- */
204
- getPreloaded() { return this._preloaded || false; }
205
- /**
206
- * Runs set preloaded.
207
- * @param {boolean} isPreloaded - Whether the relationship is preloaded.
208
- */
209
- setPreloaded(isPreloaded) { this._preloaded = isPreloaded; }
210
- /**
211
- * Runs get foreign key.
212
- * @returns {string} The foreign key for this relationship
213
- */
214
- getForeignKey() { return this.getRelationship().getForeignKey(); }
215
- /**
216
- * Runs get model.
217
- * @returns {InstanceType<MC>} - The model.
218
- */
219
- getModel() { return this.model; }
220
- /**
221
- * Runs get primary key.
222
- * @returns {string} The primary key for this relationship's model
223
- */
224
- getPrimaryKey() { return this.getRelationship().getPrimaryKey(); }
225
- /**
226
- * Runs get relationship.
227
- * @returns {import("../relationships/base.js").default} The relationship object that this instance relationship is based on
228
- */
229
- getRelationship() { return this.relationship; }
230
- /**
231
- * Runs apply scope.
232
- * @template T
233
- * @param {T} query - Query instance.
234
- * @returns {T} - Scoped query.
235
- */
236
- applyScope(query) {
237
- return this.getRelationship().applyScope(query);
238
- }
239
- /**
240
- * Runs get target model class.
241
- * @returns {TMC | undefined} The model class that this instance relationship
242
- */
243
- getTargetModelClass() {
244
- const TargetModelClass = /**
163
+
164
+ if (batch.length === 0) return false
165
+
166
+ const type = relationshipDef.getType()
167
+
168
+ if (type == "belongsTo") {
169
+ const belongsToRelationship = /**
170
+ * Narrows the runtime value to the documented type.
171
+ @type {import("../relationships/belongs-to.js").default} */ (relationshipDef)
172
+ const preloader = new BelongsToPreloader({models: batch, relationship: belongsToRelationship})
173
+
174
+ await preloader.run()
175
+ } else if (type == "hasMany") {
176
+ const hasManyRelationship = /**
177
+ * Narrows the runtime value to the documented type.
178
+ @type {import("../relationships/has-many.js").default} */ (relationshipDef)
179
+ const preloader = new HasManyPreloader({models: batch, relationship: hasManyRelationship})
180
+
181
+ await preloader.run()
182
+ } else if (type == "hasOne") {
183
+ const hasOneRelationship = /**
245
184
  * Narrows the runtime value to the documented type.
246
- @type {TMC} */ (this.getRelationship().getTargetModelClass());
247
- return TargetModelClass;
185
+ @type {import("../relationships/has-one.js").default} */ (relationshipDef)
186
+ const preloader = new HasOnePreloader({models: batch, relationship: hasOneRelationship})
187
+
188
+ await preloader.run()
189
+ } else {
190
+ throw new Error(`Unknown relationship type: ${type}`)
248
191
  }
249
- /**
250
- * Runs get type.
251
- * @returns {string} The type of relationship (e.g. "has_many", "belongs_to", etc.)
252
- */
253
- getType() { return this.getRelationship().getType(); }
192
+
193
+ return true
194
+ }
195
+
196
+ /**
197
+ * Runs is loaded.
198
+ * @returns {boolean} Whether the relationship has been preloaded
199
+ */
200
+ isLoaded() { return Boolean(this._loaded) }
201
+
202
+ /**
203
+ * Runs loaded.
204
+ * @returns {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} The loaded model or models (depending on relationship type)
205
+ */
206
+ loaded() {
207
+ if (!this._preloaded && this.model.isPersisted()) {
208
+ throw new Error(`${this.model.constructor.name}#${this.relationship.getRelationshipName()} hasn't been preloaded`)
209
+ }
210
+
211
+ return this._loaded
212
+ }
213
+
214
+ /**
215
+ * Runs set loaded.
216
+ * @param {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} model - Related model(s) to mark as loaded.
217
+ */
218
+ setLoaded(model) { this._loaded = model }
219
+
220
+ /**
221
+ * Runs get loaded or undefined.
222
+ * @returns {InstanceType<TMC> | InstanceType<TMC>[] | undefined} - The loaded or undefined.
223
+ */
224
+ getLoadedOrUndefined() { return this._loaded }
225
+
226
+ /**
227
+ * Runs get preloaded.
228
+ * @returns {boolean} The loaded model or models (depending on relationship type)
229
+ */
230
+ getPreloaded() { return this._preloaded || false }
231
+
232
+ /**
233
+ * Runs set preloaded.
234
+ * @param {boolean} isPreloaded - Whether the relationship is preloaded.
235
+ */
236
+ setPreloaded(isPreloaded) { this._preloaded = isPreloaded }
237
+
238
+ /**
239
+ * Runs get foreign key.
240
+ * @returns {string} The foreign key for this relationship
241
+ */
242
+ getForeignKey() { return this.getRelationship().getForeignKey() }
243
+
244
+ /**
245
+ * Runs get model.
246
+ * @returns {InstanceType<MC>} - The model.
247
+ */
248
+ getModel() { return this.model }
249
+
250
+ /**
251
+ * Runs get primary key.
252
+ * @returns {string} The primary key for this relationship's model
253
+ */
254
+ getPrimaryKey() { return this.getRelationship().getPrimaryKey() }
255
+
256
+ /**
257
+ * Runs get relationship.
258
+ * @returns {import("../relationships/base.js").default} The relationship object that this instance relationship is based on
259
+ */
260
+ getRelationship() { return this.relationship }
261
+
262
+ /**
263
+ * Runs apply scope.
264
+ * @template T
265
+ * @param {T} query - Query instance.
266
+ * @returns {T} - Scoped query.
267
+ */
268
+ applyScope(query) {
269
+ return this.getRelationship().applyScope(query)
270
+ }
271
+
272
+ /**
273
+ * Runs get target model class.
274
+ * @returns {TMC | undefined} The model class that this instance relationship
275
+ */
276
+ getTargetModelClass() {
277
+ const TargetModelClass = /**
278
+ * Narrows the runtime value to the documented type.
279
+ @type {TMC} */ (this.getRelationship().getTargetModelClass())
280
+
281
+ return TargetModelClass
282
+ }
283
+
284
+ /**
285
+ * Runs get type.
286
+ * @returns {string} The type of relationship (e.g. "has_many", "belongs_to", etc.)
287
+ */
288
+ getType() { return this.getRelationship().getType() }
254
289
  }
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGtCQUFrQixNQUFNLHFDQUFxQyxDQUFBO0FBQ3BFLE9BQU8sZ0JBQWdCLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxlQUFlLE1BQU0sa0NBQWtDLENBQUE7QUFFOUQ7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLCtDQUErQztJQUNsRTs7b0NBRWdDO0lBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDckI7O29DQUVnQztJQUNoQyxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBQ3RCOzt5RUFFcUU7SUFDckUsT0FBTyxHQUFHLFNBQVMsQ0FBQTtJQUVuQjs7O09BR0c7SUFDSCxZQUFZLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsTUFBTTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDO0lBRXZDOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFNB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dGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJlbG9uZ3NUb1ByZWxvYWRlciBmcm9tIFwiLi4vLi4vcXVlcnkvcHJlbG9hZGVyL2JlbG9uZ3MtdG8uanNcIlxuaW1wb3J0IEhhc01hbnlQcmVsb2FkZXIgZnJvbSBcIi4uLy4uL3F1ZXJ5L3ByZWxvYWRlci9oYXMtbWFueS5qc1wiXG5pbXBvcnQgSGFzT25lUHJlbG9hZGVyIGZyb20gXCIuLi8uLi9xdWVyeS9wcmVsb2FkZXIvaGFzLW9uZS5qc1wiXG5cbi8qKlxuICogSW5zdGFuY2VSZWxhdGlvbnNoaXBzQmFzZUFyZ3MgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtNQz10eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdF1cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtUTUM9dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHRdXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJbnN0YW5jZVJlbGF0aW9uc2hpcHNCYXNlQXJnc1xuICogQHByb3BlcnR5IHtJbnN0YW5jZVR5cGU8TUM+fSBtb2RlbCAtIFBhcmVudCBtb2RlbCBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHR9IHJlbGF0aW9uc2hpcCAtIFJlbGF0aW9uc2hpcCBtZXRhZGF0YSBkZWZpbml0aW9uLlxuICovXG5cbi8qKlxuICogQSBnZW5lcmljIHF1ZXJ5IG92ZXIgc29tZSBtb2RlbCB0eXBlLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW01DPXR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0XVxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW1RNQz10eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdF1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmRCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAge1xuICAvKipcbiAgICogQXV0byBzYXZlLlxuICAgIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBfYXV0b1NhdmUgPSB1bmRlZmluZWRcbiAgLyoqXG4gICAqIFByZWxvYWRlZC5cbiAgICBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgX3ByZWxvYWRlZCA9IHVuZGVmaW5lZFxuICAvKipcbiAgICogTG9hZGVkLlxuICAgIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPiB8IEFycmF5PEluc3RhbmNlVHlwZTxUTUM+PiB8IHVuZGVmaW5lZH0gKi9cbiAgX2xvYWRlZCA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge0luc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzPE1DLCBUTUM+fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWwsIHJlbGF0aW9uc2hpcH0pIHtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsXG4gICAgdGhpcy5yZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCB0byBsb2FkZWQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxUTUM+W10gfCBJbnN0YW5jZVR5cGU8VE1DPn0gbW9kZWxzIC0gTW9kZWwgaW5zdGFuY2VzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhZGRUb0xvYWRlZChtb2RlbHMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImFkZFRvTG9hZGVkIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYnVpbGQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBhdHRyaWJ1dGVzIC0gQXR0cmlidXRlcy5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+fSAtIFRoZSBidWlsZC5cbiAgICovXG4gIGJ1aWxkKGF0dHJpYnV0ZXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIididWlsZCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgYXV0byBzYXZlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIHNob3VsZCBiZSBhdXRvLXNhdmVkIGJlZm9yZSBzYXZpbmcgdGhlIHBhcmVudCBtb2RlbFxuICAgKi9cbiAgZ2V0QXV0b1NhdmUoKSB7IHJldHVybiB0aGlzLl9hdXRvU2F2ZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IGF1dG8gc2F2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdBdXRvU2F2ZVZhbHVlIFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBzaG91bGQgYmUgYXV0by1zYXZlZCBiZWZvcmUgc2F2aW5nIHRoZSBwYXJlbnQgbW9kZWxcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0QXV0b1NhdmUobmV3QXV0b1NhdmVWYWx1ZSkgeyB0aGlzLl9hdXRvU2F2ZSA9IG5ld0F1dG9TYXZlVmFsdWUgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNldCBkaXJ0eS5cbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdWYWx1ZSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgZGlydHkgKGhhcyBiZWVuIG1vZGlmaWVkKVxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXREaXJ0eShuZXdWYWx1ZSkgeyB0aGlzLl9kaXJ0eSA9IG5ld1ZhbHVlIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZGlydHkuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgZGlydHkgKGhhcyBiZWVuIG1vZGlmaWVkKVxuICAgKi9cbiAgZ2V0RGlydHkoKSB7IHJldHVybiB0aGlzLl9kaXJ0eSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbG9hZC5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIGxvYWRlZCByZWxhdGlvbnNoaXAgdmFsdWUuXG4gICAqL1xuICBsb2FkKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidsb2FkJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgcmVsYXRpb25zaGlwIGlmIG5vdCBhbHJlYWR5IGxvYWRlZC4gV2hlbiB0aGUgcGFyZW50IHJlY29yZCB3YXNcbiAgICogbG9hZGVkIGFzIHBhcnQgb2YgYSBiYXRjaCAoY29ob3J0KSBhbmQgYXV0b2xvYWQgaXMgZW5hYmxlZCwgc2libGluZ3MgaW5cbiAgICogdGhlIGNvaG9ydCB0aGF0IHNoYXJlIHRoaXMgcmVsYXRpb25zaGlwIGFuZCBoYXZlIG5vdCBwcmVsb2FkZWQgaXQgeWV0XG4gICAqIGFyZSBiYXRjaGVkIGludG8gYSBzaW5nbGUgcXVlcnkgdmlhIHRoZSBleGlzdGluZyBwcmVsb2FkZXIgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPFRNQz4gfCBBcnJheTxJbnN0YW5jZVR5cGU8VE1DPj4gfCB1bmRlZmluZWQ+fSAtIFJlc29sdmVzIHdpdGggbG9hZGVkIHJlbGF0aW9uc2hpcCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIGF1dG9sb2FkT3JMb2FkKCkge1xuICAgIGlmICh0aGlzLl9sb2FkZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2xvYWRlZFxuXG4gICAgY29uc3QgYmF0Y2hlZCA9IGF3YWl0IHRoaXMuX3RyeUNvaG9ydFByZWxvYWQoKVxuXG4gICAgaWYgKCFiYXRjaGVkKSBhd2FpdCB0aGlzLmxvYWQoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGJhdGNoLWxvYWQgdGhpcyByZWxhdGlvbnNoaXAgYWNyb3NzIGNvaG9ydCBzaWJsaW5ncyB2aWEgdGhlXG4gICAqIGV4aXN0aW5nIHByZWxvYWRlciBwYXRoLiBSZXR1cm5zIHRydWUgd2hlbiBhIGJhdGNoIHJhbiAoc2VsZiBpcyBhbHdheXNcbiAgICogaW5jbHVkZWQgYmVjYXVzZSBjYWxsZXJzIHJlc2V0IHRoZWlyIG93biBgX3ByZWxvYWRlZGAgc3RhdGUgYmVmb3JlXG4gICAqIGNhbGxpbmcpLCBmYWxzZSB3aGVuIGF1dG9sb2FkIGlzIG9mZiwgdGhlcmUgaXMgbm8gY29ob3J0LCBvciBubyBiYXRjaFxuICAgKiBjYW5kaWRhdGVzIHJlbWFpbi4gU2libGluZ3MgdGhhdCBoYXZlIGFscmVhZHkgcHJlbG9hZGVkIHRoaXMgcmVsYXRpb25zaGlwXG4gICAqIGFyZSBza2lwcGVkIHNvIHRoZWlyIGNhY2hlZCB2YWx1ZSBpcyBwcmVzZXJ2ZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgYSBjb2hvcnQgYmF0Y2ggcHJlbG9hZCByYW4uXG4gICAqL1xuICBhc3luYyBfdHJ5Q29ob3J0UHJlbG9hZCgpIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBEZWYgPSB0aGlzLmdldFJlbGF0aW9uc2hpcCgpXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHJlbGF0aW9uc2hpcERlZi5nZXRDb25maWd1cmF0aW9uKClcbiAgICBjb25zdCBjb2hvcnQgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICBAdHlwZSB7QXJyYXk8aW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdD4gfCB1bmRlZmluZWR9ICovICgvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7P30gKi8gKHRoaXMubW9kZWwpLl9sb2FkQ29ob3J0KVxuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uLmdldEF1dG9sb2FkKCkgfHwgIXJlbGF0aW9uc2hpcERlZi5nZXRBdXRvbG9hZCgpIHx8ICFjb2hvcnQgfHwgY29ob3J0Lmxlbmd0aCA8PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gcmVsYXRpb25zaGlwRGVmLmdldFJlbGF0aW9uc2hpcE5hbWUoKVxuICAgIGNvbnN0IE93bmVyTW9kZWxDbGFzcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHs/fSAqLyAodGhpcy5tb2RlbCkuY29uc3RydWN0b3JcbiAgICAvKipcbiAgICAgKiBCYXRjaC5cbiAgICAgIEB0eXBlIHtBcnJheTxpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gKi9cbiAgICBjb25zdCBiYXRjaCA9IFtdXG5cbiAgICAvLyBFeGFjdCBzYW1lIGNsYXNzLCBwZXJzaXN0ZWQsIG5vIGV4aXN0aW5nIGluLW1lbW9yeSByZWxhdGlvbnNoaXAgc3RhdGUuXG4gICAgLy8gU2tpcCBzaWJsaW5ncyB3aGVyZSBgX2xvYWRlZGAgaXMgYWxyZWFkeSBzZXQg4oCUIHRoZXkgbWF5IGhhdmUgYmVlblxuICAgIC8vIHByZWxvYWRlZCAocHJlc2VydmUgY2FjaGUpIE9SIGxvY2FsbHkgbWFuaXB1bGF0ZWQgdmlhIGBidWlsZC4uLmAgL1xuICAgIC8vIGBzZXQuLi5gIChwcmVzZXJ2ZSB1bnNhdmVkIGVkaXRzKS4gRWl0aGVyIHdheSB0aGUgcHJlbG9hZGVyIHdvdWxkXG4gICAgLy8gb3ZlcndyaXRlIHRoYXQgc3RhdGUuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nIG9mIGNvaG9ydCkge1xuICAgICAgaWYgKHNpYmxpbmcuY29uc3RydWN0b3IgIT09IE93bmVyTW9kZWxDbGFzcykgY29udGludWVcbiAgICAgIGlmICghc2libGluZy5pc1BlcnNpc3RlZCgpKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBzaWJsaW5nSW5zdGFuY2VSZWxhdGlvbnNoaXAgPSBzaWJsaW5nLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShyZWxhdGlvbnNoaXBOYW1lKVxuXG4gICAgICBpZiAoc2libGluZ0luc3RhbmNlUmVsYXRpb25zaGlwLmdldExvYWRlZE9yVW5kZWZpbmVkKCkgIT09IHVuZGVmaW5lZCkgY29udGludWVcblxuICAgICAgYmF0Y2gucHVzaChzaWJsaW5nKVxuICAgIH1cblxuICAgIGlmIChiYXRjaC5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgdHlwZSA9IHJlbGF0aW9uc2hpcERlZi5nZXRUeXBlKClcblxuICAgIGlmICh0eXBlID09IFwiYmVsb25nc1RvXCIpIHtcbiAgICAgIGNvbnN0IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7aW1wb3J0KFwiLi4vcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzXCIpLmRlZmF1bHR9ICovIChyZWxhdGlvbnNoaXBEZWYpXG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgQmVsb25nc1RvUHJlbG9hZGVyKHttb2RlbHM6IGJhdGNoLCByZWxhdGlvbnNoaXA6IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc01hbnlcIikge1xuICAgICAgY29uc3QgaGFzTWFueVJlbGF0aW9uc2hpcCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHtpbXBvcnQoXCIuLi9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9ICovIChyZWxhdGlvbnNoaXBEZWYpXG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgSGFzTWFueVByZWxvYWRlcih7bW9kZWxzOiBiYXRjaCwgcmVsYXRpb25zaGlwOiBoYXNNYW55UmVsYXRpb25zaGlwfSlcblxuICAgICAgYXdhaXQgcHJlbG9hZGVyLnJ1bigpXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiaGFzT25lXCIpIHtcbiAgICAgIGNvbnN0IGhhc09uZVJlbGF0aW9uc2hpcCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7aW1wb3J0KFwiLi4vcmVsYXRpb25zaGlwcy9oYXMtb25lLmpzXCIpLmRlZmF1bHR9ICovIChyZWxhdGlvbnNoaXBEZWYpXG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgSGFzT25lUHJlbG9hZGVyKHttb2RlbHM6IGJhdGNoLCByZWxhdGlvbnNoaXA6IGhhc09uZVJlbGF0aW9uc2hpcH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVsYXRpb25zaGlwIHR5cGU6ICR7dHlwZX1gKVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyBpcyBsb2FkZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaGFzIGJlZW4gcHJlbG9hZGVkXG4gICAqL1xuICBpc0xvYWRlZCgpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5fbG9hZGVkKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbG9hZGVkLlxuICAgKiBAcmV0dXJucyB7SW5zdGFuY2VUeXBlPFRNQz4gfCBBcnJheTxJbnN0YW5jZVR5cGU8VE1DPj4gfCB1bmRlZmluZWR9IFRoZSBsb2FkZWQgbW9kZWwgb3IgbW9kZWxzIChkZXBlbmRpbmcgb24gcmVsYXRpb25zaGlwIHR5cGUpXG4gICAqL1xuICBsb2FkZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9wcmVsb2FkZWQgJiYgdGhpcy5tb2RlbC5pc1BlcnNpc3RlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5tb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gaGFzbid0IGJlZW4gcHJlbG9hZGVkYClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzZXQgbG9hZGVkLlxuICAgKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkfSBtb2RlbCAtIFJlbGF0ZWQgbW9kZWwocykgdG8gbWFyayBhcyBsb2FkZWQuXG4gICAqL1xuICBzZXRMb2FkZWQobW9kZWwpIHsgdGhpcy5fbG9hZGVkID0gbW9kZWwgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBsb2FkZWQgb3IgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyB7SW5zdGFuY2VUeXBlPFRNQz4gfCBJbnN0YW5jZVR5cGU8VE1DPltdIHwgdW5kZWZpbmVkfSAtIFRoZSBsb2FkZWQgb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0TG9hZGVkT3JVbmRlZmluZWQoKSB7IHJldHVybiB0aGlzLl9sb2FkZWQgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBwcmVsb2FkZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgbG9hZGVkIG1vZGVsIG9yIG1vZGVscyAoZGVwZW5kaW5nIG9uIHJlbGF0aW9uc2hpcCB0eXBlKVxuICAgKi9cbiAgZ2V0UHJlbG9hZGVkKCkgeyByZXR1cm4gdGhpcy5fcHJlbG9hZGVkIHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogUnVucyBzZXQgcHJlbG9hZGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJlbG9hZGVkIC0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIHByZWxvYWRlZC5cbiAgICovXG4gIHNldFByZWxvYWRlZChpc1ByZWxvYWRlZCkgeyB0aGlzLl9wcmVsb2FkZWQgPSBpc1ByZWxvYWRlZCB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGZvcmVpZ24ga2V5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9yZWlnbiBrZXkgZm9yIHRoaXMgcmVsYXRpb25zaGlwXG4gICAqL1xuICBnZXRGb3JlaWduS2V5KCkgeyByZXR1cm4gdGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5nZXRGb3JlaWduS2V5KCkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBtb2RlbC5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxNQz59IC0gVGhlIG1vZGVsLlxuICAgKi9cbiAgZ2V0TW9kZWwoKSB7IHJldHVybiB0aGlzLm1vZGVsIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcHJpbWFyeSBrZXkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwcmltYXJ5IGtleSBmb3IgdGhpcyByZWxhdGlvbnNoaXAncyBtb2RlbFxuICAgKi9cbiAgZ2V0UHJpbWFyeUtleSgpIHsgcmV0dXJuIHRoaXMuZ2V0UmVsYXRpb25zaGlwKCkuZ2V0UHJpbWFyeUtleSgpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcmVsYXRpb25zaGlwLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHR9IFRoZSByZWxhdGlvbnNoaXAgb2JqZWN0IHRoYXQgdGhpcyBpbnN0YW5jZSByZWxhdGlvbnNoaXAgaXMgYmFzZWQgb25cbiAgICovXG4gIGdldFJlbGF0aW9uc2hpcCgpIHsgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwIH1cblxuICAvKipcbiAgICogUnVucyBhcHBseSBzY29wZS5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHtUfSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7VH0gLSBTY29wZWQgcXVlcnkuXG4gICAqL1xuICBhcHBseVNjb3BlKHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVsYXRpb25zaGlwKCkuYXBwbHlTY29wZShxdWVyeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCB0YXJnZXQgbW9kZWwgY2xhc3MuXG4gICAqIEByZXR1cm5zIHtUTUMgfCB1bmRlZmluZWR9IFRoZSBtb2RlbCBjbGFzcyB0aGF0IHRoaXMgaW5zdGFuY2UgcmVsYXRpb25zaGlwXG4gICAqL1xuICBnZXRUYXJnZXRNb2RlbENsYXNzKCkge1xuICAgIGNvbnN0IFRhcmdldE1vZGVsQ2xhc3MgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHtUTUN9ICovICh0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldFRhcmdldE1vZGVsQ2xhc3MoKSlcblxuICAgIHJldHVybiBUYXJnZXRNb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgdHlwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHR5cGUgb2YgcmVsYXRpb25zaGlwIChlLmcuIFwiaGFzX21hbnlcIiwgXCJiZWxvbmdzX3RvXCIsIGV0Yy4pXG4gICAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5nZXRUeXBlKCkgfVxufVxuIl19