velocious 1.0.430 → 1.0.432
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/application.js +229 -0
- package/build/authorization/ability.js +329 -0
- package/build/authorization/base-resource.js +143 -0
- package/build/background-jobs/client.js +50 -0
- package/build/background-jobs/cron-expression.js +277 -0
- package/build/background-jobs/forked-runner-child.js +86 -0
- package/build/background-jobs/job-record.js +13 -0
- package/build/background-jobs/job-registry.js +92 -0
- package/build/background-jobs/job-runner.js +107 -0
- package/build/background-jobs/job.js +77 -0
- package/build/background-jobs/json-socket.js +78 -0
- package/build/background-jobs/main.js +926 -0
- package/build/background-jobs/normalize-error.js +26 -0
- package/build/background-jobs/scheduler.js +274 -0
- package/build/background-jobs/socket-request.js +68 -0
- package/build/background-jobs/status-reporter.js +101 -0
- package/build/background-jobs/store.js +994 -0
- package/build/background-jobs/types.js +70 -0
- package/build/background-jobs/web/authorization.js +89 -0
- package/build/background-jobs/web/controller.js +280 -0
- package/build/background-jobs/web/index.js +57 -0
- package/build/background-jobs/web/path-matcher.js +74 -0
- package/build/background-jobs/web/registry.js +49 -0
- package/build/background-jobs/worker.js +683 -0
- package/build/beacon/client.js +330 -0
- package/build/beacon/in-process-broker.js +71 -0
- package/build/beacon/in-process-client.js +139 -0
- package/build/beacon/server.js +148 -0
- package/build/beacon/types.js +55 -0
- package/build/bin/velocious.js +39 -34
- package/build/cli/base-command.js +67 -0
- package/build/cli/browser-cli.js +45 -0
- package/build/cli/commands/background-jobs-main.js +7 -0
- package/build/cli/commands/background-jobs-runner.js +7 -0
- package/build/cli/commands/background-jobs-worker.js +7 -0
- package/build/cli/commands/beacon.js +7 -0
- package/build/cli/commands/console.js +12 -0
- package/build/cli/commands/db/base-command.js +82 -0
- package/build/cli/commands/db/create.js +64 -0
- package/build/cli/commands/db/drop.js +75 -0
- package/build/cli/commands/db/migrate.js +17 -0
- package/build/cli/commands/db/reset.js +22 -0
- package/build/cli/commands/db/rollback.js +15 -0
- package/build/cli/commands/db/schema/dump.js +12 -0
- package/build/cli/commands/db/schema/load.js +12 -0
- package/build/cli/commands/db/seed.js +12 -0
- package/build/cli/commands/db/tenants/check.js +38 -0
- package/build/cli/commands/db/tenants/create.js +33 -0
- package/build/cli/commands/db/tenants/migrate.js +49 -0
- package/build/cli/commands/destroy/migration.js +7 -0
- package/build/cli/commands/generate/base-models.js +7 -0
- package/build/cli/commands/generate/frontend-models.js +12 -0
- package/build/cli/commands/generate/migration.js +7 -0
- package/build/cli/commands/generate/model.js +7 -0
- package/build/cli/commands/init.js +11 -0
- package/build/cli/commands/routes.js +7 -0
- package/build/cli/commands/run-script.js +12 -0
- package/build/cli/commands/runner.js +12 -0
- package/build/cli/commands/server.js +7 -0
- package/build/cli/commands/test.js +9 -0
- package/build/cli/index.js +152 -0
- package/build/cli/tenant-database-command-helper.js +198 -0
- package/build/cli/use-browser-cli.js +30 -0
- package/build/configuration-resolver.js +65 -0
- package/build/configuration-types.js +429 -0
- package/build/configuration.js +2590 -0
- package/build/controller.js +421 -0
- package/build/current-configuration.js +31 -0
- package/build/current.js +80 -0
- package/build/database/annotations-async-hooks.js +47 -0
- package/build/database/annotations.js +40 -0
- package/build/database/drivers/base-column.js +182 -0
- package/build/database/drivers/base-columns-index.js +81 -0
- package/build/database/drivers/base-foreign-key.js +104 -0
- package/build/database/drivers/base-table.js +156 -0
- package/build/database/drivers/base.js +1609 -0
- package/build/database/drivers/mssql/column.js +74 -0
- package/build/database/drivers/mssql/columns-index.js +6 -0
- package/build/database/drivers/mssql/connect-connection.js +16 -0
- package/build/database/drivers/mssql/foreign-key.js +12 -0
- package/build/database/drivers/mssql/index.js +590 -0
- package/build/database/drivers/mssql/options.js +79 -0
- package/build/database/drivers/mssql/query-parser.js +6 -0
- package/build/database/drivers/mssql/sql/alter-table.js +4 -0
- package/build/database/drivers/mssql/sql/create-database.js +36 -0
- package/build/database/drivers/mssql/sql/create-index.js +4 -0
- package/build/database/drivers/mssql/sql/create-table.js +4 -0
- package/build/database/drivers/mssql/sql/delete.js +19 -0
- package/build/database/drivers/mssql/sql/drop-database.js +36 -0
- package/build/database/drivers/mssql/sql/drop-table.js +4 -0
- package/build/database/drivers/mssql/sql/insert.js +4 -0
- package/build/database/drivers/mssql/sql/update.js +31 -0
- package/build/database/drivers/mssql/sql/upsert.js +23 -0
- package/build/database/drivers/mssql/structure-sql.js +120 -0
- package/build/database/drivers/mssql/table.js +145 -0
- package/build/database/drivers/mysql/column.js +112 -0
- package/build/database/drivers/mysql/columns-index.js +22 -0
- package/build/database/drivers/mysql/foreign-key.js +12 -0
- package/build/database/drivers/mysql/index.js +473 -0
- package/build/database/drivers/mysql/options.js +34 -0
- package/build/database/drivers/mysql/query-parser.js +6 -0
- package/build/database/drivers/mysql/query.js +37 -0
- package/build/database/drivers/mysql/sql/alter-table.js +6 -0
- package/build/database/drivers/mysql/sql/create-database.js +39 -0
- package/build/database/drivers/mysql/sql/create-index.js +6 -0
- package/build/database/drivers/mysql/sql/create-table.js +6 -0
- package/build/database/drivers/mysql/sql/delete.js +21 -0
- package/build/database/drivers/mysql/sql/drop-database.js +6 -0
- package/build/database/drivers/mysql/sql/drop-table.js +6 -0
- package/build/database/drivers/mysql/sql/insert.js +6 -0
- package/build/database/drivers/mysql/sql/update.js +33 -0
- package/build/database/drivers/mysql/sql/upsert.js +13 -0
- package/build/database/drivers/mysql/structure-sql.js +93 -0
- package/build/database/drivers/mysql/table.js +121 -0
- package/build/database/drivers/pgsql/column.js +90 -0
- package/build/database/drivers/pgsql/columns-index.js +6 -0
- package/build/database/drivers/pgsql/foreign-key.js +12 -0
- package/build/database/drivers/pgsql/index.js +441 -0
- package/build/database/drivers/pgsql/options.js +32 -0
- package/build/database/drivers/pgsql/query-parser.js +6 -0
- package/build/database/drivers/pgsql/sql/alter-table.js +6 -0
- package/build/database/drivers/pgsql/sql/create-database.js +38 -0
- package/build/database/drivers/pgsql/sql/create-index.js +6 -0
- package/build/database/drivers/pgsql/sql/create-table.js +6 -0
- package/build/database/drivers/pgsql/sql/delete.js +21 -0
- package/build/database/drivers/pgsql/sql/drop-database.js +6 -0
- package/build/database/drivers/pgsql/sql/drop-table.js +6 -0
- package/build/database/drivers/pgsql/sql/insert.js +6 -0
- package/build/database/drivers/pgsql/sql/update.js +33 -0
- package/build/database/drivers/pgsql/sql/upsert.js +14 -0
- package/build/database/drivers/pgsql/structure-sql.js +126 -0
- package/build/database/drivers/pgsql/table.js +135 -0
- package/build/database/drivers/sqlite/base.js +509 -0
- package/build/database/drivers/sqlite/column.js +75 -0
- package/build/database/drivers/sqlite/columns-index.js +30 -0
- package/build/database/drivers/sqlite/connection-sql-js.js +46 -0
- package/build/database/drivers/sqlite/foreign-key.js +24 -0
- package/build/database/drivers/sqlite/index.js +394 -0
- package/build/database/drivers/sqlite/index.native.js +72 -0
- package/build/database/drivers/sqlite/index.web.js +99 -0
- package/build/database/drivers/sqlite/options.js +32 -0
- package/build/database/drivers/sqlite/query-parser.js +6 -0
- package/build/database/drivers/sqlite/query.js +35 -0
- package/build/database/drivers/sqlite/query.native.js +35 -0
- package/build/database/drivers/sqlite/query.web.js +49 -0
- package/build/database/drivers/sqlite/sql/alter-table.js +187 -0
- package/build/database/drivers/sqlite/sql/create-index.js +6 -0
- package/build/database/drivers/sqlite/sql/create-table.js +6 -0
- package/build/database/drivers/sqlite/sql/delete.js +26 -0
- package/build/database/drivers/sqlite/sql/drop-table.js +6 -0
- package/build/database/drivers/sqlite/sql/insert.js +6 -0
- package/build/database/drivers/sqlite/sql/update.js +33 -0
- package/build/database/drivers/sqlite/sql/upsert.js +14 -0
- package/build/database/drivers/sqlite/structure-sql.js +56 -0
- package/build/database/drivers/sqlite/table-rebuilder.js +96 -0
- package/build/database/drivers/sqlite/table.js +131 -0
- package/build/database/drivers/structure-sql/utils.js +35 -0
- package/build/database/handler.js +13 -0
- package/build/database/initializer-from-require-context.js +101 -0
- package/build/database/migration/index.js +438 -0
- package/build/database/migrator/files-finder.js +55 -0
- package/build/database/migrator/types.js +31 -0
- package/build/database/migrator.js +557 -0
- package/build/database/pool/async-tracked-multi-connection.js +1164 -0
- package/build/database/pool/base-methods-forward.js +52 -0
- package/build/database/pool/base.js +380 -0
- package/build/database/pool/single-multi-use.js +118 -0
- package/build/database/query/alter-table-base.js +104 -0
- package/build/database/query/base.js +49 -0
- package/build/database/query/create-database-base.js +42 -0
- package/build/database/query/create-index-base.js +117 -0
- package/build/database/query/create-table-base.js +205 -0
- package/build/database/query/delete-base.js +19 -0
- package/build/database/query/drop-database-base.js +38 -0
- package/build/database/query/drop-table-base.js +58 -0
- package/build/database/query/from-base.js +36 -0
- package/build/database/query/from-plain.js +16 -0
- package/build/database/query/from-table.js +18 -0
- package/build/database/query/index.js +533 -0
- package/build/database/query/insert-base.js +172 -0
- package/build/database/query/join-base.js +43 -0
- package/build/database/query/join-object.js +167 -0
- package/build/database/query/join-plain.js +18 -0
- package/build/database/query/join-tracker.js +93 -0
- package/build/database/query/model-class-query.js +1577 -0
- package/build/database/query/order-base.js +33 -0
- package/build/database/query/order-column.js +77 -0
- package/build/database/query/order-plain.js +28 -0
- package/build/database/query/preloader/belongs-to.js +267 -0
- package/build/database/query/preloader/ensure-model-class-initialized.js +18 -0
- package/build/database/query/preloader/has-many.js +316 -0
- package/build/database/query/preloader/has-one.js +123 -0
- package/build/database/query/preloader/selection.js +152 -0
- package/build/database/query/preloader.js +201 -0
- package/build/database/query/query-data.js +305 -0
- package/build/database/query/select-base.js +30 -0
- package/build/database/query/select-plain.js +18 -0
- package/build/database/query/select-table-and-column.js +28 -0
- package/build/database/query/update-base.js +41 -0
- package/build/database/query/upsert-base.js +103 -0
- package/build/database/query/where-base.js +38 -0
- package/build/database/query/where-combinator.js +31 -0
- package/build/database/query/where-hash.js +77 -0
- package/build/database/query/where-model-class-hash.js +505 -0
- package/build/database/query/where-not.js +23 -0
- package/build/database/query/where-plain.js +20 -0
- package/build/database/query/with-count.js +219 -0
- package/build/database/query-parser/base-query-parser.js +40 -0
- package/build/database/query-parser/from-parser.js +49 -0
- package/build/database/query-parser/group-parser.js +55 -0
- package/build/database/query-parser/joins-parser.js +37 -0
- package/build/database/query-parser/limit-parser.js +77 -0
- package/build/database/query-parser/options.js +94 -0
- package/build/database/query-parser/order-parser.js +45 -0
- package/build/database/query-parser/select-parser.js +67 -0
- package/build/database/query-parser/where-parser.js +46 -0
- package/build/database/record/acts-as-list.js +374 -0
- package/build/database/record/attachments/download.js +49 -0
- package/build/database/record/attachments/handle.js +188 -0
- package/build/database/record/attachments/normalize-input.js +213 -0
- package/build/database/record/attachments/storage-drivers/filesystem.js +114 -0
- package/build/database/record/attachments/storage-drivers/native.js +146 -0
- package/build/database/record/attachments/storage-drivers/s3.js +245 -0
- package/build/database/record/attachments/store.js +591 -0
- package/build/database/record/index.js +4094 -0
- package/build/database/record/instance-relationships/base.js +289 -0
- package/build/database/record/instance-relationships/belongs-to.js +84 -0
- package/build/database/record/instance-relationships/has-many.js +284 -0
- package/build/database/record/instance-relationships/has-one.js +117 -0
- package/build/database/record/record-not-found-error.js +3 -0
- package/build/database/record/relationships/base.js +195 -0
- package/build/database/record/relationships/belongs-to.js +57 -0
- package/build/database/record/relationships/has-many.js +46 -0
- package/build/database/record/relationships/has-one.js +46 -0
- package/build/database/record/state-machine.js +278 -0
- package/build/database/record/user-module.js +43 -0
- package/build/database/record/validators/base.js +27 -0
- package/build/database/record/validators/format.js +50 -0
- package/build/database/record/validators/presence.js +24 -0
- package/build/database/record/validators/uniqueness.js +124 -0
- package/build/database/table-data/index.js +241 -0
- package/build/database/table-data/table-column.js +416 -0
- package/build/database/table-data/table-foreign-key.js +69 -0
- package/build/database/table-data/table-index.js +46 -0
- package/build/database/table-data/table-reference.js +13 -0
- package/build/database/use-database.js +48 -0
- package/build/environment-handlers/base.js +561 -0
- package/build/environment-handlers/browser.js +338 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
- package/build/environment-handlers/node/cli/commands/beacon.js +21 -0
- package/build/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
- package/build/environment-handlers/node/cli/commands/console.js +149 -0
- package/build/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
- package/build/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
- package/build/environment-handlers/node/cli/commands/db/seed.js +79 -0
- package/build/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
- package/build/environment-handlers/node/cli/commands/generate/base-models.js +396 -0
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
- package/build/environment-handlers/node/cli/commands/generate/migration.js +45 -0
- package/build/environment-handlers/node/cli/commands/generate/model.js +45 -0
- package/build/environment-handlers/node/cli/commands/init.js +68 -0
- package/build/environment-handlers/node/cli/commands/routes.js +63 -0
- package/build/environment-handlers/node/cli/commands/run-script.js +85 -0
- package/build/environment-handlers/node/cli/commands/runner.js +84 -0
- package/build/environment-handlers/node/cli/commands/server.js +151 -0
- package/build/environment-handlers/node/cli/commands/test.js +118 -0
- package/build/environment-handlers/node.js +887 -0
- package/build/error-logger.js +30 -0
- package/build/frontend-model-controller.js +3491 -0
- package/build/frontend-model-resource/base-resource.js +935 -0
- package/build/frontend-models/base.js +4004 -0
- package/build/frontend-models/clear-pending-debounced-callback.js +16 -0
- package/build/frontend-models/event-hook-models.js +49 -0
- package/build/frontend-models/model-registry.js +28 -0
- package/build/frontend-models/outgoing-event-buffer.js +51 -0
- package/build/frontend-models/preloader.js +169 -0
- package/build/frontend-models/query.js +2245 -0
- package/build/frontend-models/resource-config-validation.js +56 -0
- package/build/frontend-models/resource-definition.js +399 -0
- package/build/frontend-models/transport-serialization.js +369 -0
- package/build/frontend-models/use-created-event.js +21 -0
- package/build/frontend-models/use-destroyed-event.js +148 -0
- package/build/frontend-models/use-model-class-event.js +164 -0
- package/build/frontend-models/use-updated-event.js +152 -0
- package/build/frontend-models/websocket-channel.js +494 -0
- package/build/frontend-models/websocket-publishers.js +224 -0
- package/build/http-client/header.js +17 -0
- package/build/http-client/index.js +139 -0
- package/build/http-client/request.js +94 -0
- package/build/http-client/response.js +151 -0
- package/build/http-client/websocket-client.js +27 -0
- package/build/http-server/client/index.js +507 -0
- package/build/http-server/client/params-to-object.js +152 -0
- package/build/http-server/client/request-buffer/form-data-part.js +139 -0
- package/build/http-server/client/request-buffer/header.js +19 -0
- package/build/http-server/client/request-buffer/index.js +535 -0
- package/build/http-server/client/request-parser.js +195 -0
- package/build/http-server/client/request-runner.js +321 -0
- package/build/http-server/client/request-timing.js +171 -0
- package/build/http-server/client/request.js +114 -0
- package/build/http-server/client/response.js +251 -0
- package/build/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
- package/build/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
- package/build/http-server/client/uploaded-file/uploaded-file.js +36 -0
- package/build/http-server/client/websocket-request.js +147 -0
- package/build/http-server/client/websocket-session.js +1755 -0
- package/build/http-server/cookie.js +245 -0
- package/build/http-server/development-reloader.js +240 -0
- package/build/http-server/index.js +561 -0
- package/build/http-server/remote-address.js +77 -0
- package/build/http-server/server-client.js +222 -0
- package/build/http-server/server-lock.js +178 -0
- package/build/http-server/websocket-channel-subscribers.js +110 -0
- package/build/http-server/websocket-channel.js +137 -0
- package/build/http-server/websocket-connection.js +118 -0
- package/build/http-server/websocket-event-log-store.js +433 -0
- package/build/http-server/websocket-events-host.js +170 -0
- package/build/http-server/websocket-events.js +50 -0
- package/build/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
- package/build/http-server/worker-handler/in-process.js +155 -0
- package/build/http-server/worker-handler/index.js +370 -0
- package/build/http-server/worker-handler/worker-script.js +6 -0
- package/build/http-server/worker-handler/worker-thread.js +286 -0
- package/build/index.js +1 -2
- package/build/initializer.js +39 -0
- package/build/jobs/mail-delivery.js +22 -0
- package/build/logger/base-logger.js +34 -0
- package/build/logger/console-logger.js +28 -0
- package/build/logger/file-logger.js +36 -0
- package/build/logger/outputs/array-output.js +50 -0
- package/build/logger/outputs/console-output.js +32 -0
- package/build/logger/outputs/file-output.js +55 -0
- package/build/logger/outputs/stdout-output.js +64 -0
- package/build/logger.js +507 -0
- package/build/mailer/backends/smtp.js +197 -0
- package/build/mailer/base.js +337 -0
- package/build/mailer/delivery.js +70 -0
- package/build/mailer/index.js +24 -0
- package/build/mailer.js +15 -0
- package/build/plugins/sqljs-wasm-route-controller.js +70 -0
- package/build/plugins/sqljs-wasm-route.js +71 -0
- package/build/record-payload-values.js +83 -0
- package/build/routes/app-routes.js +17 -0
- package/build/routes/base-route.js +133 -0
- package/build/routes/basic-route.js +109 -0
- package/build/routes/built-in/debug/controller.js +12 -0
- package/build/routes/built-in/errors/controller.js +7 -0
- package/build/routes/get-route.js +75 -0
- package/build/routes/hooks/frontend-model-command-route-hook.js +100 -0
- package/build/routes/index.js +50 -0
- package/build/routes/namespace-route.js +51 -0
- package/build/routes/plugin-routes.js +141 -0
- package/build/routes/post-route.js +74 -0
- package/build/routes/resolver.js +535 -0
- package/build/routes/resource-route.js +154 -0
- package/build/routes/root-route.js +11 -0
- 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 +14 -13
- 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 +13 -11
- 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 +8 -2
- package/build/src/database/query/where-combinator.d.ts.map +1 -1
- package/build/src/database/query/where-combinator.js +1 -2
- package/build/src/database/record/acts-as-list.js +2 -2
- 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 +2 -2
- package/build/src/database/record/index.d.ts +82 -20
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +126 -13
- 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 +3 -3
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -2
- 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 +59 -36
- 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 +4 -4
- 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 +22 -10
- 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 +79 -48
- 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 +5 -5
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +1 -4
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +1 -2
- package/build/templates/configuration.js +61 -0
- package/build/templates/generate-migration.js +11 -0
- package/build/templates/generate-model.js +6 -0
- package/build/templates/routes.js +11 -0
- package/build/testing/base-expect.js +17 -0
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
- package/build/testing/browser-test-app.js +32 -0
- package/build/testing/expect-to-change.js +55 -0
- package/build/testing/expect-utils.js +269 -0
- package/build/testing/expect.js +763 -0
- package/build/testing/request-client.js +90 -0
- package/build/testing/test-files-finder.js +364 -0
- package/build/testing/test-filter-parser.js +198 -0
- package/build/testing/test-runner.js +1168 -0
- package/build/testing/test-suite-splitter.js +177 -0
- package/build/testing/test.js +370 -0
- package/build/utils/backtrace-cleaner-node.js +87 -0
- package/build/utils/backtrace-cleaner.js +266 -0
- package/build/utils/ensure-error.js +15 -0
- package/build/utils/event-emitter.js +8 -0
- package/build/utils/file-exists.js +18 -0
- package/build/utils/format-value.js +101 -0
- package/build/utils/model-scope.js +56 -0
- package/build/utils/nest-callbacks.js +22 -0
- package/build/utils/plain-object.js +14 -0
- package/build/utils/ransack.js +859 -0
- package/build/utils/rest-args-error.js +14 -0
- package/build/utils/singularize-model-name.js +18 -0
- package/build/utils/split-sql-statements.js +88 -0
- package/build/utils/to-import-specifier.js +53 -0
- package/build/utils/with-tracked-stack-async-hooks.js +103 -0
- package/build/utils/with-tracked-stack.js +38 -0
- package/build/velocious-error.js +34 -0
- 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 +4094 -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 +396 -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,338 @@
|
|
|
1
|
+
import Base from "./base.js"
|
|
2
|
+
import * as inflection from "inflection"
|
|
3
|
+
import restArgsError from "../utils/rest-args-error.js"
|
|
4
|
+
import Logger from "../logger.js"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Defines this typedef.
|
|
8
|
+
* @typedef {(id: string) => {default: typeof import("../database/migration/index.js").default}} MigrationsRequireContextIDFunctionType
|
|
9
|
+
* @typedef {MigrationsRequireContextIDFunctionType & {
|
|
10
|
+
* keys: () => string[],
|
|
11
|
+
* id: string
|
|
12
|
+
* }} MigrationsRequireContextType
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Defines this typedef.
|
|
17
|
+
* @typedef {(id: string) => {default: typeof import("../cli/base-command.js").default}} CommandsRequireContextIDFunctionType
|
|
18
|
+
* @typedef {CommandsRequireContextIDFunctionType & {
|
|
19
|
+
* keys: () => string[],
|
|
20
|
+
* id: string
|
|
21
|
+
* }} CommandsRequireContextType
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* TestFilesRequireContextIDFunctionType type.
|
|
26
|
+
* @typedef {(id: string) => ?} TestFilesRequireContextIDFunctionType
|
|
27
|
+
* @typedef {TestFilesRequireContextIDFunctionType & {
|
|
28
|
+
* keys: () => string[],
|
|
29
|
+
* id: string
|
|
30
|
+
* }} TestFilesRequireContextType
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Runs is migration object.
|
|
35
|
+
* @param {import("./base.js").MigrationObjectType | null} migration - Candidate migration object.
|
|
36
|
+
* @returns {migration is import("./base.js").MigrationObjectType} - Whether migration exists.
|
|
37
|
+
*/
|
|
38
|
+
function isMigrationObject(migration) {
|
|
39
|
+
return Boolean(migration)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default class VelociousEnvironmentsHandlerBrowser extends Base {
|
|
43
|
+
/**
|
|
44
|
+
* Find commands require context result.
|
|
45
|
+
@type {CommandsRequireContextType | undefined} */
|
|
46
|
+
findCommandsRequireContextResult = undefined
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Migrations require context result.
|
|
50
|
+
@type {MigrationsRequireContextType | undefined} */
|
|
51
|
+
_migrationsRequireContextResult = undefined
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Test files require context result.
|
|
55
|
+
@type {TestFilesRequireContextType | undefined} */
|
|
56
|
+
_testFilesRequireContextResult = undefined
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Runs constructor.
|
|
60
|
+
* @param {object} args - Options object.
|
|
61
|
+
* @param {() => Promise<MigrationsRequireContextType>} [args.migrationsRequireContextCallback] - Migrations require context callback.
|
|
62
|
+
* @param {() => Promise<TestFilesRequireContextType>} [args.testFilesRequireContextCallback] - Test files require context callback.
|
|
63
|
+
*/
|
|
64
|
+
constructor({migrationsRequireContextCallback, testFilesRequireContextCallback, ...restArgs} = {}) {
|
|
65
|
+
super()
|
|
66
|
+
restArgsError(restArgs)
|
|
67
|
+
|
|
68
|
+
this.migrationsRequireContextCallback = migrationsRequireContextCallback
|
|
69
|
+
this.testFilesRequireContextCallback = testFilesRequireContextCallback
|
|
70
|
+
this.logger = new Logger(this)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Runs migrations require context.
|
|
76
|
+
* @returns {Promise<MigrationsRequireContextType>} - Resolves with the migrations require context.
|
|
77
|
+
*/
|
|
78
|
+
async migrationsRequireContext() {
|
|
79
|
+
const {migrationsRequireContextCallback} = this
|
|
80
|
+
|
|
81
|
+
if (!migrationsRequireContextCallback) throw new Error("migrationsRequireContextCallback is required")
|
|
82
|
+
|
|
83
|
+
this._migrationsRequireContextResult ||= await migrationsRequireContextCallback()
|
|
84
|
+
|
|
85
|
+
return this._migrationsRequireContextResult
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Runs test files require context.
|
|
90
|
+
* @returns {Promise<TestFilesRequireContextType>} - Resolves with the test files require context.
|
|
91
|
+
*/
|
|
92
|
+
async testFilesRequireContext() {
|
|
93
|
+
const {testFilesRequireContextCallback} = this
|
|
94
|
+
|
|
95
|
+
if (!testFilesRequireContextCallback) {
|
|
96
|
+
throw new Error("testFilesRequireContextCallback is required when running browser tests")
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this._testFilesRequireContextResult ||= await testFilesRequireContextCallback()
|
|
100
|
+
|
|
101
|
+
return this._testFilesRequireContextResult
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Runs find commands.
|
|
106
|
+
* @returns {Promise<Array<import("./base.js").CommandFileObjectType>>} - Resolves with the commands.
|
|
107
|
+
*/
|
|
108
|
+
async findCommands() {
|
|
109
|
+
this._findCommandsResult = this._actualFindCommands()
|
|
110
|
+
|
|
111
|
+
return this._findCommandsResult
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Runs find commands require context.
|
|
116
|
+
* @returns {CommandsRequireContextType} - The commands require context.
|
|
117
|
+
*/
|
|
118
|
+
_findCommandsRequireContext() {
|
|
119
|
+
// @ts-expect-error
|
|
120
|
+
this.findCommandsRequireContextResult ||= /** Narrows the runtime value to the documented type. @type {CommandsRequireContextType} */ (require.context("../cli/commands", true, /\.js$/))
|
|
121
|
+
|
|
122
|
+
return this.findCommandsRequireContextResult
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
_actualFindCommands() {
|
|
126
|
+
const commandFiles = this._findCommandsRequireContext()
|
|
127
|
+
const commands = []
|
|
128
|
+
|
|
129
|
+
for (const aFilePath of commandFiles.keys()) {
|
|
130
|
+
const aFilePathParts = aFilePath.split("/")
|
|
131
|
+
const lastPart = aFilePathParts[aFilePathParts.length - 1]
|
|
132
|
+
let name
|
|
133
|
+
|
|
134
|
+
if (lastPart == "index.js") {
|
|
135
|
+
name = aFilePathParts[aFilePathParts.length - 2]
|
|
136
|
+
} else {
|
|
137
|
+
name = lastPart.replace(".js", "")
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
commands.push({name, file: aFilePath})
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return commands
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Runs require command.
|
|
148
|
+
* @param {object} args - Options object.
|
|
149
|
+
* @param {Array<string>} args.commandParts - Command parts.
|
|
150
|
+
* @returns {Promise<typeof import("../cli/base-command.js").default>} - Resolves with the require command.
|
|
151
|
+
*/
|
|
152
|
+
async requireCommand({commandParts}) {
|
|
153
|
+
let filePath = "."
|
|
154
|
+
|
|
155
|
+
for (let commandPart of commandParts) {
|
|
156
|
+
if (commandPart == "c") commandPart = "console"
|
|
157
|
+
if (commandPart == "d") commandPart = "destroy"
|
|
158
|
+
if (commandPart == "g") commandPart = "generate"
|
|
159
|
+
if (commandPart == "s") commandPart = "server"
|
|
160
|
+
|
|
161
|
+
filePath += `/${commandPart}`
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const filePaths = []
|
|
165
|
+
|
|
166
|
+
filePaths.push(`${filePath}/index.js`)
|
|
167
|
+
filePath += ".js"
|
|
168
|
+
filePaths.push(filePath)
|
|
169
|
+
|
|
170
|
+
const commandsRequireContext = await this._findCommandsRequireContext()
|
|
171
|
+
let commandClassImport
|
|
172
|
+
|
|
173
|
+
for (const aFilePath of filePaths) {
|
|
174
|
+
commandClassImport = commandsRequireContext(aFilePath)
|
|
175
|
+
|
|
176
|
+
if (commandClassImport) {
|
|
177
|
+
break
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (!commandClassImport) {
|
|
182
|
+
throw new Error(`Unknown command: ${commandParts.join(":")}. Possible commands: ${commandsRequireContext.keys()}`)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const CommandClass = commandClassImport.default
|
|
186
|
+
|
|
187
|
+
return CommandClass
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Runs find migrations.
|
|
192
|
+
* @returns {Promise<Array<import("./base.js").MigrationObjectType>>} - Resolves with the migrations.
|
|
193
|
+
*/
|
|
194
|
+
async findMigrations() {
|
|
195
|
+
const migrationsRequireContext = await this.migrationsRequireContext()
|
|
196
|
+
/**
|
|
197
|
+
* Migrations.
|
|
198
|
+
@type {Array<import("./base.js").MigrationObjectType | null>} */
|
|
199
|
+
const migrations = migrationsRequireContext
|
|
200
|
+
.keys()
|
|
201
|
+
.map((file) => {
|
|
202
|
+
// "13,14" because somes "require-context"-npm-module deletes first character!?
|
|
203
|
+
const match = file.match(/(\d{13,14})-(.+)\.js$/)
|
|
204
|
+
|
|
205
|
+
if (!match) return null
|
|
206
|
+
|
|
207
|
+
// Fix require-context-npm-module deletes first character
|
|
208
|
+
let fileName = file
|
|
209
|
+
let dateNumber = match[1]
|
|
210
|
+
|
|
211
|
+
if (dateNumber.length == 13) {
|
|
212
|
+
dateNumber = `2${dateNumber}`
|
|
213
|
+
fileName = `2${fileName}`
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Parse regex
|
|
217
|
+
const date = parseInt(dateNumber)
|
|
218
|
+
const migrationName = match[2]
|
|
219
|
+
const migrationClassName = inflection.camelize(migrationName.replaceAll("-", "_"))
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
file: fileName,
|
|
223
|
+
fullPath: file,
|
|
224
|
+
date,
|
|
225
|
+
migrationClassName
|
|
226
|
+
}
|
|
227
|
+
})
|
|
228
|
+
.filter(isMigrationObject)
|
|
229
|
+
/**
|
|
230
|
+
* Files.
|
|
231
|
+
@type {import("./base.js").MigrationObjectType[]} */
|
|
232
|
+
const files = /**
|
|
233
|
+
* Narrows the runtime value to the documented type.
|
|
234
|
+
@type {import("./base.js").MigrationObjectType[]} */ (migrations)
|
|
235
|
+
|
|
236
|
+
files.sort((migration1, migration2) => migration1.date - migration2.date)
|
|
237
|
+
|
|
238
|
+
return files
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Runs import test files.
|
|
243
|
+
* @param {string[]} testFiles - Test files.
|
|
244
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
245
|
+
*/
|
|
246
|
+
async importTestFiles(testFiles) {
|
|
247
|
+
const testFilesRequireContext = await this.testFilesRequireContext()
|
|
248
|
+
const requireKeys = testFilesRequireContext.keys()
|
|
249
|
+
const normalizedKeys = requireKeys.map((key) => ({
|
|
250
|
+
key,
|
|
251
|
+
normalized: key.replace(/\\/g, "/").replace(/^\.\//, "")
|
|
252
|
+
}))
|
|
253
|
+
|
|
254
|
+
for (const testFile of testFiles) {
|
|
255
|
+
const normalizedFile = testFile.replace(/\\/g, "/")
|
|
256
|
+
const matchedKey = normalizedKeys.find((entry) => normalizedFile.endsWith(entry.normalized))?.key
|
|
257
|
+
|
|
258
|
+
if (!matchedKey) {
|
|
259
|
+
throw new Error(`Test file ${testFile} was not found in the provided require context`)
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const imported = testFilesRequireContext(matchedKey)
|
|
263
|
+
|
|
264
|
+
if (imported && typeof imported == "object" && "then" in imported && typeof imported.then == "function") {
|
|
265
|
+
await imported
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Require migration.
|
|
272
|
+
* @param {string} filePath - File path.
|
|
273
|
+
* @returns {Promise<typeof import("../database/migration/index.js").default>} - Resolves with the require migration.
|
|
274
|
+
*/
|
|
275
|
+
requireMigration = async (filePath) => {
|
|
276
|
+
if (!filePath) throw new Error("filePath is required")
|
|
277
|
+
|
|
278
|
+
const migrationsRequireContext = await this.migrationsRequireContext()
|
|
279
|
+
const migrationImport = migrationsRequireContext(filePath)
|
|
280
|
+
|
|
281
|
+
if (!migrationImport) throw new Error(`Migration file ${filePath} not found`)
|
|
282
|
+
|
|
283
|
+
const migrationImportDefault = migrationImport.default
|
|
284
|
+
|
|
285
|
+
if (!migrationImportDefault) throw new Error("Migration file must export a default migration class")
|
|
286
|
+
if (typeof migrationImportDefault !== "function") throw new Error("Migration default export isn't a function (should be a class which is a function in JS)")
|
|
287
|
+
|
|
288
|
+
return migrationImportDefault
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Runs after migrations.
|
|
293
|
+
* @param {object} args - Options object.
|
|
294
|
+
* @param {Record<string, import("../database/drivers/base.js").default>} args.dbs - Dbs.
|
|
295
|
+
* @param {"migration" | "schemaDump"} [args.reason] - Why the structure hook is running.
|
|
296
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
297
|
+
*/
|
|
298
|
+
async afterMigrations({dbs}) {
|
|
299
|
+
const structureSql = await this._sqliteStructureSql({dbs})
|
|
300
|
+
|
|
301
|
+
if (!structureSql) return
|
|
302
|
+
|
|
303
|
+
await this.logger.debug(() => ["structure.sql:", structureSql])
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Runs sqlite structure sql.
|
|
308
|
+
* @param {object} args - Options object.
|
|
309
|
+
* @param {Record<string, import("../database/drivers/base.js").default>} args.dbs - Dbs.
|
|
310
|
+
* @returns {Promise<string | null>} - Resolves with SQL string.
|
|
311
|
+
*/
|
|
312
|
+
async _sqliteStructureSql({dbs}) {
|
|
313
|
+
const sqliteIdentifiers = Object.keys(dbs)
|
|
314
|
+
.filter((identifier) => this.getConfiguration().getDatabaseType(identifier) == "sqlite")
|
|
315
|
+
|
|
316
|
+
if (sqliteIdentifiers.length == 0) return null
|
|
317
|
+
|
|
318
|
+
const sections = []
|
|
319
|
+
|
|
320
|
+
for (const identifier of sqliteIdentifiers) {
|
|
321
|
+
const db = dbs[identifier]
|
|
322
|
+
const structureSql = typeof db.structureSql === "function" ? await db.structureSql() : null
|
|
323
|
+
const trimmedSql = structureSql?.trimEnd()
|
|
324
|
+
|
|
325
|
+
if (!trimmedSql) continue
|
|
326
|
+
|
|
327
|
+
if (sqliteIdentifiers.length > 1) {
|
|
328
|
+
sections.push(`-- ${identifier}`)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
sections.push(trimmedSql)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (sections.length == 0) return null
|
|
335
|
+
|
|
336
|
+
return `${sections.join("\n\n")}\n`
|
|
337
|
+
}
|
|
338
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import BaseCommand from "../../../../cli/base-command.js"
|
|
2
|
+
import BackgroundJobsMain from "../../../../background-jobs/main.js"
|
|
3
|
+
|
|
4
|
+
export default class BackgroundJobsMainCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
const main = new BackgroundJobsMain({configuration: this.getConfiguration()})
|
|
7
|
+
await main.start()
|
|
8
|
+
|
|
9
|
+
console.log(`Background jobs main listening on ${main.host}:${main.getPort()}`)
|
|
10
|
+
|
|
11
|
+
await new Promise((resolve) => {
|
|
12
|
+
const shutdown = async () => {
|
|
13
|
+
await main.stop()
|
|
14
|
+
resolve(undefined)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
process.once("SIGINT", shutdown)
|
|
18
|
+
process.once("SIGTERM", shutdown)
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import BaseCommand from "../../../../cli/base-command.js"
|
|
2
|
+
import runJobPayload from "../../../../background-jobs/job-runner.js"
|
|
3
|
+
|
|
4
|
+
export default class BackgroundJobsRunnerCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
const payload = process.env.VELOCIOUS_JOB_PAYLOAD
|
|
7
|
+
|
|
8
|
+
if (!payload) throw new Error("Missing VELOCIOUS_JOB_PAYLOAD")
|
|
9
|
+
|
|
10
|
+
// A graceful worker shutdown (e.g. a deploy draining the old release)
|
|
11
|
+
// SIGTERMs this spawned runner to reap it. Exit promptly so it does not
|
|
12
|
+
// linger as an orphan running against deleted release code; the OS releases
|
|
13
|
+
// the runner's DB/beacon sockets on exit and main's orphan sweep reclaims
|
|
14
|
+
// the in-flight job.
|
|
15
|
+
for (const signal of ["SIGTERM", "SIGINT"]) {
|
|
16
|
+
process.once(signal, () => process.exit(0))
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const decoded = Buffer.from(payload, "base64").toString("utf8")
|
|
20
|
+
const jobPayload = JSON.parse(decoded)
|
|
21
|
+
|
|
22
|
+
await runJobPayload(jobPayload)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import BaseCommand from "../../../../cli/base-command.js"
|
|
2
|
+
import BackgroundJobsWorker from "../../../../background-jobs/worker.js"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the shutdown drain timeout from
|
|
6
|
+
* `VELOCIOUS_BACKGROUND_JOBS_WORKER_SHUTDOWN_TIMEOUT_MS`:
|
|
7
|
+
* - unset / "indefinite" / "0" → indefinite: wait for in-flight jobs to
|
|
8
|
+
* finish and never kill a process runner. This is the default so a graceful
|
|
9
|
+
* stop (e.g. a deploy) does not interrupt long-running jobs such as builds.
|
|
10
|
+
* - positive integer → that many milliseconds, after which any process runner
|
|
11
|
+
* still in flight is terminated (SIGTERM, then SIGKILL) instead of orphaned.
|
|
12
|
+
*
|
|
13
|
+
* When a finite cap is used it must be shorter than the supervisor's
|
|
14
|
+
* graceful-stop window so the worker reaps its own children before being
|
|
15
|
+
* force-killed.
|
|
16
|
+
* @returns {number | undefined} - Timeout in ms, or undefined for indefinite.
|
|
17
|
+
*/
|
|
18
|
+
function resolveShutdownTimeoutMs() {
|
|
19
|
+
const raw = (process.env.VELOCIOUS_BACKGROUND_JOBS_WORKER_SHUTDOWN_TIMEOUT_MS || "").trim().toLowerCase()
|
|
20
|
+
|
|
21
|
+
if (!raw || raw === "indefinite" || raw === "0") return undefined
|
|
22
|
+
|
|
23
|
+
const parsed = Number.parseInt(raw, 10)
|
|
24
|
+
|
|
25
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default class BackgroundJobsWorkerCommand extends BaseCommand {
|
|
29
|
+
async execute() {
|
|
30
|
+
const worker = new BackgroundJobsWorker({configuration: this.getConfiguration()})
|
|
31
|
+
await worker.start()
|
|
32
|
+
|
|
33
|
+
console.log("Background jobs worker connected")
|
|
34
|
+
|
|
35
|
+
const timeoutMs = resolveShutdownTimeoutMs()
|
|
36
|
+
|
|
37
|
+
await new Promise((resolve) => {
|
|
38
|
+
const shutdown = async () => {
|
|
39
|
+
await worker.stop({timeoutMs})
|
|
40
|
+
resolve(undefined)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
process.once("SIGINT", shutdown)
|
|
44
|
+
process.once("SIGTERM", shutdown)
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import BaseCommand from "../../../../cli/base-command.js"
|
|
2
|
+
import BeaconServer from "../../../../beacon/server.js"
|
|
3
|
+
|
|
4
|
+
export default class BeaconCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
const beacon = new BeaconServer({configuration: this.getConfiguration()})
|
|
7
|
+
await beacon.start()
|
|
8
|
+
|
|
9
|
+
console.log(`Beacon listening on ${beacon.host}:${beacon.getPort()}`)
|
|
10
|
+
|
|
11
|
+
await new Promise((resolve) => {
|
|
12
|
+
const shutdown = async () => {
|
|
13
|
+
await beacon.stop()
|
|
14
|
+
resolve(undefined)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
process.once("SIGINT", shutdown)
|
|
18
|
+
process.once("SIGTERM", shutdown)
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CliCommandContext type.
|
|
3
|
+
* @typedef {object} CliCommandContext
|
|
4
|
+
* @property {import("../../../../configuration.js").default} configuration - Configuration instance.
|
|
5
|
+
* @property {import("../../../../database/drivers/base.js").default | undefined} db - Default database connection.
|
|
6
|
+
* @property {Record<string, import("../../../../database/drivers/base.js").default>} dbs - Database connections keyed by identifier.
|
|
7
|
+
* @property {string[]} args - CLI args after command-specific leading arguments.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Runs build cli command context.
|
|
12
|
+
* @param {import("../../../../cli/base-command.js").default} command - Command building the context.
|
|
13
|
+
* @param {number} argsOffset - Number of process args to omit.
|
|
14
|
+
* @returns {CliCommandContext} - Runtime context passed to CLI command scripts.
|
|
15
|
+
*/
|
|
16
|
+
export default function buildCliCommandContext(command, argsOffset) {
|
|
17
|
+
const configuration = command.getConfiguration()
|
|
18
|
+
const dbs = configuration.getCurrentConnections()
|
|
19
|
+
const identifiers = Object.keys(dbs)
|
|
20
|
+
/**
|
|
21
|
+
* Process args.
|
|
22
|
+
@type {string[]} */
|
|
23
|
+
const processArgs = command.processArgs || []
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
configuration,
|
|
27
|
+
db: dbs.default || (identifiers.length > 0 ? dbs[identifiers[0]] : undefined),
|
|
28
|
+
dbs,
|
|
29
|
+
args: processArgs.slice(argsOffset)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Application from "../../../../application.js"
|
|
2
|
+
import BaseCommand from "../../../../cli/base-command.js"
|
|
3
|
+
import path from "node:path"
|
|
4
|
+
import repl from "node:repl"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Defines this typedef.
|
|
8
|
+
@typedef {{application: import("../../../../application.js").default, configuration: import("../../../../configuration.js").default}} ConsoleContextArgs */
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Runs build console context.
|
|
12
|
+
* @param {ConsoleContextArgs} args - Options object.
|
|
13
|
+
* @returns {Record<string, ?>} - The console context.
|
|
14
|
+
*/
|
|
15
|
+
function buildConsoleContext({application, configuration}) {
|
|
16
|
+
/**
|
|
17
|
+
* Dbs.
|
|
18
|
+
@type {Record<string, import("../../../../database/drivers/base.js").default>} */
|
|
19
|
+
const dbs = configuration.getCurrentConnections()
|
|
20
|
+
|
|
21
|
+
for (const identifier of configuration.getDatabaseIdentifiers()) {
|
|
22
|
+
if (dbs[identifier]) continue
|
|
23
|
+
|
|
24
|
+
const pool = configuration.getDatabasePool(identifier)
|
|
25
|
+
const poolWithGlobal = /**
|
|
26
|
+
* Narrows the runtime value to the documented type.
|
|
27
|
+
@type {{getGlobalConnection?: () => import("../../../../database/drivers/base.js").default | undefined}} */ (pool)
|
|
28
|
+
const globalConnection = poolWithGlobal.getGlobalConnection?.()
|
|
29
|
+
|
|
30
|
+
if (globalConnection) {
|
|
31
|
+
dbs[identifier] = globalConnection
|
|
32
|
+
continue
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
dbs[identifier] = pool.getCurrentConnection()
|
|
37
|
+
} catch (error) {
|
|
38
|
+
if (configuration.isMissingCurrentConnectionError(error)) {
|
|
39
|
+
// Ignore missing connections here; they can be established lazily.
|
|
40
|
+
} else {
|
|
41
|
+
throw error
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const dbIdentifiers = Object.keys(dbs)
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
app: application,
|
|
50
|
+
application,
|
|
51
|
+
configuration,
|
|
52
|
+
db: dbs.default || (dbIdentifiers.length > 0 ? dbs[dbIdentifiers[0]] : undefined),
|
|
53
|
+
dbs,
|
|
54
|
+
models: {...configuration.modelClasses}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Runs assign console context.
|
|
60
|
+
* @param {object} args - Options object.
|
|
61
|
+
* @param {Record<string, ?>} args.context - The base context.
|
|
62
|
+
* @param {import("node:repl").REPLServer} args.replServer - The REPL server.
|
|
63
|
+
* @returns {void} - No return value.
|
|
64
|
+
*/
|
|
65
|
+
function assignConsoleContext({context, replServer}) {
|
|
66
|
+
Object.assign(replServer.context, context)
|
|
67
|
+
|
|
68
|
+
const modelClasses = /**
|
|
69
|
+
* Narrows the runtime value to the documented type.
|
|
70
|
+
@type {Record<string, typeof import("../../../../database/record/index.js").default>} */ (
|
|
71
|
+
context.models || {}
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
for (const [name, modelClass] of Object.entries(modelClasses)) {
|
|
75
|
+
replServer.context[name] = modelClass
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Runs start console repl.
|
|
81
|
+
* @param {object} args - Options object.
|
|
82
|
+
* @param {import("../../../../configuration.js").default} args.configuration - Configuration instance.
|
|
83
|
+
* @param {Record<string, ?>} args.context - REPL context.
|
|
84
|
+
* @returns {Promise<void>} - Resolves when the console exits.
|
|
85
|
+
*/
|
|
86
|
+
async function startConsoleRepl({configuration, context}) {
|
|
87
|
+
const environment = configuration.getEnvironment()
|
|
88
|
+
|
|
89
|
+
console.log(`Loading ${environment} environment (Velocious console)`)
|
|
90
|
+
|
|
91
|
+
const replServer = repl.start({
|
|
92
|
+
prompt: "velocious> "
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
assignConsoleContext({context, replServer})
|
|
96
|
+
replServer.on("reset", () => {
|
|
97
|
+
assignConsoleContext({context, replServer})
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
const historyPath = path.join(configuration.getDirectory(), ".velocious-console-history")
|
|
101
|
+
|
|
102
|
+
await new Promise((resolve, reject) => {
|
|
103
|
+
replServer.setupHistory(historyPath, (error) => {
|
|
104
|
+
if (error) {
|
|
105
|
+
reject(error)
|
|
106
|
+
} else {
|
|
107
|
+
resolve(undefined)
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
await new Promise((resolve) => {
|
|
113
|
+
replServer.on("exit", () => {
|
|
114
|
+
resolve(undefined)
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Velocious console command. */
|
|
121
|
+
export default class VelociousCliCommandsConsole extends BaseCommand{
|
|
122
|
+
/**
|
|
123
|
+
* Runs execute.
|
|
124
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
125
|
+
*/
|
|
126
|
+
async execute() {
|
|
127
|
+
const configuration = this.getConfiguration()
|
|
128
|
+
const application = new Application({
|
|
129
|
+
configuration,
|
|
130
|
+
type: "console"
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
await application.initialize()
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
await configuration.ensureGlobalConnections()
|
|
137
|
+
|
|
138
|
+
const context = buildConsoleContext({application, configuration})
|
|
139
|
+
|
|
140
|
+
if (this.cli.getTesting()) {
|
|
141
|
+
return {modelNames: Object.keys(context.models || {})}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return await startConsoleRepl({configuration, context})
|
|
145
|
+
} finally {
|
|
146
|
+
await configuration.closeDatabaseConnections()
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import BaseCommand from "../../../../../../cli/base-command.js"
|
|
2
|
+
import fileExists from "../../../../../../utils/file-exists.js"
|
|
3
|
+
import path from "path"
|
|
4
|
+
|
|
5
|
+
/** Node CLI command for dumping DB structure SQL files. */
|
|
6
|
+
export default class DbSchemaDump extends BaseCommand {
|
|
7
|
+
/**
|
|
8
|
+
* Runs execute.
|
|
9
|
+
@returns {Promise<void>} */
|
|
10
|
+
async execute() {
|
|
11
|
+
await this.getConfiguration().ensureConnections({name: "DB schema dump"}, async (dbs) => {
|
|
12
|
+
const shouldGenerate = await this.shouldGenerateStructureSql({dbs})
|
|
13
|
+
|
|
14
|
+
if (!shouldGenerate) return
|
|
15
|
+
|
|
16
|
+
await this.getEnvironmentHandler().afterMigrations({dbs, reason: "schemaDump"})
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Runs should generate structure sql.
|
|
22
|
+
* @param {object} args - Options object.
|
|
23
|
+
* @param {Record<string, import("../../../../../../database/drivers/base.js").default>} args.dbs - Active DB connections by identifier.
|
|
24
|
+
* @returns {Promise<boolean>} - Whether structure SQL should be generated.
|
|
25
|
+
*/
|
|
26
|
+
async shouldGenerateStructureSql({dbs}) {
|
|
27
|
+
if (!this.getConfiguration().shouldWriteStructureSql({reason: "schemaDump"})) return false
|
|
28
|
+
|
|
29
|
+
const dbDir = path.join(this.directory(), "db")
|
|
30
|
+
|
|
31
|
+
for (const identifier of Object.keys(dbs)) {
|
|
32
|
+
const db = dbs[identifier]
|
|
33
|
+
|
|
34
|
+
if (typeof db.structureSql !== "function") continue
|
|
35
|
+
|
|
36
|
+
const structureFilePath = path.join(dbDir, `structure-${identifier}.sql`)
|
|
37
|
+
|
|
38
|
+
if (!await fileExists(structureFilePath)) return true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
}
|