velocious 1.0.427 → 1.0.429
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/README.md +2 -0
- package/build/src/application.d.ts +96 -9
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +127 -28
- package/build/src/authorization/ability.d.ts +72 -31
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +59 -22
- package/build/src/authorization/base-resource.d.ts +47 -20
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +43 -14
- package/build/src/background-jobs/client.d.ts +4 -2
- package/build/src/background-jobs/client.d.ts.map +1 -1
- package/build/src/background-jobs/client.js +4 -2
- package/build/src/background-jobs/cron-expression.d.ts +9 -5
- package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
- package/build/src/background-jobs/cron-expression.js +16 -6
- package/build/src/background-jobs/forked-runner-child.js +12 -5
- package/build/src/background-jobs/job-registry.d.ts +7 -1
- package/build/src/background-jobs/job-registry.d.ts.map +1 -1
- package/build/src/background-jobs/job-registry.js +8 -2
- package/build/src/background-jobs/job-runner.d.ts +1 -0
- package/build/src/background-jobs/job-runner.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.js +8 -3
- package/build/src/background-jobs/job.d.ts +12 -8
- package/build/src/background-jobs/job.d.ts.map +1 -1
- package/build/src/background-jobs/job.js +12 -6
- package/build/src/background-jobs/json-socket.d.ts +17 -5
- package/build/src/background-jobs/json-socket.d.ts.map +1 -1
- package/build/src/background-jobs/json-socket.js +18 -6
- package/build/src/background-jobs/main.d.ts +118 -32
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +123 -35
- package/build/src/background-jobs/normalize-error.d.ts +2 -1
- package/build/src/background-jobs/normalize-error.d.ts.map +1 -1
- package/build/src/background-jobs/normalize-error.js +5 -3
- package/build/src/background-jobs/scheduler.d.ts +31 -10
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +33 -11
- package/build/src/background-jobs/socket-request.d.ts +2 -0
- package/build/src/background-jobs/socket-request.d.ts.map +1 -1
- package/build/src/background-jobs/socket-request.js +11 -3
- package/build/src/background-jobs/status-reporter.d.ts +5 -2
- package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
- package/build/src/background-jobs/status-reporter.js +6 -3
- package/build/src/background-jobs/store.d.ts +57 -19
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +70 -20
- package/build/src/background-jobs/types.d.ts +7 -7
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +6 -6
- package/build/src/background-jobs/web/authorization.d.ts.map +1 -1
- package/build/src/background-jobs/web/authorization.js +3 -1
- package/build/src/background-jobs/web/controller.d.ts +40 -14
- package/build/src/background-jobs/web/controller.d.ts.map +1 -1
- package/build/src/background-jobs/web/controller.js +46 -15
- package/build/src/background-jobs/web/registry.d.ts +5 -0
- package/build/src/background-jobs/web/registry.d.ts.map +1 -1
- package/build/src/background-jobs/web/registry.js +4 -1
- package/build/src/background-jobs/worker.d.ts +41 -8
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +64 -16
- package/build/src/beacon/client.d.ts +39 -12
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +45 -15
- package/build/src/beacon/in-process-broker.d.ts +4 -0
- package/build/src/beacon/in-process-broker.d.ts.map +1 -1
- package/build/src/beacon/in-process-broker.js +8 -3
- package/build/src/beacon/in-process-client.d.ts +28 -9
- package/build/src/beacon/in-process-client.d.ts.map +1 -1
- package/build/src/beacon/in-process-client.js +27 -9
- package/build/src/beacon/server.d.ts +13 -2
- package/build/src/beacon/server.d.ts.map +1 -1
- package/build/src/beacon/server.js +21 -5
- package/build/src/beacon/types.d.ts +3 -3
- package/build/src/beacon/types.d.ts.map +1 -1
- package/build/src/beacon/types.js +2 -2
- package/build/src/cli/base-command.d.ts +18 -4
- package/build/src/cli/base-command.d.ts.map +1 -1
- package/build/src/cli/base-command.js +15 -4
- package/build/src/cli/browser-cli.d.ts +3 -0
- package/build/src/cli/browser-cli.d.ts.map +1 -1
- package/build/src/cli/browser-cli.js +7 -2
- package/build/src/cli/commands/background-jobs-main.d.ts +0 -1
- package/build/src/cli/commands/background-jobs-main.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-runner.d.ts +0 -1
- package/build/src/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-worker.d.ts +0 -1
- package/build/src/cli/commands/background-jobs-worker.d.ts.map +1 -1
- package/build/src/cli/commands/beacon.d.ts +0 -1
- package/build/src/cli/commands/beacon.d.ts.map +1 -1
- package/build/src/cli/commands/console.d.ts +0 -2
- package/build/src/cli/commands/console.d.ts.map +1 -1
- package/build/src/cli/commands/console.js +5 -2
- package/build/src/cli/commands/db/base-command.d.ts +11 -2
- package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
- package/build/src/cli/commands/db/base-command.js +12 -3
- package/build/src/cli/commands/db/create.d.ts +3 -0
- package/build/src/cli/commands/db/create.d.ts.map +1 -1
- package/build/src/cli/commands/db/create.js +4 -1
- package/build/src/cli/commands/db/drop.d.ts +3 -0
- package/build/src/cli/commands/db/drop.d.ts.map +1 -1
- package/build/src/cli/commands/db/drop.js +4 -1
- package/build/src/cli/commands/db/schema/dump.d.ts +0 -2
- package/build/src/cli/commands/db/schema/dump.d.ts.map +1 -1
- package/build/src/cli/commands/db/schema/dump.js +5 -2
- package/build/src/cli/commands/db/schema/load.d.ts +0 -2
- package/build/src/cli/commands/db/schema/load.d.ts.map +1 -1
- package/build/src/cli/commands/db/schema/load.js +5 -2
- package/build/src/cli/commands/db/seed.d.ts +0 -2
- package/build/src/cli/commands/db/seed.d.ts.map +1 -1
- package/build/src/cli/commands/db/seed.js +5 -2
- package/build/src/cli/commands/db/tenants/check.d.ts +4 -1
- package/build/src/cli/commands/db/tenants/check.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/check.js +5 -2
- package/build/src/cli/commands/db/tenants/create.d.ts +4 -1
- package/build/src/cli/commands/db/tenants/create.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/create.js +5 -2
- package/build/src/cli/commands/db/tenants/migrate.d.ts +4 -1
- package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/migrate.js +5 -2
- package/build/src/cli/commands/destroy/migration.d.ts +0 -1
- package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/base-models.d.ts +0 -1
- package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/cli/commands/generate/frontend-models.d.ts +0 -2
- package/build/src/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/cli/commands/generate/frontend-models.js +5 -2
- package/build/src/cli/commands/generate/migration.d.ts +0 -1
- package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/model.d.ts +0 -1
- package/build/src/cli/commands/generate/model.d.ts.map +1 -1
- package/build/src/cli/commands/init.d.ts +0 -1
- package/build/src/cli/commands/init.d.ts.map +1 -1
- package/build/src/cli/commands/routes.d.ts +0 -1
- package/build/src/cli/commands/routes.d.ts.map +1 -1
- package/build/src/cli/commands/run-script.d.ts +0 -2
- package/build/src/cli/commands/run-script.d.ts.map +1 -1
- package/build/src/cli/commands/run-script.js +5 -2
- package/build/src/cli/commands/runner.d.ts +0 -2
- package/build/src/cli/commands/runner.d.ts.map +1 -1
- package/build/src/cli/commands/runner.js +5 -2
- package/build/src/cli/commands/server.d.ts +0 -1
- package/build/src/cli/commands/server.d.ts.map +1 -1
- package/build/src/cli/commands/test.d.ts +0 -1
- package/build/src/cli/commands/test.d.ts.map +1 -1
- package/build/src/cli/index.d.ts +18 -5
- package/build/src/cli/index.d.ts.map +1 -1
- package/build/src/cli/index.js +25 -8
- package/build/src/cli/tenant-database-command-helper.d.ts +24 -9
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +30 -11
- package/build/src/cli/use-browser-cli.d.ts +1 -0
- package/build/src/cli/use-browser-cli.d.ts.map +1 -1
- package/build/src/cli/use-browser-cli.js +5 -2
- package/build/src/configuration-resolver.d.ts +1 -0
- package/build/src/configuration-resolver.d.ts.map +1 -1
- package/build/src/configuration-resolver.js +2 -1
- package/build/src/configuration-types.d.ts +44 -44
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +27 -27
- package/build/src/configuration.d.ts +350 -114
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +416 -128
- package/build/src/controller.d.ts +67 -18
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +88 -23
- package/build/src/current-configuration.d.ts +2 -0
- package/build/src/current-configuration.d.ts.map +1 -1
- package/build/src/current-configuration.js +6 -2
- package/build/src/current.d.ts +16 -9
- package/build/src/current.d.ts.map +1 -1
- package/build/src/current.js +15 -8
- package/build/src/database/annotations-async-hooks.js +13 -6
- package/build/src/database/annotations.d.ts +7 -1
- package/build/src/database/annotations.d.ts.map +1 -1
- package/build/src/database/annotations.js +12 -5
- package/build/src/database/drivers/base-column.d.ts +21 -3
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +21 -3
- package/build/src/database/drivers/base-columns-index.d.ts +9 -0
- package/build/src/database/drivers/base-columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/base-columns-index.js +10 -1
- package/build/src/database/drivers/base-foreign-key.d.ts +15 -3
- package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/base-foreign-key.js +15 -3
- package/build/src/database/drivers/base-table.d.ts +16 -3
- package/build/src/database/drivers/base-table.d.ts.map +1 -1
- package/build/src/database/drivers/base-table.js +16 -3
- package/build/src/database/drivers/base.d.ts +174 -37
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +156 -40
- package/build/src/database/drivers/mssql/column.d.ts +3 -2
- package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/column.js +3 -2
- package/build/src/database/drivers/mssql/index.d.ts +5 -6
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +38 -7
- package/build/src/database/drivers/mssql/options.d.ts +1 -0
- package/build/src/database/drivers/mssql/options.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/options.js +8 -2
- package/build/src/database/drivers/mssql/sql/create-database.d.ts +1 -0
- package/build/src/database/drivers/mssql/sql/create-database.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/create-database.js +2 -1
- package/build/src/database/drivers/mssql/sql/drop-database.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/drop-database.js +2 -1
- package/build/src/database/drivers/mssql/structure-sql.d.ts +5 -2
- package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/structure-sql.js +5 -2
- package/build/src/database/drivers/mssql/table.d.ts +1 -0
- package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/table.js +9 -4
- package/build/src/database/drivers/mysql/column.d.ts +3 -2
- package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/column.js +4 -3
- package/build/src/database/drivers/mysql/index.d.ts +11 -3
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +54 -10
- package/build/src/database/drivers/mysql/options.d.ts +1 -0
- package/build/src/database/drivers/mysql/options.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/options.js +4 -2
- package/build/src/database/drivers/mysql/query.d.ts +3 -2
- package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/query.js +6 -3
- package/build/src/database/drivers/mysql/sql/create-database.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/create-database.js +3 -1
- package/build/src/database/drivers/mysql/structure-sql.d.ts +7 -2
- package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/structure-sql.js +7 -2
- package/build/src/database/drivers/mysql/table.d.ts +1 -0
- package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/table.js +7 -3
- package/build/src/database/drivers/pgsql/column.d.ts +3 -2
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +3 -2
- package/build/src/database/drivers/pgsql/index.d.ts +1 -1
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +36 -11
- package/build/src/database/drivers/pgsql/options.d.ts +2 -0
- package/build/src/database/drivers/pgsql/options.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/options.js +3 -1
- package/build/src/database/drivers/pgsql/structure-sql.d.ts +5 -2
- package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/structure-sql.js +5 -2
- package/build/src/database/drivers/pgsql/table.d.ts +1 -0
- package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/table.js +6 -2
- package/build/src/database/drivers/sqlite/base.d.ts +15 -5
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +79 -27
- package/build/src/database/drivers/sqlite/column.d.ts +3 -2
- package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/column.js +3 -2
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +4 -2
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/connection-sql-js.js +4 -2
- package/build/src/database/drivers/sqlite/foreign-key.d.ts +3 -2
- package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/foreign-key.js +3 -2
- package/build/src/database/drivers/sqlite/index.d.ts +18 -5
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +40 -16
- package/build/src/database/drivers/sqlite/index.native.d.ts +1 -1
- package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.native.js +6 -3
- package/build/src/database/drivers/sqlite/index.web.d.ts +16 -4
- package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.web.js +17 -7
- package/build/src/database/drivers/sqlite/options.d.ts +2 -0
- package/build/src/database/drivers/sqlite/options.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/options.js +3 -1
- package/build/src/database/drivers/sqlite/query.d.ts +3 -2
- package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.js +6 -3
- package/build/src/database/drivers/sqlite/query.native.d.ts +2 -2
- package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.native.js +3 -3
- package/build/src/database/drivers/sqlite/query.web.d.ts +3 -2
- package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.web.js +6 -3
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +9 -3
- package/build/src/database/drivers/sqlite/structure-sql.d.ts +2 -0
- package/build/src/database/drivers/sqlite/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/structure-sql.js +3 -1
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts +2 -0
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table-rebuilder.js +3 -1
- package/build/src/database/drivers/sqlite/table.d.ts +2 -0
- package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table.js +14 -4
- package/build/src/database/drivers/structure-sql/utils.d.ts +2 -0
- package/build/src/database/drivers/structure-sql/utils.d.ts.map +1 -1
- package/build/src/database/drivers/structure-sql/utils.js +3 -1
- package/build/src/database/handler.d.ts +1 -0
- package/build/src/database/handler.d.ts.map +1 -1
- package/build/src/database/handler.js +2 -1
- package/build/src/database/initializer-from-require-context.d.ts +8 -0
- package/build/src/database/initializer-from-require-context.d.ts.map +1 -1
- package/build/src/database/initializer-from-require-context.js +4 -1
- package/build/src/database/migration/index.d.ts +40 -5
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +34 -6
- package/build/src/database/migrator/files-finder.d.ts +2 -0
- package/build/src/database/migrator/files-finder.d.ts.map +1 -1
- package/build/src/database/migrator/files-finder.js +6 -2
- package/build/src/database/migrator.d.ts +29 -4
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +45 -10
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +126 -37
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +187 -57
- package/build/src/database/pool/base-methods-forward.d.ts +1 -0
- package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
- package/build/src/database/pool/base-methods-forward.js +12 -3
- package/build/src/database/pool/base.d.ts +39 -7
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +59 -18
- package/build/src/database/pool/single-multi-use.d.ts +1 -0
- package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
- package/build/src/database/pool/single-multi-use.js +16 -4
- package/build/src/database/query/alter-table-base.d.ts +1 -0
- package/build/src/database/query/alter-table-base.d.ts.map +1 -1
- package/build/src/database/query/alter-table-base.js +3 -1
- package/build/src/database/query/base.d.ts +3 -0
- package/build/src/database/query/base.d.ts.map +1 -1
- package/build/src/database/query/base.js +4 -1
- package/build/src/database/query/create-database-base.d.ts +5 -0
- package/build/src/database/query/create-database-base.d.ts.map +1 -1
- package/build/src/database/query/create-database-base.js +4 -1
- package/build/src/database/query/create-index-base.d.ts +5 -0
- package/build/src/database/query/create-index-base.d.ts.map +1 -1
- package/build/src/database/query/create-index-base.js +4 -1
- package/build/src/database/query/create-table-base.d.ts +2 -0
- package/build/src/database/query/create-table-base.d.ts.map +1 -1
- package/build/src/database/query/create-table-base.js +3 -1
- package/build/src/database/query/delete-base.d.ts +3 -2
- package/build/src/database/query/delete-base.d.ts.map +1 -1
- package/build/src/database/query/delete-base.js +3 -2
- package/build/src/database/query/drop-database-base.d.ts +5 -0
- package/build/src/database/query/drop-database-base.d.ts.map +1 -1
- package/build/src/database/query/drop-database-base.js +4 -1
- package/build/src/database/query/drop-table-base.d.ts +1 -0
- package/build/src/database/query/drop-table-base.d.ts.map +1 -1
- package/build/src/database/query/drop-table-base.js +3 -1
- package/build/src/database/query/from-base.d.ts +6 -1
- package/build/src/database/query/from-base.d.ts.map +1 -1
- package/build/src/database/query/from-base.js +7 -2
- package/build/src/database/query/from-plain.d.ts +1 -0
- package/build/src/database/query/from-plain.d.ts.map +1 -1
- package/build/src/database/query/from-plain.js +2 -1
- package/build/src/database/query/from-table.d.ts +1 -0
- package/build/src/database/query/from-table.d.ts.map +1 -1
- package/build/src/database/query/from-table.js +2 -1
- package/build/src/database/query/index.d.ts +72 -12
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +79 -19
- package/build/src/database/query/insert-base.d.ts +13 -8
- package/build/src/database/query/insert-base.d.ts.map +1 -1
- package/build/src/database/query/insert-base.js +10 -5
- package/build/src/database/query/join-base.d.ts +4 -0
- package/build/src/database/query/join-base.d.ts.map +1 -1
- package/build/src/database/query/join-base.js +5 -1
- package/build/src/database/query/join-object.d.ts +11 -0
- package/build/src/database/query/join-object.d.ts.map +1 -1
- package/build/src/database/query/join-object.js +15 -4
- package/build/src/database/query/join-plain.d.ts +1 -0
- package/build/src/database/query/join-plain.d.ts.map +1 -1
- package/build/src/database/query/join-plain.js +2 -1
- package/build/src/database/query/join-tracker.d.ts +7 -0
- package/build/src/database/query/join-tracker.d.ts.map +1 -1
- package/build/src/database/query/join-tracker.js +8 -1
- package/build/src/database/query/model-class-query.d.ts +92 -26
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +230 -76
- package/build/src/database/query/order-base.d.ts +3 -0
- package/build/src/database/query/order-base.d.ts.map +1 -1
- package/build/src/database/query/order-base.js +4 -1
- package/build/src/database/query/order-column.d.ts +9 -1
- package/build/src/database/query/order-column.d.ts.map +1 -1
- package/build/src/database/query/order-column.js +10 -2
- package/build/src/database/query/order-plain.d.ts +1 -0
- package/build/src/database/query/order-plain.d.ts.map +1 -1
- package/build/src/database/query/order-plain.js +2 -1
- package/build/src/database/query/preloader/belongs-to.d.ts +1 -0
- package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.js +68 -23
- package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts +1 -0
- package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts.map +1 -1
- package/build/src/database/query/preloader/ensure-model-class-initialized.js +2 -1
- package/build/src/database/query/preloader/has-many.d.ts +5 -3
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +66 -24
- package/build/src/database/query/preloader/has-one.d.ts +1 -0
- package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-one.js +26 -9
- package/build/src/database/query/preloader/selection.d.ts +7 -1
- package/build/src/database/query/preloader/selection.d.ts.map +1 -1
- package/build/src/database/query/preloader/selection.js +13 -5
- package/build/src/database/query/preloader.d.ts +1 -0
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +28 -9
- package/build/src/database/query/query-data.d.ts +21 -7
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +37 -18
- package/build/src/database/query/select-base.d.ts +3 -0
- package/build/src/database/query/select-base.d.ts.map +1 -1
- package/build/src/database/query/select-base.js +4 -1
- package/build/src/database/query/select-plain.d.ts +1 -0
- package/build/src/database/query/select-plain.d.ts.map +1 -1
- package/build/src/database/query/select-plain.js +2 -1
- package/build/src/database/query/select-table-and-column.d.ts +1 -0
- package/build/src/database/query/select-table-and-column.d.ts.map +1 -1
- package/build/src/database/query/select-table-and-column.js +2 -1
- package/build/src/database/query/update-base.d.ts +9 -6
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +7 -4
- package/build/src/database/query/upsert-base.d.ts +13 -4
- package/build/src/database/query/upsert-base.d.ts.map +1 -1
- package/build/src/database/query/upsert-base.js +12 -3
- package/build/src/database/query/where-base.d.ts +4 -0
- package/build/src/database/query/where-base.d.ts.map +1 -1
- package/build/src/database/query/where-base.js +5 -1
- package/build/src/database/query/where-combinator.d.ts +1 -0
- package/build/src/database/query/where-combinator.d.ts.map +1 -1
- package/build/src/database/query/where-combinator.js +6 -2
- package/build/src/database/query/where-hash.d.ts +6 -0
- package/build/src/database/query/where-hash.d.ts.map +1 -1
- package/build/src/database/query/where-hash.js +5 -1
- package/build/src/database/query/where-model-class-hash.d.ts +30 -16
- package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.js +55 -20
- package/build/src/database/query/where-not.d.ts +1 -0
- package/build/src/database/query/where-not.d.ts.map +1 -1
- package/build/src/database/query/where-not.js +3 -1
- package/build/src/database/query/where-plain.d.ts +1 -0
- package/build/src/database/query/where-plain.d.ts.map +1 -1
- package/build/src/database/query/where-plain.js +2 -1
- package/build/src/database/query/with-count.d.ts +11 -5
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +36 -15
- package/build/src/database/query-parser/base-query-parser.d.ts +1 -0
- package/build/src/database/query-parser/base-query-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/base-query-parser.js +2 -1
- package/build/src/database/query-parser/from-parser.d.ts +5 -1
- package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/from-parser.js +6 -2
- package/build/src/database/query-parser/group-parser.d.ts +2 -0
- package/build/src/database/query-parser/group-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/group-parser.js +3 -1
- package/build/src/database/query-parser/joins-parser.d.ts +1 -0
- package/build/src/database/query-parser/joins-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/joins-parser.js +2 -1
- package/build/src/database/query-parser/limit-parser.d.ts +1 -0
- package/build/src/database/query-parser/limit-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/limit-parser.js +2 -1
- package/build/src/database/query-parser/options.d.ts +15 -4
- package/build/src/database/query-parser/options.d.ts.map +1 -1
- package/build/src/database/query-parser/options.js +11 -3
- package/build/src/database/query-parser/order-parser.d.ts +1 -0
- package/build/src/database/query-parser/order-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/order-parser.js +2 -1
- package/build/src/database/query-parser/select-parser.d.ts +1 -0
- package/build/src/database/query-parser/select-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/select-parser.js +2 -1
- package/build/src/database/query-parser/where-parser.d.ts +1 -0
- package/build/src/database/query-parser/where-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/where-parser.js +2 -1
- package/build/src/database/record/acts-as-list.d.ts +0 -1
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +61 -23
- package/build/src/database/record/attachments/download.d.ts +34 -15
- package/build/src/database/record/attachments/download.d.ts.map +1 -1
- package/build/src/database/record/attachments/download.js +34 -22
- package/build/src/database/record/attachments/handle.d.ts +17 -5
- package/build/src/database/record/attachments/handle.d.ts.map +1 -1
- package/build/src/database/record/attachments/handle.js +25 -9
- package/build/src/database/record/attachments/normalize-input.d.ts +6 -1
- package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
- package/build/src/database/record/attachments/normalize-input.js +54 -17
- package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts +7 -1
- package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +10 -2
- package/build/src/database/record/attachments/storage-drivers/native.d.ts +12 -7
- package/build/src/database/record/attachments/storage-drivers/native.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/native.js +13 -6
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts +18 -9
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/s3.js +38 -13
- package/build/src/database/record/attachments/store.d.ts +48 -25
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +63 -25
- package/build/src/database/record/index.d.ts +388 -146
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +686 -248
- package/build/src/database/record/instance-relationships/base.d.ts +78 -19
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +98 -26
- package/build/src/database/record/instance-relationships/belongs-to.d.ts +1 -0
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +13 -5
- package/build/src/database/record/instance-relationships/has-many.d.ts +27 -7
- package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-many.js +50 -16
- package/build/src/database/record/instance-relationships/has-one.d.ts +4 -1
- package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-one.js +28 -10
- package/build/src/database/record/relationships/base.d.ts +61 -14
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +60 -15
- package/build/src/database/record/relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/relationships/belongs-to.js +9 -3
- package/build/src/database/record/relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/relationships/has-many.js +9 -3
- package/build/src/database/record/relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/relationships/has-one.js +9 -3
- package/build/src/database/record/state-machine.d.ts +9 -1
- package/build/src/database/record/state-machine.d.ts.map +1 -1
- package/build/src/database/record/state-machine.js +35 -14
- package/build/src/database/record/user-module.d.ts +2 -0
- package/build/src/database/record/user-module.d.ts.map +1 -1
- package/build/src/database/record/user-module.js +3 -1
- package/build/src/database/record/validators/base.d.ts +4 -2
- package/build/src/database/record/validators/base.d.ts.map +1 -1
- package/build/src/database/record/validators/base.js +4 -2
- package/build/src/database/record/validators/format.d.ts.map +1 -1
- package/build/src/database/record/validators/format.js +2 -1
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.js +5 -2
- package/build/src/database/record/validators/uniqueness.d.ts +0 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +18 -8
- package/build/src/database/table-data/index.d.ts +40 -4
- package/build/src/database/table-data/index.d.ts.map +1 -1
- package/build/src/database/table-data/index.js +38 -5
- package/build/src/database/table-data/table-column.d.ts +43 -5
- package/build/src/database/table-data/table-column.d.ts.map +1 -1
- package/build/src/database/table-data/table-column.js +37 -4
- package/build/src/database/table-data/table-foreign-key.d.ts +8 -0
- package/build/src/database/table-data/table-foreign-key.d.ts.map +1 -1
- package/build/src/database/table-data/table-foreign-key.js +9 -1
- package/build/src/database/table-data/table-index.d.ts +8 -0
- package/build/src/database/table-data/table-index.d.ts.map +1 -1
- package/build/src/database/table-data/table-index.js +6 -1
- package/build/src/database/table-data/table-reference.d.ts +1 -0
- package/build/src/database/table-data/table-reference.d.ts.map +1 -1
- package/build/src/database/table-data/table-reference.js +2 -1
- package/build/src/database/use-database.d.ts +1 -0
- package/build/src/database/use-database.d.ts.map +1 -1
- package/build/src/database/use-database.js +2 -1
- package/build/src/environment-handlers/base.d.ts +94 -36
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +90 -36
- package/build/src/environment-handlers/browser.d.ts +33 -3
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +36 -9
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +6 -2
- package/build/src/environment-handlers/node/cli/commands/console.d.ts +3 -2
- package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.js +23 -9
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +4 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +5 -2
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +6 -2
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +11 -5
- package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts +15 -5
- package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/seed.js +20 -6
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +2 -0
- 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 +6 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +43 -29
- 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 +99 -40
- package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/init.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/init.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/init.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/routes.d.ts +3 -0
- package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/routes.js +4 -1
- package/build/src/environment-handlers/node/cli/commands/run-script.d.ts +15 -5
- package/build/src/environment-handlers/node/cli/commands/run-script.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/run-script.js +20 -6
- package/build/src/environment-handlers/node/cli/commands/runner.d.ts +18 -6
- package/build/src/environment-handlers/node/cli/commands/runner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/runner.js +20 -6
- package/build/src/environment-handlers/node/cli/commands/server.d.ts +13 -1
- package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/server.js +23 -6
- package/build/src/environment-handlers/node.d.ts +14 -2
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +107 -39
- package/build/src/error-logger.d.ts +4 -3
- package/build/src/error-logger.d.ts.map +1 -1
- package/build/src/error-logger.js +4 -3
- package/build/src/frontend-model-controller.d.ts +239 -90
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +577 -787
- package/build/src/frontend-model-resource/base-resource.d.ts +118 -66
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +205 -82
- package/build/src/frontend-models/base.d.ts +319 -163
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +717 -366
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts +2 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.js +6 -3
- package/build/src/frontend-models/event-hook-models.d.ts +5 -0
- package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
- package/build/src/frontend-models/event-hook-models.js +10 -3
- package/build/src/frontend-models/model-registry.d.ts +5 -5
- package/build/src/frontend-models/model-registry.d.ts.map +1 -1
- package/build/src/frontend-models/model-registry.js +5 -5
- package/build/src/frontend-models/outgoing-event-buffer.d.ts +11 -3
- package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
- package/build/src/frontend-models/outgoing-event-buffer.js +13 -5
- package/build/src/frontend-models/preloader.d.ts +9 -6
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +21 -9
- package/build/src/frontend-models/query.d.ts +283 -73
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +331 -203
- package/build/src/frontend-models/resource-config-validation.d.ts +2 -0
- package/build/src/frontend-models/resource-config-validation.d.ts.map +1 -1
- package/build/src/frontend-models/resource-config-validation.js +3 -1
- package/build/src/frontend-models/resource-definition.d.ts +12 -5
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +39 -13
- package/build/src/frontend-models/transport-serialization.d.ts +14 -11
- package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.js +80 -53
- package/build/src/frontend-models/use-destroyed-event.d.ts +21 -0
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +34 -11
- package/build/src/frontend-models/use-model-class-event.d.ts +24 -0
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +39 -12
- package/build/src/frontend-models/use-updated-event.d.ts +21 -0
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +37 -12
- package/build/src/frontend-models/websocket-channel.d.ts +51 -9
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +96 -26
- package/build/src/frontend-models/websocket-publishers.d.ts +2 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +33 -11
- package/build/src/http-client/header.d.ts +1 -0
- package/build/src/http-client/header.d.ts.map +1 -1
- package/build/src/http-client/header.js +2 -1
- package/build/src/http-client/index.d.ts +4 -0
- package/build/src/http-client/index.d.ts.map +1 -1
- package/build/src/http-client/index.js +5 -1
- package/build/src/http-client/request.d.ts +5 -0
- package/build/src/http-client/request.d.ts.map +1 -1
- package/build/src/http-client/request.js +6 -1
- package/build/src/http-client/response.d.ts +14 -4
- package/build/src/http-client/response.d.ts.map +1 -1
- package/build/src/http-client/response.js +14 -4
- package/build/src/http-client/websocket-client.d.ts +1 -0
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-client/websocket-client.js +2 -1
- package/build/src/http-server/client/index.d.ts +16 -2
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +44 -13
- package/build/src/http-server/client/params-to-object.d.ts +16 -10
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +46 -17
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts +10 -6
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/form-data-part.js +11 -7
- package/build/src/http-server/client/request-buffer/header.d.ts +1 -0
- package/build/src/http-server/client/request-buffer/header.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/header.js +2 -1
- package/build/src/http-server/client/request-buffer/index.d.ts +29 -4
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +43 -9
- package/build/src/http-server/client/request-parser.d.ts +52 -13
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +58 -15
- package/build/src/http-server/client/request-runner.d.ts +5 -1
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +32 -8
- package/build/src/http-server/client/request-timing.d.ts +37 -7
- package/build/src/http-server/client/request-timing.d.ts.map +1 -1
- package/build/src/http-server/client/request-timing.js +32 -8
- package/build/src/http-server/client/request.d.ts +15 -5
- package/build/src/http-server/client/request.d.ts.map +1 -1
- package/build/src/http-server/client/request.js +17 -5
- package/build/src/http-server/client/response.d.ts +22 -4
- package/build/src/http-server/client/response.d.ts.map +1 -1
- package/build/src/http-server/client/response.js +29 -7
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +1 -0
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +3 -1
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +1 -0
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +3 -1
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +2 -0
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +3 -1
- package/build/src/http-server/client/websocket-request.d.ts +24 -12
- package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-request.js +24 -10
- package/build/src/http-server/client/websocket-session.d.ts +101 -62
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +118 -61
- package/build/src/http-server/cookie.d.ts +36 -8
- package/build/src/http-server/cookie.d.ts.map +1 -1
- package/build/src/http-server/cookie.js +37 -9
- package/build/src/http-server/development-reloader.d.ts +32 -7
- package/build/src/http-server/development-reloader.d.ts.map +1 -1
- package/build/src/http-server/development-reloader.js +39 -10
- package/build/src/http-server/index.d.ts +102 -25
- package/build/src/http-server/index.d.ts.map +1 -1
- package/build/src/http-server/index.js +117 -32
- package/build/src/http-server/remote-address.d.ts +1 -0
- package/build/src/http-server/remote-address.d.ts.map +1 -1
- package/build/src/http-server/remote-address.js +15 -4
- package/build/src/http-server/server-client.d.ts +37 -8
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +48 -12
- package/build/src/http-server/server-lock.d.ts +76 -0
- package/build/src/http-server/server-lock.d.ts.map +1 -0
- package/build/src/http-server/server-lock.js +164 -0
- package/build/src/http-server/websocket-channel-subscribers.d.ts +13 -8
- package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel-subscribers.js +16 -7
- package/build/src/http-server/websocket-channel.d.ts +13 -11
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +8 -12
- package/build/src/http-server/websocket-connection.d.ts +10 -14
- package/build/src/http-server/websocket-connection.d.ts.map +1 -1
- package/build/src/http-server/websocket-connection.js +8 -12
- package/build/src/http-server/websocket-event-log-store.d.ts +48 -10
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +76 -34
- package/build/src/http-server/websocket-events-host.d.ts +21 -15
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +20 -11
- package/build/src/http-server/websocket-events.d.ts +8 -7
- package/build/src/http-server/websocket-events.d.ts.map +1 -1
- package/build/src/http-server/websocket-events.js +6 -5
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts +3 -2
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +3 -2
- package/build/src/http-server/worker-handler/in-process.d.ts +18 -18
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +28 -20
- package/build/src/http-server/worker-handler/index.d.ts +39 -20
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +34 -14
- package/build/src/http-server/worker-handler/worker-thread.d.ts +31 -15
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +31 -12
- package/build/src/initializer.d.ts +4 -0
- package/build/src/initializer.d.ts.map +1 -1
- package/build/src/initializer.js +5 -1
- package/build/src/jobs/mail-delivery.d.ts +1 -0
- package/build/src/jobs/mail-delivery.d.ts.map +1 -1
- package/build/src/jobs/mail-delivery.js +2 -1
- package/build/src/logger/base-logger.js +2 -2
- package/build/src/logger/console-logger.d.ts +2 -0
- package/build/src/logger/console-logger.d.ts.map +1 -1
- package/build/src/logger/console-logger.js +3 -1
- package/build/src/logger/file-logger.d.ts +2 -0
- package/build/src/logger/file-logger.d.ts.map +1 -1
- package/build/src/logger/file-logger.js +3 -1
- package/build/src/logger/outputs/array-output.d.ts +21 -5
- package/build/src/logger/outputs/array-output.d.ts.map +1 -1
- package/build/src/logger/outputs/array-output.js +19 -6
- package/build/src/logger/outputs/console-output.d.ts +10 -2
- package/build/src/logger/outputs/console-output.d.ts.map +1 -1
- package/build/src/logger/outputs/console-output.js +8 -3
- package/build/src/logger/outputs/file-output.d.ts +20 -5
- package/build/src/logger/outputs/file-output.d.ts.map +1 -1
- package/build/src/logger/outputs/file-output.js +18 -6
- package/build/src/logger/outputs/stdout-output.d.ts +7 -1
- package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
- package/build/src/logger/outputs/stdout-output.js +9 -3
- package/build/src/logger.d.ts +28 -13
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +60 -23
- package/build/src/mailer/backends/smtp.d.ts +5 -0
- package/build/src/mailer/backends/smtp.d.ts.map +1 -1
- package/build/src/mailer/backends/smtp.js +17 -4
- package/build/src/mailer/base.d.ts +33 -17
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +54 -18
- package/build/src/mailer/delivery.d.ts +16 -5
- package/build/src/mailer/delivery.d.ts.map +1 -1
- package/build/src/mailer/delivery.js +18 -7
- package/build/src/mailer/index.d.ts +5 -5
- package/build/src/mailer/index.d.ts.map +1 -1
- package/build/src/mailer/index.js +2 -2
- package/build/src/mailer.d.ts +5 -5
- package/build/src/mailer.d.ts.map +1 -1
- package/build/src/mailer.js +2 -2
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts +4 -1
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.js +11 -4
- package/build/src/plugins/sqljs-wasm-route.d.ts +6 -0
- package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route.js +4 -1
- package/build/src/record-payload-values.d.ts +54 -0
- package/build/src/record-payload-values.d.ts.map +1 -0
- package/build/src/record-payload-values.js +80 -0
- package/build/src/routes/app-routes.d.ts +1 -0
- package/build/src/routes/app-routes.d.ts.map +1 -1
- package/build/src/routes/app-routes.js +2 -1
- package/build/src/routes/base-route.d.ts +52 -16
- package/build/src/routes/base-route.d.ts.map +1 -1
- package/build/src/routes/base-route.js +50 -14
- package/build/src/routes/basic-route.d.ts +1 -0
- package/build/src/routes/basic-route.d.ts.map +1 -1
- package/build/src/routes/basic-route.js +13 -4
- package/build/src/routes/built-in/debug/controller.d.ts +4 -1
- package/build/src/routes/built-in/debug/controller.d.ts.map +1 -1
- package/build/src/routes/built-in/debug/controller.js +5 -2
- package/build/src/routes/get-route.d.ts +1 -0
- package/build/src/routes/get-route.d.ts.map +1 -1
- package/build/src/routes/get-route.js +7 -4
- package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts +1 -0
- package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts.map +1 -1
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +6 -2
- package/build/src/routes/index.d.ts +3 -2
- package/build/src/routes/index.d.ts.map +1 -1
- package/build/src/routes/index.js +10 -4
- package/build/src/routes/namespace-route.d.ts +1 -0
- package/build/src/routes/namespace-route.d.ts.map +1 -1
- package/build/src/routes/namespace-route.js +5 -3
- package/build/src/routes/plugin-routes.d.ts +10 -1
- package/build/src/routes/plugin-routes.d.ts.map +1 -1
- package/build/src/routes/plugin-routes.js +11 -3
- package/build/src/routes/post-route.d.ts +1 -0
- package/build/src/routes/post-route.d.ts.map +1 -1
- package/build/src/routes/post-route.js +7 -4
- package/build/src/routes/resolver.d.ts +20 -5
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +47 -14
- package/build/src/routes/resource-route.d.ts +6 -1
- package/build/src/routes/resource-route.d.ts.map +1 -1
- package/build/src/routes/resource-route.js +10 -4
- package/build/src/testing/base-expect.d.ts +2 -0
- package/build/src/testing/base-expect.d.ts.map +1 -1
- package/build/src/testing/base-expect.js +3 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +33 -5
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +95 -23
- package/build/src/testing/expect-to-change.d.ts +3 -0
- package/build/src/testing/expect-to-change.d.ts.map +1 -1
- package/build/src/testing/expect-to-change.js +4 -1
- package/build/src/testing/expect-utils.d.ts +22 -16
- package/build/src/testing/expect-utils.d.ts.map +1 -1
- package/build/src/testing/expect-utils.js +62 -30
- package/build/src/testing/expect.d.ts +50 -21
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +58 -17
- package/build/src/testing/request-client.d.ts +16 -3
- package/build/src/testing/request-client.d.ts.map +1 -1
- package/build/src/testing/request-client.js +17 -4
- package/build/src/testing/test-files-finder.d.ts +41 -9
- package/build/src/testing/test-files-finder.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.js +42 -10
- package/build/src/testing/test-filter-parser.d.ts +6 -0
- package/build/src/testing/test-filter-parser.d.ts.map +1 -1
- package/build/src/testing/test-filter-parser.js +12 -3
- package/build/src/testing/test-runner.d.ts +102 -6
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +115 -23
- package/build/src/testing/test-suite-splitter.d.ts +7 -0
- package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
- package/build/src/testing/test-suite-splitter.js +7 -2
- package/build/src/testing/test.d.ts +20 -4
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +67 -20
- package/build/src/utils/backtrace-cleaner-node.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner-node.js +6 -1
- package/build/src/utils/backtrace-cleaner.d.ts +16 -1
- package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner.js +20 -2
- package/build/src/utils/ensure-error.d.ts +3 -2
- package/build/src/utils/ensure-error.d.ts.map +1 -1
- package/build/src/utils/ensure-error.js +3 -2
- package/build/src/utils/event-emitter.d.ts.map +1 -1
- package/build/src/utils/event-emitter.js +2 -2
- package/build/src/utils/file-exists.d.ts +1 -0
- package/build/src/utils/file-exists.d.ts.map +1 -1
- package/build/src/utils/file-exists.js +2 -1
- package/build/src/utils/format-value.d.ts +5 -4
- package/build/src/utils/format-value.d.ts.map +1 -1
- package/build/src/utils/format-value.js +12 -7
- package/build/src/utils/model-scope.d.ts +18 -12
- package/build/src/utils/model-scope.d.ts.map +1 -1
- package/build/src/utils/model-scope.js +19 -11
- package/build/src/utils/nest-callbacks.d.ts +1 -0
- package/build/src/utils/nest-callbacks.d.ts.map +1 -1
- package/build/src/utils/nest-callbacks.js +2 -1
- package/build/src/utils/plain-object.d.ts +7 -0
- package/build/src/utils/plain-object.d.ts.map +1 -0
- package/build/src/utils/plain-object.js +13 -0
- package/build/src/utils/ransack.d.ts +29 -5
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +136 -49
- package/build/src/utils/rest-args-error.d.ts +1 -0
- package/build/src/utils/rest-args-error.d.ts.map +1 -1
- package/build/src/utils/rest-args-error.js +2 -1
- package/build/src/utils/singularize-model-name.d.ts +1 -0
- package/build/src/utils/singularize-model-name.d.ts.map +1 -1
- package/build/src/utils/singularize-model-name.js +2 -1
- package/build/src/utils/to-import-specifier.d.ts.map +1 -1
- package/build/src/utils/to-import-specifier.js +3 -1
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts +8 -5
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.js +32 -13
- package/build/src/utils/with-tracked-stack.d.ts +9 -5
- package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack.js +19 -8
- package/build/src/velocious-error.d.ts +4 -2
- package/build/src/velocious-error.d.ts.map +1 -1
- package/build/src/velocious-error.js +5 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ import ParamsToObject from "./params-to-object.js";
|
|
|
6
6
|
import RequestBuffer from "./request-buffer/index.js";
|
|
7
7
|
export default class VelociousHttpServerClientRequestParser {
|
|
8
8
|
/**
|
|
9
|
+
* Runs constructor.
|
|
9
10
|
* @param {object} args - Options object.
|
|
10
11
|
* @param {import("../../configuration.js").default} args.configuration - Configuration instance.
|
|
11
12
|
*/
|
|
@@ -16,14 +17,19 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
16
17
|
this.data = [];
|
|
17
18
|
this.events = new EventEmitter();
|
|
18
19
|
this.hasCompleted = false;
|
|
19
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Narrows the runtime value to the documented type.
|
|
22
|
+
@type {Record<string, string | string[] | undefined | Record<string, ?> | Array<?>>} */
|
|
20
23
|
this.params = {};
|
|
21
24
|
this.requestBuffer = new RequestBuffer({ configuration });
|
|
22
25
|
this.requestBuffer.events.on("completed", this.requestDone);
|
|
23
26
|
this.requestBuffer.events.on("form-data-part", this.onFormDataPart);
|
|
24
27
|
this.requestBuffer.events.on("request-done", this.requestDone);
|
|
25
28
|
}
|
|
26
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Runs destroy.
|
|
31
|
+
* @returns {void} - No return value.
|
|
32
|
+
*/
|
|
27
33
|
destroy() {
|
|
28
34
|
this.requestBuffer.events.off("completed", this.requestDone);
|
|
29
35
|
this.requestBuffer.events.off("form-data-part", this.onFormDataPart);
|
|
@@ -31,11 +37,14 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
31
37
|
this.requestBuffer.destroy();
|
|
32
38
|
}
|
|
33
39
|
/**
|
|
40
|
+
* On form data part.
|
|
34
41
|
* @param {import("./request-buffer/form-data-part.js").default} formDataPart - Form data part.
|
|
35
42
|
* @returns {void} - No return value.
|
|
36
43
|
*/
|
|
37
44
|
onFormDataPart = (formDataPart) => {
|
|
38
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Unordered params.
|
|
47
|
+
@type {Record<string, string | string[] | import("./uploaded-file/uploaded-file.js").default>} */
|
|
39
48
|
const unorderedParams = {};
|
|
40
49
|
unorderedParams[formDataPart.getName()] = formDataPart.getValue();
|
|
41
50
|
try {
|
|
@@ -44,7 +53,9 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
44
53
|
incorporate(this.params, newParams);
|
|
45
54
|
}
|
|
46
55
|
catch (error) {
|
|
47
|
-
const ensuredError = /**
|
|
56
|
+
const ensuredError = /**
|
|
57
|
+
* Narrows the runtime value to the documented type.
|
|
58
|
+
@type {Error & {velociousContext?: Record<string, ?>}} */ (error);
|
|
48
59
|
ensuredError.velociousContext = {
|
|
49
60
|
...(ensuredError.velociousContext || {}),
|
|
50
61
|
requestParsing: {
|
|
@@ -58,6 +69,7 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
58
69
|
}
|
|
59
70
|
};
|
|
60
71
|
/**
|
|
72
|
+
* Feed.
|
|
61
73
|
* @param {Buffer} data - Data payload.
|
|
62
74
|
* @returns {Buffer | undefined} - Remaining data, if any.
|
|
63
75
|
*/
|
|
@@ -68,17 +80,30 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
68
80
|
return this.requestBuffer.feed(data);
|
|
69
81
|
};
|
|
70
82
|
/**
|
|
83
|
+
* Runs get header.
|
|
71
84
|
* @param {string} name - Name.
|
|
72
85
|
* @returns {string} - The header.
|
|
73
86
|
*/
|
|
74
87
|
getHeader(name) { return this.requestBuffer.getHeader(name)?.value; }
|
|
75
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Runs get headers.
|
|
90
|
+
* @returns {Record<string, string>} - The headers.
|
|
91
|
+
*/
|
|
76
92
|
getHeaders() { return this.requestBuffer.getHeadersHash(); }
|
|
77
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Runs get http method.
|
|
95
|
+
* @returns {string} - The http method.
|
|
96
|
+
*/
|
|
78
97
|
getHttpMethod() { return digg(this, "requestBuffer", "httpMethod"); }
|
|
79
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* Runs get http version.
|
|
100
|
+
* @returns {string} - The http version.
|
|
101
|
+
*/
|
|
80
102
|
getHttpVersion() { return digg(this, "requestBuffer", "httpVersion"); }
|
|
81
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Runs get host match.
|
|
105
|
+
* @returns {{host: string, port: string, protocol: string} | null} - Parsed host info, or null when unavailable.
|
|
106
|
+
*/
|
|
82
107
|
_getHostMatch() {
|
|
83
108
|
const rawHost = this.requestBuffer.getHeader("origin")?.value;
|
|
84
109
|
if (!rawHost)
|
|
@@ -92,15 +117,24 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
92
117
|
port: match[4]
|
|
93
118
|
};
|
|
94
119
|
}
|
|
95
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Runs get host.
|
|
122
|
+
* @returns {string | void} - The host.
|
|
123
|
+
*/
|
|
96
124
|
getHost() {
|
|
97
125
|
const rawHostSplit = this.requestBuffer.getHeader("host")?.value?.split(":");
|
|
98
126
|
if (rawHostSplit && rawHostSplit[0])
|
|
99
127
|
return rawHostSplit[0];
|
|
100
128
|
}
|
|
101
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Runs get path.
|
|
131
|
+
* @returns {string} - The path.
|
|
132
|
+
*/
|
|
102
133
|
getPath() { return digg(this, "requestBuffer", "path"); }
|
|
103
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* Runs get port.
|
|
136
|
+
* @returns {number | void} - The port.
|
|
137
|
+
*/
|
|
104
138
|
getPort() {
|
|
105
139
|
const rawHostSplit = this.requestBuffer.getHeader("host")?.value?.split(":");
|
|
106
140
|
const httpMethod = this.getHttpMethod();
|
|
@@ -114,11 +148,20 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
114
148
|
return 443;
|
|
115
149
|
}
|
|
116
150
|
}
|
|
117
|
-
/**
|
|
151
|
+
/**
|
|
152
|
+
* Runs get protocol.
|
|
153
|
+
* @returns {string | null} - The protocol.
|
|
154
|
+
*/
|
|
118
155
|
getProtocol() { return this._getHostMatch()?.protocol || null; }
|
|
119
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* Runs get request buffer.
|
|
158
|
+
* @returns {RequestBuffer} - The request buffer.
|
|
159
|
+
*/
|
|
120
160
|
getRequestBuffer() { return this.requestBuffer; }
|
|
121
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* Request done.
|
|
163
|
+
* @returns {void} - No return value.
|
|
164
|
+
*/
|
|
122
165
|
requestDone = () => {
|
|
123
166
|
this.hasCompleted = true;
|
|
124
167
|
incorporate(this.params, this.requestBuffer.params);
|
|
@@ -126,4 +169,4 @@ export default class VelociousHttpServerClientRequestParser {
|
|
|
126
169
|
this.events.emit("done");
|
|
127
170
|
};
|
|
128
171
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxhQUFhLE1BQU0sMkJBQTJCLENBQUE7QUFFckQsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQ0FBc0M7SUFDekQ7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBQztRQUN6QixJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUU3RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUN6QixrR0FBa0c7UUFDbEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FB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QUFNLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7YUFBTSxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFBLENBQUMsQ0FBQztJQUUvRCxzREFBc0Q7SUFDdEQsZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUVoRCwwQ0FBMEM7SUFDMUMsV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFBO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFCLENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi8uLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0IFBhcmFtc1RvT2JqZWN0IGZyb20gXCIuL3BhcmFtcy10by1vYmplY3QuanNcIlxuaW1wb3J0IFJlcXVlc3RCdWZmZXIgZnJvbSBcIi4vcmVxdWVzdC1idWZmZXIvaW5kZXguanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50UmVxdWVzdFBhcnNlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9ufSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZGF0YSA9IFtdXG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdPn0gKi9cbiAgICB0aGlzLnBhcmFtcyA9IHt9XG5cbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIgPSBuZXcgUmVxdWVzdEJ1ZmZlcih7Y29uZmlndXJhdGlvbn0pXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcImNvbXBsZXRlZFwiLCB0aGlzLnJlcXVlc3REb25lKVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJyZXF1ZXN0LWRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwiY29tcGxldGVkXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub2ZmKFwicmVxdWVzdC1kb25lXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LWJ1ZmZlci9mb3JtLWRhdGEtcGFydC5qc1wiKS5kZWZhdWx0fSBmb3JtRGF0YVBhcnQgLSBGb3JtIGRhdGEgcGFydC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Gb3JtRGF0YVBhcnQgPSAoZm9ybURhdGFQYXJ0KSA9PiB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vdXBsb2FkZWQtZmlsZS91cGxvYWRlZC1maWxlLmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIGNvbnN0IHVub3JkZXJlZFBhcmFtcyA9IHt9XG5cbiAgICB1bm9yZGVyZWRQYXJhbXNbZm9ybURhdGFQYXJ0LmdldE5hbWUoKV0gPSBmb3JtRGF0YVBhcnQuZ2V0VmFsdWUoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtc1RvT2JqZWN0ID0gbmV3IFBhcmFtc1RvT2JqZWN0KHVub3JkZXJlZFBhcmFtcylcbiAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcblxuICAgICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIG5ld1BhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqLyAoZXJyb3IpXG5cbiAgICAgIGVuc3VyZWRFcnJvci52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgfHwge30pLFxuICAgICAgICByZXF1ZXN0UGFyc2luZzoge1xuICAgICAgICAgIGZvcm1EYXRhUGFydE5hbWU6IGZvcm1EYXRhUGFydC5nZXROYW1lKCksXG4gICAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5nZXRIdHRwTWV0aG9kKCksXG4gICAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgICAgc3RhZ2U6IFwiZm9ybS1kYXRhLXBhcnRcIlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVuc3VyZWRFcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0J1ZmZlciB8IHVuZGVmaW5lZH0gLSBSZW1haW5pbmcgZGF0YSwgaWYgYW55LlxuICAgKi9cbiAgZmVlZCA9IChkYXRhKSA9PiB7XG4gICAgaWYgKHRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHBhcnNlciBhbHJlYWR5IGNvbXBsZXRlZFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZmVlZChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaGVhZGVyLlxuICAgKi9cbiAgZ2V0SGVhZGVyKG5hbWUpIHsgcmV0dXJuIHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIobmFtZSk/LnZhbHVlIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gVGhlIGhlYWRlcnMuICAqL1xuICBnZXRIZWFkZXJzKCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcnNIYXNoKCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBodHRwIG1ldGhvZC4gICovXG4gIGdldEh0dHBNZXRob2QoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdEJ1ZmZlclwiLCBcImh0dHBNZXRob2RcIikgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBodHRwIHZlcnNpb24uICAqL1xuICBnZXRIdHRwVmVyc2lvbigpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJyZXF1ZXN0QnVmZmVyXCIsIFwiaHR0cFZlcnNpb25cIikgfVxuXG4gIC8qKiBAcmV0dXJucyB7e2hvc3Q6IHN0cmluZywgcG9ydDogc3RyaW5nLCBwcm90b2NvbDogc3RyaW5nfSB8IG51bGx9IC0gUGFyc2VkIGhvc3QgaW5mbywgb3IgbnVsbCB3aGVuIHVuYXZhaWxhYmxlLiAqL1xuICBfZ2V0SG9zdE1hdGNoKCkge1xuICAgIGNvbnN0IHJhd0hvc3QgPSB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKFwib3JpZ2luXCIpPy52YWx1ZVxuXG4gICAgaWYgKCFyYXdIb3N0KSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgbWF0Y2ggPSByYXdIb3N0Lm1hdGNoKC9eKC4rKTpcXC9cXC8oLispKHw6KFxcZCspKS8pXG5cbiAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG1hdGNoIGhvc3Q6ICR7cmF3SG9zdH1gKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBtYXRjaFsxXSxcbiAgICAgIGhvc3Q6IG1hdGNoWzJdLFxuICAgICAgcG9ydDogbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IHZvaWR9IC0gVGhlIGhvc3QuICAqL1xuICBnZXRIb3N0KCkge1xuICAgIGNvbnN0IHJhd0hvc3RTcGxpdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJob3N0XCIpPy52YWx1ZT8uc3BsaXQoXCI6XCIpXG5cbiAgICBpZiAocmF3SG9zdFNwbGl0ICYmIHJhd0hvc3RTcGxpdFswXSkgcmV0dXJuIHJhd0hvc3RTcGxpdFswXVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHBhdGguICAqL1xuICBnZXRQYXRoKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJwYXRoXCIpIH1cblxuICAvKiogQHJldHVybnMge251bWJlciB8IHZvaWR9IC0gVGhlIHBvcnQuICAqL1xuICBnZXRQb3J0KCkge1xuICAgIGNvbnN0IHJhd0hvc3RTcGxpdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJob3N0XCIpPy52YWx1ZT8uc3BsaXQoXCI6XCIpXG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IHRoaXMuZ2V0SHR0cE1ldGhvZCgpXG5cbiAgICBpZiAocmF3SG9zdFNwbGl0ICYmIHJhd0hvc3RTcGxpdFsxXSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHJhd0hvc3RTcGxpdFsxXSlcbiAgICB9IGVsc2UgaWYgKGh0dHBNZXRob2QgPT0gXCJodHRwXCIpIHtcbiAgICAgIHJldHVybiA4MFxuICAgIH0gZWxzZSBpZiAoaHR0cE1ldGhvZCA9PSBcImh0dHBzXCIpIHtcbiAgICAgIHJldHVybiA0NDNcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IG51bGx9IC0gVGhlIHByb3RvY29sLiAgKi9cbiAgZ2V0UHJvdG9jb2woKSB7IHJldHVybiB0aGlzLl9nZXRIb3N0TWF0Y2goKT8ucHJvdG9jb2wgfHwgbnVsbCB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZXF1ZXN0QnVmZmVyfSAtIFRoZSByZXF1ZXN0IGJ1ZmZlci4gICovXG4gIGdldFJlcXVlc3RCdWZmZXIoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICByZXF1ZXN0RG9uZSA9ICgpID0+IHtcbiAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWVcbiAgICBpbmNvcnBvcmF0ZSh0aGlzLnBhcmFtcywgdGhpcy5yZXF1ZXN0QnVmZmVyLnBhcmFtcylcblxuICAgIHRoaXMuc3RhdGUgPSBcImRvbmVcIlxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJkb25lXCIpXG4gIH1cbn1cbiJdfQ==
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxhQUFhLE1BQU0sMkJBQTJCLENBQUE7QUFFckQsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQ0FBc0M7SUFDekQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUE7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7UUFDekI7O2lHQUV5RjtRQUN6RixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUVoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxD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QU0sRUFBRSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQzthQUFNLElBQUksVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFL0Q7OztPQUdHO0lBQ0gsZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUVoRDs7O09BR0c7SUFDSCxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUE7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUIsQ0FBQyxDQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgUGFyYW1zVG9PYmplY3QgZnJvbSBcIi4vcGFyYW1zLXRvLW9iamVjdC5qc1wiXG5pbXBvcnQgUmVxdWVzdEJ1ZmZlciBmcm9tIFwiLi9yZXF1ZXN0LWJ1ZmZlci9pbmRleC5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJDbGllbnRSZXF1ZXN0UGFyc2VyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhID0gW11cbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICAgIHRoaXMuaGFzQ29tcGxldGVkID0gZmFsc2VcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBSZWNvcmQ8c3RyaW5nLCA/PiB8IEFycmF5PD8+Pn0gKi9cbiAgICB0aGlzLnBhcmFtcyA9IHt9XG5cbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIgPSBuZXcgUmVxdWVzdEJ1ZmZlcih7Y29uZmlndXJhdGlvbn0pXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vbihcImNvbXBsZXRlZFwiLCB0aGlzLnJlcXVlc3REb25lKVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJmb3JtLWRhdGEtcGFydFwiLCB0aGlzLm9uRm9ybURhdGFQYXJ0KVxuICAgIHRoaXMucmVxdWVzdEJ1ZmZlci5ldmVudHMub24oXCJyZXF1ZXN0LWRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRlc3Ryb3kuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJjb21wbGV0ZWRcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZXZlbnRzLm9mZihcImZvcm0tZGF0YS1wYXJ0XCIsIHRoaXMub25Gb3JtRGF0YVBhcnQpXG4gICAgdGhpcy5yZXF1ZXN0QnVmZmVyLmV2ZW50cy5vZmYoXCJyZXF1ZXN0LWRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICB0aGlzLnJlcXVlc3RCdWZmZXIuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogT24gZm9ybSBkYXRhIHBhcnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LWJ1ZmZlci9mb3JtLWRhdGEtcGFydC5qc1wiKS5kZWZhdWx0fSBmb3JtRGF0YVBhcnQgLSBGb3JtIGRhdGEgcGFydC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Gb3JtRGF0YVBhcnQgPSAoZm9ybURhdGFQYXJ0KSA9PiB7XG4gICAgLyoqXG4gICAgICogVW5vcmRlcmVkIHBhcmFtcy5cbiAgICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vdXBsb2FkZWQtZmlsZS91cGxvYWRlZC1maWxlLmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIGNvbnN0IHVub3JkZXJlZFBhcmFtcyA9IHt9XG5cbiAgICB1bm9yZGVyZWRQYXJhbXNbZm9ybURhdGFQYXJ0LmdldE5hbWUoKV0gPSBmb3JtRGF0YVBhcnQuZ2V0VmFsdWUoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtc1RvT2JqZWN0ID0gbmV3IFBhcmFtc1RvT2JqZWN0KHVub3JkZXJlZFBhcmFtcylcbiAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcblxuICAgICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIG5ld1BhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgPz59fSAqLyAoZXJyb3IpXG5cbiAgICAgIGVuc3VyZWRFcnJvci52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgfHwge30pLFxuICAgICAgICByZXF1ZXN0UGFyc2luZzoge1xuICAgICAgICAgIGZvcm1EYXRhUGFydE5hbWU6IGZvcm1EYXRhUGFydC5nZXROYW1lKCksXG4gICAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5nZXRIdHRwTWV0aG9kKCksXG4gICAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKCksXG4gICAgICAgICAgc3RhZ2U6IFwiZm9ybS1kYXRhLXBhcnRcIlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVuc3VyZWRFcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZWVkLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0J1ZmZlciB8IHVuZGVmaW5lZH0gLSBSZW1haW5pbmcgZGF0YSwgaWYgYW55LlxuICAgKi9cbiAgZmVlZCA9IChkYXRhKSA9PiB7XG4gICAgaWYgKHRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHBhcnNlciBhbHJlYWR5IGNvbXBsZXRlZFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZmVlZChkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBoZWFkZXIuXG4gICAqL1xuICBnZXRIZWFkZXIobmFtZSkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0QnVmZmVyLmdldEhlYWRlcihuYW1lKT8udmFsdWUgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBoZWFkZXJzLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBUaGUgaGVhZGVycy5cbiAgICovXG4gIGdldEhlYWRlcnMoKSB7IHJldHVybiB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyc0hhc2goKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGh0dHAgbWV0aG9kLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBodHRwIG1ldGhvZC5cbiAgICovXG4gIGdldEh0dHBNZXRob2QoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwicmVxdWVzdEJ1ZmZlclwiLCBcImh0dHBNZXRob2RcIikgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBodHRwIHZlcnNpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGh0dHAgdmVyc2lvbi5cbiAgICovXG4gIGdldEh0dHBWZXJzaW9uKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJodHRwVmVyc2lvblwiKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGhvc3QgbWF0Y2guXG4gICAqIEByZXR1cm5zIHt7aG9zdDogc3RyaW5nLCBwb3J0OiBzdHJpbmcsIHByb3RvY29sOiBzdHJpbmd9IHwgbnVsbH0gLSBQYXJzZWQgaG9zdCBpbmZvLCBvciBudWxsIHdoZW4gdW5hdmFpbGFibGUuXG4gICAqL1xuICBfZ2V0SG9zdE1hdGNoKCkge1xuICAgIGNvbnN0IHJhd0hvc3QgPSB0aGlzLnJlcXVlc3RCdWZmZXIuZ2V0SGVhZGVyKFwib3JpZ2luXCIpPy52YWx1ZVxuXG4gICAgaWYgKCFyYXdIb3N0KSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgbWF0Y2ggPSByYXdIb3N0Lm1hdGNoKC9eKC4rKTpcXC9cXC8oLispKHw6KFxcZCspKS8pXG5cbiAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG1hdGNoIGhvc3Q6ICR7cmF3SG9zdH1gKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBtYXRjaFsxXSxcbiAgICAgIGhvc3Q6IG1hdGNoWzJdLFxuICAgICAgcG9ydDogbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgaG9zdC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHZvaWR9IC0gVGhlIGhvc3QuXG4gICAqL1xuICBnZXRIb3N0KCkge1xuICAgIGNvbnN0IHJhd0hvc3RTcGxpdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJob3N0XCIpPy52YWx1ZT8uc3BsaXQoXCI6XCIpXG5cbiAgICBpZiAocmF3SG9zdFNwbGl0ICYmIHJhd0hvc3RTcGxpdFswXSkgcmV0dXJuIHJhd0hvc3RTcGxpdFswXVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHBhdGguXG4gICAqL1xuICBnZXRQYXRoKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcInJlcXVlc3RCdWZmZXJcIiwgXCJwYXRoXCIpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcG9ydC5cbiAgICogQHJldHVybnMge251bWJlciB8IHZvaWR9IC0gVGhlIHBvcnQuXG4gICAqL1xuICBnZXRQb3J0KCkge1xuICAgIGNvbnN0IHJhd0hvc3RTcGxpdCA9IHRoaXMucmVxdWVzdEJ1ZmZlci5nZXRIZWFkZXIoXCJob3N0XCIpPy52YWx1ZT8uc3BsaXQoXCI6XCIpXG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IHRoaXMuZ2V0SHR0cE1ldGhvZCgpXG5cbiAgICBpZiAocmF3SG9zdFNwbGl0ICYmIHJhd0hvc3RTcGxpdFsxXSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHJhd0hvc3RTcGxpdFsxXSlcbiAgICB9IGVsc2UgaWYgKGh0dHBNZXRob2QgPT0gXCJodHRwXCIpIHtcbiAgICAgIHJldHVybiA4MFxuICAgIH0gZWxzZSBpZiAoaHR0cE1ldGhvZCA9PSBcImh0dHBzXCIpIHtcbiAgICAgIHJldHVybiA0NDNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcHJvdG9jb2wuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIFRoZSBwcm90b2NvbC5cbiAgICovXG4gIGdldFByb3RvY29sKCkgeyByZXR1cm4gdGhpcy5fZ2V0SG9zdE1hdGNoKCk/LnByb3RvY29sIHx8IG51bGwgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCByZXF1ZXN0IGJ1ZmZlci5cbiAgICogQHJldHVybnMge1JlcXVlc3RCdWZmZXJ9IC0gVGhlIHJlcXVlc3QgYnVmZmVyLlxuICAgKi9cbiAgZ2V0UmVxdWVzdEJ1ZmZlcigpIHsgcmV0dXJuIHRoaXMucmVxdWVzdEJ1ZmZlciB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgZG9uZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcmVxdWVzdERvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlXG4gICAgaW5jb3Jwb3JhdGUodGhpcy5wYXJhbXMsIHRoaXMucmVxdWVzdEJ1ZmZlci5wYXJhbXMpXG5cbiAgICB0aGlzLnN0YXRlID0gXCJkb25lXCJcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiZG9uZVwiKVxuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export default class VelociousHttpServerClientRequestRunner {
|
|
2
2
|
/**
|
|
3
|
+
* Runs constructor.
|
|
3
4
|
* @param {object} args - Options object.
|
|
4
5
|
* @param {import("../../configuration.js").default} args.configuration - Configuration instance.
|
|
5
6
|
* @param {import("./request.js").default | import("./websocket-request.js").default} args.request - Request object.
|
|
@@ -20,7 +21,10 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
20
21
|
getState(): string;
|
|
21
22
|
run(): Promise<any>;
|
|
22
23
|
_run(): Promise<void>;
|
|
23
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Runs log completed request.
|
|
26
|
+
* @returns {Promise<void>} - Logs the completed request line after the response has been served.
|
|
27
|
+
*/
|
|
24
28
|
logCompletedRequest(): Promise<void>;
|
|
25
29
|
}
|
|
26
30
|
import Logger from "../../logger.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-runner.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-runner.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request-runner.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-runner.js"],"names":[],"mappings":"AA+GA;IAGE;;;;;OAKG;IACH,wCAHG;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QACwC,OAAO,EAAvF,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO;KACnF,EAYA;IAnBD,mEAA2B;IAYzB,eAA8B;IAC9B,wDAAkC;IAClC,mFAAsB;IACtB,mBAA6C;IAC7C,gCAAmC;IACnC,6BAAwC;IACxC,cAAsB;IAGxB,wFAAoC;IACpC,mBAAgC;IAEhC,oBAMC;IAED,sBAiJC;IAED;;;OAGG;IACH,uBAFa,OAAO,CAAC,IAAI,CAAC,CA0BzB;CACF;mBA3TkB,iBAAiB;qBAEf,eAAe;0BADV,qBAAqB"}
|
|
@@ -7,6 +7,7 @@ import RequestTiming from "./request-timing.js";
|
|
|
7
7
|
import Response from "./response.js";
|
|
8
8
|
import RoutesResolver from "../../routes/resolver.js";
|
|
9
9
|
/**
|
|
10
|
+
* Runs stack frame line.
|
|
10
11
|
* @param {string | undefined} line - Potential header line.
|
|
11
12
|
* @returns {boolean} - Whether the line is a stack frame.
|
|
12
13
|
*/
|
|
@@ -16,6 +17,7 @@ function stackFrameLine(line) {
|
|
|
16
17
|
return /^at\s+/u.test(line.trim());
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
20
|
+
* Runs request error summary.
|
|
19
21
|
* @param {Error} error - Error to format for logging.
|
|
20
22
|
* @param {string | undefined} cleanedStackWithHeader - Cleaned stack with header line.
|
|
21
23
|
* @returns {string} - Error summary line with type information.
|
|
@@ -24,8 +26,13 @@ function requestErrorSummary(error, cleanedStackWithHeader) {
|
|
|
24
26
|
const stackHeader = cleanedStackWithHeader?.split("\n")[0]?.trim();
|
|
25
27
|
if (stackHeader && !stackFrameLine(stackHeader))
|
|
26
28
|
return stackHeader;
|
|
27
|
-
const errorCode = typeof /**
|
|
28
|
-
|
|
29
|
+
const errorCode = typeof /**
|
|
30
|
+
* Narrows the runtime value to the documented type.
|
|
31
|
+
@type {?} */ (error).code === "string"
|
|
32
|
+
? /**
|
|
33
|
+
* Narrows the runtime value to the documented type.
|
|
34
|
+
@type {?} */
|
|
35
|
+
(error).code
|
|
29
36
|
: undefined;
|
|
30
37
|
const errorMessage = error.message || String(error);
|
|
31
38
|
if (errorCode)
|
|
@@ -33,6 +40,7 @@ function requestErrorSummary(error, cleanedStackWithHeader) {
|
|
|
33
40
|
return `${error.name}: ${errorMessage}`;
|
|
34
41
|
}
|
|
35
42
|
/**
|
|
43
|
+
* Runs request error log details.
|
|
36
44
|
* @param {Error} error - Error to format for logging.
|
|
37
45
|
* @returns {{
|
|
38
46
|
* errorSummary: string,
|
|
@@ -46,6 +54,7 @@ function requestErrorLogDetails(error) {
|
|
|
46
54
|
return { errorSummary, cleanedBacktrace };
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
57
|
+
* Runs request error log message.
|
|
49
58
|
* @param {{
|
|
50
59
|
* errorSummary: string,
|
|
51
60
|
* cleanedBacktrace: string | undefined,
|
|
@@ -59,6 +68,7 @@ function requestErrorLogMessage(logDetails) {
|
|
|
59
68
|
return `Error while running request: ${logDetails.errorSummary}\nCleaned backtrace:\n${logDetails.cleanedBacktrace}`;
|
|
60
69
|
}
|
|
61
70
|
/**
|
|
71
|
+
* Runs response body type for log.
|
|
62
72
|
* @param {Response} response - Response object.
|
|
63
73
|
* @returns {string} - Response body type for logging.
|
|
64
74
|
*/
|
|
@@ -73,6 +83,7 @@ function responseBodyTypeForLog(response) {
|
|
|
73
83
|
}
|
|
74
84
|
}
|
|
75
85
|
/**
|
|
86
|
+
* Runs format bucket ms.
|
|
76
87
|
* @param {number} value - Milliseconds.
|
|
77
88
|
* @returns {string} - Formatted milliseconds with one decimal place.
|
|
78
89
|
*/
|
|
@@ -80,6 +91,7 @@ function formatBucketMs(value) {
|
|
|
80
91
|
return `${value.toFixed(1)}ms`;
|
|
81
92
|
}
|
|
82
93
|
/**
|
|
94
|
+
* Runs query count label.
|
|
83
95
|
* @param {number} count - Query count.
|
|
84
96
|
* @returns {string} - Query count label.
|
|
85
97
|
*/
|
|
@@ -89,6 +101,7 @@ function queryCountLabel(count) {
|
|
|
89
101
|
export default class VelociousHttpServerClientRequestRunner {
|
|
90
102
|
events = new EventEmitter();
|
|
91
103
|
/**
|
|
104
|
+
* Runs constructor.
|
|
92
105
|
* @param {object} args - Options object.
|
|
93
106
|
* @param {import("../../configuration.js").default} args.configuration - Configuration instance.
|
|
94
107
|
* @param {import("./request.js").default | import("./websocket-request.js").default} args.request - Request object.
|
|
@@ -149,12 +162,18 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
149
162
|
await this.logger.debug("Run request");
|
|
150
163
|
const routesResolver = new RoutesResolver({ configuration, request, response });
|
|
151
164
|
const startTimeMs = Date.now();
|
|
152
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Defines timeoutId.
|
|
167
|
+
@type {ReturnType<typeof setTimeout> | undefined} */
|
|
153
168
|
let timeoutId;
|
|
154
|
-
/**
|
|
169
|
+
/**
|
|
170
|
+
* Defines timeoutReject.
|
|
171
|
+
@type {((error: Error) => void) | undefined} */
|
|
155
172
|
let timeoutReject;
|
|
156
173
|
let timedOut = false;
|
|
157
|
-
const setRequestTimeoutSeconds = (/**
|
|
174
|
+
const setRequestTimeoutSeconds = (/**
|
|
175
|
+
* Narrows the runtime value to the documented type.
|
|
176
|
+
@type {number | undefined} */ timeoutSeconds) => {
|
|
158
177
|
if (timeoutId) {
|
|
159
178
|
clearTimeout(timeoutId);
|
|
160
179
|
timeoutId = undefined;
|
|
@@ -212,7 +231,9 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
212
231
|
}
|
|
213
232
|
catch (e) {
|
|
214
233
|
const error = ensureError(e);
|
|
215
|
-
const errorWithContext = /**
|
|
234
|
+
const errorWithContext = /**
|
|
235
|
+
* Narrows the runtime value to the documented type.
|
|
236
|
+
@type {{velociousContext?: object}} */ (error);
|
|
216
237
|
const errorContext = errorWithContext.velociousContext || { stage: "request-runner" };
|
|
217
238
|
const logDetails = requestErrorLogDetails(error);
|
|
218
239
|
await this.logger.error(() => requestErrorLogMessage(logDetails));
|
|
@@ -238,7 +259,10 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
238
259
|
this.state = "done";
|
|
239
260
|
this.events.emit("done", this);
|
|
240
261
|
}
|
|
241
|
-
/**
|
|
262
|
+
/**
|
|
263
|
+
* Runs log completed request.
|
|
264
|
+
* @returns {Promise<void>} - Logs the completed request line after the response has been served.
|
|
265
|
+
*/
|
|
242
266
|
async logCompletedRequest() {
|
|
243
267
|
if (this.completedRequestLogged)
|
|
244
268
|
return;
|
|
@@ -261,4 +285,4 @@ export default class VelociousHttpServerClientRequestRunner {
|
|
|
261
285
|
await logger[requestTiming.completedLogMethod](completedMessage);
|
|
262
286
|
}
|
|
263
287
|
}
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLHVDQUF1QyxDQUFBO0FBQ3BFLE9BQU8sV0FBVyxNQUFNLDZCQUE2QixDQUFBO0FBQ3JELE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUNwQyxPQUFPLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQTtBQUVyRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxJQUFJO0lBQzFCLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFdkIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCO0lBQ3hELE1BQU0sV0FBVyxHQUFHLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUVsRSxJQUFJLFdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUVuRSxNQUFNLFNBQVMsR0FBRyxPQUFPLGtCQUFrQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDbkUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtRQUNqQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2Is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QWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDckQsYUFBYSxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlDLFVBQVUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHO1lBQ25GLGlCQUFpQixjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RELEdBQUc7U0FDSixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVWLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDbEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYWNrdHJhY2VDbGVhbmVyIGZyb20gXCIuLi8uLi91dGlscy9iYWNrdHJhY2UtY2xlYW5lci1ub2RlLmpzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBSZXF1ZXN0VGltaW5nIGZyb20gXCIuL3JlcXVlc3QtdGltaW5nLmpzXCJcbmltcG9ydCBSZXNwb25zZSBmcm9tIFwiLi9yZXNwb25zZS5qc1wiXG5pbXBvcnQgUm91dGVzUmVzb2x2ZXIgZnJvbSBcIi4uLy4uL3JvdXRlcy9yZXNvbHZlci5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGxpbmUgLSBQb3RlbnRpYWwgaGVhZGVyIGxpbmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBsaW5lIGlzIGEgc3RhY2sgZnJhbWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRnJhbWVMaW5lKGxpbmUpIHtcbiAgaWYgKCFsaW5lKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gL15hdFxccysvdS50ZXN0KGxpbmUudHJpbSgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIC0gRXJyb3IgdG8gZm9ybWF0IGZvciBsb2dnaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGNsZWFuZWRTdGFja1dpdGhIZWFkZXIgLSBDbGVhbmVkIHN0YWNrIHdpdGggaGVhZGVyIGxpbmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVycm9yIHN1bW1hcnkgbGluZSB3aXRoIHR5cGUgaW5mb3JtYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RFcnJvclN1bW1hcnkoZXJyb3IsIGNsZWFuZWRTdGFja1dpdGhIZWFkZXIpIHtcbiAgY29uc3Qgc3RhY2tIZWFkZXIgPSBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyPy5zcGxpdChcIlxcblwiKVswXT8udHJpbSgpXG5cbiAgaWYgKHN0YWNrSGVhZGVyICYmICFzdGFja0ZyYW1lTGluZShzdGFja0hlYWRlcikpIHJldHVybiBzdGFja0hlYWRlclxuXG4gIGNvbnN0IGVycm9yQ29kZSA9IHR5cGVvZiAvKiogQHR5cGUge2FueX0gKi8gKGVycm9yKS5jb2RlID09PSBcInN0cmluZ1wiXG4gICAgPyAvKiogQHR5cGUge2FueX0gKi8gKGVycm9yKS5jb2RlXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpXG5cbiAgaWYgKGVycm9yQ29kZSkgcmV0dXJuIGAke2Vycm9yLm5hbWV9IFske2Vycm9yQ29kZX1dOiAke2Vycm9yTWVzc2FnZX1gXG5cbiAgcmV0dXJuIGAke2Vycm9yLm5hbWV9OiAke2Vycm9yTWVzc2FnZX1gXG59XG5cbi8qKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciB0byBmb3JtYXQgZm9yIGxvZ2dpbmcuXG4gKiBAcmV0dXJucyB7e1xuICogICBlcnJvclN1bW1hcnk6IHN0cmluZyxcbiAqICAgY2xlYW5lZEJhY2t0cmFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICogfX0gLSBMb2cgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gcmVxdWVzdEVycm9yTG9nRGV0YWlscyhlcnJvcikge1xuICBjb25zdCBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyID0gQmFja3RyYWNlQ2xlYW5lci5nZXRDbGVhbmVkU3RhY2soZXJyb3IpXG4gIGNvbnN0IGVycm9yU3VtbWFyeSA9IHJlcXVlc3RFcnJvclN1bW1hcnkoZXJyb3IsIGNsZWFuZWRTdGFja1dpdGhIZWFkZXIpXG4gIGNvbnN0IGNsZWFuZWRCYWNrdHJhY2UgPSBCYWNrdHJhY2VDbGVhbmVyLmdldENsZWFuZWRTdGFjayhlcnJvciwge2luY2x1ZGVFcnJvckhlYWRlcjogZmFsc2V9KSB8fCBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyXG5cbiAgcmV0dXJuIHtlcnJvclN1bW1hcnksIGNsZWFuZWRCYWNrdHJhY2V9XG59XG5cbi8qKlxuICogQHBhcmFtIHt7XG4gKiAgIGVycm9yU3VtbWFyeTogc3RyaW5nLFxuICogICBjbGVhbmVkQmFja3RyYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gKiB9fSBsb2dEZXRhaWxzIC0gTG9nIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNpbmdsZSByZXF1ZXN0IGVycm9yIGxvZyBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiByZXF1ZXN0RXJyb3JMb2dNZXNzYWdlKGxvZ0RldGFpbHMpIHtcbiAgaWYgKCFsb2dEZXRhaWxzLmNsZWFuZWRCYWNrdHJhY2UpIHtcbiAgICByZXR1cm4gYEVycm9yIHdoaWxlIHJ1bm5pbmcgcmVxdWVzdDogJHtsb2dEZXRhaWxzLmVycm9yU3VtbWFyeX1gXG4gIH1cblxuICByZXR1cm4gYEVycm9yIHdoaWxlIHJ1bm5pbmcgcmVxdWVzdDogJHtsb2dEZXRhaWxzLmVycm9yU3VtbWFyeX1cXG5DbGVhbmVkIGJhY2t0cmFjZTpcXG4ke2xvZ0RldGFpbHMuY2xlYW5lZEJhY2t0cmFjZX1gXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2UgLSBSZXNwb25zZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3BvbnNlIGJvZHkgdHlwZSBmb3IgbG9nZ2luZy5cbiAqL1xuZnVuY3Rpb24gcmVzcG9uc2VCb2R5VHlwZUZvckxvZyhyZXNwb25zZSkge1xuICBpZiAocmVzcG9uc2UuZ2V0RmlsZVBhdGgoKSkgcmV0dXJuIFwiZmlsZVwiXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHJlc3BvbnNlLmdldEJvZHkoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bnNldFwiXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBNaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZvcm1hdHRlZCBtaWxsaXNlY29uZHMgd2l0aCBvbmUgZGVjaW1hbCBwbGFjZS5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0QnVja2V0TXModmFsdWUpIHtcbiAgcmV0dXJuIGAke3ZhbHVlLnRvRml4ZWQoMSl9bXNgXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gUXVlcnkgY291bnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFF1ZXJ5IGNvdW50IGxhYmVsLlxuICovXG5mdW5jdGlvbiBxdWVyeUNvdW50TGFiZWwoY291bnQpIHtcbiAgcmV0dXJuIGAke2NvdW50fSAke2NvdW50ID09PSAxID8gXCJxdWVyeVwiIDogXCJxdWVyaWVzXCJ9YFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyQ2xpZW50UmVxdWVzdFJ1bm5lciB7XG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdH0gYXJncy5yZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgcmVxdWVzdH0pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcbiAgICBpZiAoIXJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlcXVlc3QgZ2l2ZW5cIilcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5yZXNwb25zZSA9IG5ldyBSZXNwb25zZSh7Y29uZmlndXJhdGlvbn0pXG4gICAgdGhpcy5jb21wbGV0ZWRSZXF1ZXN0TG9nZ2VkID0gZmFsc2VcbiAgICB0aGlzLnJlcXVlc3RUaW1pbmcgPSBuZXcgUmVxdWVzdFRpbWluZygpXG4gICAgdGhpcy5zdGF0ZSA9IFwicnVubmluZ1wiXG4gIH1cblxuICBnZXRSZXF1ZXN0KCkgeyByZXR1cm4gdGhpcy5yZXF1ZXN0IH1cbiAgZ2V0U3RhdGUoKSB7IHJldHVybiB0aGlzLnN0YXRlIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgdGhpcy5yZXF1ZXN0VGltaW5nLnN0YXJ0ZWRBdE1zID0gRGF0ZS5ub3coKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5ydW5XaXRoUmVxdWVzdFRpbWluZyh0aGlzLnJlcXVlc3RUaW1pbmcsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3J1bigpXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIF9ydW4oKSB7XG4gICAgY29uc3Qge2NvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHJlc3BvbnNlfSA9IHRoaXNcblxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdD9cIilcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJSdW4gcmVxdWVzdCBsaWZlY3ljbGVcIiwge1xuICAgICAgICBodHRwTWV0aG9kOiByZXF1ZXN0Lmh0dHBNZXRob2QoKSxcbiAgICAgICAgaHR0cFZlcnNpb246IHJlcXVlc3QuaHR0cFZlcnNpb24oKSxcbiAgICAgICAgb3JpZ2luOiByZXF1ZXN0Lm9yaWdpbigpLFxuICAgICAgICBwYXRoOiByZXF1ZXN0LnBhdGgoKSxcbiAgICAgICAgcmVtb3RlQWRkcmVzczogcmVxdWVzdC5yZW1vdGVBZGRyZXNzKClcbiAgICAgIH1dKVxuICAgICAgLy8gQmVmb3JlIHdlIGNoZWNrZWQgaWYgdGhlIHNlYy1mZXRjaC1tb2RlIHdhcyBcImNvcnNcIiwgYnV0IGl0IHNlZW1zIHRoZSBzZWMtZmV0Y2gtbW9kZSBpc24ndCBhbHdheXMgcHJlc2VudFxuICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiUnVuIENPUlNcIiwge2h0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLCBzZWNGZXRjaE1vZGU6IHJlcXVlc3QuaGVhZGVyKFwic2VjLWZldGNoLW1vZGVcIil9XSlcblxuICAgICAgY29uc3QgY29ycyA9IGNvbmZpZ3VyYXRpb24uZ2V0Q29ycygpXG5cbiAgICAgIGlmIChjb3JzKSB7XG4gICAgICAgIGF3YWl0IGNvcnMoe3JlcXVlc3QsIHJlc3BvbnNlfSlcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiQ09SUyBoYW5kbGVyIGRvbmVcIiwge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICAgIHBhdGg6IHJlcXVlc3QucGF0aCgpLFxuICAgICAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpXG4gICAgICAgIH1dKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gXCJPUFRJT05TXCIgJiYgcmVxdWVzdC5oZWFkZXIoXCJzZWMtZmV0Y2gtbW9kZVwiKSA9PSBcImNvcnNcIikge1xuICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoMjAwKVxuICAgICAgICByZXNwb25zZS5zZXRCb2R5KFwiXCIpXG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIkhhbmRsZWQgcHJlZmxpZ2h0IE9QVElPTlMgcmVxdWVzdFwiLCB7XG4gICAgICAgICAgcGF0aDogcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgcmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZS5nZXRTdGF0dXNDb2RlKClcbiAgICAgICAgfV0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlJ1biByZXF1ZXN0XCIpXG4gICAgICAgIGNvbnN0IHJvdXRlc1Jlc29sdmVyID0gbmV3IFJvdXRlc1Jlc29sdmVyKHtjb25maWd1cmF0aW9uLCByZXF1ZXN0LCByZXNwb25zZX0pXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZU1zID0gRGF0ZS5ub3coKVxuICAgICAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkfSAqL1xuICAgICAgICBsZXQgdGltZW91dElkXG4gICAgICAgIC8qKiBAdHlwZSB7KChlcnJvcjogRXJyb3IpID0+IHZvaWQpIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgICBsZXQgdGltZW91dFJlamVjdFxuICAgICAgICBsZXQgdGltZWRPdXQgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IHNldFJlcXVlc3RUaW1lb3V0U2Vjb25kcyA9ICgvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi8gdGltZW91dFNlY29uZHMpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICAgICAgdGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aW1lb3V0U2Vjb25kcyAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRTZWNvbmRzKSB8fCB0aW1lb3V0U2Vjb25kcyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSB0aW1lb3V0U2Vjb25kcyAqIDEwMDBcbiAgICAgICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lTXNcbiAgICAgICAgICBjb25zdCByZW1haW5pbmdNcyA9IHRpbWVvdXRNcyAtIGVsYXBzZWRNc1xuXG4gICAgICAgICAgaWYgKHJlbWFpbmluZ01zIDw9IDApIHtcbiAgICAgICAgICAgIHRpbWVvdXRSZWplY3Q/LihuZXcgRXJyb3IoYFJlcXVlc3QgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dFNlY29uZHN9c2ApKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lb3V0UmVqZWN0Py4obmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRTZWNvbmRzfXNgKSlcbiAgICAgICAgICB9LCByZW1haW5pbmdNcylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRpbWVvdXRSZWplY3QgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXNwb25zZS5zZXRSZXF1ZXN0VGltZW91dE1zQ2hhbmdlSGFuZGxlcigodGltZW91dFNlY29uZHMpID0+IHtcbiAgICAgICAgICBzZXRSZXF1ZXN0VGltZW91dFNlY29uZHModGltZW91dFNlY29uZHMpXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2V0UmVxdWVzdFRpbWVvdXRTZWNvbmRzKGNvbmZpZ3VyYXRpb24uZ2V0UmVxdWVzdFRpbWVvdXRNcz8uKCkpXG5cbiAgICAgICAgbGV0IHJlc29sdmVQcm9taXNlXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJvdXRlc1Jlc29sdmVyLnJlc29sdmUoKVxuICAgICAgICAgIC8vIEtlZXAgUHJvbWlzZS5yYWNlIGhlcmUgdG8gYWxsb3cgZHluYW1pYyB0aW1lb3V0IHVwZGF0ZXMuXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtyZXNvbHZlUHJvbWlzZSwgdGltZW91dFByb21pc2VdKVxuICAgICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlJvdXRlcyByZXNvbHZlciBkb25lXCIsIHtcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICAgICAgcGF0aDogcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgICByZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSxcbiAgICAgICAgICAgIGhhc0ZpbGVQYXRoOiBCb29sZWFuKHJlc3BvbnNlLmdldEZpbGVQYXRoKCkpLFxuICAgICAgICAgICAgYm9keVR5cGU6IHJlc3BvbnNlQm9keVR5cGVGb3JMb2cocmVzcG9uc2UpXG4gICAgICAgICAgfV0pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRpbWVkT3V0ICYmIHJlc29sdmVQcm9taXNlKSB7XG4gICAgICAgICAgICB2b2lkIHJlc29sdmVQcm9taXNlLmNhdGNoKChyZXNvbHZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbXCJSZXF1ZXN0IGZpbmlzaGVkIGFmdGVyIHRpbWVvdXRcIiwgcmVzb2x2ZUVycm9yXSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZW5zdXJlRXJyb3IoZSlcbiAgICAgIGNvbnN0IGVycm9yV2l0aENvbnRleHQgPSAvKiogQHR5cGUge3t2ZWxvY2lvdXNDb250ZXh0Pzogb2JqZWN0fX0gKi8gKGVycm9yKVxuICAgICAgY29uc3QgZXJyb3JDb250ZXh0ID0gZXJyb3JXaXRoQ29udGV4dC52ZWxvY2lvdXNDb250ZXh0IHx8IHtzdGFnZTogXCJyZXF1ZXN0LXJ1bm5lclwifVxuICAgICAgY29uc3QgbG9nRGV0YWlscyA9IHJlcXVlc3RFcnJvckxvZ0RldGFpbHMoZXJyb3IpXG5cbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IHJlcXVlc3RFcnJvckxvZ01lc3NhZ2UobG9nRGV0YWlscykpXG5cbiAgICAgIGNvbnN0IGVycm9yUGF5bG9hZCA9IHtcbiAgICAgICAgY29udGV4dDogZXJyb3JDb250ZXh0LFxuICAgICAgICBlcnJvcixcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgIH1cblxuICAgICAgY29uZmlndXJhdGlvbi5nZXRFcnJvckV2ZW50cygpLmVtaXQoXCJmcmFtZXdvcmstZXJyb3JcIiwgZXJyb3JQYXlsb2FkKVxuICAgICAgY29uZmlndXJhdGlvbi5nZXRFcnJvckV2ZW50cygpLmVtaXQoXCJhbGwtZXJyb3JcIiwge1xuICAgICAgICAuLi5lcnJvclBheWxvYWQsXG4gICAgICAgIGVycm9yVHlwZTogXCJmcmFtZXdvcmstZXJyb3JcIlxuICAgICAgfSlcblxuICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKDUwMClcbiAgICAgIHJlc3BvbnNlLnNldEVycm9yQm9keShlcnJvcilcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJSZXF1ZXN0IHJ1bm5lciBkb25lXCIsIHtcbiAgICAgIGh0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgcGF0aDogcmVxdWVzdC5wYXRoKCksXG4gICAgICByZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKVxuICAgIH1dKVxuICAgIHRoaXMuc3RhdGUgPSBcImRvbmVcIlxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJkb25lXCIsIHRoaXMpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gTG9ncyB0aGUgY29tcGxldGVkIHJlcXVlc3QgbGluZSBhZnRlciB0aGUgcmVzcG9uc2UgaGFzIGJlZW4gc2VydmVkLiAqL1xuICBhc3luYyBsb2dDb21wbGV0ZWRSZXF1ZXN0KCkge1xuICAgIGlmICh0aGlzLmNvbXBsZXRlZFJlcXVlc3RMb2dnZWQpIHJldHVyblxuXG4gICAgdGhpcy5jb21wbGV0ZWRSZXF1ZXN0TG9nZ2VkID0gdHJ1ZVxuXG4gICAgY29uc3QgcmVxdWVzdFRpbWluZyA9IHRoaXMucmVxdWVzdFRpbWluZ1xuXG4gICAgcmVxdWVzdFRpbWluZy5tYXJrUmVzcG9uc2VTZXJ2ZWQoKVxuXG4gICAgaWYgKCFyZXF1ZXN0VGltaW5nLmNvbXBsZXRlZExvZ1N1YmplY3QgfHwgIXJlcXVlc3RUaW1pbmcuY29tcGxldGVkTG9nTWV0aG9kKSByZXR1cm5cblxuICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIocmVxdWVzdFRpbWluZy5jb21wbGV0ZWRMb2dTdWJqZWN0LCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcbiAgICBjb25zdCBzdW1tYXJ5ID0gcmVxdWVzdFRpbWluZy5zdW1tYXJ5KClcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2VcbiAgICBjb25zdCBjb21wbGV0ZWRNZXNzYWdlID0gW1xuICAgICAgYENvbXBsZXRlZCAke3Jlc3BvbnNlLmdldFN0YXR1c0NvZGUoKX0gJHtyZXNwb25zZS5nZXRTdGF0dXNNZXNzYWdlKCl9IGluICR7TWF0aC5yb3VuZChzdW1tYXJ5LnRvdGFsTXMpfW1zIChgLFxuICAgICAgYENvbnRyb2xsZXI6ICR7Zm9ybWF0QnVja2V0TXMoc3VtbWFyeS5jb250cm9sbGVyTXMpfWAsXG4gICAgICBgIHwgVmlld3M6ICR7Zm9ybWF0QnVja2V0TXMoc3VtbWFyeS52aWV3c01zKX1gLFxuICAgICAgYCB8IERCOiAke2Zvcm1hdEJ1Y2tldE1zKHN1bW1hcnkuZGJNcyl9ICgke3F1ZXJ5Q291bnRMYWJlbChzdW1tYXJ5LmRiUXVlcnlDb3VudCl9KWAsXG4gICAgICBgIHwgVmVsb2Npb3VzOiAke2Zvcm1hdEJ1Y2tldE1zKHN1bW1hcnkudmVsb2Npb3VzTXMpfWAsXG4gICAgICBgKWBcbiAgICBdLmpvaW4oXCJcIilcblxuICAgIGF3YWl0IGxvZ2dlcltyZXF1ZXN0VGltaW5nLmNvbXBsZXRlZExvZ01ldGhvZF0oY29tcGxldGVkTWVzc2FnZSlcbiAgfVxufVxuIl19
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLHVDQUF1QyxDQUFBO0FBQ3BFLE9BQU8sV0FBVyxNQUFNLDZCQUE2QixDQUFBO0FBQ3JELE9BQU8sWUFBWSxNQUFNLDhCQUE4QixDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUNwQyxPQUFPLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQTtBQUVyRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBSTtJQUMxQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXZCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEtBQUssRUFBRSxzQkFBc0I7SUFDeEQsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFBO0lBRWxFLElBQUksV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFBO0lBRW5FLE1BQU0sU0FBUyxHQUFHLE9BQU87OzJDQUVjLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUMvRCxDQUFDLENBQUM7O3dCQUVjO1lBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJO1FBQzdCLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFD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QzVHLGVBQWUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNyRCxhQUFhLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUMsVUFBVSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUc7WUFDbkYsaUJBQWlCLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdEQsR0FBRztTQUNKLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRVYsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhY2t0cmFjZUNsZWFuZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2JhY2t0cmFjZS1jbGVhbmVyLW5vZGUuanNcIlxuaW1wb3J0IGVuc3VyZUVycm9yIGZyb20gXCIuLi8uLi91dGlscy9lbnN1cmUtZXJyb3IuanNcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IFJlcXVlc3RUaW1pbmcgZnJvbSBcIi4vcmVxdWVzdC10aW1pbmcuanNcIlxuaW1wb3J0IFJlc3BvbnNlIGZyb20gXCIuL3Jlc3BvbnNlLmpzXCJcbmltcG9ydCBSb3V0ZXNSZXNvbHZlciBmcm9tIFwiLi4vLi4vcm91dGVzL3Jlc29sdmVyLmpzXCJcblxuLyoqXG4gKiBSdW5zIHN0YWNrIGZyYW1lIGxpbmUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gbGluZSAtIFBvdGVudGlhbCBoZWFkZXIgbGluZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGxpbmUgaXMgYSBzdGFjayBmcmFtZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tGcmFtZUxpbmUobGluZSkge1xuICBpZiAoIWxpbmUpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAvXmF0XFxzKy91LnRlc3QobGluZS50cmltKCkpXG59XG5cbi8qKlxuICogUnVucyByZXF1ZXN0IGVycm9yIHN1bW1hcnkuXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIHRvIGZvcm1hdCBmb3IgbG9nZ2luZy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyIC0gQ2xlYW5lZCBzdGFjayB3aXRoIGhlYWRlciBsaW5lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBFcnJvciBzdW1tYXJ5IGxpbmUgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICovXG5mdW5jdGlvbiByZXF1ZXN0RXJyb3JTdW1tYXJ5KGVycm9yLCBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyKSB7XG4gIGNvbnN0IHN0YWNrSGVhZGVyID0gY2xlYW5lZFN0YWNrV2l0aEhlYWRlcj8uc3BsaXQoXCJcXG5cIilbMF0/LnRyaW0oKVxuXG4gIGlmIChzdGFja0hlYWRlciAmJiAhc3RhY2tGcmFtZUxpbmUoc3RhY2tIZWFkZXIpKSByZXR1cm4gc3RhY2tIZWFkZXJcblxuICBjb25zdCBlcnJvckNvZGUgPSB0eXBlb2YgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHs/fSAqLyAoZXJyb3IpLmNvZGUgPT09IFwic3RyaW5nXCJcbiAgICA/IC8qKlxuICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICBAdHlwZSB7P30gKi8gKGVycm9yKS5jb2RlXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpXG5cbiAgaWYgKGVycm9yQ29kZSkgcmV0dXJuIGAke2Vycm9yLm5hbWV9IFske2Vycm9yQ29kZX1dOiAke2Vycm9yTWVzc2FnZX1gXG5cbiAgcmV0dXJuIGAke2Vycm9yLm5hbWV9OiAke2Vycm9yTWVzc2FnZX1gXG59XG5cbi8qKlxuICogUnVucyByZXF1ZXN0IGVycm9yIGxvZyBkZXRhaWxzLlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciB0byBmb3JtYXQgZm9yIGxvZ2dpbmcuXG4gKiBAcmV0dXJucyB7e1xuICogICBlcnJvclN1bW1hcnk6IHN0cmluZyxcbiAqICAgY2xlYW5lZEJhY2t0cmFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICogfX0gLSBMb2cgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gcmVxdWVzdEVycm9yTG9nRGV0YWlscyhlcnJvcikge1xuICBjb25zdCBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyID0gQmFja3RyYWNlQ2xlYW5lci5nZXRDbGVhbmVkU3RhY2soZXJyb3IpXG4gIGNvbnN0IGVycm9yU3VtbWFyeSA9IHJlcXVlc3RFcnJvclN1bW1hcnkoZXJyb3IsIGNsZWFuZWRTdGFja1dpdGhIZWFkZXIpXG4gIGNvbnN0IGNsZWFuZWRCYWNrdHJhY2UgPSBCYWNrdHJhY2VDbGVhbmVyLmdldENsZWFuZWRTdGFjayhlcnJvciwge2luY2x1ZGVFcnJvckhlYWRlcjogZmFsc2V9KSB8fCBjbGVhbmVkU3RhY2tXaXRoSGVhZGVyXG5cbiAgcmV0dXJuIHtlcnJvclN1bW1hcnksIGNsZWFuZWRCYWNrdHJhY2V9XG59XG5cbi8qKlxuICogUnVucyByZXF1ZXN0IGVycm9yIGxvZyBtZXNzYWdlLlxuICogQHBhcmFtIHt7XG4gKiAgIGVycm9yU3VtbWFyeTogc3RyaW5nLFxuICogICBjbGVhbmVkQmFja3RyYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gKiB9fSBsb2dEZXRhaWxzIC0gTG9nIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNpbmdsZSByZXF1ZXN0IGVycm9yIGxvZyBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiByZXF1ZXN0RXJyb3JMb2dNZXNzYWdlKGxvZ0RldGFpbHMpIHtcbiAgaWYgKCFsb2dEZXRhaWxzLmNsZWFuZWRCYWNrdHJhY2UpIHtcbiAgICByZXR1cm4gYEVycm9yIHdoaWxlIHJ1bm5pbmcgcmVxdWVzdDogJHtsb2dEZXRhaWxzLmVycm9yU3VtbWFyeX1gXG4gIH1cblxuICByZXR1cm4gYEVycm9yIHdoaWxlIHJ1bm5pbmcgcmVxdWVzdDogJHtsb2dEZXRhaWxzLmVycm9yU3VtbWFyeX1cXG5DbGVhbmVkIGJhY2t0cmFjZTpcXG4ke2xvZ0RldGFpbHMuY2xlYW5lZEJhY2t0cmFjZX1gXG59XG5cbi8qKlxuICogUnVucyByZXNwb25zZSBib2R5IHR5cGUgZm9yIGxvZy5cbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICogQHJldHVybnMge3N0cmluZ30gLSBSZXNwb25zZSBib2R5IHR5cGUgZm9yIGxvZ2dpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlc3BvbnNlQm9keVR5cGVGb3JMb2cocmVzcG9uc2UpIHtcbiAgaWYgKHJlc3BvbnNlLmdldEZpbGVQYXRoKCkpIHJldHVybiBcImZpbGVcIlxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiByZXNwb25zZS5nZXRCb2R5KClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5zZXRcIlxuICB9XG59XG5cbi8qKlxuICogUnVucyBmb3JtYXQgYnVja2V0IG1zLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gTWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMge3N0cmluZ30gLSBGb3JtYXR0ZWQgbWlsbGlzZWNvbmRzIHdpdGggb25lIGRlY2ltYWwgcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEJ1Y2tldE1zKHZhbHVlKSB7XG4gIHJldHVybiBgJHt2YWx1ZS50b0ZpeGVkKDEpfW1zYFxufVxuXG4vKipcbiAqIFJ1bnMgcXVlcnkgY291bnQgbGFiZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBRdWVyeSBjb3VudC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUXVlcnkgY291bnQgbGFiZWwuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5Q291bnRMYWJlbChjb3VudCkge1xuICByZXR1cm4gYCR7Y291bnR9ICR7Y291bnQgPT09IDEgPyBcInF1ZXJ5XCIgOiBcInF1ZXJpZXNcIn1gXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJDbGllbnRSZXF1ZXN0UnVubmVyIHtcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCByZXF1ZXN0fSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLnJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHtjb25maWd1cmF0aW9ufSlcbiAgICB0aGlzLmNvbXBsZXRlZFJlcXVlc3RMb2dnZWQgPSBmYWxzZVxuICAgIHRoaXMucmVxdWVzdFRpbWluZyA9IG5ldyBSZXF1ZXN0VGltaW5nKClcbiAgICB0aGlzLnN0YXRlID0gXCJydW5uaW5nXCJcbiAgfVxuXG4gIGdldFJlcXVlc3QoKSB7IHJldHVybiB0aGlzLnJlcXVlc3QgfVxuICBnZXRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuc3RhdGUgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICB0aGlzLnJlcXVlc3RUaW1pbmcuc3RhcnRlZEF0TXMgPSBEYXRlLm5vdygpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLnJ1bldpdGhSZXF1ZXN0VGltaW5nKHRoaXMucmVxdWVzdFRpbWluZywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fcnVuKClcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgX3J1bigpIHtcbiAgICBjb25zdCB7Y29uZmlndXJhdGlvbiwgcmVxdWVzdCwgcmVzcG9uc2V9ID0gdGhpc1xuXG4gICAgaWYgKCFyZXF1ZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXF1ZXN0P1wiKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlJ1biByZXF1ZXN0IGxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGh0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICBodHRwVmVyc2lvbjogcmVxdWVzdC5odHRwVmVyc2lvbigpLFxuICAgICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luKCksXG4gICAgICAgIHBhdGg6IHJlcXVlc3QucGF0aCgpLFxuICAgICAgICByZW1vdGVBZGRyZXNzOiByZXF1ZXN0LnJlbW90ZUFkZHJlc3MoKVxuICAgICAgfV0pXG4gICAgICAvLyBCZWZvcmUgd2UgY2hlY2tlZCBpZiB0aGUgc2VjLWZldGNoLW1vZGUgd2FzIFwiY29yc1wiLCBidXQgaXQgc2VlbXMgdGhlIHNlYy1mZXRjaC1tb2RlIGlzbid0IGFsd2F5cyBwcmVzZW50XG4gICAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJSdW4gQ09SU1wiLCB7aHR0cE1ldGhvZDogcmVxdWVzdC5odHRwTWV0aG9kKCksIHNlY0ZldGNoTW9kZTogcmVxdWVzdC5oZWFkZXIoXCJzZWMtZmV0Y2gtbW9kZVwiKX1dKVxuXG4gICAgICBjb25zdCBjb3JzID0gY29uZmlndXJhdGlvbi5nZXRDb3JzKClcblxuICAgICAgaWYgKGNvcnMpIHtcbiAgICAgICAgYXdhaXQgY29ycyh7cmVxdWVzdCwgcmVzcG9uc2V9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJDT1JTIGhhbmRsZXIgZG9uZVwiLCB7XG4gICAgICAgICAgaHR0cE1ldGhvZDogcmVxdWVzdC5odHRwTWV0aG9kKCksXG4gICAgICAgICAgcGF0aDogcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgcmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZS5nZXRTdGF0dXNDb2RlKClcbiAgICAgICAgfV0pXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSBcIk9QVElPTlNcIiAmJiByZXF1ZXN0LmhlYWRlcihcInNlYy1mZXRjaC1tb2RlXCIpID09IFwiY29yc1wiKSB7XG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cygyMDApXG4gICAgICAgIHJlc3BvbnNlLnNldEJvZHkoXCJcIilcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiSGFuZGxlZCBwcmVmbGlnaHQgT1BUSU9OUyByZXF1ZXN0XCIsIHtcbiAgICAgICAgICBwYXRoOiByZXF1ZXN0LnBhdGgoKSxcbiAgICAgICAgICByZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKVxuICAgICAgICB9XSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiUnVuIHJlcXVlc3RcIilcbiAgICAgICAgY29uc3Qgcm91dGVzUmVzb2x2ZXIgPSBuZXcgUm91dGVzUmVzb2x2ZXIoe2NvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHJlc3BvbnNlfSlcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lTXMgPSBEYXRlLm5vdygpXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRpbWVvdXRJZC5cbiAgICAgICAgICBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9ICovXG4gICAgICAgIGxldCB0aW1lb3V0SWRcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGltZW91dFJlamVjdC5cbiAgICAgICAgICBAdHlwZSB7KChlcnJvcjogRXJyb3IpID0+IHZvaWQpIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgICBsZXQgdGltZW91dFJlamVjdFxuICAgICAgICBsZXQgdGltZWRPdXQgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IHNldFJlcXVlc3RUaW1lb3V0U2Vjb25kcyA9ICgvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi8gdGltZW91dFNlY29uZHMpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICAgICAgdGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aW1lb3V0U2Vjb25kcyAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRTZWNvbmRzKSB8fCB0aW1lb3V0U2Vjb25kcyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSB0aW1lb3V0U2Vjb25kcyAqIDEwMDBcbiAgICAgICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lTXNcbiAgICAgICAgICBjb25zdCByZW1haW5pbmdNcyA9IHRpbWVvdXRNcyAtIGVsYXBzZWRNc1xuXG4gICAgICAgICAgaWYgKHJlbWFpbmluZ01zIDw9IDApIHtcbiAgICAgICAgICAgIHRpbWVvdXRSZWplY3Q/LihuZXcgRXJyb3IoYFJlcXVlc3QgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dFNlY29uZHN9c2ApKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lb3V0UmVqZWN0Py4obmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRTZWNvbmRzfXNgKSlcbiAgICAgICAgICB9LCByZW1haW5pbmdNcylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRpbWVvdXRSZWplY3QgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRpbWVkT3V0ID0gdHJ1ZVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXNwb25zZS5zZXRSZXF1ZXN0VGltZW91dE1zQ2hhbmdlSGFuZGxlcigodGltZW91dFNlY29uZHMpID0+IHtcbiAgICAgICAgICBzZXRSZXF1ZXN0VGltZW91dFNlY29uZHModGltZW91dFNlY29uZHMpXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2V0UmVxdWVzdFRpbWVvdXRTZWNvbmRzKGNvbmZpZ3VyYXRpb24uZ2V0UmVxdWVzdFRpbWVvdXRNcz8uKCkpXG5cbiAgICAgICAgbGV0IHJlc29sdmVQcm9taXNlXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlUHJvbWlzZSA9IHJvdXRlc1Jlc29sdmVyLnJlc29sdmUoKVxuICAgICAgICAgIC8vIEtlZXAgUHJvbWlzZS5yYWNlIGhlcmUgdG8gYWxsb3cgZHluYW1pYyB0aW1lb3V0IHVwZGF0ZXMuXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtyZXNvbHZlUHJvbWlzZSwgdGltZW91dFByb21pc2VdKVxuICAgICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlJvdXRlcyByZXNvbHZlciBkb25lXCIsIHtcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IHJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICAgICAgcGF0aDogcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgICByZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSxcbiAgICAgICAgICAgIGhhc0ZpbGVQYXRoOiBCb29sZWFuKHJlc3BvbnNlLmdldEZpbGVQYXRoKCkpLFxuICAgICAgICAgICAgYm9keVR5cGU6IHJlc3BvbnNlQm9keVR5cGVGb3JMb2cocmVzcG9uc2UpXG4gICAgICAgICAgfV0pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRpbWVkT3V0ICYmIHJlc29sdmVQcm9taXNlKSB7XG4gICAgICAgICAgICB2b2lkIHJlc29sdmVQcm9taXNlLmNhdGNoKChyZXNvbHZlRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbXCJSZXF1ZXN0IGZpbmlzaGVkIGFmdGVyIHRpbWVvdXRcIiwgcmVzb2x2ZUVycm9yXSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZW5zdXJlRXJyb3IoZSlcbiAgICAgIGNvbnN0IGVycm9yV2l0aENvbnRleHQgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7e3ZlbG9jaW91c0NvbnRleHQ/OiBvYmplY3R9fSAqLyAoZXJyb3IpXG4gICAgICBjb25zdCBlcnJvckNvbnRleHQgPSBlcnJvcldpdGhDb250ZXh0LnZlbG9jaW91c0NvbnRleHQgfHwge3N0YWdlOiBcInJlcXVlc3QtcnVubmVyXCJ9XG4gICAgICBjb25zdCBsb2dEZXRhaWxzID0gcmVxdWVzdEVycm9yTG9nRGV0YWlscyhlcnJvcilcblxuICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gcmVxdWVzdEVycm9yTG9nTWVzc2FnZShsb2dEZXRhaWxzKSlcblxuICAgICAgY29uc3QgZXJyb3JQYXlsb2FkID0ge1xuICAgICAgICBjb250ZXh0OiBlcnJvckNvbnRleHQsXG4gICAgICAgIGVycm9yLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICByZXNwb25zZVxuICAgICAgfVxuXG4gICAgICBjb25maWd1cmF0aW9uLmdldEVycm9yRXZlbnRzKCkuZW1pdChcImZyYW1ld29yay1lcnJvclwiLCBlcnJvclBheWxvYWQpXG4gICAgICBjb25maWd1cmF0aW9uLmdldEVycm9yRXZlbnRzKCkuZW1pdChcImFsbC1lcnJvclwiLCB7XG4gICAgICAgIC4uLmVycm9yUGF5bG9hZCxcbiAgICAgICAgZXJyb3JUeXBlOiBcImZyYW1ld29yay1lcnJvclwiXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5zZXRTdGF0dXMoNTAwKVxuICAgICAgcmVzcG9uc2Uuc2V0RXJyb3JCb2R5KGVycm9yKVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlJlcXVlc3QgcnVubmVyIGRvbmVcIiwge1xuICAgICAgaHR0cE1ldGhvZDogcmVxdWVzdC5odHRwTWV0aG9kKCksXG4gICAgICBwYXRoOiByZXF1ZXN0LnBhdGgoKSxcbiAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpXG4gICAgfV0pXG4gICAgdGhpcy5zdGF0ZSA9IFwiZG9uZVwiXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImRvbmVcIiwgdGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGxvZyBjb21wbGV0ZWQgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gTG9ncyB0aGUgY29tcGxldGVkIHJlcXVlc3QgbGluZSBhZnRlciB0aGUgcmVzcG9uc2UgaGFzIGJlZW4gc2VydmVkLlxuICAgKi9cbiAgYXN5bmMgbG9nQ29tcGxldGVkUmVxdWVzdCgpIHtcbiAgICBpZiAodGhpcy5jb21wbGV0ZWRSZXF1ZXN0TG9nZ2VkKSByZXR1cm5cblxuICAgIHRoaXMuY29tcGxldGVkUmVxdWVzdExvZ2dlZCA9IHRydWVcblxuICAgIGNvbnN0IHJlcXVlc3RUaW1pbmcgPSB0aGlzLnJlcXVlc3RUaW1pbmdcblxuICAgIHJlcXVlc3RUaW1pbmcubWFya1Jlc3BvbnNlU2VydmVkKClcblxuICAgIGlmICghcmVxdWVzdFRpbWluZy5jb21wbGV0ZWRMb2dTdWJqZWN0IHx8ICFyZXF1ZXN0VGltaW5nLmNvbXBsZXRlZExvZ01ldGhvZCkgcmV0dXJuXG5cbiAgICBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKHJlcXVlc3RUaW1pbmcuY29tcGxldGVkTG9nU3ViamVjdCwge2NvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbn0pXG4gICAgY29uc3Qgc3VtbWFyeSA9IHJlcXVlc3RUaW1pbmcuc3VtbWFyeSgpXG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlXG4gICAgY29uc3QgY29tcGxldGVkTWVzc2FnZSA9IFtcbiAgICAgIGBDb21wbGV0ZWQgJHtyZXNwb25zZS5nZXRTdGF0dXNDb2RlKCl9ICR7cmVzcG9uc2UuZ2V0U3RhdHVzTWVzc2FnZSgpfSBpbiAke01hdGgucm91bmQoc3VtbWFyeS50b3RhbE1zKX1tcyAoYCxcbiAgICAgIGBDb250cm9sbGVyOiAke2Zvcm1hdEJ1Y2tldE1zKHN1bW1hcnkuY29udHJvbGxlck1zKX1gLFxuICAgICAgYCB8IFZpZXdzOiAke2Zvcm1hdEJ1Y2tldE1zKHN1bW1hcnkudmlld3NNcyl9YCxcbiAgICAgIGAgfCBEQjogJHtmb3JtYXRCdWNrZXRNcyhzdW1tYXJ5LmRiTXMpfSAoJHtxdWVyeUNvdW50TGFiZWwoc3VtbWFyeS5kYlF1ZXJ5Q291bnQpfSlgLFxuICAgICAgYCB8IFZlbG9jaW91czogJHtmb3JtYXRCdWNrZXRNcyhzdW1tYXJ5LnZlbG9jaW91c01zKX1gLFxuICAgICAgYClgXG4gICAgXS5qb2luKFwiXCIpXG5cbiAgICBhd2FpdCBsb2dnZXJbcmVxdWVzdFRpbWluZy5jb21wbGV0ZWRMb2dNZXRob2RdKGNvbXBsZXRlZE1lc3NhZ2UpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* RequestTimingBucket type.
|
|
2
3
|
* @typedef {"controller" | "db" | "views"} RequestTimingBucket
|
|
3
4
|
*/
|
|
4
5
|
/**
|
|
6
|
+
* Defines this typedef.
|
|
5
7
|
* @typedef {{bucket: RequestTimingBucket, startedAtMs: number}} ActiveTimingBucket
|
|
6
8
|
*/
|
|
7
9
|
/**
|
|
@@ -9,19 +11,30 @@
|
|
|
9
11
|
* the currently active bucket is paused until the nested bucket exits.
|
|
10
12
|
*/
|
|
11
13
|
export default class RequestTiming {
|
|
12
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Buckets.
|
|
16
|
+
@type {Record<RequestTimingBucket, number>} */
|
|
13
17
|
buckets: Record<RequestTimingBucket, number>;
|
|
14
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Bucket stack.
|
|
20
|
+
@type {ActiveTimingBucket[]} */
|
|
15
21
|
bucketStack: ActiveTimingBucket[];
|
|
16
22
|
dbQueryCount: number;
|
|
17
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Completed log method.
|
|
25
|
+
@type {"debug" | "info" | undefined} */
|
|
18
26
|
completedLogMethod: "debug" | "info" | undefined;
|
|
19
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Completed log subject.
|
|
29
|
+
@type {string | undefined} */
|
|
20
30
|
completedLogSubject: string | undefined;
|
|
21
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Response served at ms.
|
|
33
|
+
@type {number | undefined} */
|
|
22
34
|
responseServedAtMs: number | undefined;
|
|
23
35
|
startedAtMs: number;
|
|
24
36
|
/**
|
|
37
|
+
* Runs measure.
|
|
25
38
|
* @template T
|
|
26
39
|
* @param {RequestTimingBucket} bucket - Bucket name.
|
|
27
40
|
* @param {() => Promise<T> | T} callback - Callback to measure.
|
|
@@ -29,6 +42,7 @@ export default class RequestTiming {
|
|
|
29
42
|
*/
|
|
30
43
|
measure<T>(bucket: RequestTimingBucket, callback: () => Promise<T> | T): Promise<T>;
|
|
31
44
|
/**
|
|
45
|
+
* Runs measure sync.
|
|
32
46
|
* @template T
|
|
33
47
|
* @param {RequestTimingBucket} bucket - Bucket name.
|
|
34
48
|
* @param {() => T} callback - Callback to measure.
|
|
@@ -36,14 +50,19 @@ export default class RequestTiming {
|
|
|
36
50
|
*/
|
|
37
51
|
measureSync<T>(bucket: RequestTimingBucket, callback: () => T): T;
|
|
38
52
|
/**
|
|
53
|
+
* Runs measure db query.
|
|
39
54
|
* @template T
|
|
40
55
|
* @param {() => Promise<T>} callback - Query callback.
|
|
41
56
|
* @returns {Promise<T>} - Query result.
|
|
42
57
|
*/
|
|
43
58
|
measureDbQuery<T>(callback: () => Promise<T>): Promise<T>;
|
|
44
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Runs mark response served.
|
|
61
|
+
* @returns {void} - Marks the response as fully served.
|
|
62
|
+
*/
|
|
45
63
|
markResponseServed(): void;
|
|
46
64
|
/**
|
|
65
|
+
* Runs summary.
|
|
47
66
|
* @returns {{controllerMs: number, dbMs: number, totalMs: number, velociousMs: number, viewsMs: number, dbQueryCount: number}} - Timing summary.
|
|
48
67
|
*/
|
|
49
68
|
summary(): {
|
|
@@ -55,19 +74,30 @@ export default class RequestTiming {
|
|
|
55
74
|
dbQueryCount: number;
|
|
56
75
|
};
|
|
57
76
|
/**
|
|
77
|
+
* Runs bucket totals at.
|
|
58
78
|
* @param {number} now - Timestamp to calculate active bucket elapsed time against.
|
|
59
79
|
* @returns {Record<RequestTimingBucket, number>} - Bucket totals.
|
|
60
80
|
*/
|
|
61
81
|
_bucketTotalsAt(now: number): Record<RequestTimingBucket, number>;
|
|
62
82
|
/**
|
|
83
|
+
* Runs push bucket.
|
|
63
84
|
* @param {RequestTimingBucket} bucket - Bucket name.
|
|
64
85
|
* @returns {void} - No return value.
|
|
65
86
|
*/
|
|
66
87
|
_pushBucket(bucket: RequestTimingBucket): void;
|
|
67
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Runs pop bucket.
|
|
90
|
+
* @returns {void} - No return value.
|
|
91
|
+
*/
|
|
68
92
|
_popBucket(): void;
|
|
69
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* RequestTimingBucket type.
|
|
96
|
+
*/
|
|
70
97
|
export type RequestTimingBucket = "controller" | "db" | "views";
|
|
98
|
+
/**
|
|
99
|
+
* Defines this typedef.
|
|
100
|
+
*/
|
|
71
101
|
export type ActiveTimingBucket = {
|
|
72
102
|
bucket: RequestTimingBucket;
|
|
73
103
|
startedAtMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-timing.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-timing.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"request-timing.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/request-timing.js"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AACH;IACE;;oDAEgD;IAChD,SADS,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAK3C;IAED;;qCAEiC;IACjC,aADS,kBAAkB,EAAE,CACb;IAEhB,qBAAgB;IAChB;;6CAEyC;IACzC,oBADS,OAAO,GAAG,MAAM,GAAG,SAAS,CACP;IAC9B;;mCAE+B;IAC/B,qBADS,MAAM,GAAG,SAAS,CACI;IAC/B;;mCAE+B;IAC/B,oBADS,MAAM,GAAG,SAAS,CACG;IAC9B,oBAAwB;IAExB;;;;;;OAMG;IACH,QALa,CAAC,UACH,mBAAmB,YACnB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAUtB;IAED;;;;;;OAMG;IACH,YALa,CAAC,UACH,mBAAmB,YACnB,MAAM,CAAC,GACL,CAAC,CAUb;IAED;;;;;OAKG;IACH,eAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;OAGG;IACH,sBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,WAFa;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC,CAmB7H;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAW/C;IAED;;;;OAIG;IACH,oBAHW,mBAAmB,GACjB,IAAI,CAWhB;IAED;;;OAGG;IACH,cAFa,IAAI,CAYhB;CACF;;;;kCAtKY,YAAY,GAAG,IAAI,GAAG,OAAO;;;;iCAK7B;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC"}
|