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.
- package/bin/velocious.js +48 -0
- package/build/bin/velocious.js +39 -34
- package/build/index.js +1 -2
- package/build/src/application.js +214 -187
- package/build/src/authorization/ability.d.ts +24 -23
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +300 -252
- package/build/src/authorization/base-resource.d.ts +20 -26
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +136 -118
- package/build/src/background-jobs/client.js +47 -43
- package/build/src/background-jobs/cron-expression.js +166 -127
- package/build/src/background-jobs/forked-runner-child.js +47 -37
- package/build/src/background-jobs/job-record.js +10 -8
- package/build/src/background-jobs/job-registry.js +84 -72
- package/build/src/background-jobs/job-runner.js +81 -74
- package/build/src/background-jobs/job.js +72 -62
- package/build/src/background-jobs/json-socket.js +70 -65
- package/build/src/background-jobs/main.js +900 -841
- package/build/src/background-jobs/normalize-error.js +11 -12
- package/build/src/background-jobs/scheduler.js +247 -205
- package/build/src/background-jobs/socket-request.js +65 -60
- package/build/src/background-jobs/status-reporter.js +96 -86
- package/build/src/background-jobs/store.js +980 -862
- package/build/src/background-jobs/types.js +3 -2
- package/build/src/background-jobs/web/authorization.js +50 -38
- package/build/src/background-jobs/web/controller.js +268 -232
- package/build/src/background-jobs/web/index.js +40 -36
- package/build/src/background-jobs/web/path-matcher.js +48 -45
- package/build/src/background-jobs/web/registry.js +14 -9
- package/build/src/background-jobs/worker.js +639 -585
- package/build/src/beacon/client.js +293 -264
- package/build/src/beacon/in-process-broker.js +25 -20
- package/build/src/beacon/in-process-client.js +116 -104
- package/build/src/beacon/server.js +126 -110
- package/build/src/beacon/types.js +8 -2
- package/build/src/cli/base-command.js +57 -49
- package/build/src/cli/browser-cli.js +42 -37
- package/build/src/cli/commands/background-jobs-main.js +5 -5
- package/build/src/cli/commands/background-jobs-runner.js +5 -5
- package/build/src/cli/commands/background-jobs-worker.js +5 -5
- package/build/src/cli/commands/beacon.js +5 -5
- package/build/src/cli/commands/console.js +10 -10
- package/build/src/cli/commands/db/base-command.js +76 -71
- package/build/src/cli/commands/db/create.js +61 -53
- package/build/src/cli/commands/db/drop.js +71 -62
- package/build/src/cli/commands/db/migrate.js +15 -13
- package/build/src/cli/commands/db/reset.js +19 -16
- package/build/src/cli/commands/db/rollback.js +13 -12
- package/build/src/cli/commands/db/schema/dump.js +9 -9
- package/build/src/cli/commands/db/schema/load.js +9 -9
- package/build/src/cli/commands/db/seed.js +9 -9
- package/build/src/cli/commands/db/tenants/check.js +35 -32
- package/build/src/cli/commands/db/tenants/create.js +29 -26
- package/build/src/cli/commands/db/tenants/migrate.js +44 -40
- package/build/src/cli/commands/destroy/migration.js +5 -5
- package/build/src/cli/commands/generate/base-models.js +5 -5
- package/build/src/cli/commands/generate/frontend-models.js +9 -9
- package/build/src/cli/commands/generate/migration.js +5 -5
- package/build/src/cli/commands/generate/model.js +5 -5
- package/build/src/cli/commands/init.js +9 -7
- package/build/src/cli/commands/routes.js +6 -6
- package/build/src/cli/commands/run-script.js +9 -9
- package/build/src/cli/commands/runner.js +9 -9
- package/build/src/cli/commands/server.js +6 -6
- package/build/src/cli/commands/test.js +7 -6
- package/build/src/cli/index.js +141 -127
- package/build/src/cli/tenant-database-command-helper.js +185 -154
- package/build/src/cli/use-browser-cli.js +20 -15
- package/build/src/configuration-resolver.js +54 -47
- package/build/src/configuration-types.d.ts +21 -2
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +60 -3
- package/build/src/configuration.js +2547 -2240
- package/build/src/controller.js +407 -363
- package/build/src/current-configuration.js +12 -9
- package/build/src/current.js +75 -70
- package/build/src/database/annotations-async-hooks.js +22 -16
- package/build/src/database/annotations.js +18 -12
- package/build/src/database/drivers/base-column.js +179 -155
- package/build/src/database/drivers/base-columns-index.js +78 -69
- package/build/src/database/drivers/base-foreign-key.js +101 -89
- package/build/src/database/drivers/base-table.js +149 -124
- package/build/src/database/drivers/base.js +1489 -1306
- package/build/src/database/drivers/mssql/column.js +50 -39
- package/build/src/database/drivers/mssql/columns-index.js +3 -2
- package/build/src/database/drivers/mssql/connect-connection.js +9 -11
- package/build/src/database/drivers/mssql/foreign-key.js +9 -8
- package/build/src/database/drivers/mssql/index.js +587 -507
- package/build/src/database/drivers/mssql/options.js +75 -68
- package/build/src/database/drivers/mssql/query-parser.js +3 -2
- package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-database.js +31 -24
- package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/delete.js +16 -14
- package/build/src/database/drivers/mssql/sql/drop-database.js +31 -24
- package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/insert.js +2 -2
- package/build/src/database/drivers/mssql/sql/update.js +28 -24
- package/build/src/database/drivers/mssql/sql/upsert.js +20 -18
- package/build/src/database/drivers/mssql/structure-sql.js +114 -102
- package/build/src/database/drivers/mssql/table.js +96 -81
- package/build/src/database/drivers/mysql/column.js +92 -75
- package/build/src/database/drivers/mysql/columns-index.js +19 -16
- package/build/src/database/drivers/mysql/foreign-key.js +9 -8
- package/build/src/database/drivers/mysql/index.js +457 -396
- package/build/src/database/drivers/mysql/options.js +30 -26
- package/build/src/database/drivers/mysql/query-parser.js +3 -2
- package/build/src/database/drivers/mysql/query.js +29 -26
- package/build/src/database/drivers/mysql/sql/alter-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/create-database.js +28 -23
- package/build/src/database/drivers/mysql/sql/create-index.js +3 -2
- package/build/src/database/drivers/mysql/sql/create-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/delete.js +17 -14
- package/build/src/database/drivers/mysql/sql/drop-database.js +3 -2
- package/build/src/database/drivers/mysql/sql/drop-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/insert.js +3 -2
- package/build/src/database/drivers/mysql/sql/update.js +29 -24
- package/build/src/database/drivers/mysql/sql/upsert.js +10 -8
- package/build/src/database/drivers/mysql/structure-sql.js +88 -79
- package/build/src/database/drivers/mysql/table.js +98 -83
- package/build/src/database/drivers/pgsql/column.js +72 -56
- package/build/src/database/drivers/pgsql/columns-index.js +3 -2
- package/build/src/database/drivers/pgsql/foreign-key.js +9 -8
- package/build/src/database/drivers/pgsql/index.js +438 -377
- package/build/src/database/drivers/pgsql/options.js +28 -25
- package/build/src/database/drivers/pgsql/query-parser.js +3 -2
- package/build/src/database/drivers/pgsql/sql/alter-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/create-database.js +23 -19
- package/build/src/database/drivers/pgsql/sql/create-index.js +3 -2
- package/build/src/database/drivers/pgsql/sql/create-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/delete.js +17 -14
- package/build/src/database/drivers/pgsql/sql/drop-database.js +3 -2
- package/build/src/database/drivers/pgsql/sql/drop-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/insert.js +3 -2
- package/build/src/database/drivers/pgsql/sql/update.js +29 -24
- package/build/src/database/drivers/pgsql/sql/upsert.js +11 -9
- package/build/src/database/drivers/pgsql/structure-sql.js +120 -108
- package/build/src/database/drivers/pgsql/table.js +77 -60
- package/build/src/database/drivers/sqlite/base.js +478 -405
- package/build/src/database/drivers/sqlite/column.js +69 -54
- package/build/src/database/drivers/sqlite/columns-index.js +27 -22
- package/build/src/database/drivers/sqlite/connection-sql-js.js +42 -35
- package/build/src/database/drivers/sqlite/foreign-key.js +21 -18
- package/build/src/database/drivers/sqlite/index.js +373 -330
- package/build/src/database/drivers/sqlite/index.native.js +64 -55
- package/build/src/database/drivers/sqlite/index.web.js +87 -69
- package/build/src/database/drivers/sqlite/options.js +28 -25
- package/build/src/database/drivers/sqlite/query-parser.js +3 -2
- package/build/src/database/drivers/sqlite/query.js +24 -21
- package/build/src/database/drivers/sqlite/query.native.js +25 -20
- package/build/src/database/drivers/sqlite/query.web.js +37 -30
- package/build/src/database/drivers/sqlite/sql/alter-table.js +179 -159
- package/build/src/database/drivers/sqlite/sql/create-index.js +3 -2
- package/build/src/database/drivers/sqlite/sql/create-table.js +3 -2
- package/build/src/database/drivers/sqlite/sql/delete.js +22 -17
- package/build/src/database/drivers/sqlite/sql/drop-table.js +3 -2
- package/build/src/database/drivers/sqlite/sql/insert.js +3 -2
- package/build/src/database/drivers/sqlite/sql/update.js +29 -24
- package/build/src/database/drivers/sqlite/sql/upsert.js +11 -9
- package/build/src/database/drivers/sqlite/structure-sql.js +52 -49
- package/build/src/database/drivers/sqlite/table-rebuilder.js +75 -62
- package/build/src/database/drivers/sqlite/table.js +125 -102
- package/build/src/database/drivers/structure-sql/utils.js +17 -14
- package/build/src/database/handler.js +10 -9
- package/build/src/database/initializer-from-require-context.js +87 -76
- package/build/src/database/migration/index.js +395 -332
- package/build/src/database/migrator/files-finder.js +50 -40
- package/build/src/database/migrator/types.js +30 -2
- package/build/src/database/migrator.js +526 -454
- package/build/src/database/pool/async-tracked-multi-connection.js +1147 -997
- package/build/src/database/pool/base-methods-forward.js +43 -40
- package/build/src/database/pool/base.js +343 -298
- package/build/src/database/pool/single-multi-use.js +110 -93
- package/build/src/database/query/alter-table-base.js +99 -84
- package/build/src/database/query/base.js +46 -39
- package/build/src/database/query/create-database-base.js +30 -25
- package/build/src/database/query/create-index-base.js +94 -75
- package/build/src/database/query/create-table-base.js +193 -151
- package/build/src/database/query/delete-base.js +16 -14
- package/build/src/database/query/drop-database-base.js +28 -23
- package/build/src/database/query/drop-table-base.js +53 -42
- package/build/src/database/query/from-base.js +33 -30
- package/build/src/database/query/from-plain.js +13 -11
- package/build/src/database/query/from-table.js +15 -13
- package/build/src/database/query/index.js +472 -410
- package/build/src/database/query/insert-base.js +164 -143
- package/build/src/database/query/join-base.js +40 -35
- package/build/src/database/query/join-object.js +153 -128
- package/build/src/database/query/join-plain.js +15 -13
- package/build/src/database/query/join-tracker.js +90 -76
- package/build/src/database/query/model-class-query.js +1370 -1134
- package/build/src/database/query/order-base.js +30 -27
- package/build/src/database/query/order-column.js +53 -44
- package/build/src/database/query/order-plain.js +24 -20
- package/build/src/database/query/preloader/belongs-to.js +258 -210
- package/build/src/database/query/preloader/ensure-model-class-initialized.js +9 -8
- package/build/src/database/query/preloader/has-many.js +301 -240
- package/build/src/database/query/preloader/has-one.js +117 -91
- package/build/src/database/query/preloader/selection.js +129 -117
- package/build/src/database/query/preloader.js +185 -160
- package/build/src/database/query/query-data.js +201 -157
- package/build/src/database/query/select-base.js +27 -25
- package/build/src/database/query/select-plain.js +15 -13
- package/build/src/database/query/select-table-and-column.js +25 -21
- package/build/src/database/query/update-base.js +38 -35
- package/build/src/database/query/upsert-base.js +100 -93
- package/build/src/database/query/where-base.js +35 -32
- package/build/src/database/query/where-combinator.d.ts.map +1 -1
- package/build/src/database/query/where-combinator.js +28 -26
- package/build/src/database/query/where-hash.js +68 -61
- package/build/src/database/query/where-model-class-hash.js +469 -414
- package/build/src/database/query/where-not.js +20 -18
- package/build/src/database/query/where-plain.js +17 -15
- package/build/src/database/query/with-count.js +159 -125
- package/build/src/database/query-parser/base-query-parser.js +37 -32
- package/build/src/database/query-parser/from-parser.js +45 -36
- package/build/src/database/query-parser/group-parser.js +50 -42
- package/build/src/database/query-parser/joins-parser.js +33 -28
- package/build/src/database/query-parser/limit-parser.js +70 -67
- package/build/src/database/query-parser/options.js +82 -75
- package/build/src/database/query-parser/order-parser.js +40 -36
- package/build/src/database/query-parser/select-parser.js +60 -49
- package/build/src/database/query-parser/where-parser.js +41 -36
- package/build/src/database/record/acts-as-list.js +273 -235
- package/build/src/database/record/attachments/download.js +45 -44
- package/build/src/database/record/attachments/handle.js +161 -141
- package/build/src/database/record/attachments/normalize-input.js +138 -128
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +91 -77
- package/build/src/database/record/attachments/storage-drivers/native.js +121 -112
- package/build/src/database/record/attachments/storage-drivers/s3.js +208 -177
- package/build/src/database/record/attachments/store.d.ts +1 -1
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +540 -468
- package/build/src/database/record/index.d.ts +17 -15
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3894 -3361
- package/build/src/database/record/instance-relationships/base.js +268 -234
- package/build/src/database/record/instance-relationships/belongs-to.js +73 -58
- package/build/src/database/record/instance-relationships/has-many.js +264 -225
- package/build/src/database/record/instance-relationships/has-one.js +105 -85
- package/build/src/database/record/record-not-found-error.js +2 -3
- package/build/src/database/record/relationships/base.d.ts +2 -2
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +167 -145
- package/build/src/database/record/relationships/belongs-to.js +51 -44
- package/build/src/database/record/relationships/has-many.js +40 -32
- package/build/src/database/record/relationships/has-one.js +40 -32
- package/build/src/database/record/state-machine.js +208 -156
- package/build/src/database/record/user-module.js +38 -32
- package/build/src/database/record/validators/base.js +24 -22
- package/build/src/database/record/validators/format.js +46 -36
- package/build/src/database/record/validators/presence.js +20 -18
- package/build/src/database/record/validators/uniqueness.js +117 -99
- package/build/src/database/table-data/index.js +231 -199
- package/build/src/database/table-data/table-column.js +382 -338
- package/build/src/database/table-data/table-foreign-key.js +66 -57
- package/build/src/database/table-data/table-index.js +36 -29
- package/build/src/database/table-data/table-reference.js +10 -10
- package/build/src/database/use-database.js +40 -32
- package/build/src/environment-handlers/base.js +544 -484
- package/build/src/environment-handlers/browser.js +294 -241
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +19 -16
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +21 -18
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +29 -22
- package/build/src/environment-handlers/node/cli/commands/beacon.js +19 -16
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +15 -14
- package/build/src/environment-handlers/node/cli/commands/console.js +120 -99
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +39 -34
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +63 -57
- package/build/src/environment-handlers/node/cli/commands/db/seed.js +63 -51
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +40 -32
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +353 -298
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +844 -729
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +38 -34
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +38 -34
- package/build/src/environment-handlers/node/cli/commands/init.js +61 -56
- package/build/src/environment-handlers/node/cli/commands/routes.js +59 -51
- package/build/src/environment-handlers/node/cli/commands/run-script.js +68 -54
- package/build/src/environment-handlers/node/cli/commands/runner.js +74 -56
- package/build/src/environment-handlers/node/cli/commands/server.js +106 -93
- package/build/src/environment-handlers/node/cli/commands/test.js +113 -97
- package/build/src/environment-handlers/node.js +874 -753
- package/build/src/error-logger.js +21 -22
- package/build/src/frontend-model-controller.d.ts +6 -6
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +3288 -2788
- package/build/src/frontend-model-resource/base-resource.d.ts +18 -17
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +869 -759
- package/build/src/frontend-models/base.d.ts +19 -12
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +3602 -3114
- package/build/src/frontend-models/clear-pending-debounced-callback.js +8 -7
- package/build/src/frontend-models/event-hook-models.js +21 -16
- package/build/src/frontend-models/model-registry.js +11 -9
- package/build/src/frontend-models/outgoing-event-buffer.js +17 -10
- package/build/src/frontend-models/preloader.d.ts +6 -6
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +149 -131
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +1855 -1560
- package/build/src/frontend-models/resource-config-validation.js +37 -27
- package/build/src/frontend-models/resource-definition.js +288 -234
- package/build/src/frontend-models/transport-serialization.js +266 -203
- package/build/src/frontend-models/use-created-event.js +7 -5
- package/build/src/frontend-models/use-destroyed-event.js +93 -80
- package/build/src/frontend-models/use-model-class-event.js +91 -79
- package/build/src/frontend-models/use-updated-event.js +97 -84
- package/build/src/frontend-models/websocket-channel.js +441 -381
- package/build/src/frontend-models/websocket-publishers.js +173 -140
- package/build/src/http-client/header.js +14 -13
- package/build/src/http-client/index.js +132 -116
- package/build/src/http-client/request.js +87 -71
- package/build/src/http-client/response.js +140 -122
- package/build/src/http-client/websocket-client.js +17 -15
- package/build/src/http-server/client/index.js +465 -409
- package/build/src/http-server/client/params-to-object.js +135 -124
- package/build/src/http-server/client/request-buffer/form-data-part.js +132 -111
- package/build/src/http-server/client/request-buffer/header.js +16 -15
- package/build/src/http-server/client/request-buffer/index.js +506 -446
- package/build/src/http-server/client/request-parser.js +186 -163
- package/build/src/http-server/client/request-runner.js +259 -226
- package/build/src/http-server/client/request-timing.js +151 -132
- package/build/src/http-server/client/request.js +108 -96
- package/build/src/http-server/client/response.js +235 -213
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +29 -25
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +29 -25
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
- package/build/src/http-server/client/websocket-request.js +137 -114
- package/build/src/http-server/client/websocket-session.js +1657 -1452
- package/build/src/http-server/cookie.js +236 -216
- package/build/src/http-server/development-reloader.js +221 -190
- package/build/src/http-server/index.js +525 -451
- package/build/src/http-server/remote-address.js +50 -38
- package/build/src/http-server/server-client.js +208 -181
- package/build/src/http-server/server-lock.js +167 -153
- package/build/src/http-server/websocket-channel-subscribers.js +93 -81
- package/build/src/http-server/websocket-channel.js +117 -104
- package/build/src/http-server/websocket-connection.js +104 -96
- package/build/src/http-server/websocket-event-log-store.js +404 -350
- package/build/src/http-server/websocket-events-host.js +164 -145
- package/build/src/http-server/websocket-events.js +47 -47
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +14 -13
- package/build/src/http-server/worker-handler/in-process.js +141 -123
- package/build/src/http-server/worker-handler/index.js +349 -313
- package/build/src/http-server/worker-handler/worker-script.js +5 -4
- package/build/src/http-server/worker-handler/worker-thread.js +269 -240
- package/build/src/initializer.js +36 -31
- package/build/src/jobs/mail-delivery.js +15 -13
- package/build/src/logger/base-logger.js +26 -24
- package/build/src/logger/console-logger.js +23 -21
- package/build/src/logger/file-logger.js +31 -29
- package/build/src/logger/outputs/array-output.js +42 -37
- package/build/src/logger/outputs/console-output.js +24 -20
- package/build/src/logger/outputs/file-output.js +48 -43
- package/build/src/logger/outputs/stdout-output.js +48 -39
- package/build/src/logger.js +394 -338
- package/build/src/mailer/backends/smtp.js +163 -134
- package/build/src/mailer/base.js +251 -211
- package/build/src/mailer/delivery.js +64 -56
- package/build/src/mailer/index.js +22 -4
- package/build/src/mailer.js +13 -4
- package/build/src/plugins/sqljs-wasm-route-controller.js +52 -42
- package/build/src/plugins/sqljs-wasm-route.js +38 -28
- package/build/src/record-payload-values.js +28 -25
- package/build/src/routes/app-routes.js +14 -12
- package/build/src/routes/base-route.js +130 -112
- package/build/src/routes/basic-route.js +102 -83
- package/build/src/routes/built-in/debug/controller.js +10 -10
- package/build/src/routes/built-in/errors/controller.js +5 -5
- package/build/src/routes/get-route.js +63 -50
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +80 -66
- package/build/src/routes/index.js +43 -36
- package/build/src/routes/namespace-route.js +47 -38
- package/build/src/routes/plugin-routes.js +124 -107
- package/build/src/routes/post-route.js +62 -51
- package/build/src/routes/resolver.js +494 -422
- package/build/src/routes/resource-route.js +143 -124
- package/build/src/routes/root-route.js +8 -7
- package/build/src/testing/base-expect.js +14 -13
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +405 -329
- package/build/src/testing/browser-test-app.js +29 -23
- package/build/src/testing/expect-to-change.js +50 -41
- package/build/src/testing/expect-utils.js +184 -139
- package/build/src/testing/expect.js +731 -638
- package/build/src/testing/request-client.js +85 -70
- package/build/src/testing/test-files-finder.js +339 -285
- package/build/src/testing/test-filter-parser.js +155 -124
- package/build/src/testing/test-runner.js +1020 -883
- package/build/src/testing/test-suite-splitter.js +142 -114
- package/build/src/testing/test.js +256 -216
- package/build/src/utils/backtrace-cleaner-node.js +69 -62
- package/build/src/utils/backtrace-cleaner.js +216 -188
- package/build/src/utils/ensure-error.js +7 -7
- package/build/src/utils/event-emitter.js +6 -4
- package/build/src/utils/file-exists.js +10 -9
- package/build/src/utils/format-value.js +76 -67
- package/build/src/utils/model-scope.js +31 -27
- package/build/src/utils/nest-callbacks.js +13 -10
- package/build/src/utils/plain-object.js +6 -5
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +563 -449
- package/build/src/utils/rest-args-error.js +6 -5
- package/build/src/utils/singularize-model-name.js +11 -9
- package/build/src/utils/split-sql-statements.js +79 -68
- package/build/src/utils/to-import-specifier.js +30 -24
- package/build/src/utils/with-tracked-stack-async-hooks.js +74 -60
- package/build/src/utils/with-tracked-stack.js +18 -14
- package/build/src/velocious-error.js +30 -27
- package/index.js +1 -0
- package/package.json +10 -4
- package/scripts/clean-build.js +8 -0
- package/scripts/ensure-bin-executable.js +13 -0
- package/scripts/run-tests.js +37 -0
- package/scripts/test-browser.js +486 -0
- package/src/application.js +229 -0
- package/src/authorization/ability.js +329 -0
- package/src/authorization/base-resource.js +143 -0
- package/src/background-jobs/client.js +50 -0
- package/src/background-jobs/cron-expression.js +277 -0
- package/src/background-jobs/forked-runner-child.js +86 -0
- package/src/background-jobs/job-record.js +13 -0
- package/src/background-jobs/job-registry.js +92 -0
- package/src/background-jobs/job-runner.js +107 -0
- package/src/background-jobs/job.js +77 -0
- package/src/background-jobs/json-socket.js +78 -0
- package/src/background-jobs/main.js +926 -0
- package/src/background-jobs/normalize-error.js +26 -0
- package/src/background-jobs/scheduler.js +274 -0
- package/src/background-jobs/socket-request.js +68 -0
- package/src/background-jobs/status-reporter.js +101 -0
- package/src/background-jobs/store.js +994 -0
- package/src/background-jobs/types.js +70 -0
- package/src/background-jobs/web/authorization.js +89 -0
- package/src/background-jobs/web/controller.js +280 -0
- package/src/background-jobs/web/index.js +57 -0
- package/src/background-jobs/web/path-matcher.js +74 -0
- package/src/background-jobs/web/registry.js +49 -0
- package/src/background-jobs/worker.js +683 -0
- package/src/beacon/client.js +330 -0
- package/src/beacon/in-process-broker.js +71 -0
- package/src/beacon/in-process-client.js +139 -0
- package/src/beacon/server.js +148 -0
- package/src/beacon/types.js +55 -0
- package/src/cli/base-command.js +67 -0
- package/src/cli/browser-cli.js +45 -0
- package/src/cli/commands/background-jobs-main.js +7 -0
- package/src/cli/commands/background-jobs-runner.js +7 -0
- package/src/cli/commands/background-jobs-worker.js +7 -0
- package/src/cli/commands/beacon.js +7 -0
- package/src/cli/commands/console.js +12 -0
- package/src/cli/commands/db/base-command.js +82 -0
- package/src/cli/commands/db/create.js +64 -0
- package/src/cli/commands/db/drop.js +75 -0
- package/src/cli/commands/db/migrate.js +17 -0
- package/src/cli/commands/db/reset.js +22 -0
- package/src/cli/commands/db/rollback.js +15 -0
- package/src/cli/commands/db/schema/dump.js +12 -0
- package/src/cli/commands/db/schema/load.js +12 -0
- package/src/cli/commands/db/seed.js +12 -0
- package/src/cli/commands/db/tenants/check.js +38 -0
- package/src/cli/commands/db/tenants/create.js +33 -0
- package/src/cli/commands/db/tenants/migrate.js +49 -0
- package/src/cli/commands/destroy/migration.js +7 -0
- package/src/cli/commands/generate/base-models.js +7 -0
- package/src/cli/commands/generate/frontend-models.js +12 -0
- package/src/cli/commands/generate/migration.js +7 -0
- package/src/cli/commands/generate/model.js +7 -0
- package/src/cli/commands/init.js +11 -0
- package/src/cli/commands/routes.js +7 -0
- package/src/cli/commands/run-script.js +12 -0
- package/src/cli/commands/runner.js +12 -0
- package/src/cli/commands/server.js +7 -0
- package/src/cli/commands/test.js +9 -0
- package/src/cli/index.js +152 -0
- package/src/cli/tenant-database-command-helper.js +198 -0
- package/src/cli/use-browser-cli.js +30 -0
- package/src/configuration-resolver.js +65 -0
- package/src/configuration-types.js +429 -0
- package/src/configuration.js +2590 -0
- package/src/controller.js +421 -0
- package/src/current-configuration.js +31 -0
- package/src/current.js +80 -0
- package/src/database/annotations-async-hooks.js +47 -0
- package/src/database/annotations.js +40 -0
- package/src/database/drivers/base-column.js +182 -0
- package/src/database/drivers/base-columns-index.js +81 -0
- package/src/database/drivers/base-foreign-key.js +104 -0
- package/src/database/drivers/base-table.js +156 -0
- package/src/database/drivers/base.js +1609 -0
- package/src/database/drivers/mssql/column.js +74 -0
- package/src/database/drivers/mssql/columns-index.js +6 -0
- package/src/database/drivers/mssql/connect-connection.js +16 -0
- package/src/database/drivers/mssql/foreign-key.js +12 -0
- package/src/database/drivers/mssql/index.js +590 -0
- package/src/database/drivers/mssql/options.js +79 -0
- package/src/database/drivers/mssql/query-parser.js +6 -0
- package/src/database/drivers/mssql/sql/alter-table.js +4 -0
- package/src/database/drivers/mssql/sql/create-database.js +36 -0
- package/src/database/drivers/mssql/sql/create-index.js +4 -0
- package/src/database/drivers/mssql/sql/create-table.js +4 -0
- package/src/database/drivers/mssql/sql/delete.js +19 -0
- package/src/database/drivers/mssql/sql/drop-database.js +36 -0
- package/src/database/drivers/mssql/sql/drop-table.js +4 -0
- package/src/database/drivers/mssql/sql/insert.js +4 -0
- package/src/database/drivers/mssql/sql/update.js +31 -0
- package/src/database/drivers/mssql/sql/upsert.js +23 -0
- package/src/database/drivers/mssql/structure-sql.js +120 -0
- package/src/database/drivers/mssql/table.js +145 -0
- package/src/database/drivers/mysql/column.js +112 -0
- package/src/database/drivers/mysql/columns-index.js +22 -0
- package/src/database/drivers/mysql/foreign-key.js +12 -0
- package/src/database/drivers/mysql/index.js +473 -0
- package/src/database/drivers/mysql/options.js +34 -0
- package/src/database/drivers/mysql/query-parser.js +6 -0
- package/src/database/drivers/mysql/query.js +37 -0
- package/src/database/drivers/mysql/sql/alter-table.js +6 -0
- package/src/database/drivers/mysql/sql/create-database.js +39 -0
- package/src/database/drivers/mysql/sql/create-index.js +6 -0
- package/src/database/drivers/mysql/sql/create-table.js +6 -0
- package/src/database/drivers/mysql/sql/delete.js +21 -0
- package/src/database/drivers/mysql/sql/drop-database.js +6 -0
- package/src/database/drivers/mysql/sql/drop-table.js +6 -0
- package/src/database/drivers/mysql/sql/insert.js +6 -0
- package/src/database/drivers/mysql/sql/update.js +33 -0
- package/src/database/drivers/mysql/sql/upsert.js +13 -0
- package/src/database/drivers/mysql/structure-sql.js +93 -0
- package/src/database/drivers/mysql/table.js +121 -0
- package/src/database/drivers/pgsql/column.js +90 -0
- package/src/database/drivers/pgsql/columns-index.js +6 -0
- package/src/database/drivers/pgsql/foreign-key.js +12 -0
- package/src/database/drivers/pgsql/index.js +441 -0
- package/src/database/drivers/pgsql/options.js +32 -0
- package/src/database/drivers/pgsql/query-parser.js +6 -0
- package/src/database/drivers/pgsql/sql/alter-table.js +6 -0
- package/src/database/drivers/pgsql/sql/create-database.js +38 -0
- package/src/database/drivers/pgsql/sql/create-index.js +6 -0
- package/src/database/drivers/pgsql/sql/create-table.js +6 -0
- package/src/database/drivers/pgsql/sql/delete.js +21 -0
- package/src/database/drivers/pgsql/sql/drop-database.js +6 -0
- package/src/database/drivers/pgsql/sql/drop-table.js +6 -0
- package/src/database/drivers/pgsql/sql/insert.js +6 -0
- package/src/database/drivers/pgsql/sql/update.js +33 -0
- package/src/database/drivers/pgsql/sql/upsert.js +14 -0
- package/src/database/drivers/pgsql/structure-sql.js +126 -0
- package/src/database/drivers/pgsql/table.js +135 -0
- package/src/database/drivers/sqlite/base.js +509 -0
- package/src/database/drivers/sqlite/column.js +75 -0
- package/src/database/drivers/sqlite/columns-index.js +30 -0
- package/src/database/drivers/sqlite/connection-sql-js.js +46 -0
- package/src/database/drivers/sqlite/foreign-key.js +24 -0
- package/src/database/drivers/sqlite/index.js +394 -0
- package/src/database/drivers/sqlite/index.native.js +72 -0
- package/src/database/drivers/sqlite/index.web.js +99 -0
- package/src/database/drivers/sqlite/options.js +32 -0
- package/src/database/drivers/sqlite/query-parser.js +6 -0
- package/src/database/drivers/sqlite/query.js +35 -0
- package/src/database/drivers/sqlite/query.native.js +35 -0
- package/src/database/drivers/sqlite/query.web.js +49 -0
- package/src/database/drivers/sqlite/sql/alter-table.js +187 -0
- package/src/database/drivers/sqlite/sql/create-index.js +6 -0
- package/src/database/drivers/sqlite/sql/create-table.js +6 -0
- package/src/database/drivers/sqlite/sql/delete.js +26 -0
- package/src/database/drivers/sqlite/sql/drop-table.js +6 -0
- package/src/database/drivers/sqlite/sql/insert.js +6 -0
- package/src/database/drivers/sqlite/sql/update.js +33 -0
- package/src/database/drivers/sqlite/sql/upsert.js +14 -0
- package/src/database/drivers/sqlite/structure-sql.js +56 -0
- package/src/database/drivers/sqlite/table-rebuilder.js +96 -0
- package/src/database/drivers/sqlite/table.js +131 -0
- package/src/database/drivers/structure-sql/utils.js +35 -0
- package/src/database/handler.js +13 -0
- package/src/database/initializer-from-require-context.js +101 -0
- package/src/database/migration/index.js +438 -0
- package/src/database/migrator/files-finder.js +55 -0
- package/src/database/migrator/types.js +31 -0
- package/src/database/migrator.js +557 -0
- package/src/database/pool/async-tracked-multi-connection.js +1164 -0
- package/src/database/pool/base-methods-forward.js +52 -0
- package/src/database/pool/base.js +380 -0
- package/src/database/pool/single-multi-use.js +118 -0
- package/src/database/query/alter-table-base.js +104 -0
- package/src/database/query/base.js +49 -0
- package/src/database/query/create-database-base.js +42 -0
- package/src/database/query/create-index-base.js +117 -0
- package/src/database/query/create-table-base.js +205 -0
- package/src/database/query/delete-base.js +19 -0
- package/src/database/query/drop-database-base.js +38 -0
- package/src/database/query/drop-table-base.js +58 -0
- package/src/database/query/from-base.js +36 -0
- package/src/database/query/from-plain.js +16 -0
- package/src/database/query/from-table.js +18 -0
- package/src/database/query/index.js +533 -0
- package/src/database/query/insert-base.js +172 -0
- package/src/database/query/join-base.js +43 -0
- package/src/database/query/join-object.js +167 -0
- package/src/database/query/join-plain.js +18 -0
- package/src/database/query/join-tracker.js +93 -0
- package/src/database/query/model-class-query.js +1577 -0
- package/src/database/query/order-base.js +33 -0
- package/src/database/query/order-column.js +77 -0
- package/src/database/query/order-plain.js +28 -0
- package/src/database/query/preloader/belongs-to.js +267 -0
- package/src/database/query/preloader/ensure-model-class-initialized.js +18 -0
- package/src/database/query/preloader/has-many.js +316 -0
- package/src/database/query/preloader/has-one.js +123 -0
- package/src/database/query/preloader/selection.js +152 -0
- package/src/database/query/preloader.js +201 -0
- package/src/database/query/query-data.js +305 -0
- package/src/database/query/select-base.js +30 -0
- package/src/database/query/select-plain.js +18 -0
- package/src/database/query/select-table-and-column.js +28 -0
- package/src/database/query/update-base.js +41 -0
- package/src/database/query/upsert-base.js +103 -0
- package/src/database/query/where-base.js +38 -0
- package/src/database/query/where-combinator.js +31 -0
- package/src/database/query/where-hash.js +77 -0
- package/src/database/query/where-model-class-hash.js +505 -0
- package/src/database/query/where-not.js +23 -0
- package/src/database/query/where-plain.js +20 -0
- package/src/database/query/with-count.js +219 -0
- package/src/database/query-parser/base-query-parser.js +40 -0
- package/src/database/query-parser/from-parser.js +49 -0
- package/src/database/query-parser/group-parser.js +55 -0
- package/src/database/query-parser/joins-parser.js +37 -0
- package/src/database/query-parser/limit-parser.js +77 -0
- package/src/database/query-parser/options.js +94 -0
- package/src/database/query-parser/order-parser.js +45 -0
- package/src/database/query-parser/select-parser.js +67 -0
- package/src/database/query-parser/where-parser.js +46 -0
- package/src/database/record/acts-as-list.js +374 -0
- package/src/database/record/attachments/download.js +49 -0
- package/src/database/record/attachments/handle.js +188 -0
- package/src/database/record/attachments/normalize-input.js +213 -0
- package/src/database/record/attachments/storage-drivers/filesystem.js +114 -0
- package/src/database/record/attachments/storage-drivers/native.js +146 -0
- package/src/database/record/attachments/storage-drivers/s3.js +245 -0
- package/src/database/record/attachments/store.js +591 -0
- package/src/database/record/index.js +3970 -0
- package/src/database/record/instance-relationships/base.js +289 -0
- package/src/database/record/instance-relationships/belongs-to.js +84 -0
- package/src/database/record/instance-relationships/has-many.js +284 -0
- package/src/database/record/instance-relationships/has-one.js +117 -0
- package/src/database/record/record-not-found-error.js +3 -0
- package/src/database/record/relationships/base.js +195 -0
- package/src/database/record/relationships/belongs-to.js +57 -0
- package/src/database/record/relationships/has-many.js +46 -0
- package/src/database/record/relationships/has-one.js +46 -0
- package/src/database/record/state-machine.js +278 -0
- package/src/database/record/user-module.js +43 -0
- package/src/database/record/validators/base.js +27 -0
- package/src/database/record/validators/format.js +50 -0
- package/src/database/record/validators/presence.js +24 -0
- package/src/database/record/validators/uniqueness.js +124 -0
- package/src/database/table-data/index.js +241 -0
- package/src/database/table-data/table-column.js +416 -0
- package/src/database/table-data/table-foreign-key.js +69 -0
- package/src/database/table-data/table-index.js +46 -0
- package/src/database/table-data/table-reference.js +13 -0
- package/src/database/use-database.js +48 -0
- package/src/environment-handlers/base.js +561 -0
- package/src/environment-handlers/browser.js +338 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
- package/src/environment-handlers/node/cli/commands/beacon.js +21 -0
- package/src/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
- package/src/environment-handlers/node/cli/commands/console.js +149 -0
- package/src/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
- package/src/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
- package/src/environment-handlers/node/cli/commands/db/seed.js +79 -0
- package/src/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +367 -0
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
- package/src/environment-handlers/node/cli/commands/generate/migration.js +45 -0
- package/src/environment-handlers/node/cli/commands/generate/model.js +45 -0
- package/src/environment-handlers/node/cli/commands/init.js +68 -0
- package/src/environment-handlers/node/cli/commands/routes.js +63 -0
- package/src/environment-handlers/node/cli/commands/run-script.js +85 -0
- package/src/environment-handlers/node/cli/commands/runner.js +84 -0
- package/src/environment-handlers/node/cli/commands/server.js +151 -0
- package/src/environment-handlers/node/cli/commands/test.js +118 -0
- package/src/environment-handlers/node.js +887 -0
- package/src/error-logger.js +30 -0
- package/src/frontend-model-controller.js +3491 -0
- package/src/frontend-model-resource/base-resource.js +935 -0
- package/src/frontend-models/base.js +4004 -0
- package/src/frontend-models/clear-pending-debounced-callback.js +16 -0
- package/src/frontend-models/event-hook-models.js +49 -0
- package/src/frontend-models/model-registry.js +28 -0
- package/src/frontend-models/outgoing-event-buffer.js +51 -0
- package/src/frontend-models/preloader.js +169 -0
- package/src/frontend-models/query.js +2245 -0
- package/src/frontend-models/resource-config-validation.js +56 -0
- package/src/frontend-models/resource-definition.js +399 -0
- package/src/frontend-models/transport-serialization.js +369 -0
- package/src/frontend-models/use-created-event.js +21 -0
- package/src/frontend-models/use-destroyed-event.js +148 -0
- package/src/frontend-models/use-model-class-event.js +164 -0
- package/src/frontend-models/use-updated-event.js +152 -0
- package/src/frontend-models/websocket-channel.js +494 -0
- package/src/frontend-models/websocket-publishers.js +224 -0
- package/src/http-client/header.js +17 -0
- package/src/http-client/index.js +139 -0
- package/src/http-client/request.js +94 -0
- package/src/http-client/response.js +151 -0
- package/src/http-client/websocket-client.js +27 -0
- package/src/http-server/client/index.js +507 -0
- package/src/http-server/client/params-to-object.js +152 -0
- package/src/http-server/client/request-buffer/form-data-part.js +139 -0
- package/src/http-server/client/request-buffer/header.js +19 -0
- package/src/http-server/client/request-buffer/index.js +535 -0
- package/src/http-server/client/request-parser.js +195 -0
- package/src/http-server/client/request-runner.js +321 -0
- package/src/http-server/client/request-timing.js +171 -0
- package/src/http-server/client/request.js +114 -0
- package/src/http-server/client/response.js +251 -0
- package/src/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
- package/src/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
- package/src/http-server/client/uploaded-file/uploaded-file.js +36 -0
- package/src/http-server/client/websocket-request.js +147 -0
- package/src/http-server/client/websocket-session.js +1755 -0
- package/src/http-server/cookie.js +245 -0
- package/src/http-server/development-reloader.js +240 -0
- package/src/http-server/index.js +561 -0
- package/src/http-server/remote-address.js +77 -0
- package/src/http-server/server-client.js +222 -0
- package/src/http-server/server-lock.js +178 -0
- package/src/http-server/websocket-channel-subscribers.js +110 -0
- package/src/http-server/websocket-channel.js +137 -0
- package/src/http-server/websocket-connection.js +118 -0
- package/src/http-server/websocket-event-log-store.js +433 -0
- package/src/http-server/websocket-events-host.js +170 -0
- package/src/http-server/websocket-events.js +50 -0
- package/src/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
- package/src/http-server/worker-handler/in-process.js +155 -0
- package/src/http-server/worker-handler/index.js +370 -0
- package/src/http-server/worker-handler/worker-script.js +6 -0
- package/src/http-server/worker-handler/worker-thread.js +286 -0
- package/src/initializer.js +39 -0
- package/src/jobs/.gitkeep +1 -0
- package/src/jobs/mail-delivery.js +22 -0
- package/src/logger/base-logger.js +34 -0
- package/src/logger/console-logger.js +28 -0
- package/src/logger/file-logger.js +36 -0
- package/src/logger/outputs/array-output.js +50 -0
- package/src/logger/outputs/console-output.js +32 -0
- package/src/logger/outputs/file-output.js +55 -0
- package/src/logger/outputs/stdout-output.js +64 -0
- package/src/logger.js +507 -0
- package/src/mailer/backends/smtp.js +197 -0
- package/src/mailer/base.js +337 -0
- package/src/mailer/delivery.js +70 -0
- package/src/mailer/index.js +24 -0
- package/src/mailer.js +15 -0
- package/src/plugins/sqljs-wasm-route-controller.js +70 -0
- package/src/plugins/sqljs-wasm-route.js +71 -0
- package/src/record-payload-values.js +83 -0
- package/src/routes/app-routes.js +17 -0
- package/src/routes/base-route.js +133 -0
- package/src/routes/basic-route.js +109 -0
- package/src/routes/built-in/debug/controller.js +12 -0
- package/src/routes/built-in/errors/controller.js +7 -0
- package/src/routes/built-in/errors/not-found.ejs +1 -0
- package/src/routes/get-route.js +75 -0
- package/src/routes/hooks/frontend-model-command-route-hook.js +100 -0
- package/src/routes/index.js +50 -0
- package/src/routes/namespace-route.js +51 -0
- package/src/routes/plugin-routes.js +141 -0
- package/src/routes/post-route.js +74 -0
- package/src/routes/resolver.js +535 -0
- package/src/routes/resource-route.js +154 -0
- package/src/routes/root-route.js +11 -0
- package/src/templates/configuration.js +61 -0
- package/src/templates/generate-migration.js +11 -0
- package/src/templates/generate-model.js +6 -0
- package/src/templates/routes.js +11 -0
- package/src/testing/base-expect.js +17 -0
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
- package/src/testing/browser-test-app.js +32 -0
- package/src/testing/expect-to-change.js +55 -0
- package/src/testing/expect-utils.js +269 -0
- package/src/testing/expect.js +763 -0
- package/src/testing/request-client.js +90 -0
- package/src/testing/test-files-finder.js +364 -0
- package/src/testing/test-filter-parser.js +198 -0
- package/src/testing/test-runner.js +1168 -0
- package/src/testing/test-suite-splitter.js +177 -0
- package/src/testing/test.js +370 -0
- package/src/types/external-modules.d.ts +57 -0
- package/src/utils/backtrace-cleaner-node.js +87 -0
- package/src/utils/backtrace-cleaner.js +266 -0
- package/src/utils/ensure-error.js +15 -0
- package/src/utils/event-emitter.js +8 -0
- package/src/utils/file-exists.js +18 -0
- package/src/utils/format-value.js +101 -0
- package/src/utils/model-scope.js +56 -0
- package/src/utils/nest-callbacks.js +22 -0
- package/src/utils/plain-object.js +14 -0
- package/src/utils/ransack.js +859 -0
- package/src/utils/rest-args-error.js +14 -0
- package/src/utils/singularize-model-name.js +18 -0
- package/src/utils/split-sql-statements.js +88 -0
- package/src/utils/to-import-specifier.js +53 -0
- package/src/utils/with-tracked-stack-async-hooks.js +103 -0
- package/src/utils/with-tracked-stack.js +38 -0
- package/src/velocious-error.js +34 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wire-message typedefs for the Beacon broadcast bus.
|
|
5
|
+
*
|
|
6
|
+
* Beacon is Velocious's cross-process pub/sub bus. The daemon
|
|
7
|
+
* (`velocious beacon`) accepts JsonSocket connections from any number
|
|
8
|
+
* of peer processes (HTTP server, background-jobs main, background-jobs
|
|
9
|
+
* worker, etc.) and fans every `broadcast` message out to every
|
|
10
|
+
* connected peer — including the sender, so each process can deliver
|
|
11
|
+
* to its local websocket subscribers via a single code path.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {"client"} BeaconSocketRole
|
|
16
|
+
*
|
|
17
|
+
* Beacon currently only has one role. The role field is kept on the
|
|
18
|
+
* `hello` handshake so future roles (e.g. an admin/inspector role) can
|
|
19
|
+
* be added without bumping the wire format.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @typedef {{type: "hello", role: BeaconSocketRole, peerId: string, peerType?: string}} BeaconHelloMessage
|
|
24
|
+
*
|
|
25
|
+
* `peerId` uniquely identifies the connecting process for echo
|
|
26
|
+
* suppression and logging. `peerType` is an optional human-readable
|
|
27
|
+
* label such as `"server"`, `"background-jobs-worker"` — informational
|
|
28
|
+
* only.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {{type: "hello-ack", peerId: string}} BeaconHelloAckMessage
|
|
33
|
+
*
|
|
34
|
+
* Sent by the daemon after it has registered the peer. Clients can use
|
|
35
|
+
* this as a deterministic readiness boundary before publishing events
|
|
36
|
+
* that must not fall back to local-only delivery.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @typedef {{type: "broadcast", channel: string, broadcastParams: Record<string, ?>, body: ?, originPeerId?: string}} BeaconBroadcastMessage
|
|
41
|
+
*
|
|
42
|
+
* `channel`, `broadcastParams`, and `body` mirror the
|
|
43
|
+
* `configuration.broadcastToChannel(channel, broadcastParams, body)`
|
|
44
|
+
* arguments. `originPeerId` is stamped by the publishing client and
|
|
45
|
+
* preserved through the daemon so receivers can choose to skip echoes
|
|
46
|
+
* of their own broadcasts (the default Configuration integration does
|
|
47
|
+
* not skip — synapse-style fan-out always returns to sender so every
|
|
48
|
+
* peer follows the same delivery path).
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @typedef {BeaconHelloMessage | BeaconHelloAckMessage | BeaconBroadcastMessage} BeaconSocketMessage
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
export const nothing = {}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import restArgsError from "../utils/rest-args-error.js"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* VelociousCliCommandArgs type.
|
|
5
|
+
* @typedef {object} VelociousCliCommandArgs
|
|
6
|
+
* @property {import("../configuration.js").default} [configuration] - Configuration instance for the CLI.
|
|
7
|
+
* @property {Record<string, string | number | boolean | undefined>} [parsedProcessArgs] - Parsed CLI arguments.
|
|
8
|
+
* @property {string[]} [processArgs] - Raw CLI arguments array.
|
|
9
|
+
* @property {boolean} [testing] - Whether the CLI is running in test mode.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export default class VelociousCliBaseCommand {
|
|
13
|
+
/**
|
|
14
|
+
* Runs constructor.
|
|
15
|
+
* @param {object} args - Options object.
|
|
16
|
+
* @param {VelociousCliCommandArgs} args.args - Options object.
|
|
17
|
+
* @param {import("./index.js").default} args.cli - Cli.
|
|
18
|
+
*/
|
|
19
|
+
constructor({args = {}, cli, ...restArgs}) {
|
|
20
|
+
restArgsError(restArgs)
|
|
21
|
+
|
|
22
|
+
if (!args.configuration) throw new Error("configuration argument is required")
|
|
23
|
+
|
|
24
|
+
this.args = args
|
|
25
|
+
this.cli = cli
|
|
26
|
+
this._configuration = args.configuration
|
|
27
|
+
this._environmentHandler = args.configuration.getEnvironmentHandler()
|
|
28
|
+
this.processArgs = args.processArgs
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Runs directory.
|
|
33
|
+
* @returns {string} - The directory.
|
|
34
|
+
*/
|
|
35
|
+
directory() { return this.getConfiguration().getDirectory() }
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Runs execute.
|
|
39
|
+
* @abstract
|
|
40
|
+
* @returns {Promise<?>} - Resolves with the execute.
|
|
41
|
+
*/
|
|
42
|
+
execute() {
|
|
43
|
+
throw new Error("execute not implemented")
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Runs get configuration.
|
|
48
|
+
* @returns {import("../configuration.js").default} - The configuration.
|
|
49
|
+
*/
|
|
50
|
+
getConfiguration() { return this._configuration }
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Runs get environment handler.
|
|
54
|
+
* @returns {import("../environment-handlers/base.js").default} - The environment handler.
|
|
55
|
+
*/
|
|
56
|
+
getEnvironmentHandler() { return this._environmentHandler }
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Runs initialize.
|
|
60
|
+
* @abstract
|
|
61
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
62
|
+
*/
|
|
63
|
+
async initialize() {
|
|
64
|
+
// Do nothing
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import Cli from "./index.js"
|
|
2
|
+
import restArgsError from "../utils/rest-args-error.js"
|
|
3
|
+
|
|
4
|
+
export default class VelociousBrowserCli {
|
|
5
|
+
/**
|
|
6
|
+
* Runs constructor.
|
|
7
|
+
* @param {object} args - Options object.
|
|
8
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
9
|
+
*/
|
|
10
|
+
constructor({configuration, ...restArgs}) {
|
|
11
|
+
restArgsError(restArgs)
|
|
12
|
+
|
|
13
|
+
this.configuration = configuration
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Runs enable.
|
|
18
|
+
* @description Enable the CLI in the global scope. This is useful for debugging and testing.
|
|
19
|
+
* @returns {void} - No return value.
|
|
20
|
+
*/
|
|
21
|
+
enable() {
|
|
22
|
+
/**
|
|
23
|
+
* Global scope.
|
|
24
|
+
@type {typeof globalThis & {velociousCLI?: VelociousBrowserCli}} */
|
|
25
|
+
const globalScope = globalThis
|
|
26
|
+
|
|
27
|
+
globalScope.velociousCLI = this
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Runs run.
|
|
32
|
+
* @description Run a command. This is useful for debugging and testing. This is a wrapper around the Cli class.
|
|
33
|
+
* @param {string} command - Command.
|
|
34
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
35
|
+
*/
|
|
36
|
+
async run(command) {
|
|
37
|
+
const processArgs = command.split(/\s+/)
|
|
38
|
+
const cli = new Cli({
|
|
39
|
+
configuration: this.configuration,
|
|
40
|
+
processArgs
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
await cli.execute()
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import BaseCommand from "../base-command.js"
|
|
2
|
+
|
|
3
|
+
/** Velocious console command. */
|
|
4
|
+
export default class VelociousCliCommandsConsole extends BaseCommand{
|
|
5
|
+
/**
|
|
6
|
+
* Runs execute.
|
|
7
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
8
|
+
*/
|
|
9
|
+
async execute() {
|
|
10
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsConsole(this)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import BaseCommand from "../../base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
|
|
4
|
+
export default class DbBaseCommand extends BaseCommand {
|
|
5
|
+
/**
|
|
6
|
+
* Narrows the runtime value to the documented type.
|
|
7
|
+
@type {import("../../../database/drivers/base.js").default | undefined} */
|
|
8
|
+
databaseConnection
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Narrows the runtime value to the documented type.
|
|
12
|
+
@type {Array<object> | undefined} */
|
|
13
|
+
result
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Runs with direct database connection.
|
|
17
|
+
* @param {object} driverConfiguration - Driver configuration.
|
|
18
|
+
* @param {() => Promise<void>} callback - Callback to run while the connection is open.
|
|
19
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
20
|
+
*/
|
|
21
|
+
async withDirectDatabaseConnection(driverConfiguration, callback) {
|
|
22
|
+
const DriverClass = digg(driverConfiguration, "driver")
|
|
23
|
+
const databaseConnection = new DriverClass(driverConfiguration, this.getConfiguration())
|
|
24
|
+
this.databaseConnection = databaseConnection
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
await databaseConnection.connect()
|
|
28
|
+
await callback()
|
|
29
|
+
} finally {
|
|
30
|
+
await databaseConnection.close()
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Runs get database connection.
|
|
36
|
+
* @returns {import("../../../database/drivers/base.js").default} - Active database connection.
|
|
37
|
+
*/
|
|
38
|
+
getDatabaseConnection() {
|
|
39
|
+
if (!this.databaseConnection) throw new Error("Database connection was not initialized")
|
|
40
|
+
|
|
41
|
+
return this.databaseConnection
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Runs query or collect sqls.
|
|
46
|
+
* @param {string[]} sqls - SQL statements.
|
|
47
|
+
* @param {(sql: string) => object} resultEntryForSql - Test result entry builder.
|
|
48
|
+
* @returns {Promise<void>} - Resolves when SQLs have been collected or executed.
|
|
49
|
+
*/
|
|
50
|
+
async queryOrCollectSqls(sqls, resultEntryForSql) {
|
|
51
|
+
if (this.args.testing) {
|
|
52
|
+
this.collectSqlResults(sqls, resultEntryForSql)
|
|
53
|
+
} else {
|
|
54
|
+
await this.querySqls(sqls)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Runs collect sql results.
|
|
60
|
+
* @param {string[]} sqls - SQL statements.
|
|
61
|
+
* @param {(sql: string) => object} resultEntryForSql - Test result entry builder.
|
|
62
|
+
* @returns {void}
|
|
63
|
+
*/
|
|
64
|
+
collectSqlResults(sqls, resultEntryForSql) {
|
|
65
|
+
if (!this.result) throw new Error("Expected test result collection to be initialized")
|
|
66
|
+
|
|
67
|
+
for (const sql of sqls) {
|
|
68
|
+
this.result.push(resultEntryForSql(sql))
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Runs query sqls.
|
|
74
|
+
* @param {string[]} sqls - SQL statements.
|
|
75
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
76
|
+
*/
|
|
77
|
+
async querySqls(sqls) {
|
|
78
|
+
for (const sql of sqls) {
|
|
79
|
+
await this.getDatabaseConnection().query(sql)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import DbBaseCommand from "./base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
import {incorporate} from "incorporator"
|
|
4
|
+
import TableData from "../../../database/table-data/index.js"
|
|
5
|
+
|
|
6
|
+
export default class DbCreate extends DbBaseCommand{
|
|
7
|
+
/**
|
|
8
|
+
* Runs execute.
|
|
9
|
+
* @returns {Promise<void | Array<object>>} - Resolves with SQL statements when running in dry mode.
|
|
10
|
+
*/
|
|
11
|
+
async execute() {
|
|
12
|
+
for (const databaseIdentifier of this.getConfiguration().getDatabaseIdentifiers()) {
|
|
13
|
+
const databaseType = this.getConfiguration().getDatabaseType(databaseIdentifier)
|
|
14
|
+
const databasePool = this.getConfiguration().getDatabasePool(databaseIdentifier)
|
|
15
|
+
const newConfiguration = incorporate({}, databasePool.getConfiguration())
|
|
16
|
+
|
|
17
|
+
if (this.args.testing) this.result = []
|
|
18
|
+
|
|
19
|
+
// Use a database known to exist. Since we are creating the database, it shouldn't actually exist which would make connecting fail.
|
|
20
|
+
newConfiguration.database = newConfiguration.useDatabase || "mysql"
|
|
21
|
+
|
|
22
|
+
// Login can fail because given db name doesn't exist, which it might not because we are trying to create it right now.
|
|
23
|
+
if (databaseType == "mssql" && newConfiguration.sqlConfig?.database) {
|
|
24
|
+
delete newConfiguration.sqlConfig.database
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
await this.withDirectDatabaseConnection(newConfiguration, async () => {
|
|
28
|
+
if (databaseType != "sqlite") {
|
|
29
|
+
await this.createDatabase(databaseIdentifier)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
await this.createSchemaMigrationsTable()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
if (this.args.testing) return this.result
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Runs create database.
|
|
41
|
+
* @param {string} databaseIdentifier - Database identifier.
|
|
42
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
43
|
+
*/
|
|
44
|
+
async createDatabase(databaseIdentifier) {
|
|
45
|
+
const databaseConfiguration = digg(this.getConfiguration().getDatabaseConfiguration(), databaseIdentifier)
|
|
46
|
+
const databaseName = digg(databaseConfiguration, "database")
|
|
47
|
+
const {databaseCharset, databaseCollation} = databaseConfiguration
|
|
48
|
+
const sqls = this.getDatabaseConnection().createDatabaseSql(databaseName, {ifNotExists: true, databaseCharset, databaseCollation})
|
|
49
|
+
await this.queryOrCollectSqls(sqls, (sql) => ({databaseName, sql}))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Runs create schema migrations table.
|
|
54
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
55
|
+
*/
|
|
56
|
+
async createSchemaMigrationsTable() {
|
|
57
|
+
const schemaMigrationsTable = new TableData("schema_migrations", {ifNotExists: true})
|
|
58
|
+
|
|
59
|
+
schemaMigrationsTable.string("version", {null: false, primaryKey: true})
|
|
60
|
+
|
|
61
|
+
const createSchemaMigrationsTableSqls = await this.getDatabaseConnection().createTableSql(schemaMigrationsTable)
|
|
62
|
+
await this.queryOrCollectSqls(createSchemaMigrationsTableSqls, (createSchemaMigrationsTableSql) => ({createSchemaMigrationsTableSql}))
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import DbBaseCommand from "./base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
import {incorporate} from "incorporator"
|
|
4
|
+
|
|
5
|
+
export default class DbDrop extends DbBaseCommand {
|
|
6
|
+
/**
|
|
7
|
+
* Runs execute.
|
|
8
|
+
* @returns {Promise<void | Array<object>>} - Resolves with SQL statements when running in dry mode.
|
|
9
|
+
*/
|
|
10
|
+
async execute() {
|
|
11
|
+
const environment = this.getConfiguration().getEnvironment()
|
|
12
|
+
|
|
13
|
+
if (environment != "development" && environment != "test") {
|
|
14
|
+
throw new Error(`This command should only be executed on development and test environments and not: ${environment}`)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
for (const databaseIdentifier of this.getConfiguration().getDatabaseIdentifiers()) {
|
|
18
|
+
const databaseType = this.getConfiguration().getDatabaseType(databaseIdentifier)
|
|
19
|
+
|
|
20
|
+
if (this.args.testing) this.result = []
|
|
21
|
+
|
|
22
|
+
if (databaseType != "sqlite") {
|
|
23
|
+
const databasePool = this.getConfiguration().getDatabasePool(databaseIdentifier)
|
|
24
|
+
const newConfiguration = incorporate({}, databasePool.getConfiguration())
|
|
25
|
+
const targetDatabaseName = digg(this.getConfiguration().getDatabaseConfiguration(), databaseIdentifier, "database")
|
|
26
|
+
|
|
27
|
+
// Connect to a known-existing system database: the target is about to
|
|
28
|
+
// be dropped (so we can't be connected to it), Postgres rejects
|
|
29
|
+
// DROP DATABASE while connected to it, and configured `useDatabase`
|
|
30
|
+
// may happen to equal the target — in that case fall through to the
|
|
31
|
+
// driver's system default.
|
|
32
|
+
const configuredFallback = newConfiguration.useDatabase
|
|
33
|
+
const useConfiguredFallback = typeof configuredFallback == "string" && configuredFallback.length > 0 && configuredFallback != targetDatabaseName
|
|
34
|
+
|
|
35
|
+
newConfiguration.database = useConfiguredFallback
|
|
36
|
+
? configuredFallback
|
|
37
|
+
: this.systemFallbackDatabaseName(databaseType)
|
|
38
|
+
|
|
39
|
+
if (databaseType == "mssql" && newConfiguration.sqlConfig?.database) {
|
|
40
|
+
delete newConfiguration.sqlConfig.database
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
await this.withDirectDatabaseConnection(newConfiguration, async () => {
|
|
44
|
+
await this.dropDatabase(databaseIdentifier)
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (this.args.testing) return this.result
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Runs system fallback database name.
|
|
54
|
+
* @param {string} databaseType - Database type.
|
|
55
|
+
* @returns {string} - System/maintenance database name for that driver.
|
|
56
|
+
*/
|
|
57
|
+
systemFallbackDatabaseName(databaseType) {
|
|
58
|
+
if (databaseType == "pgsql") return "postgres"
|
|
59
|
+
if (databaseType == "mssql") return "master"
|
|
60
|
+
|
|
61
|
+
return "mysql"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Runs drop database.
|
|
66
|
+
* @param {string} databaseIdentifier - Database identifier.
|
|
67
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
68
|
+
*/
|
|
69
|
+
async dropDatabase(databaseIdentifier) {
|
|
70
|
+
const databaseName = digg(this.getConfiguration().getDatabaseConfiguration(), databaseIdentifier, "database")
|
|
71
|
+
const sqls = this.getDatabaseConnection().dropDatabaseSql(databaseName, {ifExists: true})
|
|
72
|
+
|
|
73
|
+
await this.queryOrCollectSqls(sqls, (sql) => ({databaseName, sql}))
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import BaseCommand from "../../base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
import Migrator from "../../../database/migrator.js"
|
|
4
|
+
|
|
5
|
+
export default class DbMigrate extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
const migrations = await this.getEnvironmentHandler().findMigrations()
|
|
8
|
+
const migrator = new Migrator({configuration: this.getConfiguration()})
|
|
9
|
+
|
|
10
|
+
console.log(`Running ${migrations.length} migrations`)
|
|
11
|
+
|
|
12
|
+
await this.getConfiguration().ensureConnections({name: "DB migrate"}, async () => {
|
|
13
|
+
await migrator.prepare()
|
|
14
|
+
await migrator.migrateFiles(migrations, digg(this.getEnvironmentHandler(), "requireMigration"))
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import BaseCommand from "../../base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
import Migrator from "../../../database/migrator.js"
|
|
4
|
+
|
|
5
|
+
export default class DbReset extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
const environment = this.getConfiguration().getEnvironment()
|
|
8
|
+
|
|
9
|
+
if (environment != "development" && environment != "test") {
|
|
10
|
+
throw new Error(`This command should only be executed on development and test environments and not: ${environment}`)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const migrations = await this.getEnvironmentHandler().findMigrations()
|
|
14
|
+
const migrator = new Migrator({configuration: this.getConfiguration()})
|
|
15
|
+
|
|
16
|
+
await this.getConfiguration().ensureConnections({name: "DB reset"}, async () => {
|
|
17
|
+
await migrator.reset()
|
|
18
|
+
await migrator.prepare()
|
|
19
|
+
await migrator.migrateFiles(migrations, digg(this.getEnvironmentHandler(), "requireMigration"))
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import BaseCommand from "../../base-command.js"
|
|
2
|
+
import {digg} from "diggerize"
|
|
3
|
+
import Migrator from "../../../database/migrator.js"
|
|
4
|
+
|
|
5
|
+
export default class DbRollback extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
const migrations = await this.getEnvironmentHandler().findMigrations()
|
|
8
|
+
const migrator = new Migrator({configuration: this.getConfiguration()})
|
|
9
|
+
|
|
10
|
+
await this.getConfiguration().ensureConnections({name: "DB rollback"}, async () => {
|
|
11
|
+
await migrator.prepare()
|
|
12
|
+
await migrator.rollback(migrations, digg(this.getEnvironmentHandler(), "requireMigration"))
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import BaseCommand from "../../../base-command.js"
|
|
2
|
+
|
|
3
|
+
/** CLI command for dumping DB structure SQL files. */
|
|
4
|
+
export default class DbSchemaDump extends BaseCommand {
|
|
5
|
+
/**
|
|
6
|
+
* Runs execute.
|
|
7
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
8
|
+
*/
|
|
9
|
+
async execute() {
|
|
10
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsDbSchemaDump(this)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import BaseCommand from "../../../base-command.js"
|
|
2
|
+
|
|
3
|
+
/** CLI command for loading DB structure SQL files. */
|
|
4
|
+
export default class DbSchemaLoad extends BaseCommand {
|
|
5
|
+
/**
|
|
6
|
+
* Runs execute.
|
|
7
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
8
|
+
*/
|
|
9
|
+
async execute() {
|
|
10
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsDbSchemaLoad(this)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import BaseCommand from "../../base-command.js"
|
|
2
|
+
|
|
3
|
+
/** CLI command for loading and running src/db/seed.js. */
|
|
4
|
+
export default class DbSeed extends BaseCommand {
|
|
5
|
+
/**
|
|
6
|
+
* Runs execute.
|
|
7
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
8
|
+
*/
|
|
9
|
+
async execute() {
|
|
10
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsDbSeed(this)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseCommand from "../../../base-command.js"
|
|
4
|
+
import TenantDatabaseCommandHelper from "../../../tenant-database-command-helper.js"
|
|
5
|
+
|
|
6
|
+
export default class DbTenantsCheck extends BaseCommand {
|
|
7
|
+
/**
|
|
8
|
+
* Runs execute.
|
|
9
|
+
* @returns {Promise<{identifier: string, tenantCount: number} | void>} - Result in test mode.
|
|
10
|
+
*/
|
|
11
|
+
async execute() {
|
|
12
|
+
const helper = new TenantDatabaseCommandHelper({
|
|
13
|
+
command: this,
|
|
14
|
+
identifier: this.processArgs?.[1]
|
|
15
|
+
})
|
|
16
|
+
const provider = helper.provider
|
|
17
|
+
const tenantCount = await helper.eachTenant(async ({databaseConfiguration, tenant}) => {
|
|
18
|
+
if (typeof provider.checkTenant === "function") {
|
|
19
|
+
await provider.checkTenant({
|
|
20
|
+
configuration: this.getConfiguration(),
|
|
21
|
+
databaseConfiguration,
|
|
22
|
+
identifier: helper.identifier,
|
|
23
|
+
tenant
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
await this.getConfiguration().ensureConnections({name: `DB tenants check: ${helper.identifier}`}, async (dbs) => {
|
|
28
|
+
const db = dbs[helper.identifier]
|
|
29
|
+
|
|
30
|
+
if (!db) throw new Error(`Tenant database identifier ${helper.identifier} did not open a connection`)
|
|
31
|
+
|
|
32
|
+
await db.query("SELECT 1")
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
if (this.args.testing) return {identifier: helper.identifier, tenantCount}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseCommand from "../../../base-command.js"
|
|
4
|
+
import TenantDatabaseCommandHelper from "../../../tenant-database-command-helper.js"
|
|
5
|
+
|
|
6
|
+
export default class DbTenantsCreate extends BaseCommand {
|
|
7
|
+
/**
|
|
8
|
+
* Runs execute.
|
|
9
|
+
* @returns {Promise<{identifier: string, tenantCount: number} | void>} - Result in test mode.
|
|
10
|
+
*/
|
|
11
|
+
async execute() {
|
|
12
|
+
const helper = new TenantDatabaseCommandHelper({
|
|
13
|
+
command: this,
|
|
14
|
+
identifier: this.processArgs?.[1]
|
|
15
|
+
})
|
|
16
|
+
const provider = helper.provider
|
|
17
|
+
|
|
18
|
+
if (typeof provider.createDatabase !== "function") {
|
|
19
|
+
throw new Error(`Tenant database provider for ${helper.identifier} must define createDatabase to use db:tenants:create`)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const tenantCount = await helper.eachTenant(async ({databaseConfiguration, tenant}) => {
|
|
23
|
+
await provider.createDatabase?.({
|
|
24
|
+
configuration: this.getConfiguration(),
|
|
25
|
+
databaseConfiguration,
|
|
26
|
+
identifier: helper.identifier,
|
|
27
|
+
tenant
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
if (this.args.testing) return {identifier: helper.identifier, tenantCount}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {digg} from "diggerize"
|
|
4
|
+
import BaseCommand from "../../../base-command.js"
|
|
5
|
+
import Migrator from "../../../../database/migrator.js"
|
|
6
|
+
import TenantDatabaseCommandHelper from "../../../tenant-database-command-helper.js"
|
|
7
|
+
|
|
8
|
+
export default class DbTenantsMigrate extends BaseCommand {
|
|
9
|
+
/**
|
|
10
|
+
* Runs execute.
|
|
11
|
+
* @returns {Promise<{identifier: string, migrationCount: number, tenantCount: number} | void>} - Result in test mode.
|
|
12
|
+
*/
|
|
13
|
+
async execute() {
|
|
14
|
+
const helper = new TenantDatabaseCommandHelper({
|
|
15
|
+
command: this,
|
|
16
|
+
identifier: this.processArgs?.[1]
|
|
17
|
+
})
|
|
18
|
+
const migrations = await this.getEnvironmentHandler().findMigrations()
|
|
19
|
+
const tenantCount = await helper.eachTenant(async ({databaseConfiguration, tenant}) => {
|
|
20
|
+
const migrator = new Migrator({
|
|
21
|
+
configuration: this.getConfiguration(),
|
|
22
|
+
databaseIdentifiers: [helper.identifier]
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
await this.getConfiguration().ensureConnections({name: `DB tenants migrate: ${helper.identifier}`}, async () => {
|
|
26
|
+
await migrator.prepare()
|
|
27
|
+
const migrationsApplied = await migrator.migrateFiles(migrations, digg(this.getEnvironmentHandler(), "requireMigration"))
|
|
28
|
+
|
|
29
|
+
if (typeof helper.provider.afterMigrateTenant === "function") {
|
|
30
|
+
await helper.provider.afterMigrateTenant({
|
|
31
|
+
configuration: this.getConfiguration(),
|
|
32
|
+
databaseConfiguration,
|
|
33
|
+
identifier: helper.identifier,
|
|
34
|
+
migrationsApplied,
|
|
35
|
+
tenant
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
if (this.args.testing) {
|
|
42
|
+
return {
|
|
43
|
+
identifier: helper.identifier,
|
|
44
|
+
migrationCount: migrations.length,
|
|
45
|
+
tenantCount
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|