velocious 1.0.431 → 1.0.433
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/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/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 +4119 -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 +939 -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/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/application.js +187 -214
- package/build/src/authorization/ability.js +250 -297
- package/build/src/authorization/base-resource.js +120 -136
- package/build/src/background-jobs/client.js +43 -47
- package/build/src/background-jobs/cron-expression.js +127 -166
- package/build/src/background-jobs/forked-runner-child.js +37 -47
- package/build/src/background-jobs/job-record.js +8 -10
- package/build/src/background-jobs/job-registry.js +72 -84
- package/build/src/background-jobs/job-runner.js +74 -81
- package/build/src/background-jobs/job.js +62 -72
- package/build/src/background-jobs/json-socket.js +65 -70
- package/build/src/background-jobs/main.js +841 -900
- package/build/src/background-jobs/normalize-error.js +12 -11
- package/build/src/background-jobs/scheduler.js +205 -247
- package/build/src/background-jobs/socket-request.js +60 -65
- package/build/src/background-jobs/status-reporter.js +86 -96
- package/build/src/background-jobs/store.js +862 -980
- package/build/src/background-jobs/types.js +2 -3
- package/build/src/background-jobs/web/authorization.js +38 -50
- package/build/src/background-jobs/web/controller.js +232 -268
- package/build/src/background-jobs/web/index.js +36 -40
- package/build/src/background-jobs/web/path-matcher.js +45 -48
- package/build/src/background-jobs/web/registry.js +9 -14
- package/build/src/background-jobs/worker.js +585 -639
- package/build/src/beacon/client.js +264 -293
- package/build/src/beacon/in-process-broker.js +20 -25
- package/build/src/beacon/in-process-client.js +104 -116
- package/build/src/beacon/server.js +110 -126
- package/build/src/beacon/types.js +2 -8
- package/build/src/cli/base-command.js +49 -57
- package/build/src/cli/browser-cli.js +37 -42
- 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 +71 -76
- package/build/src/cli/commands/db/create.js +53 -61
- package/build/src/cli/commands/db/drop.js +62 -71
- package/build/src/cli/commands/db/migrate.js +13 -15
- package/build/src/cli/commands/db/reset.js +16 -19
- package/build/src/cli/commands/db/rollback.js +12 -13
- 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 +32 -35
- package/build/src/cli/commands/db/tenants/create.js +26 -29
- package/build/src/cli/commands/db/tenants/migrate.js +40 -44
- 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 +7 -9
- 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 +6 -7
- package/build/src/cli/index.js +127 -141
- package/build/src/cli/tenant-database-command-helper.js +154 -185
- package/build/src/cli/use-browser-cli.js +15 -20
- package/build/src/configuration-resolver.js +47 -54
- package/build/src/configuration-types.d.ts +5 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +3 -54
- package/build/src/configuration.js +2240 -2547
- package/build/src/controller.js +363 -407
- package/build/src/current-configuration.js +9 -12
- package/build/src/current.js +70 -75
- package/build/src/database/annotations-async-hooks.js +16 -22
- package/build/src/database/annotations.js +12 -18
- package/build/src/database/drivers/base-column.js +155 -179
- package/build/src/database/drivers/base-columns-index.js +69 -78
- package/build/src/database/drivers/base-foreign-key.js +89 -101
- package/build/src/database/drivers/base-table.js +124 -149
- package/build/src/database/drivers/base.js +1306 -1489
- package/build/src/database/drivers/mssql/column.js +39 -50
- package/build/src/database/drivers/mssql/columns-index.js +2 -3
- package/build/src/database/drivers/mssql/connect-connection.js +11 -9
- package/build/src/database/drivers/mssql/foreign-key.js +8 -9
- package/build/src/database/drivers/mssql/index.js +507 -587
- package/build/src/database/drivers/mssql/options.js +68 -75
- package/build/src/database/drivers/mssql/query-parser.js +2 -3
- package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-database.js +24 -31
- 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 +14 -16
- package/build/src/database/drivers/mssql/sql/drop-database.js +24 -31
- 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 +24 -28
- package/build/src/database/drivers/mssql/sql/upsert.js +18 -20
- package/build/src/database/drivers/mssql/structure-sql.js +102 -114
- package/build/src/database/drivers/mssql/table.js +81 -96
- package/build/src/database/drivers/mysql/column.js +75 -92
- package/build/src/database/drivers/mysql/columns-index.js +16 -19
- package/build/src/database/drivers/mysql/foreign-key.js +8 -9
- package/build/src/database/drivers/mysql/index.js +396 -457
- package/build/src/database/drivers/mysql/options.js +26 -30
- package/build/src/database/drivers/mysql/query-parser.js +2 -3
- package/build/src/database/drivers/mysql/query.js +26 -29
- package/build/src/database/drivers/mysql/sql/alter-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/create-database.js +23 -28
- package/build/src/database/drivers/mysql/sql/create-index.js +2 -3
- package/build/src/database/drivers/mysql/sql/create-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/delete.js +14 -17
- package/build/src/database/drivers/mysql/sql/drop-database.js +2 -3
- package/build/src/database/drivers/mysql/sql/drop-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/insert.js +2 -3
- package/build/src/database/drivers/mysql/sql/update.js +24 -29
- package/build/src/database/drivers/mysql/sql/upsert.js +8 -10
- package/build/src/database/drivers/mysql/structure-sql.js +79 -88
- package/build/src/database/drivers/mysql/table.js +83 -98
- package/build/src/database/drivers/pgsql/column.js +56 -72
- package/build/src/database/drivers/pgsql/columns-index.js +2 -3
- package/build/src/database/drivers/pgsql/foreign-key.js +8 -9
- package/build/src/database/drivers/pgsql/index.js +377 -438
- package/build/src/database/drivers/pgsql/options.js +25 -28
- package/build/src/database/drivers/pgsql/query-parser.js +2 -3
- package/build/src/database/drivers/pgsql/sql/alter-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/create-database.js +19 -23
- package/build/src/database/drivers/pgsql/sql/create-index.js +2 -3
- package/build/src/database/drivers/pgsql/sql/create-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/delete.js +14 -17
- package/build/src/database/drivers/pgsql/sql/drop-database.js +2 -3
- package/build/src/database/drivers/pgsql/sql/drop-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/insert.js +2 -3
- package/build/src/database/drivers/pgsql/sql/update.js +24 -29
- package/build/src/database/drivers/pgsql/sql/upsert.js +9 -11
- package/build/src/database/drivers/pgsql/structure-sql.js +108 -120
- package/build/src/database/drivers/pgsql/table.js +60 -77
- package/build/src/database/drivers/sqlite/base.js +405 -478
- package/build/src/database/drivers/sqlite/column.js +54 -69
- package/build/src/database/drivers/sqlite/columns-index.js +22 -27
- package/build/src/database/drivers/sqlite/connection-sql-js.js +35 -42
- package/build/src/database/drivers/sqlite/foreign-key.js +18 -21
- package/build/src/database/drivers/sqlite/index.js +330 -373
- package/build/src/database/drivers/sqlite/index.native.js +55 -64
- package/build/src/database/drivers/sqlite/index.web.js +69 -87
- package/build/src/database/drivers/sqlite/options.js +25 -28
- package/build/src/database/drivers/sqlite/query-parser.js +2 -3
- package/build/src/database/drivers/sqlite/query.js +21 -24
- package/build/src/database/drivers/sqlite/query.native.js +20 -25
- package/build/src/database/drivers/sqlite/query.web.js +30 -37
- package/build/src/database/drivers/sqlite/sql/alter-table.js +159 -179
- package/build/src/database/drivers/sqlite/sql/create-index.js +2 -3
- package/build/src/database/drivers/sqlite/sql/create-table.js +2 -3
- package/build/src/database/drivers/sqlite/sql/delete.js +17 -22
- package/build/src/database/drivers/sqlite/sql/drop-table.js +2 -3
- package/build/src/database/drivers/sqlite/sql/insert.js +2 -3
- package/build/src/database/drivers/sqlite/sql/update.js +24 -29
- package/build/src/database/drivers/sqlite/sql/upsert.js +9 -11
- package/build/src/database/drivers/sqlite/structure-sql.js +49 -52
- package/build/src/database/drivers/sqlite/table-rebuilder.js +62 -75
- package/build/src/database/drivers/sqlite/table.js +102 -125
- package/build/src/database/drivers/structure-sql/utils.js +14 -17
- package/build/src/database/handler.js +9 -10
- package/build/src/database/initializer-from-require-context.js +76 -87
- package/build/src/database/migration/index.js +332 -395
- package/build/src/database/migrator/files-finder.js +40 -50
- package/build/src/database/migrator/types.js +2 -30
- package/build/src/database/migrator.js +454 -526
- package/build/src/database/pool/async-tracked-multi-connection.js +997 -1147
- package/build/src/database/pool/base-methods-forward.js +40 -43
- package/build/src/database/pool/base.js +298 -343
- package/build/src/database/pool/single-multi-use.js +93 -110
- package/build/src/database/query/alter-table-base.js +84 -99
- package/build/src/database/query/base.js +39 -46
- package/build/src/database/query/create-database-base.js +25 -30
- package/build/src/database/query/create-index-base.js +75 -94
- package/build/src/database/query/create-table-base.js +151 -193
- package/build/src/database/query/delete-base.js +14 -16
- package/build/src/database/query/drop-database-base.js +23 -28
- package/build/src/database/query/drop-table-base.js +42 -53
- package/build/src/database/query/from-base.js +30 -33
- package/build/src/database/query/from-plain.js +11 -13
- package/build/src/database/query/from-table.js +13 -15
- package/build/src/database/query/index.js +410 -472
- package/build/src/database/query/insert-base.js +143 -164
- package/build/src/database/query/join-base.js +35 -40
- package/build/src/database/query/join-object.js +128 -153
- package/build/src/database/query/join-plain.js +13 -15
- package/build/src/database/query/join-tracker.js +76 -90
- package/build/src/database/query/model-class-query.js +1134 -1370
- package/build/src/database/query/order-base.js +27 -30
- package/build/src/database/query/order-column.js +44 -53
- package/build/src/database/query/order-plain.js +20 -24
- package/build/src/database/query/preloader/belongs-to.js +210 -258
- package/build/src/database/query/preloader/ensure-model-class-initialized.js +8 -9
- package/build/src/database/query/preloader/has-many.js +240 -301
- package/build/src/database/query/preloader/has-one.js +91 -117
- package/build/src/database/query/preloader/selection.js +117 -129
- package/build/src/database/query/preloader.js +160 -185
- package/build/src/database/query/query-data.js +157 -201
- package/build/src/database/query/select-base.js +25 -27
- package/build/src/database/query/select-plain.js +13 -15
- package/build/src/database/query/select-table-and-column.js +21 -25
- package/build/src/database/query/update-base.js +35 -38
- package/build/src/database/query/upsert-base.js +93 -100
- package/build/src/database/query/where-base.js +32 -35
- package/build/src/database/query/where-combinator.js +25 -28
- package/build/src/database/query/where-hash.js +61 -68
- package/build/src/database/query/where-model-class-hash.js +414 -469
- package/build/src/database/query/where-not.js +18 -20
- package/build/src/database/query/where-plain.js +15 -17
- package/build/src/database/query/with-count.js +125 -159
- package/build/src/database/query-parser/base-query-parser.js +32 -37
- package/build/src/database/query-parser/from-parser.js +36 -45
- package/build/src/database/query-parser/group-parser.js +42 -50
- package/build/src/database/query-parser/joins-parser.js +28 -33
- package/build/src/database/query-parser/limit-parser.js +67 -70
- package/build/src/database/query-parser/options.js +75 -82
- package/build/src/database/query-parser/order-parser.js +36 -40
- package/build/src/database/query-parser/select-parser.js +49 -60
- package/build/src/database/query-parser/where-parser.js +36 -41
- package/build/src/database/record/acts-as-list.js +235 -273
- package/build/src/database/record/attachments/download.js +44 -45
- package/build/src/database/record/attachments/handle.js +141 -161
- package/build/src/database/record/attachments/normalize-input.js +128 -138
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +77 -91
- package/build/src/database/record/attachments/storage-drivers/native.js +112 -121
- package/build/src/database/record/attachments/storage-drivers/s3.js +177 -208
- package/build/src/database/record/attachments/store.js +467 -539
- package/build/src/database/record/index.d.ts +109 -25
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3502 -3898
- package/build/src/database/record/instance-relationships/base.js +234 -268
- package/build/src/database/record/instance-relationships/belongs-to.js +58 -73
- package/build/src/database/record/instance-relationships/has-many.js +225 -264
- package/build/src/database/record/instance-relationships/has-one.js +85 -105
- package/build/src/database/record/record-not-found-error.js +3 -2
- package/build/src/database/record/relationships/base.js +144 -166
- package/build/src/database/record/relationships/belongs-to.js +44 -51
- package/build/src/database/record/relationships/has-many.js +32 -40
- package/build/src/database/record/relationships/has-one.js +32 -40
- package/build/src/database/record/state-machine.js +156 -208
- package/build/src/database/record/user-module.js +32 -38
- package/build/src/database/record/validators/base.js +22 -24
- package/build/src/database/record/validators/format.js +36 -46
- package/build/src/database/record/validators/presence.js +18 -20
- package/build/src/database/record/validators/uniqueness.js +99 -117
- package/build/src/database/table-data/index.js +199 -231
- package/build/src/database/table-data/table-column.js +338 -382
- package/build/src/database/table-data/table-foreign-key.js +57 -66
- package/build/src/database/table-data/table-index.js +29 -36
- package/build/src/database/table-data/table-reference.js +10 -10
- package/build/src/database/use-database.js +32 -40
- package/build/src/environment-handlers/base.js +484 -544
- package/build/src/environment-handlers/browser.js +241 -294
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +16 -19
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +18 -21
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +22 -29
- package/build/src/environment-handlers/node/cli/commands/beacon.js +16 -19
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +14 -15
- package/build/src/environment-handlers/node/cli/commands/console.js +99 -120
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +34 -39
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +57 -63
- package/build/src/environment-handlers/node/cli/commands/db/seed.js +51 -63
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +32 -40
- 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 +326 -358
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +10 -10
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +729 -844
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +34 -38
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +34 -38
- package/build/src/environment-handlers/node/cli/commands/init.js +56 -61
- package/build/src/environment-handlers/node/cli/commands/routes.js +51 -59
- package/build/src/environment-handlers/node/cli/commands/run-script.js +54 -68
- package/build/src/environment-handlers/node/cli/commands/runner.js +56 -74
- package/build/src/environment-handlers/node/cli/commands/server.js +93 -106
- package/build/src/environment-handlers/node/cli/commands/test.js +97 -113
- package/build/src/environment-handlers/node.js +753 -874
- package/build/src/error-logger.js +22 -21
- package/build/src/frontend-model-controller.js +2791 -3291
- package/build/src/frontend-model-resource/base-resource.d.ts +8 -3
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +770 -865
- package/build/src/frontend-models/base.js +3136 -3593
- package/build/src/frontend-models/clear-pending-debounced-callback.js +7 -8
- package/build/src/frontend-models/event-hook-models.js +16 -21
- package/build/src/frontend-models/model-registry.js +9 -11
- package/build/src/frontend-models/outgoing-event-buffer.js +10 -17
- package/build/src/frontend-models/preloader.js +131 -149
- package/build/src/frontend-models/query.js +1557 -1855
- package/build/src/frontend-models/resource-config-validation.js +27 -37
- package/build/src/frontend-models/resource-definition.d.ts +6 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +237 -291
- package/build/src/frontend-models/transport-serialization.js +203 -266
- package/build/src/frontend-models/use-created-event.js +5 -7
- package/build/src/frontend-models/use-destroyed-event.js +80 -93
- package/build/src/frontend-models/use-model-class-event.js +79 -91
- package/build/src/frontend-models/use-updated-event.js +84 -97
- package/build/src/frontend-models/websocket-channel.js +381 -441
- package/build/src/frontend-models/websocket-publishers.js +142 -175
- package/build/src/http-client/header.js +13 -14
- package/build/src/http-client/index.js +116 -132
- package/build/src/http-client/request.js +71 -87
- package/build/src/http-client/response.js +122 -140
- package/build/src/http-client/websocket-client.js +15 -17
- package/build/src/http-server/client/index.js +409 -465
- package/build/src/http-server/client/params-to-object.js +124 -135
- package/build/src/http-server/client/request-buffer/form-data-part.js +111 -132
- package/build/src/http-server/client/request-buffer/header.js +15 -16
- package/build/src/http-server/client/request-buffer/index.js +446 -506
- package/build/src/http-server/client/request-parser.js +163 -186
- package/build/src/http-server/client/request-runner.js +226 -259
- package/build/src/http-server/client/request-timing.js +132 -151
- package/build/src/http-server/client/request.js +96 -108
- package/build/src/http-server/client/response.js +213 -235
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +25 -29
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +25 -29
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
- package/build/src/http-server/client/websocket-request.js +114 -137
- package/build/src/http-server/client/websocket-session.js +1452 -1657
- package/build/src/http-server/cookie.js +216 -236
- package/build/src/http-server/development-reloader.js +190 -221
- package/build/src/http-server/index.js +451 -525
- package/build/src/http-server/remote-address.js +38 -50
- package/build/src/http-server/server-client.js +181 -208
- package/build/src/http-server/server-lock.js +153 -167
- package/build/src/http-server/websocket-channel-subscribers.js +81 -93
- package/build/src/http-server/websocket-channel.js +104 -117
- package/build/src/http-server/websocket-connection.js +96 -104
- package/build/src/http-server/websocket-event-log-store.js +350 -404
- package/build/src/http-server/websocket-events-host.js +145 -164
- package/build/src/http-server/websocket-events.js +47 -47
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +13 -14
- package/build/src/http-server/worker-handler/in-process.js +123 -141
- package/build/src/http-server/worker-handler/index.js +313 -349
- package/build/src/http-server/worker-handler/worker-script.js +4 -5
- package/build/src/http-server/worker-handler/worker-thread.js +240 -269
- package/build/src/initializer.js +31 -36
- package/build/src/jobs/mail-delivery.js +13 -15
- package/build/src/logger/base-logger.js +24 -26
- package/build/src/logger/console-logger.js +21 -23
- package/build/src/logger/file-logger.js +29 -31
- package/build/src/logger/outputs/array-output.js +37 -42
- package/build/src/logger/outputs/console-output.js +20 -24
- package/build/src/logger/outputs/file-output.js +43 -48
- package/build/src/logger/outputs/stdout-output.js +39 -48
- package/build/src/logger.js +338 -394
- package/build/src/mailer/backends/smtp.js +134 -163
- package/build/src/mailer/base.js +211 -251
- package/build/src/mailer/delivery.js +56 -64
- package/build/src/mailer/index.js +4 -22
- package/build/src/mailer.js +4 -13
- package/build/src/plugins/sqljs-wasm-route-controller.js +42 -52
- package/build/src/plugins/sqljs-wasm-route.js +28 -38
- package/build/src/record-payload-values.js +25 -28
- package/build/src/routes/app-routes.js +12 -14
- package/build/src/routes/base-route.js +112 -130
- package/build/src/routes/basic-route.js +83 -102
- 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 +50 -63
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +66 -80
- package/build/src/routes/index.js +36 -43
- package/build/src/routes/namespace-route.js +38 -47
- package/build/src/routes/plugin-routes.js +107 -124
- package/build/src/routes/post-route.js +51 -62
- package/build/src/routes/resolver.js +422 -494
- package/build/src/routes/resource-route.js +124 -143
- package/build/src/routes/root-route.js +7 -8
- package/build/src/testing/base-expect.js +13 -14
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +329 -405
- package/build/src/testing/browser-test-app.js +23 -29
- package/build/src/testing/expect-to-change.js +41 -50
- package/build/src/testing/expect-utils.js +139 -184
- package/build/src/testing/expect.js +638 -731
- package/build/src/testing/request-client.js +70 -85
- package/build/src/testing/test-files-finder.js +285 -339
- package/build/src/testing/test-filter-parser.js +124 -155
- package/build/src/testing/test-runner.js +883 -1020
- package/build/src/testing/test-suite-splitter.js +114 -142
- package/build/src/testing/test.js +216 -256
- package/build/src/utils/backtrace-cleaner-node.js +62 -69
- package/build/src/utils/backtrace-cleaner.js +188 -216
- package/build/src/utils/ensure-error.js +7 -7
- package/build/src/utils/event-emitter.js +4 -6
- package/build/src/utils/file-exists.js +9 -10
- package/build/src/utils/format-value.js +67 -76
- package/build/src/utils/model-scope.js +27 -31
- package/build/src/utils/nest-callbacks.js +10 -13
- package/build/src/utils/plain-object.js +5 -6
- package/build/src/utils/ransack.js +448 -563
- package/build/src/utils/rest-args-error.js +5 -6
- package/build/src/utils/singularize-model-name.js +9 -11
- package/build/src/utils/split-sql-statements.js +68 -79
- package/build/src/utils/to-import-specifier.js +24 -30
- package/build/src/utils/with-tracked-stack-async-hooks.js +60 -74
- package/build/src/utils/with-tracked-stack.js +14 -18
- package/build/src/velocious-error.js +27 -30
- 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/package.json +3 -3
- package/src/configuration-types.js +1 -1
- package/src/database/record/index.js +174 -25
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +50 -21
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +5 -5
- package/src/frontend-model-resource/base-resource.js +6 -2
- package/src/frontend-models/resource-definition.js +3 -3
- package/src/frontend-models/websocket-publishers.js +6 -6
|
@@ -0,0 +1,887 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import "../database/annotations-async-hooks.js"
|
|
4
|
+
import Base from "./base.js"
|
|
5
|
+
import CliCommandsDestroyMigration from "./node/cli/commands/destroy/migration.js"
|
|
6
|
+
import CliCommandsInit from "./node/cli/commands/init.js"
|
|
7
|
+
import CliCommandsGenerateBaseModels from "./node/cli/commands/generate/base-models.js"
|
|
8
|
+
import CliCommandsGenerateFrontendModels from "./node/cli/commands/generate/frontend-models.js"
|
|
9
|
+
import CliCommandsGenerateMigration from "./node/cli/commands/generate/migration.js"
|
|
10
|
+
import CliCommandsGenerateModel from "./node/cli/commands/generate/model.js"
|
|
11
|
+
import CliCommandsRoutes from "./node/cli/commands/routes.js"
|
|
12
|
+
import CliCommandsServer from "./node/cli/commands/server.js"
|
|
13
|
+
import CliCommandsTest from "./node/cli/commands/test.js"
|
|
14
|
+
import CliCommandsBackgroundJobsMain from "./node/cli/commands/background-jobs-main.js"
|
|
15
|
+
import CliCommandsBackgroundJobsWorker from "./node/cli/commands/background-jobs-worker.js"
|
|
16
|
+
import CliCommandsBackgroundJobsRunner from "./node/cli/commands/background-jobs-runner.js"
|
|
17
|
+
import CliCommandsBeacon from "./node/cli/commands/beacon.js"
|
|
18
|
+
import CliCommandsConsole from "./node/cli/commands/console.js"
|
|
19
|
+
import CliCommandsDbSchemaDump from "./node/cli/commands/db/schema/dump.js"
|
|
20
|
+
import CliCommandsDbSchemaLoad from "./node/cli/commands/db/schema/load.js"
|
|
21
|
+
import CliCommandsDbSeed from "./node/cli/commands/db/seed.js"
|
|
22
|
+
import CliCommandsRunner from "./node/cli/commands/runner.js"
|
|
23
|
+
import CliCommandsRunScript from "./node/cli/commands/run-script.js"
|
|
24
|
+
import frontendModelCommandRouteHook from "../routes/hooks/frontend-model-command-route-hook.js"
|
|
25
|
+
import {FRAMEWORK_SOURCE_DIRECTORY} from "../utils/backtrace-cleaner-node.js"
|
|
26
|
+
import {dirname} from "path"
|
|
27
|
+
import {fileURLToPath} from "url"
|
|
28
|
+
import fs from "fs/promises"
|
|
29
|
+
import * as inflection from "inflection"
|
|
30
|
+
import path from "path"
|
|
31
|
+
import {AsyncLocalStorage as NodeAsyncLocalStorage} from "node:async_hooks"
|
|
32
|
+
import {timingSafeEqual} from "node:crypto"
|
|
33
|
+
import toImportSpecifier from "../utils/to-import-specifier.js"
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Defines this typedef.
|
|
37
|
+
@typedef {{ability?: import("../authorization/ability.js").default, offsetMinutes: number, requestTiming?: import("../http-server/client/request-timing.js").default, tenant?: ?}} TimezoneStore */
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Runs path within allowed prefixes.
|
|
41
|
+
* @param {string} filePath - Input file path.
|
|
42
|
+
* @param {string[]} allowedPathPrefixes - Allowed path prefixes.
|
|
43
|
+
* @returns {boolean} - Whether input path is inside an allowed prefix.
|
|
44
|
+
*/
|
|
45
|
+
function pathWithinAllowedPrefixes(filePath, allowedPathPrefixes) {
|
|
46
|
+
const resolvedPath = path.resolve(filePath)
|
|
47
|
+
|
|
48
|
+
return allowedPathPrefixes.some((allowedPrefix) => {
|
|
49
|
+
const resolvedPrefix = path.resolve(allowedPrefix)
|
|
50
|
+
const relativePath = path.relative(resolvedPrefix, resolvedPath)
|
|
51
|
+
|
|
52
|
+
if (!relativePath) return true
|
|
53
|
+
if (relativePath.startsWith("..")) return false
|
|
54
|
+
if (path.isAbsolute(relativePath)) return false
|
|
55
|
+
|
|
56
|
+
return true
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default class VelociousEnvironmentHandlerNode extends Base{
|
|
61
|
+
/**
|
|
62
|
+
* Timezone async local storage.
|
|
63
|
+
@type {import("node:async_hooks").AsyncLocalStorage<TimezoneStore> | undefined} */
|
|
64
|
+
_timezoneAsyncLocalStorage = NodeAsyncLocalStorage ? new NodeAsyncLocalStorage() : undefined
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Find commands result.
|
|
68
|
+
@type {import("./base.js").CommandFileObjectType[] | undefined} */
|
|
69
|
+
_findCommandsResult = undefined
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Runs debug endpoint token matches.
|
|
73
|
+
* @param {string} providedToken - Token from the request.
|
|
74
|
+
* @param {string} expectedToken - Configured token.
|
|
75
|
+
* @returns {boolean} - Whether both tokens match.
|
|
76
|
+
*/
|
|
77
|
+
debugEndpointTokenMatches(providedToken, expectedToken) {
|
|
78
|
+
const provided = Buffer.from(providedToken)
|
|
79
|
+
const expected = Buffer.from(expectedToken)
|
|
80
|
+
|
|
81
|
+
return provided.length === expected.length && timingSafeEqual(provided, expected)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Runs get framework source directory.
|
|
86
|
+
* @returns {string | undefined} - Velocious source directory used to filter framework stack frames.
|
|
87
|
+
*/
|
|
88
|
+
getFrameworkSourceDirectory() {
|
|
89
|
+
return FRAMEWORK_SOURCE_DIRECTORY
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Auto-discovers resource classes from src/resources/ in each backend project.
|
|
94
|
+
* @param {import("../configuration.js").default} configuration - Configuration instance.
|
|
95
|
+
* @returns {Promise<void>}
|
|
96
|
+
*/
|
|
97
|
+
async autoDiscoverResources(configuration) {
|
|
98
|
+
const {frontendModelResourceDefinitionIsClass} = await import("../frontend-models/resource-definition.js")
|
|
99
|
+
const backendProjects = configuration.getBackendProjects()
|
|
100
|
+
|
|
101
|
+
for (const backendProject of backendProjects) {
|
|
102
|
+
if (backendProject.frontendModels) continue
|
|
103
|
+
|
|
104
|
+
const resourcesDir = path.join(backendProject.path, "src", "resources")
|
|
105
|
+
let files
|
|
106
|
+
|
|
107
|
+
try {
|
|
108
|
+
files = await fs.readdir(resourcesDir)
|
|
109
|
+
} catch {
|
|
110
|
+
continue
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Discovered.
|
|
115
|
+
@type {Record<string, ?>} */
|
|
116
|
+
const discovered = {}
|
|
117
|
+
|
|
118
|
+
for (const file of files) {
|
|
119
|
+
if (!file.endsWith(".js") && !file.endsWith(".mjs")) continue
|
|
120
|
+
if (file.startsWith("frontend-model-resources")) continue
|
|
121
|
+
|
|
122
|
+
const filePath = path.join(resourcesDir, file)
|
|
123
|
+
const imported = await import(filePath)
|
|
124
|
+
const ResourceClass = imported.default
|
|
125
|
+
|
|
126
|
+
if (!frontendModelResourceDefinitionIsClass(ResourceClass)) continue
|
|
127
|
+
|
|
128
|
+
const baseName = file.replace(/\.(js|mjs)$/, "")
|
|
129
|
+
const modelName = baseName.replace(/-resource$/, "")
|
|
130
|
+
.split("-")
|
|
131
|
+
.map((/**
|
|
132
|
+
* Narrows the runtime value to the documented type.
|
|
133
|
+
@type {string} */ part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
134
|
+
.join("")
|
|
135
|
+
|
|
136
|
+
discovered[modelName] = ResourceClass
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (Object.keys(discovered).length > 0) {
|
|
140
|
+
backendProject.frontendModels = discovered
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Runs set configuration.
|
|
147
|
+
* @param {import("../configuration.js").default} newConfiguration - New configuration.
|
|
148
|
+
* @returns {void} - No return value.
|
|
149
|
+
*/
|
|
150
|
+
setConfiguration(newConfiguration) {
|
|
151
|
+
super.setConfiguration(newConfiguration)
|
|
152
|
+
|
|
153
|
+
if (!newConfiguration.getRouteResolverHooks().includes(frontendModelCommandRouteHook)) {
|
|
154
|
+
newConfiguration.addRouteResolverHook(frontendModelCommandRouteHook)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Runs read attachment input file.
|
|
160
|
+
* @param {string} filePath - File path.
|
|
161
|
+
* @returns {Promise<Buffer>} - File bytes.
|
|
162
|
+
*/
|
|
163
|
+
async readAttachmentInputFile(filePath) {
|
|
164
|
+
return await fs.readFile(filePath)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Runs resolve attachment input path.
|
|
169
|
+
* @param {object} args - Args.
|
|
170
|
+
* @param {string[]} args.allowedPathPrefixes - Allowed path prefixes.
|
|
171
|
+
* @param {string} args.inputPath - Input path.
|
|
172
|
+
* @returns {Promise<{buffer: Buffer, filePath: string}>} - Resolved path and bytes.
|
|
173
|
+
*/
|
|
174
|
+
async resolveAttachmentInputPath({allowedPathPrefixes, inputPath}) {
|
|
175
|
+
const filePath = path.resolve(inputPath)
|
|
176
|
+
const prefixes = Array.isArray(allowedPathPrefixes)
|
|
177
|
+
? allowedPathPrefixes.filter((entry) => typeof entry === "string" && entry.length > 0)
|
|
178
|
+
: []
|
|
179
|
+
|
|
180
|
+
if (prefixes.length > 0 && !pathWithinAllowedPrefixes(filePath, prefixes)) {
|
|
181
|
+
throw new Error("Attachment path is outside allowed directories")
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const buffer = await this.readAttachmentInputFile(filePath)
|
|
185
|
+
|
|
186
|
+
return {buffer, filePath}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Runs find commands.
|
|
191
|
+
* @returns {Promise<Array<import("./base.js").CommandFileObjectType>>} - Resolves with the commands.
|
|
192
|
+
*/
|
|
193
|
+
async findCommands() {
|
|
194
|
+
this._findCommandsResult ||= await this._actualFindCommands()
|
|
195
|
+
|
|
196
|
+
if (!this._findCommandsResult) throw new Error("Could not get commands")
|
|
197
|
+
|
|
198
|
+
return this._findCommandsResult
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Runs run with timezone offset.
|
|
203
|
+
* @param {number} offsetMinutes - Offset in minutes (Date#getTimezoneOffset).
|
|
204
|
+
* @param {() => Promise<?>} callback - Callback to run.
|
|
205
|
+
* @returns {Promise<?>} - Result of the callback.
|
|
206
|
+
*/
|
|
207
|
+
async runWithTimezoneOffset(offsetMinutes, callback) {
|
|
208
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
209
|
+
return await callback()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
213
|
+
|
|
214
|
+
return await this._timezoneAsyncLocalStorage.run({
|
|
215
|
+
ability: existingStore?.ability,
|
|
216
|
+
offsetMinutes,
|
|
217
|
+
requestTiming: existingStore?.requestTiming,
|
|
218
|
+
tenant: existingStore?.tenant
|
|
219
|
+
}, callback)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Runs set timezone offset.
|
|
224
|
+
* @param {number} offsetMinutes - Offset in minutes (Date#getTimezoneOffset).
|
|
225
|
+
* @returns {void} - No return value.
|
|
226
|
+
*/
|
|
227
|
+
setTimezoneOffset(offsetMinutes) {
|
|
228
|
+
if (!this._timezoneAsyncLocalStorage) return
|
|
229
|
+
|
|
230
|
+
const store = this._timezoneAsyncLocalStorage.getStore()
|
|
231
|
+
|
|
232
|
+
if (store) {
|
|
233
|
+
store.offsetMinutes = offsetMinutes
|
|
234
|
+
} else {
|
|
235
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
236
|
+
|
|
237
|
+
this._timezoneAsyncLocalStorage.enterWith({
|
|
238
|
+
ability: existingStore?.ability,
|
|
239
|
+
offsetMinutes,
|
|
240
|
+
requestTiming: existingStore?.requestTiming,
|
|
241
|
+
tenant: existingStore?.tenant
|
|
242
|
+
})
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Runs get timezone offset minutes.
|
|
248
|
+
* @param {import("../configuration.js").default | undefined} configuration - Configuration instance.
|
|
249
|
+
* @returns {number} - Offset in minutes.
|
|
250
|
+
*/
|
|
251
|
+
getTimezoneOffsetMinutes(configuration) {
|
|
252
|
+
if (this._timezoneAsyncLocalStorage) {
|
|
253
|
+
const store = this._timezoneAsyncLocalStorage.getStore()
|
|
254
|
+
|
|
255
|
+
if (store && typeof store.offsetMinutes === "number") {
|
|
256
|
+
return store.offsetMinutes
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return super.getTimezoneOffsetMinutes(configuration)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Runs run with ability.
|
|
265
|
+
* @param {import("../authorization/ability.js").default | undefined} ability - Ability to set for callback scope.
|
|
266
|
+
* @param {() => Promise<?>} callback - Callback.
|
|
267
|
+
* @returns {Promise<?>} - Callback result.
|
|
268
|
+
*/
|
|
269
|
+
async runWithAbility(ability, callback) {
|
|
270
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
271
|
+
return await super.runWithAbility(ability, callback)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
275
|
+
|
|
276
|
+
return await this._timezoneAsyncLocalStorage.run({
|
|
277
|
+
ability,
|
|
278
|
+
offsetMinutes: existingStore?.offsetMinutes ?? this.getTimezoneOffsetMinutes(this.getConfiguration()),
|
|
279
|
+
requestTiming: existingStore?.requestTiming,
|
|
280
|
+
tenant: existingStore?.tenant
|
|
281
|
+
}, callback)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Runs set current ability.
|
|
286
|
+
* @param {import("../authorization/ability.js").default | undefined} ability - Ability to set.
|
|
287
|
+
* @returns {void} - No return value.
|
|
288
|
+
*/
|
|
289
|
+
setCurrentAbility(ability) {
|
|
290
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
291
|
+
super.setCurrentAbility(ability)
|
|
292
|
+
return
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
296
|
+
|
|
297
|
+
if (existingStore) {
|
|
298
|
+
existingStore.ability = ability
|
|
299
|
+
} else {
|
|
300
|
+
this._timezoneAsyncLocalStorage.enterWith({
|
|
301
|
+
ability,
|
|
302
|
+
offsetMinutes: this.getTimezoneOffsetMinutes(this.getConfiguration()),
|
|
303
|
+
requestTiming: undefined,
|
|
304
|
+
tenant: undefined
|
|
305
|
+
})
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Runs get current ability.
|
|
311
|
+
* @returns {import("../authorization/ability.js").default | undefined} - Current ability.
|
|
312
|
+
*/
|
|
313
|
+
getCurrentAbility() {
|
|
314
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
315
|
+
return super.getCurrentAbility()
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return this._timezoneAsyncLocalStorage.getStore()?.ability
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Runs run with request timing.
|
|
323
|
+
* @param {import("../http-server/client/request-timing.js").default | undefined} requestTiming - Request timing collector.
|
|
324
|
+
* @param {() => Promise<?>} callback - Callback.
|
|
325
|
+
* @returns {Promise<?>} - Callback result.
|
|
326
|
+
*/
|
|
327
|
+
async runWithRequestTiming(requestTiming, callback) {
|
|
328
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
329
|
+
return await super.runWithRequestTiming(requestTiming, callback)
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
333
|
+
|
|
334
|
+
return await this._timezoneAsyncLocalStorage.run({
|
|
335
|
+
ability: existingStore?.ability,
|
|
336
|
+
offsetMinutes: existingStore?.offsetMinutes ?? this.getTimezoneOffsetMinutes(this.getConfiguration()),
|
|
337
|
+
requestTiming,
|
|
338
|
+
tenant: existingStore?.tenant
|
|
339
|
+
}, callback)
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Runs get current request timing.
|
|
344
|
+
* @returns {import("../http-server/client/request-timing.js").default | undefined} - Current request timing collector.
|
|
345
|
+
*/
|
|
346
|
+
getCurrentRequestTiming() {
|
|
347
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
348
|
+
return super.getCurrentRequestTiming()
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return this._timezoneAsyncLocalStorage.getStore()?.requestTiming
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Runs run with tenant.
|
|
356
|
+
* @param {?} tenant - Tenant to set for callback scope.
|
|
357
|
+
* @param {() => Promise<?>} callback - Callback.
|
|
358
|
+
* @returns {Promise<?>} - Callback result.
|
|
359
|
+
*/
|
|
360
|
+
async runWithTenant(tenant, callback) {
|
|
361
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
362
|
+
return await super.runWithTenant(tenant, callback)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
366
|
+
|
|
367
|
+
return await this._timezoneAsyncLocalStorage.run({
|
|
368
|
+
ability: existingStore?.ability,
|
|
369
|
+
offsetMinutes: existingStore?.offsetMinutes ?? this.getTimezoneOffsetMinutes(this.getConfiguration()),
|
|
370
|
+
requestTiming: existingStore?.requestTiming,
|
|
371
|
+
tenant
|
|
372
|
+
}, callback)
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Runs set current tenant.
|
|
377
|
+
* @param {?} tenant - Tenant to set.
|
|
378
|
+
* @returns {void} - No return value.
|
|
379
|
+
*/
|
|
380
|
+
setCurrentTenant(tenant) {
|
|
381
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
382
|
+
super.setCurrentTenant(tenant)
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
const existingStore = this._timezoneAsyncLocalStorage.getStore()
|
|
387
|
+
|
|
388
|
+
if (existingStore) {
|
|
389
|
+
existingStore.tenant = tenant
|
|
390
|
+
} else {
|
|
391
|
+
this._timezoneAsyncLocalStorage.enterWith({
|
|
392
|
+
ability: undefined,
|
|
393
|
+
offsetMinutes: this.getTimezoneOffsetMinutes(this.getConfiguration()),
|
|
394
|
+
requestTiming: undefined,
|
|
395
|
+
tenant
|
|
396
|
+
})
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Runs get current tenant.
|
|
402
|
+
* @returns {?} - Current tenant.
|
|
403
|
+
*/
|
|
404
|
+
getCurrentTenant() {
|
|
405
|
+
if (!this._timezoneAsyncLocalStorage) {
|
|
406
|
+
return super.getCurrentTenant()
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return this._timezoneAsyncLocalStorage.getStore()?.tenant
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Runs actual find commands.
|
|
414
|
+
* @returns {Promise<Array<import("./base.js").CommandFileObjectType>>} - Resolves with discovered command files.
|
|
415
|
+
*/
|
|
416
|
+
async _actualFindCommands() {
|
|
417
|
+
const basePath = await this.getBasePath()
|
|
418
|
+
const commandFiles = fs.glob(`${basePath}/src/cli/commands/**/*.js`)
|
|
419
|
+
const commands = []
|
|
420
|
+
|
|
421
|
+
for await (const aFilePath of commandFiles) {
|
|
422
|
+
const commandName = this.commandNameFromFilePath(aFilePath)
|
|
423
|
+
|
|
424
|
+
commands.push({name: commandName, file: aFilePath})
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
return commands
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Runs command name from file path.
|
|
432
|
+
* @param {string} filePath - Full command file path.
|
|
433
|
+
* @returns {string} - Parsed command name.
|
|
434
|
+
*/
|
|
435
|
+
commandNameFromFilePath(filePath) {
|
|
436
|
+
const aFilePathParts = filePath.split(/[\\/]/)
|
|
437
|
+
const commandPathLocation = aFilePathParts.indexOf("commands")
|
|
438
|
+
|
|
439
|
+
if (commandPathLocation === -1) {
|
|
440
|
+
throw new Error(`Could not parse command file path: ${filePath}`)
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const commandParts = aFilePathParts.slice(commandPathLocation + 1)
|
|
444
|
+
const lastPart = commandParts[commandParts.length - 1]
|
|
445
|
+
let name, paths
|
|
446
|
+
|
|
447
|
+
if (lastPart == "index.js") {
|
|
448
|
+
name = commandParts[commandParts.length - 2]
|
|
449
|
+
paths = commandParts.slice(0, -2)
|
|
450
|
+
} else {
|
|
451
|
+
name = lastPart.replace(".js", "")
|
|
452
|
+
paths = commandParts.slice(0, -1)
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return `${paths.join(":")}${paths.length > 0 ? ":" : ""}${name}`
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Runs cli commands init.
|
|
460
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
461
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
462
|
+
*/
|
|
463
|
+
async cliCommandsInit(command) {
|
|
464
|
+
return await this.forwardCommand(command, CliCommandsInit)
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Runs cli commands migration generate.
|
|
469
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
470
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
471
|
+
*/
|
|
472
|
+
async cliCommandsMigrationGenerate(command) {
|
|
473
|
+
return await this.forwardCommand(command, CliCommandsGenerateMigration)
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Runs cli commands migration destroy.
|
|
478
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
479
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
480
|
+
*/
|
|
481
|
+
async cliCommandsMigrationDestroy(command) {
|
|
482
|
+
return await this.forwardCommand(command, CliCommandsDestroyMigration)
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Runs cli commands generate base models.
|
|
487
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
488
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
489
|
+
*/
|
|
490
|
+
async cliCommandsGenerateBaseModels(command) {
|
|
491
|
+
return await this.forwardCommand(command, CliCommandsGenerateBaseModels)
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Runs cli commands generate frontend models.
|
|
496
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
497
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
498
|
+
*/
|
|
499
|
+
async cliCommandsGenerateFrontendModels(command) {
|
|
500
|
+
return await this.forwardCommand(command, CliCommandsGenerateFrontendModels)
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Runs cli commands generate model.
|
|
505
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
506
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
507
|
+
*/
|
|
508
|
+
async cliCommandsGenerateModel(command) {
|
|
509
|
+
return await this.forwardCommand(command, CliCommandsGenerateModel)
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Runs cli commands routes.
|
|
514
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
515
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
516
|
+
*/
|
|
517
|
+
async cliCommandsRoutes(command) {
|
|
518
|
+
return await this.forwardCommand(command, CliCommandsRoutes)
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Runs cli commands console.
|
|
523
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
524
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
525
|
+
*/
|
|
526
|
+
async cliCommandsConsole(command) {
|
|
527
|
+
return await this.forwardCommand(command, CliCommandsConsole)
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Runs cli commands server.
|
|
532
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
533
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
534
|
+
*/
|
|
535
|
+
async cliCommandsServer(command) {
|
|
536
|
+
return await this.forwardCommand(command, CliCommandsServer)
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Runs cli commands test.
|
|
541
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
542
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
543
|
+
*/
|
|
544
|
+
async cliCommandsTest(command) {
|
|
545
|
+
return await this.forwardCommand(command, CliCommandsTest)
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* Runs cli commands background jobs main.
|
|
550
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
551
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
552
|
+
*/
|
|
553
|
+
async cliCommandsBackgroundJobsMain(command) {
|
|
554
|
+
return await this.forwardCommand(command, CliCommandsBackgroundJobsMain)
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Runs cli commands background jobs worker.
|
|
559
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
560
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
561
|
+
*/
|
|
562
|
+
async cliCommandsBackgroundJobsWorker(command) {
|
|
563
|
+
return await this.forwardCommand(command, CliCommandsBackgroundJobsWorker)
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Runs cli commands background jobs runner.
|
|
568
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
569
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
570
|
+
*/
|
|
571
|
+
async cliCommandsBackgroundJobsRunner(command) {
|
|
572
|
+
return await this.forwardCommand(command, CliCommandsBackgroundJobsRunner)
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Runs cli commands beacon.
|
|
577
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
578
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
579
|
+
*/
|
|
580
|
+
async cliCommandsBeacon(command) {
|
|
581
|
+
return await this.forwardCommand(command, CliCommandsBeacon)
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Runs load beacon client.
|
|
586
|
+
* @returns {Promise<typeof import("../beacon/client.js").default>} - Beacon client class.
|
|
587
|
+
*/
|
|
588
|
+
async loadBeaconClient() {
|
|
589
|
+
const {default: BeaconClient} = await import("../beacon/client.js")
|
|
590
|
+
|
|
591
|
+
return BeaconClient
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Runs load in process beacon client.
|
|
596
|
+
* @returns {Promise<typeof import("../beacon/in-process-client.js").default>} - In-process client class.
|
|
597
|
+
*/
|
|
598
|
+
async loadInProcessBeaconClient() {
|
|
599
|
+
const {default: InProcessBeaconClient} = await import("../beacon/in-process-client.js")
|
|
600
|
+
|
|
601
|
+
return InProcessBeaconClient
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Runs cli commands db schema dump.
|
|
606
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
607
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
608
|
+
*/
|
|
609
|
+
async cliCommandsDbSchemaDump(command) {
|
|
610
|
+
return await this.forwardCommand(command, CliCommandsDbSchemaDump)
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Runs cli commands db schema load.
|
|
615
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
616
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
617
|
+
*/
|
|
618
|
+
async cliCommandsDbSchemaLoad(command) {
|
|
619
|
+
return await this.forwardCommand(command, CliCommandsDbSchemaLoad)
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Runs cli commands db seed.
|
|
624
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
625
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
626
|
+
*/
|
|
627
|
+
async cliCommandsDbSeed(command) {
|
|
628
|
+
return await this.forwardCommand(command, CliCommandsDbSeed)
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Runs cli commands runner.
|
|
633
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
634
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
635
|
+
*/
|
|
636
|
+
async cliCommandsRunner(command) {
|
|
637
|
+
return await this.forwardCommand(command, CliCommandsRunner)
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Runs cli commands run script.
|
|
642
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
643
|
+
* @returns {Promise<?>} - Resolves with the command result.
|
|
644
|
+
*/
|
|
645
|
+
async cliCommandsRunScript(command) {
|
|
646
|
+
return await this.forwardCommand(command, CliCommandsRunScript)
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* Runs require command.
|
|
651
|
+
* @param {object} args - Options object.
|
|
652
|
+
* @param {string[]} args.commandParts - Command parts.
|
|
653
|
+
* @returns {Promise<typeof import ("../cli/base-command.js").default>} - Resolves with the require command.
|
|
654
|
+
*/
|
|
655
|
+
async requireCommand({commandParts}) {
|
|
656
|
+
const commands = await this.findCommands()
|
|
657
|
+
const commandName = commandParts.join(":")
|
|
658
|
+
const command = commands.find((aCommand) => aCommand.name === commandName)
|
|
659
|
+
|
|
660
|
+
if (!command) {
|
|
661
|
+
const possibleCommands = commands.map(aCommand => aCommand.name)
|
|
662
|
+
|
|
663
|
+
throw new Error(`Unknown command: ${commandParts.join(":")} which should have been one of: ${possibleCommands.sort().join(", ")}`)
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
const commandClassImport = await import(toImportSpecifier(command.file))
|
|
667
|
+
const CommandClass = commandClassImport.default
|
|
668
|
+
|
|
669
|
+
return CommandClass
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* Runs find migrations.
|
|
674
|
+
* @returns {Promise<Array<import("./base.js").MigrationObjectType>>} - Resolves with the migrations.
|
|
675
|
+
*/
|
|
676
|
+
async findMigrations() {
|
|
677
|
+
const migrationsPath = `${this.getConfiguration().getDirectory()}/src/database/migrations`
|
|
678
|
+
const glob = await fs.glob(`${migrationsPath}/**/*.js`)
|
|
679
|
+
let files = []
|
|
680
|
+
|
|
681
|
+
for await (const fullPath of glob) {
|
|
682
|
+
const file = await path.basename(fullPath)
|
|
683
|
+
|
|
684
|
+
const match = file.match(/^(\d{14})-(.+)\.js$/)
|
|
685
|
+
|
|
686
|
+
if (!match) continue
|
|
687
|
+
|
|
688
|
+
const date = parseInt(match[1])
|
|
689
|
+
const migrationName = match[2]
|
|
690
|
+
const migrationClassName = inflection.camelize(migrationName.replaceAll("-", "_"))
|
|
691
|
+
|
|
692
|
+
files.push({
|
|
693
|
+
file,
|
|
694
|
+
fullPath: `${migrationsPath}/${file}`,
|
|
695
|
+
date,
|
|
696
|
+
migrationClassName
|
|
697
|
+
})
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
files = files.sort((migration1, migration2) => migration1.date - migration2.date)
|
|
701
|
+
|
|
702
|
+
return files
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* Runs import application routes.
|
|
707
|
+
* @returns {Promise<import("../routes/index.js").default>} - Resolves with the import application routes.
|
|
708
|
+
*/
|
|
709
|
+
async importApplicationRoutes() {
|
|
710
|
+
const routesImport = await import(toImportSpecifier(`${this.getConfiguration().getDirectory()}/src/config/routes.js`))
|
|
711
|
+
|
|
712
|
+
return routesImport.default
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/**
|
|
716
|
+
* Runs get velocious path.
|
|
717
|
+
* @returns {Promise<string>} - Resolves with the velocious path.
|
|
718
|
+
*/
|
|
719
|
+
async getVelociousPath() {
|
|
720
|
+
if (!this._velociousPath) {
|
|
721
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
722
|
+
const __dirname = dirname(__filename)
|
|
723
|
+
|
|
724
|
+
this._velociousPath = await fs.realpath(`${__dirname}/../..`)
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
return this._velociousPath
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Runs import test files.
|
|
732
|
+
* @param {string[]} testFiles - Test files.
|
|
733
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
734
|
+
*/
|
|
735
|
+
async importTestFiles(testFiles) {
|
|
736
|
+
for (const testFile of testFiles) {
|
|
737
|
+
await import(toImportSpecifier(testFile))
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/**
|
|
742
|
+
* Runs get default log directory.
|
|
743
|
+
* @param {object} args - Options object.
|
|
744
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
745
|
+
* @returns {string} - The default log directory.
|
|
746
|
+
*/
|
|
747
|
+
getDefaultLogDirectory({configuration}) {
|
|
748
|
+
return path.join(configuration.getDirectory(), "log")
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* Runs get log file path.
|
|
753
|
+
* @param {object} args - Options object.
|
|
754
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
755
|
+
* @param {string | undefined} args.directory - Directory path.
|
|
756
|
+
* @param {string} args.environment - Environment.
|
|
757
|
+
* @returns {string | undefined} - The log file path.
|
|
758
|
+
*/
|
|
759
|
+
getLogFilePath({configuration, directory, environment}) {
|
|
760
|
+
const actualDirectory = directory || configuration?.getDirectory?.()
|
|
761
|
+
|
|
762
|
+
if (!actualDirectory) return undefined
|
|
763
|
+
|
|
764
|
+
return path.join(actualDirectory, `${environment}.log`)
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Runs write log to file.
|
|
769
|
+
* @param {object} args - Options object.
|
|
770
|
+
* @param {string} args.filePath - File path.
|
|
771
|
+
* @param {string} args.message - Message text.
|
|
772
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
773
|
+
*/
|
|
774
|
+
async writeLogToFile({filePath, message}) {
|
|
775
|
+
await fs.mkdir(path.dirname(filePath), {recursive: true})
|
|
776
|
+
await fs.appendFile(filePath, `${message}\n`, "utf8")
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
async importTestingConfigPath() {
|
|
780
|
+
const testingConfigPath = this.getConfiguration().getTesting()
|
|
781
|
+
|
|
782
|
+
if (!testingConfigPath) return
|
|
783
|
+
|
|
784
|
+
const testingImport = await import(toImportSpecifier(testingConfigPath))
|
|
785
|
+
const testingDefault = testingImport.default
|
|
786
|
+
|
|
787
|
+
if (!testingDefault) throw new Error("Testing config must export a default function")
|
|
788
|
+
if (typeof testingDefault !== "function") throw new Error("Testing config default export isn't a function")
|
|
789
|
+
|
|
790
|
+
const result = await testingDefault()
|
|
791
|
+
|
|
792
|
+
if (typeof result === "function") {
|
|
793
|
+
await result()
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Runs require migration.
|
|
799
|
+
* @param {string} filePath - File path.
|
|
800
|
+
* @returns {Promise<import("../database/migration/index.js").default>} - Resolves with the require migration.
|
|
801
|
+
*/
|
|
802
|
+
async requireMigration(filePath) {
|
|
803
|
+
const migrationImport = await import(toImportSpecifier(filePath))
|
|
804
|
+
const migrationImportDefault = migrationImport.default
|
|
805
|
+
|
|
806
|
+
if (!migrationImportDefault) throw new Error("Migration file must export a default migration class")
|
|
807
|
+
if (typeof migrationImportDefault !== "function") throw new Error("Migration default export isn't a function (should be a class which is a function in JS)")
|
|
808
|
+
|
|
809
|
+
return migrationImportDefault
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
async getBasePath() {
|
|
813
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
814
|
+
const basePath = await fs.realpath(`${dirname(__filename)}/../..`)
|
|
815
|
+
|
|
816
|
+
return basePath
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/**
|
|
820
|
+
* Runs after migrations.
|
|
821
|
+
* @param {object} args - Options object.
|
|
822
|
+
* @param {Record<string, import("../database/drivers/base.js").default>} args.dbs - Dbs.
|
|
823
|
+
* @param {"migration" | "schemaDump"} [args.reason] - Why the structure write is being triggered.
|
|
824
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
825
|
+
*/
|
|
826
|
+
async afterMigrations({dbs, reason = "migration"}) {
|
|
827
|
+
const configuration = this.getConfiguration()
|
|
828
|
+
|
|
829
|
+
if (!configuration.shouldWriteStructureSql({reason})) return
|
|
830
|
+
|
|
831
|
+
const dbDir = path.join(configuration.getDirectory(), "db")
|
|
832
|
+
const structureSqlByIdentifier = await this._structureSqlByIdentifier({dbs})
|
|
833
|
+
|
|
834
|
+
await fs.mkdir(dbDir, {recursive: true})
|
|
835
|
+
|
|
836
|
+
for (const identifier of Object.keys(structureSqlByIdentifier)) {
|
|
837
|
+
const structureSql = structureSqlByIdentifier[identifier]
|
|
838
|
+
|
|
839
|
+
if (!structureSql) continue
|
|
840
|
+
|
|
841
|
+
const filePath = path.join(dbDir, `structure-${identifier}.sql`)
|
|
842
|
+
|
|
843
|
+
await fs.writeFile(filePath, structureSql)
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Runs structure sql by identifier.
|
|
849
|
+
* @param {object} args - Options object.
|
|
850
|
+
* @param {Record<string, import("../database/drivers/base.js").default>} args.dbs - Dbs.
|
|
851
|
+
* @returns {Promise<Record<string, string>>} - Resolves with SQL string.
|
|
852
|
+
*/
|
|
853
|
+
async _structureSqlByIdentifier({dbs}) {
|
|
854
|
+
const sqlByIdentifier = /**
|
|
855
|
+
* Narrows the runtime value to the documented type.
|
|
856
|
+
@type {Record<string, string>} */ ({})
|
|
857
|
+
|
|
858
|
+
for (const identifier of Object.keys(dbs)) {
|
|
859
|
+
const db = dbs[identifier]
|
|
860
|
+
|
|
861
|
+
if (typeof db.structureSql !== "function") continue
|
|
862
|
+
|
|
863
|
+
const structureSql = await db.structureSql()
|
|
864
|
+
|
|
865
|
+
if (structureSql) {
|
|
866
|
+
sqlByIdentifier[identifier] = structureSql
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
return sqlByIdentifier
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
/**
|
|
874
|
+
* Registers frontend-model websocket channel publishers so lifecycle
|
|
875
|
+
* event hooks broadcast over the shared "frontend-models" channel.
|
|
876
|
+
* This is only implemented by the Node handler because the required
|
|
877
|
+
* modules (`frontend-model-controller`, `routes/resolver`) pull in
|
|
878
|
+
* server-only Node APIs that break browser bundlers.
|
|
879
|
+
* @param {import("../configuration.js").default} configuration - Configuration instance.
|
|
880
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
881
|
+
*/
|
|
882
|
+
async initializeFrontendModelWebsocketPublishers(configuration) {
|
|
883
|
+
const {ensureFrontendModelWebsocketPublishersRegistered} = await import("../frontend-models/websocket-publishers.js")
|
|
884
|
+
|
|
885
|
+
await ensureFrontendModelWebsocketPublishersRegistered(configuration)
|
|
886
|
+
}
|
|
887
|
+
}
|