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,509 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {digg} from "diggerize"
|
|
4
|
+
|
|
5
|
+
import AlterTable from "./sql/alter-table.js"
|
|
6
|
+
import Base from "../base.js"
|
|
7
|
+
import CreateIndex from "./sql/create-index.js"
|
|
8
|
+
import CreateTable from "./sql/create-table.js"
|
|
9
|
+
import Delete from "./sql/delete.js"
|
|
10
|
+
import DropTable from "./sql/drop-table.js"
|
|
11
|
+
import escapeString from "sql-escape-string"
|
|
12
|
+
import Insert from "./sql/insert.js"
|
|
13
|
+
import Options from "./options.js"
|
|
14
|
+
import QueryParser from "./query-parser.js"
|
|
15
|
+
import Table from "./table.js"
|
|
16
|
+
import StructureSql from "./structure-sql.js"
|
|
17
|
+
import Upsert from "./sql/upsert.js"
|
|
18
|
+
import Update from "./sql/update.js"
|
|
19
|
+
|
|
20
|
+
export default class VelociousDatabaseDriversSqliteBase extends Base {
|
|
21
|
+
/**
|
|
22
|
+
* Version major.
|
|
23
|
+
@type {number | undefined} */
|
|
24
|
+
versionMajor = undefined
|
|
25
|
+
/**
|
|
26
|
+
* Version minor.
|
|
27
|
+
@type {number | undefined} */
|
|
28
|
+
versionMinor = undefined
|
|
29
|
+
/**
|
|
30
|
+
* Version patch.
|
|
31
|
+
@type {number | undefined} */
|
|
32
|
+
versionPatch = undefined
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Runs alter table sqls.
|
|
36
|
+
* @param {import("../../table-data/index.js").default} tableData - Table data.
|
|
37
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
38
|
+
*/
|
|
39
|
+
async alterTableSQLs(tableData) {
|
|
40
|
+
const alterArgs = {driver: this, tableData}
|
|
41
|
+
const alterTable = new AlterTable(alterArgs)
|
|
42
|
+
|
|
43
|
+
return await alterTable.toSQLs()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Runs create index sqls.
|
|
48
|
+
* @param {import("../base.js").CreateIndexSqlArgs} indexData - Index data.
|
|
49
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
50
|
+
*/
|
|
51
|
+
async createIndexSQLs(indexData) {
|
|
52
|
+
const createArgs = Object.assign({driver: this}, indexData)
|
|
53
|
+
const createIndex = new CreateIndex(createArgs)
|
|
54
|
+
|
|
55
|
+
return await createIndex.toSQLs()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Runs create table sql.
|
|
60
|
+
* @abstract
|
|
61
|
+
* @param {import("../../table-data/index.js").default} tableData - Table data.
|
|
62
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
63
|
+
*/
|
|
64
|
+
async createTableSql(tableData) {
|
|
65
|
+
const createArgs = {tableData, driver: this, indexInCreateTable: false}
|
|
66
|
+
const createTable = new CreateTable(createArgs)
|
|
67
|
+
|
|
68
|
+
return await createTable.toSql()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
currentDatabase() {
|
|
72
|
+
return null
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async disableForeignKeys() {
|
|
76
|
+
await this.query("PRAGMA foreign_keys = 0")
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async enableForeignKeys() {
|
|
80
|
+
await this.query("PRAGMA foreign_keys = 1")
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Runs drop table sqls.
|
|
85
|
+
* @param {string} tableName - Table name.
|
|
86
|
+
* @param {import("../base.js").DropTableSqlArgsType} [args] - Options object.
|
|
87
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
88
|
+
*/
|
|
89
|
+
async dropTableSQLs(tableName, args = {}) {
|
|
90
|
+
const driver = /**
|
|
91
|
+
* Narrows the runtime value to the documented type.
|
|
92
|
+
@type {import("../base.js").default} */ (this)
|
|
93
|
+
const dropArgs = Object.assign({tableName, driver}, args)
|
|
94
|
+
const dropTable = new DropTable(dropArgs)
|
|
95
|
+
|
|
96
|
+
return await dropTable.toSQLs()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Runs delete sql.
|
|
101
|
+
* @param {import("../base.js").DeleteSqlArgsType} args - Options object.
|
|
102
|
+
* @returns {string} - SQL string.
|
|
103
|
+
*/
|
|
104
|
+
deleteSql(args) { return new Delete(Object.assign({driver: this}, args)).toSql() }
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Runs get type.
|
|
108
|
+
* @returns {string} - The type.
|
|
109
|
+
*/
|
|
110
|
+
getType() { return "sqlite" }
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Runs insert sql.
|
|
114
|
+
* @param {import("../base.js").InsertSqlArgsType} args - Options object.
|
|
115
|
+
* @returns {string} - SQL string.
|
|
116
|
+
*/
|
|
117
|
+
insertSql(args) { return new Insert(Object.assign({driver: this}, args)).toSql() }
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Runs get tables.
|
|
121
|
+
* @returns {Promise<Array<import("../base-table.js").default>>} - Resolves with the tables.
|
|
122
|
+
*/
|
|
123
|
+
async getTables() {
|
|
124
|
+
return await this._cachedSchemaMetadata("tables", async () => {
|
|
125
|
+
const result = await this.query("SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name")
|
|
126
|
+
const tables = []
|
|
127
|
+
|
|
128
|
+
for (const row of result) {
|
|
129
|
+
const table = new Table({driver: this, row: /**
|
|
130
|
+
* Narrows the runtime value to the documented type.
|
|
131
|
+
@type {Record<string, string | number | null>} */ (row)})
|
|
132
|
+
|
|
133
|
+
tables.push(table)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return tables
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Runs insert multiple.
|
|
142
|
+
* @param {string} tableName - Table name.
|
|
143
|
+
* @param {Array<string>} columns - Column names.
|
|
144
|
+
* @param {Array<Array<?>>} rows - Rows to insert.
|
|
145
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
146
|
+
*/
|
|
147
|
+
async insertMultiple(tableName, columns, rows) {
|
|
148
|
+
this._assertNotReadOnly()
|
|
149
|
+
await this.registerVersion()
|
|
150
|
+
|
|
151
|
+
if (this.supportsMultipleInsertValues()) {
|
|
152
|
+
await this.insertMultipleWithSingleInsert(tableName, columns, rows)
|
|
153
|
+
} else {
|
|
154
|
+
await this.insertMultipleWithTransaction(tableName, columns, rows)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Runs supports multiple insert values.
|
|
160
|
+
* @returns {boolean} - Whether supports multiple insert values.
|
|
161
|
+
*/
|
|
162
|
+
supportsMultipleInsertValues() {
|
|
163
|
+
/**
|
|
164
|
+
* Version major.
|
|
165
|
+
@type {number} */
|
|
166
|
+
const versionMajor = this.versionMajor || 0
|
|
167
|
+
/**
|
|
168
|
+
* Version minor.
|
|
169
|
+
@type {number} */
|
|
170
|
+
const versionMinor = this.versionMinor || 0
|
|
171
|
+
/**
|
|
172
|
+
* Version patch.
|
|
173
|
+
@type {number} */
|
|
174
|
+
const versionPatch = this.versionPatch || 0
|
|
175
|
+
|
|
176
|
+
if (versionMajor >= 4) return true
|
|
177
|
+
if (versionMajor == 3 && versionMinor >= 8) return true
|
|
178
|
+
if (versionMajor == 3 && versionMinor == 7 && versionPatch >= 11) return true
|
|
179
|
+
|
|
180
|
+
return false
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Runs supports insert into returning.
|
|
185
|
+
* @returns {boolean} - Whether supports insert into returning.
|
|
186
|
+
*/
|
|
187
|
+
supportsInsertIntoReturning() {
|
|
188
|
+
/**
|
|
189
|
+
* Version major.
|
|
190
|
+
@type {number} */
|
|
191
|
+
const versionMajor = this.versionMajor || 0
|
|
192
|
+
/**
|
|
193
|
+
* Version minor.
|
|
194
|
+
@type {number} */
|
|
195
|
+
const versionMinor = this.versionMinor || 0
|
|
196
|
+
|
|
197
|
+
if (versionMajor >= 4) return true
|
|
198
|
+
if (versionMajor == 3 && versionMinor >= 35) return true
|
|
199
|
+
|
|
200
|
+
return false
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Runs insert multiple with single insert.
|
|
205
|
+
* @param {string} tableName - Table name.
|
|
206
|
+
* @param {Array<string>} columns - Column names.
|
|
207
|
+
* @param {Array<Array<?>>} rows - Rows to insert.
|
|
208
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
209
|
+
*/
|
|
210
|
+
async insertMultipleWithSingleInsert(tableName, columns, rows) {
|
|
211
|
+
this._assertNotReadOnly()
|
|
212
|
+
const sql = new Insert({columns, driver: this, rows, tableName}).toSql()
|
|
213
|
+
|
|
214
|
+
await this.query(sql)
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Runs insert multiple with transaction.
|
|
219
|
+
* @param {string} tableName - Table name.
|
|
220
|
+
* @param {Array<string>} columns - Column names.
|
|
221
|
+
* @param {Array<Array<?>>} rows - Rows to insert.
|
|
222
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
223
|
+
*/
|
|
224
|
+
async insertMultipleWithTransaction(tableName, columns, rows) {
|
|
225
|
+
this._assertNotReadOnly()
|
|
226
|
+
/**
|
|
227
|
+
* Sqls.
|
|
228
|
+
@type {string[]} */
|
|
229
|
+
const sqls = []
|
|
230
|
+
|
|
231
|
+
for (const row of rows) {
|
|
232
|
+
/**
|
|
233
|
+
* Data.
|
|
234
|
+
@type {Record<string, ?>} */
|
|
235
|
+
const data = {}
|
|
236
|
+
|
|
237
|
+
for (const columnIndex in columns) {
|
|
238
|
+
const columnName = columns[columnIndex]
|
|
239
|
+
const value = row[columnIndex]
|
|
240
|
+
|
|
241
|
+
data[columnName] = value
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const insertSql = this.insertSql({tableName, data})
|
|
245
|
+
|
|
246
|
+
sqls.push(insertSql)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
await this.transaction(async () => {
|
|
250
|
+
for (const sql of sqls) {
|
|
251
|
+
await this.query(sql)
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
async lastInsertID() {
|
|
257
|
+
const result = await this.query("SELECT LAST_INSERT_ROWID() AS last_insert_id")
|
|
258
|
+
|
|
259
|
+
return digg(result, 0, "last_insert_id")
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
options() {
|
|
263
|
+
if (!this._options) this._options = new Options(this)
|
|
264
|
+
|
|
265
|
+
return this._options
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Runs primary key type.
|
|
270
|
+
* @returns {string} - The type of the primary key for this driver.
|
|
271
|
+
*/
|
|
272
|
+
primaryKeyType() { return "integer" } // Because bigint on SQLite doesn't support auto increment
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Runs query to sql.
|
|
276
|
+
* @param {import("../../query/index.js").default} query - Query instance.
|
|
277
|
+
* @returns {string} - SQL string.
|
|
278
|
+
*/
|
|
279
|
+
queryToSql(query) { return new QueryParser({query}).toSql() }
|
|
280
|
+
|
|
281
|
+
async registerVersion() {
|
|
282
|
+
if (this.versionMajor || this.versionMinor) {
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const versionResult = await this.query("SELECT sqlite_version() AS version")
|
|
287
|
+
|
|
288
|
+
this.version = String(versionResult[0].version)
|
|
289
|
+
|
|
290
|
+
const versionParts = this.version.split(".")
|
|
291
|
+
|
|
292
|
+
this.versionMajor = Number(versionParts[0])
|
|
293
|
+
this.versionMinor = Number(versionParts[1])
|
|
294
|
+
this.versionPatch = Number(versionParts[2])
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
shouldSetAutoIncrementWhenPrimaryKey() { return false }
|
|
298
|
+
supportsDefaultPrimaryKeyUUID() { return false }
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Runs escape.
|
|
302
|
+
* @param {?} value - Value to use.
|
|
303
|
+
* @returns {?} - The escape.
|
|
304
|
+
*/
|
|
305
|
+
escape(value) {
|
|
306
|
+
value = this._convertValue(value)
|
|
307
|
+
|
|
308
|
+
const type = typeof value
|
|
309
|
+
|
|
310
|
+
if (type != "string") value = `${value}`
|
|
311
|
+
|
|
312
|
+
const resultWithQuotes = escapeString(value, null)
|
|
313
|
+
const result = resultWithQuotes.substring(1, resultWithQuotes.length - 1)
|
|
314
|
+
|
|
315
|
+
return result
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Runs retryable database error.
|
|
320
|
+
* @param {Error} error - Error instance.
|
|
321
|
+
* @returns {import("../base.js").RetryableDatabaseErrorResult} - Retry info.
|
|
322
|
+
*/
|
|
323
|
+
retryableDatabaseError(error) {
|
|
324
|
+
const shouldRetry = (
|
|
325
|
+
error.message?.startsWith("attempt to write a readonly database") ||
|
|
326
|
+
error.message?.startsWith("database is locked") ||
|
|
327
|
+
error.message?.includes("→ Caused by: Error code : database is locked")
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
return {retry: shouldRetry, reconnect: false}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Runs quote.
|
|
335
|
+
* @param {?} value - Value to use.
|
|
336
|
+
* @returns {string | number} - The quoted value.
|
|
337
|
+
*/
|
|
338
|
+
quote(value) {
|
|
339
|
+
value = this._convertValue(value)
|
|
340
|
+
|
|
341
|
+
const type = typeof value
|
|
342
|
+
|
|
343
|
+
if (type == "number") return /** Narrows the runtime value to the documented type. @type {number} */ (value)
|
|
344
|
+
if (type != "string") value = String(value)
|
|
345
|
+
|
|
346
|
+
return escapeString(value, null)
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Runs update sql.
|
|
351
|
+
* @param {import("../base.js").UpdateSqlArgsType} args - Options object.
|
|
352
|
+
* @returns {string} - SQL string.
|
|
353
|
+
*/
|
|
354
|
+
updateSql({conditions, data, tableName}) { return new Update({conditions, data, driver: this, tableName}).toSql() }
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Runs upsert sql.
|
|
358
|
+
* @param {import("../base.js").UpsertSqlArgsType} args - Options object.
|
|
359
|
+
* @returns {string} - SQL string.
|
|
360
|
+
*/
|
|
361
|
+
upsertSql(args) { return new Upsert({...args, driver: this}).toSql() }
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Runs structure sql.
|
|
365
|
+
* @returns {Promise<string | null>} - Resolves with SQL string.
|
|
366
|
+
*/
|
|
367
|
+
async structureSql() {
|
|
368
|
+
return await this._cachedSchemaMetadata("structureSql", async () => await new StructureSql({driver: this}).toSql())
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Blocks until an in-process advisory lock with the given name is
|
|
373
|
+
* acquired. SQLite has no built-in advisory lock primitive, so this is
|
|
374
|
+
* implemented as a process-local waiter queue. Typical SQLite deployments
|
|
375
|
+
* run inside a single Node process, which is exactly the scope this
|
|
376
|
+
* emulation covers; multi-process SQLite setups should not rely on this
|
|
377
|
+
* for cross-process mutual exclusion.
|
|
378
|
+
*
|
|
379
|
+
* The owning driver instance is recorded so that `releaseAdvisoryLock`
|
|
380
|
+
* can refuse to release a lock that was acquired by someone else.
|
|
381
|
+
* @param {string} name - Lock name.
|
|
382
|
+
* @param {{timeoutMs?: number | null}} [args] - Optional timeout in milliseconds; `null`, `undefined`, or negative blocks forever.
|
|
383
|
+
* @returns {Promise<boolean>} - True if the lock was acquired, false if the timeout elapsed.
|
|
384
|
+
*/
|
|
385
|
+
async acquireAdvisoryLock(name, {timeoutMs} = {}) {
|
|
386
|
+
const state = VelociousDatabaseDriversSqliteBase._advisoryLockState
|
|
387
|
+
|
|
388
|
+
while (state.ownersByName.has(name)) {
|
|
389
|
+
let remainingMs = null
|
|
390
|
+
|
|
391
|
+
if (typeof timeoutMs === "number" && timeoutMs >= 0) {
|
|
392
|
+
remainingMs = timeoutMs
|
|
393
|
+
|
|
394
|
+
if (remainingMs <= 0) return false
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
await new Promise((resolve) => {
|
|
398
|
+
const waiters = state.waitersByName.get(name) || []
|
|
399
|
+
/**
|
|
400
|
+
* Timeout handle.
|
|
401
|
+
@type {NodeJS.Timeout | null} */
|
|
402
|
+
let timeoutHandle = null
|
|
403
|
+
/**
|
|
404
|
+
* Remove and resolve.
|
|
405
|
+
@type {(() => void) | null} */
|
|
406
|
+
let removeAndResolve = null
|
|
407
|
+
|
|
408
|
+
removeAndResolve = () => {
|
|
409
|
+
if (timeoutHandle) clearTimeout(timeoutHandle)
|
|
410
|
+
|
|
411
|
+
const current = state.waitersByName.get(name) || []
|
|
412
|
+
const index = current.indexOf(/**
|
|
413
|
+
* Narrows the runtime value to the documented type.
|
|
414
|
+
@type {() => void} */ (removeAndResolve))
|
|
415
|
+
|
|
416
|
+
if (index >= 0) current.splice(index, 1)
|
|
417
|
+
if (current.length === 0) state.waitersByName.delete(name)
|
|
418
|
+
|
|
419
|
+
resolve(undefined)
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
waiters.push(removeAndResolve)
|
|
423
|
+
state.waitersByName.set(name, waiters)
|
|
424
|
+
|
|
425
|
+
if (remainingMs !== null) {
|
|
426
|
+
timeoutHandle = setTimeout(() => {
|
|
427
|
+
if (removeAndResolve) removeAndResolve()
|
|
428
|
+
}, remainingMs)
|
|
429
|
+
}
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
if (typeof timeoutMs === "number" && timeoutMs >= 0 && state.ownersByName.has(name)) {
|
|
433
|
+
return false
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
state.ownersByName.set(name, this)
|
|
438
|
+
|
|
439
|
+
return true
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Runs try acquire advisory lock.
|
|
444
|
+
* @param {string} name - Lock name.
|
|
445
|
+
* @returns {Promise<boolean>} - True if the lock was acquired, false if it was already held.
|
|
446
|
+
*/
|
|
447
|
+
async tryAcquireAdvisoryLock(name) {
|
|
448
|
+
const state = VelociousDatabaseDriversSqliteBase._advisoryLockState
|
|
449
|
+
|
|
450
|
+
if (state.ownersByName.has(name)) return false
|
|
451
|
+
|
|
452
|
+
state.ownersByName.set(name, this)
|
|
453
|
+
|
|
454
|
+
return true
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Releases the lock only if **this** driver instance owns it. Calling
|
|
459
|
+
* release for a lock owned by another driver instance is a no-op that
|
|
460
|
+
* returns `false`, matching the "you can only release locks you own"
|
|
461
|
+
* contract of MySQL's `RELEASE_LOCK` and PostgreSQL's
|
|
462
|
+
* `pg_advisory_unlock`.
|
|
463
|
+
* @param {string} name - Lock name.
|
|
464
|
+
* @returns {Promise<boolean>} - True if the lock was held by this driver and has now been released.
|
|
465
|
+
*/
|
|
466
|
+
async releaseAdvisoryLock(name) {
|
|
467
|
+
const state = VelociousDatabaseDriversSqliteBase._advisoryLockState
|
|
468
|
+
const owner = state.ownersByName.get(name)
|
|
469
|
+
|
|
470
|
+
if (owner !== this) return false
|
|
471
|
+
|
|
472
|
+
state.ownersByName.delete(name)
|
|
473
|
+
|
|
474
|
+
const waiters = state.waitersByName.get(name)
|
|
475
|
+
|
|
476
|
+
if (waiters && waiters.length > 0) {
|
|
477
|
+
const nextWaiter = waiters.shift()
|
|
478
|
+
|
|
479
|
+
if (waiters.length === 0) state.waitersByName.delete(name)
|
|
480
|
+
if (nextWaiter) nextWaiter()
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
return true
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Runs is advisory lock held.
|
|
488
|
+
* @param {string} name - Lock name.
|
|
489
|
+
* @returns {Promise<boolean>} - True if any driver instance currently holds the lock.
|
|
490
|
+
*/
|
|
491
|
+
async isAdvisoryLockHeld(name) {
|
|
492
|
+
return VelociousDatabaseDriversSqliteBase._advisoryLockState.ownersByName.has(name)
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Process-wide state for the SQLite advisory lock emulation. Shared across
|
|
498
|
+
* every SQLite driver instance (native, web, sql.js) because there is no
|
|
499
|
+
* concept of "connection" to distinguish them at the SQLite level.
|
|
500
|
+
*
|
|
501
|
+
* `ownersByName` maps each held lock name to the driver instance that
|
|
502
|
+
* acquired it so `releaseAdvisoryLock` can reject releases from drivers
|
|
503
|
+
* that do not own the lock.
|
|
504
|
+
* @type {{ownersByName: Map<string, VelociousDatabaseDriversSqliteBase>, waitersByName: Map<string, Array<() => void>>}}
|
|
505
|
+
*/
|
|
506
|
+
VelociousDatabaseDriversSqliteBase._advisoryLockState = {
|
|
507
|
+
ownersByName: new Map(),
|
|
508
|
+
waitersByName: new Map()
|
|
509
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {digg} from "diggerize"
|
|
4
|
+
import BaseColumn from "../base-column.js"
|
|
5
|
+
|
|
6
|
+
export default class VelociousDatabaseDriversSqliteColumn extends BaseColumn {
|
|
7
|
+
/**
|
|
8
|
+
* Runs constructor.
|
|
9
|
+
* @param {object} args - Options object.
|
|
10
|
+
* @param {Record<string, ?>} args.column - Column.
|
|
11
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
12
|
+
* @param {import("../base-table.js").default} args.table - Table.
|
|
13
|
+
*/
|
|
14
|
+
constructor({column, driver, table}) {
|
|
15
|
+
super()
|
|
16
|
+
this.column = column
|
|
17
|
+
this.driver = driver
|
|
18
|
+
this.table = table
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getAutoIncrement() {
|
|
22
|
+
// SQLite only auto-increments when the primary key is the special INTEGER type.
|
|
23
|
+
return this.getPrimaryKey() && this.getType() == "integer"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async getIndexes() {
|
|
27
|
+
const indexes = await this.getTable().getIndexes()
|
|
28
|
+
const indexesForColumn = indexes.filter((index) => index.getColumnNames().includes(this.getName()))
|
|
29
|
+
|
|
30
|
+
return indexesForColumn
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getDefault() { return digg(this, "column", "dflt_value") }
|
|
34
|
+
|
|
35
|
+
getName() {
|
|
36
|
+
const name = digg(this, "column", "name")
|
|
37
|
+
|
|
38
|
+
if (!name) throw new Error("No name given for SQLite column")
|
|
39
|
+
|
|
40
|
+
return name
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
getMaxLength() {
|
|
44
|
+
const columnType = digg(this, "column", "type")
|
|
45
|
+
const match = columnType.match(/(.*)\((\d+)\)$/)
|
|
46
|
+
|
|
47
|
+
if (match) {
|
|
48
|
+
return parseInt(match[2])
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getNull() {
|
|
53
|
+
const notNullValue = digg(this, "column", "notnull")
|
|
54
|
+
|
|
55
|
+
if (notNullValue === 1) {
|
|
56
|
+
return false
|
|
57
|
+
} else {
|
|
58
|
+
return true
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
getPrimaryKey() { return digg(this, "column", "pk") == 1 }
|
|
63
|
+
|
|
64
|
+
getType() {
|
|
65
|
+
const columnType = digg(this, "column", "type")
|
|
66
|
+
const match = columnType.match(/(.*)\((\d+)\)$/)
|
|
67
|
+
|
|
68
|
+
if (match) {
|
|
69
|
+
return match[1].toLowerCase()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return columnType.toLowerCase()
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseColumnsIndex from "../base-columns-index.js"
|
|
4
|
+
import {digg} from "diggerize"
|
|
5
|
+
import TableIndex from "../../table-data/table-index.js"
|
|
6
|
+
|
|
7
|
+
export default class VelociousDatabaseDriversSqliteColumnsIndex extends BaseColumnsIndex {
|
|
8
|
+
getColumnNames() {
|
|
9
|
+
return digg(this, "data", "columnNames")
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getName() {
|
|
13
|
+
return digg(this, "data", "name")
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getTableDataIndex() {
|
|
17
|
+
return new TableIndex(this.getColumnNames(), {
|
|
18
|
+
name: this.getName(),
|
|
19
|
+
unique: this.isUnique()
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
isPrimaryKey() {
|
|
24
|
+
return false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
isUnique() {
|
|
28
|
+
return digg(this, "data", "unique") == 1
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import debounce from "debounce"
|
|
4
|
+
import queryWeb from "./query.web.js"
|
|
5
|
+
|
|
6
|
+
export default class VelociousDatabaseDriversSqliteConnectionSqlJs {
|
|
7
|
+
/**
|
|
8
|
+
* Runs constructor.
|
|
9
|
+
* @param {import("../base.js").default} driver - Database driver instance.
|
|
10
|
+
* @param {import("sql.js").Database} connection - Connection.
|
|
11
|
+
*/
|
|
12
|
+
constructor(driver, connection) {
|
|
13
|
+
this.connection = connection
|
|
14
|
+
this.driver = driver
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async close() {
|
|
18
|
+
await this.saveDatabase()
|
|
19
|
+
await this.connection.close()
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Runs query.
|
|
23
|
+
* @param {string} sql - SQL string.
|
|
24
|
+
* @returns {Promise<Record<string, ?>[]>} - Resolves with the query.
|
|
25
|
+
*/
|
|
26
|
+
async query(sql) {
|
|
27
|
+
const result = await queryWeb(this.connection, sql)
|
|
28
|
+
const downcasedSQL = sql.toLowerCase().trim()
|
|
29
|
+
|
|
30
|
+
// Auto-save database in local storage in case we can find manipulating instructions in the SQL
|
|
31
|
+
if (downcasedSQL.startsWith("delete ") || downcasedSQL.startsWith("insert into ") || downcasedSQL.startsWith("update ")) {
|
|
32
|
+
this.saveDatabaseDebounce()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return result
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
saveDatabase = async () => {
|
|
39
|
+
const localStorageContent = this.connection.export()
|
|
40
|
+
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
await this.driver.betterLocalStorage.set(this.driver.localStorageName(), localStorageContent)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
saveDatabaseDebounce = debounce(this.saveDatabase, 500)
|
|
46
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseForeignKey from "../base-foreign-key.js"
|
|
4
|
+
import {digg} from "diggerize"
|
|
5
|
+
|
|
6
|
+
export default class VelociousDatabaseDriversSqliteForeignKey extends BaseForeignKey {
|
|
7
|
+
/**
|
|
8
|
+
* Runs constructor.
|
|
9
|
+
* @param {Record<string, ?>} data - Data payload.
|
|
10
|
+
* @param {object} args - Options object.
|
|
11
|
+
* @param {string} args.tableName - Table name.
|
|
12
|
+
*/
|
|
13
|
+
constructor(data, {tableName}) {
|
|
14
|
+
super(data)
|
|
15
|
+
this.tableName = tableName
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getColumnName() { return digg(this, "data", "from") }
|
|
19
|
+
getName() { return `${this.getTableName()}_${this.getColumnName()}_${this.data.id}` }
|
|
20
|
+
getTableName() { return digg(this, "tableName") }
|
|
21
|
+
getReferencedColumnName() { return digg(this, "data", "to") }
|
|
22
|
+
getReferencedTableName() { return digg(this, "data", "table") }
|
|
23
|
+
}
|
|
24
|
+
|