velocious 1.0.577 → 1.0.579
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 +12 -6
- package/build/application.js +3 -3
- package/build/authorization/ability.js +6 -6
- package/build/authorization/base-resource.js +1 -1
- package/build/background-jobs/client.js +2 -2
- package/build/background-jobs/forked-runner-child.js +4 -4
- package/build/background-jobs/job-runner.js +2 -2
- package/build/background-jobs/job.js +6 -6
- package/build/background-jobs/json-socket.js +1 -1
- package/build/background-jobs/main.js +13 -13
- package/build/background-jobs/normalize-error.js +2 -2
- package/build/background-jobs/pooled-runner-child.js +3 -3
- package/build/background-jobs/scheduler.js +1 -1
- package/build/background-jobs/status-reporter.js +2 -2
- package/build/background-jobs/store.js +23 -23
- package/build/background-jobs/types.js +6 -6
- package/build/background-jobs/web/controller.js +6 -6
- package/build/background-jobs/web/counts-channel.js +1 -1
- package/build/background-jobs/worker.js +8 -8
- package/build/beacon/client.js +3 -3
- package/build/beacon/in-process-client.js +3 -3
- package/build/beacon/types.js +1 -1
- package/build/cli/base-command.js +1 -1
- package/build/cli/commands/console.js +1 -1
- package/build/cli/commands/db/schema/dump.js +1 -1
- package/build/cli/commands/db/schema/load.js +1 -1
- package/build/cli/commands/db/seed.js +1 -1
- package/build/cli/commands/generate/frontend-models.js +1 -1
- package/build/cli/commands/lint/relationships.js +1 -1
- package/build/cli/commands/run-script.js +1 -1
- package/build/cli/commands/runner.js +1 -1
- package/build/cli/index.js +2 -2
- package/build/cli/tenant-database-command-helper.js +2 -2
- package/build/configuration-types.js +48 -47
- package/build/configuration.js +150 -65
- package/build/controller.js +11 -8
- package/build/current.js +2 -2
- package/build/database/annotations-async-hooks.js +3 -3
- package/build/database/annotations.js +1 -1
- package/build/database/drivers/base-column.js +1 -1
- package/build/database/drivers/base-foreign-key.js +1 -1
- package/build/database/drivers/base-table.js +1 -1
- package/build/database/drivers/base.js +18 -18
- package/build/database/drivers/mssql/column.js +1 -1
- package/build/database/drivers/mssql/index.js +2 -2
- package/build/database/drivers/mssql/options.js +1 -1
- package/build/database/drivers/mssql/structure-sql.js +1 -1
- package/build/database/drivers/mssql/table.js +1 -1
- package/build/database/drivers/mysql/column.js +1 -1
- package/build/database/drivers/mysql/index.js +4 -4
- package/build/database/drivers/mysql/options.js +1 -1
- package/build/database/drivers/mysql/query.js +7 -7
- package/build/database/drivers/mysql/structure-sql.js +71 -10
- package/build/database/drivers/pgsql/column.js +1 -1
- package/build/database/drivers/pgsql/index.js +6 -6
- package/build/database/drivers/pgsql/structure-sql.js +1 -1
- package/build/database/drivers/sqlite/base.js +7 -7
- package/build/database/drivers/sqlite/column.js +1 -1
- package/build/database/drivers/sqlite/connection-sql-js.js +1 -1
- package/build/database/drivers/sqlite/foreign-key.js +1 -1
- package/build/database/drivers/sqlite/index.js +1 -1
- package/build/database/drivers/sqlite/index.native.js +2 -2
- package/build/database/drivers/sqlite/index.web.js +2 -2
- package/build/database/drivers/sqlite/query.js +2 -2
- package/build/database/drivers/sqlite/query.native.js +2 -2
- package/build/database/drivers/sqlite/query.web.js +2 -2
- package/build/database/drivers/sqlite/table-rebuilder.js +1 -1
- package/build/database/migration/index.js +2 -2
- package/build/database/migrator/types.js +2 -2
- package/build/database/operation.js +59 -6
- package/build/database/pool/async-tracked-multi-connection.js +75 -24
- package/build/database/pool/base-methods-forward.js +2 -2
- package/build/database/pool/base.js +48 -17
- package/build/database/pool/single-multi-use.js +501 -103
- package/build/database/query/delete-base.js +1 -1
- package/build/database/query/index.js +3 -3
- package/build/database/query/insert-base.js +4 -4
- package/build/database/query/model-class-query.js +39 -39
- package/build/database/query/preloader/belongs-to.js +2 -2
- package/build/database/query/preloader/ensure-model-class-initialized.js +3 -2
- package/build/database/query/preloader/has-many.js +3 -3
- package/build/database/query/preloader/has-one.js +1 -1
- package/build/database/query/preloader.js +9 -2
- package/build/database/query/query-data.js +7 -7
- package/build/database/query/update-base.js +3 -3
- package/build/database/query/upsert-base.js +2 -2
- package/build/database/query/where-model-class-hash.js +13 -13
- package/build/database/query/with-count.js +12 -12
- package/build/database/query-parser/options.js +2 -2
- package/build/database/query-parser/select-parser.js +1 -1
- package/build/database/record/acts-as-list.js +2 -2
- package/build/database/record/attachments/handle.js +6 -6
- package/build/database/record/attachments/normalize-input.js +11 -11
- package/build/database/record/attachments/storage-drivers/filesystem.js +1 -1
- package/build/database/record/attachments/storage-drivers/native.js +5 -5
- package/build/database/record/attachments/storage-drivers/s3.js +10 -10
- package/build/database/record/attachments/store.js +24 -20
- package/build/database/record/auditing.js +123 -29
- package/build/database/record/counter-cache-magnitude.js +11 -11
- package/build/database/record/index.js +227 -174
- package/build/database/record/instance-relationships/base.js +4 -4
- package/build/database/record/instance-relationships/belongs-to.js +1 -1
- package/build/database/record/instance-relationships/has-many.js +3 -3
- package/build/database/record/instance-relationships/has-one.js +1 -1
- package/build/database/record/record-not-found-error.js +1 -0
- package/build/database/record/relationships/base.js +22 -0
- package/build/database/record/state-machine.js +6 -6
- package/build/database/record/validators/base.js +1 -1
- package/build/database/structure-sql-loader.js +3 -3
- package/build/database/table-data/table-column.js +3 -3
- package/build/database/use-live-query.js +3 -3
- package/build/environment-handlers/base.js +56 -37
- package/build/environment-handlers/browser.js +1 -1
- package/build/environment-handlers/node/cli/commands/console.js +4 -4
- package/build/environment-handlers/node/cli/commands/db/seed.js +2 -2
- package/build/environment-handlers/node/cli/commands/generate/base-models.js +1 -1
- package/build/environment-handlers/node/cli/commands/run-script.js +2 -2
- package/build/environment-handlers/node/cli/commands/runner.js +2 -2
- package/build/environment-handlers/node/cli/commands/server.js +1 -1
- package/build/environment-handlers/node.js +36 -36
- package/build/error-logger.js +2 -2
- package/build/error-reporting/request-details.js +32 -32
- package/build/frontend-model-controller.js +215 -213
- package/build/frontend-model-resource/base-resource.js +44 -44
- package/build/frontend-model-resource/velocious-attachment-resource.js +1 -1
- package/build/frontend-models/base.js +146 -142
- package/build/frontend-models/clear-pending-debounced-callback.js +2 -2
- package/build/frontend-models/model-registry.js +4 -4
- package/build/frontend-models/outgoing-event-buffer.js +1 -1
- package/build/frontend-models/preloader.js +1 -1
- package/build/frontend-models/query.js +60 -60
- package/build/frontend-models/resource-definition.js +9 -9
- package/build/frontend-models/transport-serialization.js +27 -27
- package/build/frontend-models/websocket-channel.js +4 -4
- package/build/frontend-models/websocket-publishers.js +1 -1
- package/build/http-client/request.js +1 -1
- package/build/http-client/response.js +1 -1
- package/build/http-server/client/index.js +4 -4
- package/build/http-server/client/params-to-object.js +16 -16
- package/build/http-server/client/request-buffer/index.js +5 -2
- package/build/http-server/client/request-parser.js +2 -2
- package/build/http-server/client/request-runner.js +2 -2
- package/build/http-server/client/request.js +2 -2
- package/build/http-server/client/websocket-request.js +6 -6
- package/build/http-server/client/websocket-session.js +28 -28
- package/build/http-server/cookie.js +2 -2
- package/build/http-server/development-reloader.js +1 -1
- package/build/http-server/index.js +5 -5
- package/build/http-server/remote-address.js +1 -1
- package/build/http-server/server-lock.js +4 -4
- package/build/http-server/websocket-channel-subscribers.js +4 -4
- package/build/http-server/websocket-channel.js +1 -1
- package/build/http-server/websocket-connection.js +3 -3
- package/build/http-server/websocket-event-log-store.js +9 -9
- package/build/http-server/websocket-events-host.js +7 -7
- package/build/http-server/websocket-events.js +4 -4
- package/build/http-server/worker-handler/channel-subscriber-dispatch.js +1 -1
- package/build/http-server/worker-handler/in-process.js +5 -5
- package/build/http-server/worker-handler/index.js +10 -10
- package/build/http-server/worker-handler/worker-thread.js +8 -8
- package/build/index.d.ts.map +1 -1
- package/build/logger/base-logger.js +1 -1
- package/build/logger.js +12 -12
- package/build/mailer/backends/smtp.js +3 -3
- package/build/mailer/base.js +14 -14
- package/build/mailer/delivery.js +3 -3
- package/build/mailer/index.js +1 -1
- package/build/mailer.js +1 -1
- package/build/plugins/sqljs-wasm-route-controller.js +1 -1
- package/build/record-payload-values.js +3 -3
- package/build/routes/base-route.js +5 -5
- package/build/routes/basic-route.js +4 -4
- package/build/routes/get-route.js +2 -2
- package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
- package/build/routes/index.js +3 -3
- package/build/routes/namespace-route.js +1 -1
- package/build/routes/plugin-routes.js +1 -1
- package/build/routes/post-route.js +2 -2
- package/build/routes/resolver.js +5 -5
- package/build/routes/resource-route.js +1 -1
- package/build/src/application.d.ts +26 -29
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +4 -4
- package/build/src/authorization/ability.d.ts +47 -53
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +7 -7
- package/build/src/authorization/base-resource.d.ts +13 -13
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +2 -2
- package/build/src/background-jobs/client.d.ts +9 -9
- package/build/src/background-jobs/client.d.ts.map +1 -1
- package/build/src/background-jobs/client.js +3 -3
- package/build/src/background-jobs/cron-expression.d.ts +25 -16
- package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
- package/build/src/background-jobs/forked-runner-child.js +5 -5
- package/build/src/background-jobs/job-record.d.ts +4 -3
- package/build/src/background-jobs/job-record.d.ts.map +1 -1
- package/build/src/background-jobs/job-registry.d.ts +6 -6
- package/build/src/background-jobs/job-registry.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.d.ts +9 -9
- package/build/src/background-jobs/job-runner.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.js +3 -3
- package/build/src/background-jobs/job.d.ts +14 -14
- package/build/src/background-jobs/job.d.ts.map +1 -1
- package/build/src/background-jobs/job.js +7 -7
- package/build/src/background-jobs/json-socket.d.ts +9 -10
- package/build/src/background-jobs/json-socket.d.ts.map +1 -1
- package/build/src/background-jobs/json-socket.js +2 -2
- package/build/src/background-jobs/main.d.ts +56 -59
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +14 -14
- package/build/src/background-jobs/normalize-error.d.ts +2 -2
- package/build/src/background-jobs/normalize-error.d.ts.map +1 -1
- package/build/src/background-jobs/normalize-error.js +3 -3
- package/build/src/background-jobs/pooled-runner-child.js +4 -4
- package/build/src/background-jobs/runner-graceful-shutdown.d.ts +7 -12
- package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
- package/build/src/background-jobs/runner-process-title.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.d.ts +41 -41
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +2 -2
- package/build/src/background-jobs/socket-request.d.ts +14 -14
- package/build/src/background-jobs/socket-request.d.ts.map +1 -1
- package/build/src/background-jobs/status-reporter.d.ts +28 -28
- package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
- package/build/src/background-jobs/status-reporter.js +3 -3
- package/build/src/background-jobs/store.d.ts +100 -103
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +24 -24
- package/build/src/background-jobs/types.d.ts +124 -124
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +7 -7
- package/build/src/background-jobs/web/authorization.d.ts +2 -2
- package/build/src/background-jobs/web/authorization.d.ts.map +1 -1
- package/build/src/background-jobs/web/controller.d.ts +13 -13
- package/build/src/background-jobs/web/controller.d.ts.map +1 -1
- package/build/src/background-jobs/web/controller.js +7 -7
- package/build/src/background-jobs/web/counts-channel.d.ts +8 -8
- package/build/src/background-jobs/web/counts-channel.d.ts.map +1 -1
- package/build/src/background-jobs/web/counts-channel.js +2 -2
- package/build/src/background-jobs/web/index.d.ts +4 -4
- package/build/src/background-jobs/web/index.d.ts.map +1 -1
- package/build/src/background-jobs/web/path-matcher.d.ts +18 -13
- package/build/src/background-jobs/web/path-matcher.d.ts.map +1 -1
- package/build/src/background-jobs/web/registry.d.ts +21 -24
- package/build/src/background-jobs/web/registry.d.ts.map +1 -1
- package/build/src/background-jobs/worker.d.ts +74 -77
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +9 -9
- package/build/src/beacon/client.d.ts +30 -34
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +4 -4
- package/build/src/beacon/in-process-broker.d.ts +6 -9
- package/build/src/beacon/in-process-broker.d.ts.map +1 -1
- package/build/src/beacon/in-process-client.d.ts +17 -21
- package/build/src/beacon/in-process-client.d.ts.map +1 -1
- package/build/src/beacon/in-process-client.js +4 -4
- package/build/src/beacon/server.d.ts +15 -15
- package/build/src/beacon/server.d.ts.map +1 -1
- package/build/src/beacon/types.d.ts +21 -46
- 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 +25 -28
- package/build/src/cli/base-command.d.ts.map +1 -1
- package/build/src/cli/base-command.js +2 -2
- package/build/src/cli/browser-cli.d.ts +1 -1
- package/build/src/cli/browser-cli.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-main.d.ts +2 -1
- package/build/src/cli/commands/background-jobs-main.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-runner.d.ts +2 -1
- package/build/src/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-worker.d.ts +2 -1
- package/build/src/cli/commands/background-jobs-worker.d.ts.map +1 -1
- package/build/src/cli/commands/beacon.d.ts +2 -1
- package/build/src/cli/commands/beacon.d.ts.map +1 -1
- package/build/src/cli/commands/console.d.ts +6 -1
- package/build/src/cli/commands/console.d.ts.map +1 -1
- package/build/src/cli/commands/console.js +2 -2
- package/build/src/cli/commands/db/base-command.d.ts +1 -1
- package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
- package/build/src/cli/commands/db/create.d.ts +1 -1
- package/build/src/cli/commands/db/create.d.ts.map +1 -1
- package/build/src/cli/commands/db/drop.d.ts +1 -1
- package/build/src/cli/commands/db/drop.d.ts.map +1 -1
- package/build/src/cli/commands/db/migrate.d.ts +1 -1
- package/build/src/cli/commands/db/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/db/reset.d.ts +1 -1
- package/build/src/cli/commands/db/reset.d.ts.map +1 -1
- package/build/src/cli/commands/db/rollback.d.ts +1 -1
- package/build/src/cli/commands/db/rollback.d.ts.map +1 -1
- package/build/src/cli/commands/db/schema/dump.d.ts +6 -1
- package/build/src/cli/commands/db/schema/dump.d.ts.map +1 -1
- package/build/src/cli/commands/db/schema/dump.js +2 -2
- package/build/src/cli/commands/db/schema/load.d.ts +6 -1
- package/build/src/cli/commands/db/schema/load.d.ts.map +1 -1
- package/build/src/cli/commands/db/schema/load.js +2 -2
- package/build/src/cli/commands/db/seed.d.ts +6 -1
- package/build/src/cli/commands/db/seed.d.ts.map +1 -1
- package/build/src/cli/commands/db/seed.js +2 -2
- package/build/src/cli/commands/db/tenants/check.d.ts +1 -1
- package/build/src/cli/commands/db/tenants/check.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/create.d.ts +1 -1
- package/build/src/cli/commands/db/tenants/create.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/drop.d.ts +1 -1
- package/build/src/cli/commands/db/tenants/drop.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/migrate.d.ts +1 -1
- package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/destroy/migration.d.ts +2 -1
- package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/base-models.d.ts +2 -1
- package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/cli/commands/generate/frontend-models.d.ts +6 -1
- package/build/src/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/cli/commands/generate/frontend-models.js +2 -2
- package/build/src/cli/commands/generate/migration.d.ts +2 -1
- package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/model.d.ts +2 -1
- package/build/src/cli/commands/generate/model.d.ts.map +1 -1
- package/build/src/cli/commands/init.d.ts +4 -2
- package/build/src/cli/commands/init.d.ts.map +1 -1
- package/build/src/cli/commands/lint/relationships.d.ts +6 -1
- package/build/src/cli/commands/lint/relationships.d.ts.map +1 -1
- package/build/src/cli/commands/lint/relationships.js +2 -2
- package/build/src/cli/commands/routes.d.ts +2 -1
- package/build/src/cli/commands/routes.d.ts.map +1 -1
- package/build/src/cli/commands/run-script.d.ts +6 -1
- package/build/src/cli/commands/run-script.d.ts.map +1 -1
- package/build/src/cli/commands/run-script.js +2 -2
- package/build/src/cli/commands/runner.d.ts +6 -1
- package/build/src/cli/commands/runner.d.ts.map +1 -1
- package/build/src/cli/commands/runner.js +2 -2
- package/build/src/cli/commands/server.d.ts +2 -1
- package/build/src/cli/commands/server.d.ts.map +1 -1
- package/build/src/cli/commands/test.d.ts +2 -1
- package/build/src/cli/commands/test.d.ts.map +1 -1
- package/build/src/cli/index.d.ts +20 -20
- package/build/src/cli/index.d.ts.map +1 -1
- package/build/src/cli/index.js +3 -3
- package/build/src/cli/tenant-database-command-helper.d.ts +13 -13
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +3 -3
- package/build/src/cli/use-browser-cli.d.ts +1 -1
- package/build/src/cli/use-browser-cli.d.ts.map +1 -1
- package/build/src/configuration-resolver.d.ts +1 -1
- package/build/src/configuration-resolver.d.ts.map +1 -1
- package/build/src/configuration-types.d.ts +947 -1038
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +49 -48
- package/build/src/configuration.d.ts +145 -139
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +149 -66
- package/build/src/controller.d.ts +37 -35
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +11 -9
- package/build/src/current-configuration.d.ts +5 -4
- package/build/src/current-configuration.d.ts.map +1 -1
- package/build/src/current.d.ts +3 -3
- package/build/src/current.d.ts.map +1 -1
- package/build/src/current.js +3 -3
- package/build/src/database/advisory-lock-runner.d.ts +61 -60
- package/build/src/database/advisory-lock-runner.d.ts.map +1 -1
- package/build/src/database/annotations-async-hooks.js +4 -4
- package/build/src/database/annotations.d.ts +4 -6
- package/build/src/database/annotations.d.ts.map +1 -1
- package/build/src/database/annotations.js +2 -2
- package/build/src/database/column-types.d.ts +1 -1
- package/build/src/database/column-types.d.ts.map +1 -1
- package/build/src/database/datetime-storage.d.ts +6 -6
- package/build/src/database/datetime-storage.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.d.ts +3 -3
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +2 -2
- package/build/src/database/drivers/base-columns-index.d.ts +2 -2
- package/build/src/database/drivers/base-columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/base-foreign-key.d.ts +7 -7
- package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/base-foreign-key.js +2 -2
- package/build/src/database/drivers/base-table.d.ts +3 -3
- package/build/src/database/drivers/base-table.d.ts.map +1 -1
- package/build/src/database/drivers/base-table.js +2 -2
- package/build/src/database/drivers/base.d.ts +297 -342
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +19 -19
- package/build/src/database/drivers/index-metadata.d.ts +15 -18
- package/build/src/database/drivers/index-metadata.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/column.d.ts +10 -5
- package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/column.js +2 -2
- package/build/src/database/drivers/mssql/columns-index.d.ts +30 -22
- package/build/src/database/drivers/mssql/columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/foreign-key.d.ts +1 -1
- package/build/src/database/drivers/mssql/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.d.ts +250 -9
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +3 -3
- package/build/src/database/drivers/mssql/options.d.ts +31 -1
- package/build/src/database/drivers/mssql/options.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/options.js +2 -2
- package/build/src/database/drivers/mssql/query-parser.d.ts +1 -1
- package/build/src/database/drivers/mssql/query-parser.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/alter-table.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/create-database.d.ts +3 -2
- package/build/src/database/drivers/mssql/sql/create-database.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/create-index.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/create-index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/create-table.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/create-table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/delete.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/delete.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/drop-database.d.ts +14 -1
- package/build/src/database/drivers/mssql/sql/drop-database.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/drop-table.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/drop-table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/insert.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/insert.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/remove-index.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/remove-index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/upsert.d.ts +1 -1
- package/build/src/database/drivers/mssql/sql/upsert.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/structure-sql.d.ts +3 -3
- package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/structure-sql.js +2 -2
- package/build/src/database/drivers/mssql/table.d.ts +39 -29
- package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/table.js +2 -2
- package/build/src/database/drivers/mysql/column.d.ts +10 -6
- package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/column.js +2 -2
- package/build/src/database/drivers/mysql/columns-index.d.ts +3 -1
- package/build/src/database/drivers/mysql/columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/foreign-key.d.ts +1 -1
- package/build/src/database/drivers/mysql/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.d.ts +225 -6
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +5 -5
- package/build/src/database/drivers/mysql/options.d.ts +7 -1
- package/build/src/database/drivers/mysql/options.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/options.js +2 -2
- package/build/src/database/drivers/mysql/query-parser.d.ts +1 -1
- package/build/src/database/drivers/mysql/query-parser.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/query-stream.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/query.d.ts +2 -2
- package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/query.js +8 -8
- package/build/src/database/drivers/mysql/sql/alter-table.d.ts +12 -1
- package/build/src/database/drivers/mysql/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/create-database.d.ts +6 -1
- package/build/src/database/drivers/mysql/sql/create-database.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/create-index.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/create-index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/create-table.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/create-table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/delete.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/delete.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/drop-database.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/drop-database.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/drop-table.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/drop-table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/insert.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/insert.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/remove-index.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/remove-index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/update.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/upsert.d.ts +1 -1
- package/build/src/database/drivers/mysql/sql/upsert.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/structure-sql.d.ts +14 -3
- package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/structure-sql.js +62 -11
- package/build/src/database/drivers/mysql/table.d.ts +11 -6
- package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.d.ts +10 -5
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +2 -2
- package/build/src/database/drivers/pgsql/columns-index.d.ts +30 -22
- package/build/src/database/drivers/pgsql/columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/foreign-key.d.ts +1 -1
- package/build/src/database/drivers/pgsql/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.d.ts +157 -6
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +7 -7
- package/build/src/database/drivers/pgsql/options.d.ts +1 -1
- package/build/src/database/drivers/pgsql/options.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/query-parser.d.ts +1 -1
- package/build/src/database/drivers/pgsql/query-parser.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/alter-table.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/create-database.d.ts +2 -1
- package/build/src/database/drivers/pgsql/sql/create-database.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/create-index.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/create-index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/create-table.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/create-table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/delete.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/delete.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/drop-database.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/drop-database.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/drop-table.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/drop-table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/insert.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/insert.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/remove-index.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/remove-index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/upsert.d.ts +1 -1
- package/build/src/database/drivers/pgsql/sql/upsert.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/structure-sql.d.ts +3 -3
- package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/structure-sql.js +2 -2
- package/build/src/database/drivers/pgsql/table.d.ts +33 -31
- package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.d.ts +162 -12
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +8 -8
- package/build/src/database/drivers/sqlite/column.d.ts +12 -6
- package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/column.js +2 -2
- package/build/src/database/drivers/sqlite/columns-index.d.ts +5 -1
- package/build/src/database/drivers/sqlite/columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +9 -9
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/connection-sql-js.js +2 -2
- package/build/src/database/drivers/sqlite/foreign-key.d.ts +5 -4
- package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/foreign-key.js +2 -2
- package/build/src/database/drivers/sqlite/index.d.ts +53 -3
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +2 -2
- package/build/src/database/drivers/sqlite/index.native.d.ts +13 -5
- package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.native.js +3 -3
- package/build/src/database/drivers/sqlite/index.web.d.ts +48 -14
- package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.web.js +3 -3
- package/build/src/database/drivers/sqlite/options.d.ts +1 -1
- package/build/src/database/drivers/sqlite/options.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query-parser.d.ts +1 -1
- package/build/src/database/drivers/sqlite/query-parser.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.d.ts +2 -2
- package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.js +3 -3
- package/build/src/database/drivers/sqlite/query.native.d.ts +4 -4
- 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 +2 -2
- package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.web.js +3 -3
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts +19 -4
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/create-index.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/create-index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/create-table.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/create-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/delete.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/delete.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/drop-table.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/drop-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/insert.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/insert.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/remove-index.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/remove-index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/update.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/upsert.d.ts +1 -1
- package/build/src/database/drivers/sqlite/sql/upsert.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/structure-sql.d.ts +1 -1
- package/build/src/database/drivers/sqlite/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts +5 -5
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table-rebuilder.js +2 -2
- package/build/src/database/drivers/sqlite/table.d.ts +15 -5
- package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/web-persistence.d.ts +28 -34
- package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
- package/build/src/database/drivers/structure-sql/utils.d.ts +2 -2
- package/build/src/database/drivers/structure-sql/utils.d.ts.map +1 -1
- package/build/src/database/handler.d.ts.map +1 -1
- package/build/src/database/initializer-from-require-context.d.ts +18 -16
- package/build/src/database/initializer-from-require-context.d.ts.map +1 -1
- package/build/src/database/live-query.d.ts +13 -24
- package/build/src/database/live-query.d.ts.map +1 -1
- package/build/src/database/migration/index.d.ts +146 -169
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +3 -3
- package/build/src/database/migrations-ledger.d.ts.map +1 -1
- package/build/src/database/migrator/files-finder.d.ts +1 -1
- package/build/src/database/migrator/files-finder.d.ts.map +1 -1
- package/build/src/database/migrator/types.d.ts +26 -2
- package/build/src/database/migrator/types.d.ts.map +1 -1
- package/build/src/database/migrator/types.js +24 -1
- package/build/src/database/migrator.d.ts +10 -10
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/operation-connection.d.ts +3 -3
- package/build/src/database/operation-connection.d.ts.map +1 -1
- package/build/src/database/operation-lease.d.ts +4 -4
- package/build/src/database/operation-lease.d.ts.map +1 -1
- package/build/src/database/operation.d.ts +38 -7
- package/build/src/database/operation.d.ts.map +1 -1
- package/build/src/database/operation.js +55 -8
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +174 -79
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +70 -25
- package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
- package/build/src/database/pool/base-methods-forward.js +3 -3
- package/build/src/database/pool/base.d.ts +93 -71
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +47 -17
- package/build/src/database/pool/single-multi-use.d.ts +243 -10
- package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
- package/build/src/database/pool/single-multi-use.js +467 -103
- package/build/src/database/query/alter-table-base.d.ts +8 -3
- package/build/src/database/query/alter-table-base.d.ts.map +1 -1
- package/build/src/database/query/base.d.ts +3 -3
- package/build/src/database/query/base.d.ts.map +1 -1
- package/build/src/database/query/create-database-base.d.ts +28 -22
- package/build/src/database/query/create-database-base.d.ts.map +1 -1
- package/build/src/database/query/create-index-base.d.ts +32 -30
- package/build/src/database/query/create-index-base.d.ts.map +1 -1
- package/build/src/database/query/create-table-base.d.ts +7 -7
- package/build/src/database/query/create-table-base.d.ts.map +1 -1
- package/build/src/database/query/delete-base.d.ts +5 -5
- package/build/src/database/query/delete-base.d.ts.map +1 -1
- package/build/src/database/query/delete-base.js +2 -2
- package/build/src/database/query/drop-database-base.d.ts +22 -18
- package/build/src/database/query/drop-database-base.d.ts.map +1 -1
- package/build/src/database/query/drop-table-base.d.ts +11 -6
- package/build/src/database/query/drop-table-base.d.ts.map +1 -1
- package/build/src/database/query/from-base.d.ts.map +1 -1
- package/build/src/database/query/from-plain.d.ts +3 -2
- package/build/src/database/query/from-plain.d.ts.map +1 -1
- package/build/src/database/query/from-table.d.ts +3 -2
- package/build/src/database/query/from-table.d.ts.map +1 -1
- package/build/src/database/query/index.d.ts +92 -107
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +4 -4
- package/build/src/database/query/insert-base.d.ts +18 -18
- package/build/src/database/query/insert-base.d.ts.map +1 -1
- package/build/src/database/query/insert-base.js +5 -5
- package/build/src/database/query/join-base.d.ts +1 -1
- package/build/src/database/query/join-base.d.ts.map +1 -1
- package/build/src/database/query/join-object.d.ts +9 -15
- package/build/src/database/query/join-object.d.ts.map +1 -1
- package/build/src/database/query/join-plain.d.ts +2 -2
- package/build/src/database/query/join-plain.d.ts.map +1 -1
- package/build/src/database/query/join-tracker.d.ts +3 -3
- package/build/src/database/query/join-tracker.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.d.ts +39 -36
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +40 -40
- package/build/src/database/query/order-base.d.ts +1 -1
- package/build/src/database/query/order-base.d.ts.map +1 -1
- package/build/src/database/query/order-column.d.ts +19 -22
- package/build/src/database/query/order-column.d.ts.map +1 -1
- package/build/src/database/query/order-plain.d.ts +3 -3
- package/build/src/database/query/order-plain.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.d.ts +5 -5
- package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.js +3 -3
- package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts +2 -1
- 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 +4 -3
- package/build/src/database/query/preloader/has-many.d.ts +6 -6
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +4 -4
- package/build/src/database/query/preloader/has-one.d.ts +5 -5
- package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-one.js +2 -2
- package/build/src/database/query/preloader/query-for-model.d.ts.map +1 -1
- package/build/src/database/query/preloader/selection.d.ts +6 -6
- package/build/src/database/query/preloader/selection.d.ts.map +1 -1
- package/build/src/database/query/preloader.d.ts +8 -8
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +9 -3
- package/build/src/database/query/query-data.d.ts +43 -55
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +8 -8
- package/build/src/database/query/remove-index-base.d.ts +21 -19
- package/build/src/database/query/remove-index-base.d.ts.map +1 -1
- package/build/src/database/query/select-base.d.ts +1 -1
- package/build/src/database/query/select-base.d.ts.map +1 -1
- package/build/src/database/query/select-plain.d.ts +3 -2
- package/build/src/database/query/select-plain.d.ts.map +1 -1
- package/build/src/database/query/select-table-and-column.d.ts +4 -3
- package/build/src/database/query/select-table-and-column.d.ts.map +1 -1
- package/build/src/database/query/update-base.d.ts +10 -10
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +4 -4
- package/build/src/database/query/upsert-base.d.ts +9 -9
- package/build/src/database/query/upsert-base.d.ts.map +1 -1
- package/build/src/database/query/upsert-base.js +3 -3
- package/build/src/database/query/where-base.d.ts +1 -1
- package/build/src/database/query/where-base.d.ts.map +1 -1
- package/build/src/database/query/where-combinator.d.ts +9 -4
- package/build/src/database/query/where-combinator.d.ts.map +1 -1
- package/build/src/database/query/where-hash.d.ts +11 -9
- package/build/src/database/query/where-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.d.ts +28 -26
- package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.js +14 -14
- package/build/src/database/query/where-not.d.ts +8 -3
- package/build/src/database/query/where-not.d.ts.map +1 -1
- package/build/src/database/query/where-plain.d.ts +4 -3
- package/build/src/database/query/where-plain.d.ts.map +1 -1
- package/build/src/database/query/with-count.d.ts +22 -28
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +12 -12
- package/build/src/database/query-aborted-error.d.ts +5 -5
- package/build/src/database/query-aborted-error.d.ts.map +1 -1
- package/build/src/database/query-parser/base-query-parser.d.ts +3 -3
- package/build/src/database/query-parser/base-query-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/from-parser.d.ts +2 -2
- package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/group-parser.d.ts +2 -2
- package/build/src/database/query-parser/group-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/joins-parser.d.ts +3 -3
- package/build/src/database/query-parser/joins-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/limit-parser.d.ts +2 -2
- package/build/src/database/query-parser/limit-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/options.d.ts +31 -34
- package/build/src/database/query-parser/options.d.ts.map +1 -1
- package/build/src/database/query-parser/options.js +3 -3
- package/build/src/database/query-parser/order-parser.d.ts +2 -2
- package/build/src/database/query-parser/order-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/select-parser.d.ts +2 -2
- package/build/src/database/query-parser/select-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/select-parser.js +2 -2
- package/build/src/database/query-parser/where-parser.d.ts +2 -2
- package/build/src/database/query-parser/where-parser.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +3 -3
- package/build/src/database/record/attachments/attachment-record.d.ts +7 -3
- package/build/src/database/record/attachments/attachment-record.d.ts.map +1 -1
- package/build/src/database/record/attachments/download.d.ts +9 -9
- package/build/src/database/record/attachments/download.d.ts.map +1 -1
- package/build/src/database/record/attachments/handle.d.ts +12 -12
- package/build/src/database/record/attachments/handle.d.ts.map +1 -1
- package/build/src/database/record/attachments/handle.js +7 -7
- package/build/src/database/record/attachments/normalize-input.d.ts +16 -22
- package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
- package/build/src/database/record/attachments/normalize-input.js +12 -12
- package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts +4 -4
- package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +2 -2
- package/build/src/database/record/attachments/storage-drivers/native.d.ts +12 -12
- package/build/src/database/record/attachments/storage-drivers/native.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/native.js +6 -6
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts +17 -17
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/s3.js +11 -11
- package/build/src/database/record/attachments/store.d.ts +38 -41
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +24 -21
- package/build/src/database/record/auditing.d.ts +67 -87
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +109 -30
- package/build/src/database/record/counter-cache-magnitude.d.ts +15 -35
- package/build/src/database/record/counter-cache-magnitude.d.ts.map +1 -1
- package/build/src/database/record/counter-cache-magnitude.js +12 -12
- package/build/src/database/record/index.d.ts +2390 -488
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +222 -172
- package/build/src/database/record/instance-relationships/base.d.ts +20 -23
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +5 -5
- package/build/src/database/record/instance-relationships/belongs-to.d.ts +9 -1
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +2 -2
- package/build/src/database/record/instance-relationships/has-many.d.ts +15 -3
- package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-many.js +4 -4
- package/build/src/database/record/instance-relationships/has-one.d.ts +19 -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 +2 -2
- package/build/src/database/record/record-not-found-error.d.ts +1 -0
- package/build/src/database/record/record-not-found-error.d.ts.map +1 -1
- package/build/src/database/record/record-not-found-error.js +2 -1
- package/build/src/database/record/relationships/base.d.ts +83 -71
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +21 -1
- package/build/src/database/record/relationships/belongs-to.d.ts +11 -1
- package/build/src/database/record/relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/relationships/has-many.d.ts +11 -1
- package/build/src/database/record/relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/relationships/has-one.d.ts +11 -1
- package/build/src/database/record/relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/state-machine.d.ts +20 -29
- package/build/src/database/record/state-machine.d.ts.map +1 -1
- package/build/src/database/record/state-machine.js +7 -7
- package/build/src/database/record/user-module.d.ts +1 -1
- package/build/src/database/record/user-module.d.ts.map +1 -1
- package/build/src/database/record/validation-messages.d.ts +19 -22
- package/build/src/database/record/validation-messages.d.ts.map +1 -1
- package/build/src/database/record/validators/base.d.ts +4 -4
- package/build/src/database/record/validators/base.d.ts.map +1 -1
- package/build/src/database/record/validators/base.js +2 -2
- package/build/src/database/record/validators/format.d.ts +12 -1
- package/build/src/database/record/validators/format.d.ts.map +1 -1
- package/build/src/database/record/validators/length.d.ts +14 -1
- package/build/src/database/record/validators/length.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.d.ts +11 -1
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.d.ts +12 -1
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record-changes.d.ts +7 -18
- package/build/src/database/record-changes.d.ts.map +1 -1
- package/build/src/database/structure-sql-loader.d.ts +2 -2
- package/build/src/database/structure-sql-loader.d.ts.map +1 -1
- package/build/src/database/structure-sql-loader.js +4 -4
- package/build/src/database/table-data/index.d.ts +21 -24
- package/build/src/database/table-data/index.d.ts.map +1 -1
- package/build/src/database/table-data/table-column.d.ts +74 -80
- package/build/src/database/table-data/table-column.d.ts.map +1 -1
- package/build/src/database/table-data/table-column.js +4 -4
- package/build/src/database/table-data/table-foreign-key.d.ts +10 -10
- package/build/src/database/table-data/table-foreign-key.d.ts.map +1 -1
- package/build/src/database/table-data/table-index.d.ts +12 -15
- package/build/src/database/table-data/table-index.d.ts.map +1 -1
- package/build/src/database/table-data/table-reference.d.ts +2 -2
- package/build/src/database/table-data/table-reference.d.ts.map +1 -1
- package/build/src/database/tenants/data-copier.d.ts +7 -7
- package/build/src/database/tenants/data-copier.d.ts.map +1 -1
- package/build/src/database/tenants/schema-cloner.d.ts +3 -3
- package/build/src/database/tenants/schema-cloner.d.ts.map +1 -1
- package/build/src/database/tenants/tenant-table-plan.d.ts +20 -14
- package/build/src/database/tenants/tenant-table-plan.d.ts.map +1 -1
- package/build/src/database/tenants/tenant-table-plan.js +17 -1
- package/build/src/database/use-database.d.ts.map +1 -1
- package/build/src/database/use-live-query.d.ts +17 -29
- package/build/src/database/use-live-query.d.ts.map +1 -1
- package/build/src/database/use-live-query.js +4 -4
- package/build/src/environment-handlers/base.d.ts +112 -103
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +54 -38
- package/build/src/environment-handlers/browser.d.ts +63 -56
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +2 -2
- package/build/src/environment-handlers/node/attachment-path-source.d.ts +9 -9
- package/build/src/environment-handlers/node/attachment-path-source.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/beacon.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/beacon.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts +7 -10
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.d.ts +9 -7
- package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -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/load.d.ts +1 -1
- 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/seed.d.ts +7 -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 +3 -3
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +4 -7
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +1 -1
- 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 +2 -2
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +93 -108
- 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/generated-file-banner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +9 -12
- package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +8 -11
- package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/init.d.ts +7 -9
- package/build/src/environment-handlers/node/cli/commands/init.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/lint/relationships.d.ts +7 -7
- package/build/src/environment-handlers/node/cli/commands/lint/relationships.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/routes.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/run-script.d.ts +7 -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 +3 -3
- package/build/src/environment-handlers/node/cli/commands/runner.d.ts +9 -7
- package/build/src/environment-handlers/node/cli/commands/runner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/runner.js +3 -3
- package/build/src/environment-handlers/node/cli/commands/server.d.ts +24 -30
- package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/server.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/test.d.ts +5 -5
- package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
- package/build/src/environment-handlers/node/source-peer-package.d.ts +5 -7
- package/build/src/environment-handlers/node/source-peer-package.d.ts.map +1 -1
- package/build/src/environment-handlers/node/source-peer-package.js +1 -1
- package/build/src/environment-handlers/node.d.ts +362 -13
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +37 -37
- package/build/src/error-logger.d.ts +3 -3
- package/build/src/error-logger.d.ts.map +1 -1
- package/build/src/error-logger.js +3 -3
- package/build/src/error-reporting/request-details.d.ts +1 -1
- package/build/src/error-reporting/request-details.d.ts.map +1 -1
- package/build/src/error-reporting/request-details.js +33 -33
- package/build/src/frontend-model-controller.d.ts +216 -230
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +217 -211
- package/build/src/frontend-model-resource/base-resource.d.ts +315 -365
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +45 -45
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +11 -5
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/velocious-attachment-resource.js +2 -2
- package/build/src/frontend-models/base.d.ts +632 -726
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +147 -143
- package/build/src/frontend-models/built-in-resources.d.ts +2 -2
- package/build/src/frontend-models/built-in-resources.d.ts.map +1 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts +2 -2
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.js +3 -3
- package/build/src/frontend-models/event-hook-models.d.ts +3 -6
- package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
- 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 +20 -17
- package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
- package/build/src/frontend-models/outgoing-event-buffer.js +2 -2
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +2 -2
- package/build/src/frontend-models/query.d.ts +286 -331
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +61 -61
- package/build/src/frontend-models/resource-config-validation.d.ts +2 -2
- package/build/src/frontend-models/resource-config-validation.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.d.ts +30 -33
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +10 -10
- package/build/src/frontend-models/transport-deadline.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.d.ts +26 -32
- package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.js +28 -28
- package/build/src/frontend-models/use-created-event.d.ts +4 -4
- package/build/src/frontend-models/use-created-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.d.ts +8 -29
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.d.ts +9 -33
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.d.ts +8 -29
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.d.ts +30 -34
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +5 -5
- package/build/src/frontend-models/websocket-publishers.d.ts +4 -4
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +2 -2
- package/build/src/http-client/header.d.ts +2 -2
- package/build/src/http-client/header.d.ts.map +1 -1
- package/build/src/http-client/index.d.ts +23 -23
- package/build/src/http-client/index.d.ts.map +1 -1
- package/build/src/http-client/request.d.ts +9 -9
- package/build/src/http-client/request.d.ts.map +1 -1
- package/build/src/http-client/request.js +2 -2
- package/build/src/http-client/response.d.ts +12 -12
- package/build/src/http-client/response.d.ts.map +1 -1
- package/build/src/http-client/response.js +2 -2
- package/build/src/http-client/websocket-client.d.ts +20 -4
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-server/client/index.d.ts +26 -26
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +5 -5
- package/build/src/http-server/client/params-to-object.d.ts +11 -11
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +17 -17
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts +9 -9
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/header.d.ts +3 -3
- package/build/src/http-server/client/request-buffer/header.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.d.ts +28 -30
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +5 -3
- package/build/src/http-server/client/request-parser.d.ts +11 -11
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +3 -3
- package/build/src/http-server/client/request-runner.d.ts +11 -11
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +3 -3
- package/build/src/http-server/client/request-timing.d.ts +5 -11
- package/build/src/http-server/client/request-timing.d.ts.map +1 -1
- package/build/src/http-server/client/request.d.ts +10 -10
- package/build/src/http-server/client/request.d.ts.map +1 -1
- package/build/src/http-server/client/request.js +3 -3
- package/build/src/http-server/client/response-compression.d.ts +5 -5
- package/build/src/http-server/client/response-compression.d.ts.map +1 -1
- package/build/src/http-server/client/response.d.ts +13 -13
- package/build/src/http-server/client/response.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +8 -2
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +8 -2
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +4 -4
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-request.d.ts +26 -26
- package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-request.js +7 -7
- package/build/src/http-server/client/websocket-session.d.ts +105 -108
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +29 -29
- package/build/src/http-server/client-delivery-queue.d.ts +30 -30
- package/build/src/http-server/client-delivery-queue.d.ts.map +1 -1
- package/build/src/http-server/cookie.d.ts +80 -108
- package/build/src/http-server/cookie.d.ts.map +1 -1
- package/build/src/http-server/cookie.js +3 -3
- package/build/src/http-server/development-reloader.d.ts +24 -24
- package/build/src/http-server/development-reloader.d.ts.map +1 -1
- package/build/src/http-server/development-reloader.js +2 -2
- package/build/src/http-server/index.d.ts +66 -72
- package/build/src/http-server/index.d.ts.map +1 -1
- package/build/src/http-server/index.js +6 -6
- package/build/src/http-server/remote-address.d.ts.map +1 -1
- package/build/src/http-server/remote-address.js +2 -2
- package/build/src/http-server/server-client.d.ts +9 -9
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-lock.d.ts +11 -11
- package/build/src/http-server/server-lock.d.ts.map +1 -1
- package/build/src/http-server/server-lock.js +5 -5
- package/build/src/http-server/websocket-channel-subscribers.d.ts +11 -10
- package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel-subscribers.js +6 -6
- package/build/src/http-server/websocket-channel.d.ts +8 -14
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +2 -2
- package/build/src/http-server/websocket-connection.d.ts +10 -10
- package/build/src/http-server/websocket-connection.d.ts.map +1 -1
- package/build/src/http-server/websocket-connection.js +4 -4
- package/build/src/http-server/websocket-event-log-store.d.ts +58 -64
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +10 -10
- package/build/src/http-server/websocket-events-host.d.ts +17 -16
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +8 -8
- package/build/src/http-server/websocket-events.d.ts +9 -9
- package/build/src/http-server/websocket-events.d.ts.map +1 -1
- package/build/src/http-server/websocket-events.js +5 -5
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts +2 -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 +2 -2
- package/build/src/http-server/worker-handler/in-process.d.ts +22 -22
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +6 -6
- package/build/src/http-server/worker-handler/index.d.ts +50 -50
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +11 -11
- package/build/src/http-server/worker-handler/worker-thread.d.ts +61 -61
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +9 -9
- package/build/src/initializer.d.ts +2 -2
- package/build/src/initializer.d.ts.map +1 -1
- package/build/src/jobs/mail-delivery.d.ts +7 -2
- package/build/src/jobs/mail-delivery.d.ts.map +1 -1
- package/build/src/jobs/prune-terminal-background-jobs.d.ts +15 -2
- package/build/src/jobs/prune-terminal-background-jobs.d.ts.map +1 -1
- package/build/src/jobs/prune-terminal-background-jobs.js +1 -1
- package/build/src/logger/base-logger.d.ts.map +1 -1
- package/build/src/logger/base-logger.js +2 -2
- package/build/src/logger/console-logger.d.ts +3 -3
- package/build/src/logger/console-logger.d.ts.map +1 -1
- package/build/src/logger/file-logger.d.ts +4 -4
- package/build/src/logger/file-logger.d.ts.map +1 -1
- package/build/src/logger/outputs/array-output.d.ts +9 -12
- package/build/src/logger/outputs/array-output.d.ts.map +1 -1
- package/build/src/logger/outputs/console-output.d.ts +1 -4
- package/build/src/logger/outputs/console-output.d.ts.map +1 -1
- package/build/src/logger/outputs/file-output.d.ts +13 -16
- package/build/src/logger/outputs/file-output.d.ts.map +1 -1
- package/build/src/logger/outputs/stdout-output.d.ts +1 -4
- package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
- package/build/src/logger.d.ts +30 -29
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +13 -13
- package/build/src/mailer/backends/smtp.d.ts +8 -11
- package/build/src/mailer/backends/smtp.d.ts.map +1 -1
- package/build/src/mailer/backends/smtp.js +4 -4
- package/build/src/mailer/base.d.ts +61 -61
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +15 -15
- package/build/src/mailer/delivery.d.ts +16 -16
- package/build/src/mailer/delivery.d.ts.map +1 -1
- package/build/src/mailer/delivery.js +4 -4
- package/build/src/mailer/index.d.ts +8 -13
- package/build/src/mailer/index.d.ts.map +1 -1
- package/build/src/mailer/index.js +2 -2
- package/build/src/mailer.d.ts +9 -7
- package/build/src/mailer.d.ts.map +1 -1
- package/build/src/mailer.js +2 -2
- package/build/src/packages/velocious-package.d.ts +5 -5
- package/build/src/packages/velocious-package.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
- package/build/src/plugins/sqljs-wasm-route.d.ts +14 -20
- package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route.js +1 -1
- package/build/src/record-payload-values.d.ts +14 -14
- package/build/src/record-payload-values.d.ts.map +1 -1
- package/build/src/record-payload-values.js +4 -4
- package/build/src/routes/app-routes.d.ts.map +1 -1
- package/build/src/routes/base-route.d.ts +11 -10
- package/build/src/routes/base-route.d.ts.map +1 -1
- package/build/src/routes/base-route.js +6 -6
- package/build/src/routes/basic-route.d.ts +36 -3
- package/build/src/routes/basic-route.d.ts.map +1 -1
- package/build/src/routes/basic-route.js +5 -5
- package/build/src/routes/built-in/api-manifest/controller.d.ts +1 -1
- package/build/src/routes/built-in/api-manifest/controller.d.ts.map +1 -1
- package/build/src/routes/built-in/debug/controller.d.ts +1 -1
- package/build/src/routes/built-in/debug/controller.d.ts.map +1 -1
- package/build/src/routes/built-in/errors/controller.d.ts +1 -1
- package/build/src/routes/built-in/errors/controller.d.ts.map +1 -1
- package/build/src/routes/get-route.d.ts +19 -4
- package/build/src/routes/get-route.d.ts.map +1 -1
- package/build/src/routes/get-route.js +3 -3
- package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts +1 -1
- 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 +2 -2
- package/build/src/routes/index.d.ts +5 -5
- package/build/src/routes/index.d.ts.map +1 -1
- package/build/src/routes/index.js +4 -4
- package/build/src/routes/namespace-route.d.ts +19 -4
- package/build/src/routes/namespace-route.d.ts.map +1 -1
- package/build/src/routes/namespace-route.js +2 -2
- package/build/src/routes/plugin-routes.d.ts +16 -19
- package/build/src/routes/plugin-routes.d.ts.map +1 -1
- package/build/src/routes/plugin-routes.js +2 -2
- package/build/src/routes/post-route.d.ts +19 -4
- package/build/src/routes/post-route.d.ts.map +1 -1
- package/build/src/routes/post-route.js +3 -3
- package/build/src/routes/resolver.d.ts +16 -16
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +6 -6
- package/build/src/routes/resource-route.d.ts +23 -8
- package/build/src/routes/resource-route.d.ts.map +1 -1
- package/build/src/routes/resource-route.js +2 -2
- package/build/src/routes/root-route.d.ts +1 -1
- package/build/src/routes/root-route.d.ts.map +1 -1
- package/build/src/sync/conflict-strategy.d.ts +50 -35
- package/build/src/sync/conflict-strategy.d.ts.map +1 -1
- package/build/src/sync/conflict-strategy.js +2 -2
- package/build/src/sync/device-identity.d.ts +109 -79
- package/build/src/sync/device-identity.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.d.ts +115 -92
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/offline-grant.d.ts +80 -63
- package/build/src/sync/offline-grant.d.ts.map +1 -1
- package/build/src/sync/peer-mutation-bundle.d.ts +33 -39
- package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
- package/build/src/sync/query-scope.d.ts +3 -3
- package/build/src/sync/query-scope.d.ts.map +1 -1
- package/build/src/sync/query-scope.js +8 -8
- package/build/src/sync/server-change-feed.d.ts +129 -129
- package/build/src/sync/server-change-feed.d.ts.map +1 -1
- package/build/src/sync/server-change-feed.js +14 -14
- package/build/src/sync/server-sequence-allocator.d.ts +36 -36
- package/build/src/sync/server-sequence-allocator.d.ts.map +1 -1
- package/build/src/sync/server-sequence-allocator.js +6 -6
- package/build/src/sync/signed-sync-envelope-replay-service.d.ts +60 -48
- package/build/src/sync/signed-sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/signed-sync-envelope-replay-service.js +21 -21
- package/build/src/sync/stable-json.d.ts +2 -2
- package/build/src/sync/stable-json.d.ts.map +1 -1
- package/build/src/sync/stable-json.js +5 -5
- package/build/src/sync/sync-api-client-types.d.ts +98 -25
- package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-api-client-types.js +73 -1
- package/build/src/sync/sync-api-client.d.ts +71 -71
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +30 -30
- package/build/src/sync/sync-api-controller.d.ts +23 -23
- package/build/src/sync/sync-api-controller.d.ts.map +1 -1
- package/build/src/sync/sync-change-fanout.d.ts +32 -38
- package/build/src/sync/sync-change-fanout.d.ts.map +1 -1
- package/build/src/sync/sync-change-fanout.js +7 -7
- package/build/src/sync/sync-channel-name.d.ts +1 -1
- package/build/src/sync/sync-channel-name.d.ts.map +1 -1
- package/build/src/sync/sync-client-registry.d.ts +4 -4
- package/build/src/sync/sync-client-registry.d.ts.map +1 -1
- package/build/src/sync/sync-client-registry.js +4 -4
- package/build/src/sync/sync-client-types.d.ts +130 -82
- package/build/src/sync/sync-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-client-types.js +89 -1
- package/build/src/sync/sync-client.d.ts +76 -76
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +19 -19
- package/build/src/sync/sync-envelope-replay-service.d.ts +266 -298
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +77 -77
- package/build/src/sync/sync-model-change-feed-service.d.ts +23 -23
- package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
- package/build/src/sync/sync-model-change-feed-service.js +8 -8
- package/build/src/sync/sync-publish-suppression.d.ts +5 -5
- package/build/src/sync/sync-publish-suppression.d.ts.map +1 -1
- package/build/src/sync/sync-publish-suppression.js +3 -3
- package/build/src/sync/sync-publisher-types.d.ts +98 -55
- package/build/src/sync/sync-publisher-types.d.ts.map +1 -1
- package/build/src/sync/sync-publisher-types.js +75 -1
- package/build/src/sync/sync-publisher.d.ts +43 -43
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +20 -20
- package/build/src/sync/sync-realtime-bridge.d.ts +23 -23
- package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
- package/build/src/sync/sync-realtime-bridge.js +9 -9
- package/build/src/sync/sync-replay-upsert-applier.d.ts +70 -70
- package/build/src/sync/sync-replay-upsert-applier.d.ts.map +1 -1
- package/build/src/sync/sync-replay-upsert-applier.js +17 -17
- package/build/src/sync/sync-resource-base.d.ts +52 -51
- package/build/src/sync/sync-resource-base.d.ts.map +1 -1
- package/build/src/sync/sync-resource-base.js +15 -15
- package/build/src/sync/sync-scope-attributes.d.ts +2 -2
- package/build/src/sync/sync-scope-attributes.d.ts.map +1 -1
- package/build/src/sync/sync-scope-attributes.js +2 -2
- package/build/src/sync/sync-scope-store.d.ts +36 -36
- package/build/src/sync/sync-scope-store.d.ts.map +1 -1
- package/build/src/sync/sync-scope-store.js +6 -6
- package/build/src/sync/sync-websocket-channel.d.ts +11 -6
- package/build/src/sync/sync-websocket-channel.d.ts.map +1 -1
- package/build/src/sync/sync-websocket-channel.js +6 -6
- package/build/src/tenants/default-tenant-database-provisioning.d.ts +4 -4
- package/build/src/tenants/default-tenant-database-provisioning.d.ts.map +1 -1
- package/build/src/tenants/default-tenant-database-provisioning.js +2 -2
- package/build/src/tenants/tenant-aggregator.d.ts +81 -81
- package/build/src/tenants/tenant-aggregator.d.ts.map +1 -1
- package/build/src/tenants/tenant-aggregator.js +13 -13
- package/build/src/tenants/tenant-handle.d.ts +64 -0
- package/build/src/tenants/tenant-handle.d.ts.map +1 -0
- package/build/src/tenants/tenant-handle.js +221 -0
- package/build/src/tenants/tenant-iterator.d.ts +17 -17
- package/build/src/tenants/tenant-iterator.d.ts.map +1 -1
- package/build/src/tenants/tenant-iterator.js +7 -7
- package/build/src/tenants/tenant-model-scope.d.ts +73 -0
- package/build/src/tenants/tenant-model-scope.d.ts.map +1 -0
- package/build/src/tenants/tenant-model-scope.js +115 -0
- package/build/src/tenants/tenant.d.ts +16 -6
- package/build/src/tenants/tenant.d.ts.map +1 -1
- package/build/src/tenants/tenant.js +15 -3
- package/build/src/testing/base-expect.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +19 -31
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-test-app.js +6 -6
- package/build/src/testing/expect-to-change.d.ts +9 -7
- package/build/src/testing/expect-to-change.d.ts.map +1 -1
- package/build/src/testing/expect-to-change.js +2 -2
- package/build/src/testing/expect-utils.d.ts +30 -29
- package/build/src/testing/expect-utils.d.ts.map +1 -1
- package/build/src/testing/expect-utils.js +30 -30
- package/build/src/testing/expect.d.ts +30 -30
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +19 -19
- package/build/src/testing/factory/association-declaration.d.ts +16 -16
- package/build/src/testing/factory/association-declaration.d.ts.map +1 -1
- package/build/src/testing/factory/association-declaration.js +3 -3
- package/build/src/testing/factory/declarations.d.ts +90 -115
- package/build/src/testing/factory/declarations.d.ts.map +1 -1
- package/build/src/testing/factory/declarations.js +6 -6
- package/build/src/testing/factory/definition-builder.d.ts +72 -70
- package/build/src/testing/factory/definition-builder.d.ts.map +1 -1
- package/build/src/testing/factory/definition-builder.js +40 -40
- package/build/src/testing/factory/errors.d.ts +30 -29
- package/build/src/testing/factory/errors.d.ts.map +1 -1
- package/build/src/testing/factory/evaluation-context.d.ts +29 -29
- package/build/src/testing/factory/evaluation-context.d.ts.map +1 -1
- package/build/src/testing/factory/evaluation-context.js +17 -17
- package/build/src/testing/factory/events.d.ts +4 -5
- package/build/src/testing/factory/events.d.ts.map +1 -1
- package/build/src/testing/factory/factory-definition.d.ts +14 -14
- package/build/src/testing/factory/factory-definition.d.ts.map +1 -1
- package/build/src/testing/factory/factory-definition.js +3 -3
- package/build/src/testing/factory/factory-registry.d.ts +56 -54
- package/build/src/testing/factory/factory-registry.d.ts.map +1 -1
- package/build/src/testing/factory/factory-registry.js +35 -35
- package/build/src/testing/factory/factory-runner.d.ts +67 -73
- package/build/src/testing/factory/factory-runner.d.ts.map +1 -1
- package/build/src/testing/factory/factory-runner.js +9 -9
- package/build/src/testing/factory/index.d.ts +7 -7
- package/build/src/testing/factory/index.d.ts.map +1 -1
- package/build/src/testing/factory/linter.d.ts +7 -7
- package/build/src/testing/factory/linter.d.ts.map +1 -1
- package/build/src/testing/factory/linter.js +3 -3
- package/build/src/testing/factory/model-contract.d.ts +3 -3
- package/build/src/testing/factory/model-contract.d.ts.map +1 -1
- package/build/src/testing/factory/model-contract.js +4 -4
- package/build/src/testing/factory/node/load-definitions.d.ts +2 -2
- package/build/src/testing/factory/node/load-definitions.d.ts.map +1 -1
- package/build/src/testing/factory/sequence.d.ts +19 -23
- package/build/src/testing/factory/sequence.d.ts.map +1 -1
- package/build/src/testing/factory/sequence.js +3 -3
- package/build/src/testing/factory/strategies/attributes-for.d.ts +3 -3
- package/build/src/testing/factory/strategies/attributes-for.d.ts.map +1 -1
- package/build/src/testing/factory/strategies/attributes-for.js +2 -2
- package/build/src/testing/factory/strategies/base.d.ts +32 -32
- package/build/src/testing/factory/strategies/base.d.ts.map +1 -1
- package/build/src/testing/factory/strategies/base.js +25 -25
- package/build/src/testing/factory/strategies/build.d.ts +3 -3
- package/build/src/testing/factory/strategies/build.d.ts.map +1 -1
- package/build/src/testing/factory/strategies/build.js +3 -3
- package/build/src/testing/factory/strategies/create.d.ts +6 -6
- package/build/src/testing/factory/strategies/create.d.ts.map +1 -1
- package/build/src/testing/factory/strategies/create.js +5 -5
- package/build/src/testing/factory/trait-definition.d.ts +4 -4
- package/build/src/testing/factory/trait-definition.d.ts.map +1 -1
- package/build/src/testing/request-client.d.ts +19 -19
- package/build/src/testing/request-client.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.d.ts +15 -15
- package/build/src/testing/test-files-finder.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.js +2 -2
- package/build/src/testing/test-filter-parser.d.ts +19 -12
- package/build/src/testing/test-filter-parser.d.ts.map +1 -1
- package/build/src/testing/test-runner.d.ts +204 -251
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +15 -15
- package/build/src/testing/test-suite-splitter.d.ts +25 -31
- package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
- package/build/src/testing/test.d.ts +51 -55
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +20 -18
- package/build/src/testing/wait-for-event.d.ts +25 -25
- package/build/src/testing/wait-for-event.d.ts.map +1 -1
- package/build/src/testing/wait-for-event.js +6 -6
- package/build/src/time-zone.d.ts +3 -3
- package/build/src/time-zone.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner-node.d.ts +35 -2
- package/build/src/utils/backtrace-cleaner-node.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner-node.js +1 -1
- package/build/src/utils/backtrace-cleaner.d.ts +33 -28
- package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
- package/build/src/utils/bearer-token.d.ts +2 -2
- package/build/src/utils/bearer-token.d.ts.map +1 -1
- package/build/src/utils/deburr-column-name.d.ts.map +1 -1
- package/build/src/utils/event-emitter.d.ts +1 -1
- 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.map +1 -1
- package/build/src/utils/format-value.d.ts +9 -8
- package/build/src/utils/format-value.d.ts.map +1 -1
- package/build/src/utils/format-value.js +7 -7
- package/build/src/utils/is-date.d.ts +2 -2
- package/build/src/utils/is-date.d.ts.map +1 -1
- package/build/src/utils/is-date.js +2 -2
- package/build/src/utils/model-scope.d.ts +29 -24
- package/build/src/utils/model-scope.d.ts.map +1 -1
- package/build/src/utils/model-scope.js +11 -11
- package/build/src/utils/mount-prefix.d.ts +2 -2
- package/build/src/utils/mount-prefix.d.ts.map +1 -1
- package/build/src/utils/nest-callbacks.d.ts.map +1 -1
- package/build/src/utils/plain-object.d.ts +3 -3
- package/build/src/utils/plain-object.d.ts.map +1 -1
- package/build/src/utils/plain-object.js +3 -3
- package/build/src/utils/ransack.d.ts +69 -90
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +36 -36
- package/build/src/utils/rest-args-error.d.ts.map +1 -1
- package/build/src/utils/sha256-hex.d.ts.map +1 -1
- package/build/src/utils/shutdown-lifecycle.d.ts +1 -1
- package/build/src/utils/shutdown-lifecycle.d.ts.map +1 -1
- package/build/src/utils/singularize-model-name.d.ts.map +1 -1
- package/build/src/utils/split-sql-statements.d.ts.map +1 -1
- package/build/src/utils/to-import-specifier.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts +6 -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 +9 -9
- package/build/src/utils/with-tracked-stack.d.ts +6 -5
- package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack.js +7 -7
- package/build/src/velocious-error.d.ts +27 -17
- package/build/src/velocious-error.d.ts.map +1 -1
- package/build/src/velocious-error.js +10 -4
- package/build/sync/conflict-strategy.js +1 -1
- package/build/sync/query-scope.js +7 -7
- package/build/sync/server-change-feed.js +13 -13
- package/build/sync/server-sequence-allocator.js +5 -5
- package/build/sync/signed-sync-envelope-replay-service.js +20 -20
- package/build/sync/stable-json.js +4 -4
- package/build/sync/sync-api-client-types.js +7 -7
- package/build/sync/sync-api-client.js +26 -26
- package/build/sync/sync-change-fanout.js +6 -6
- package/build/sync/sync-client-registry.js +3 -3
- package/build/sync/sync-client-types.js +10 -10
- package/build/sync/sync-client.js +18 -18
- package/build/sync/sync-envelope-replay-service.js +76 -76
- package/build/sync/sync-model-change-feed-service.js +7 -7
- package/build/sync/sync-publish-suppression.js +2 -2
- package/build/sync/sync-publisher-types.js +11 -11
- package/build/sync/sync-publisher.js +19 -19
- package/build/sync/sync-realtime-bridge.js +8 -8
- package/build/sync/sync-replay-upsert-applier.js +16 -16
- package/build/sync/sync-resource-base.js +14 -14
- package/build/sync/sync-scope-attributes.js +1 -1
- package/build/sync/sync-scope-store.js +5 -5
- package/build/sync/sync-websocket-channel.js +5 -5
- package/build/tenants/default-tenant-database-provisioning.js +1 -1
- package/build/tenants/tenant-aggregator.js +13 -13
- package/build/tenants/tenant-handle.js +252 -0
- package/build/tenants/tenant-iterator.js +6 -6
- package/build/tenants/tenant-model-scope.js +132 -0
- package/build/tenants/tenant.js +15 -2
- package/build/testing/browser-test-app.js +2 -2
- package/build/testing/expect-to-change.js +1 -1
- package/build/testing/expect-utils.js +29 -29
- package/build/testing/expect.js +18 -18
- package/build/testing/factory/association-declaration.js +2 -2
- package/build/testing/factory/declarations.js +5 -5
- package/build/testing/factory/definition-builder.js +39 -39
- package/build/testing/factory/evaluation-context.js +16 -16
- package/build/testing/factory/factory-definition.js +2 -2
- package/build/testing/factory/factory-registry.js +34 -34
- package/build/testing/factory/factory-runner.js +8 -8
- package/build/testing/factory/linter.js +2 -2
- package/build/testing/factory/model-contract.js +3 -3
- package/build/testing/factory/sequence.js +2 -2
- package/build/testing/factory/strategies/attributes-for.js +1 -1
- package/build/testing/factory/strategies/base.js +24 -24
- package/build/testing/factory/strategies/build.js +2 -2
- package/build/testing/factory/strategies/create.js +4 -4
- package/build/testing/test-files-finder.js +1 -1
- package/build/testing/test-runner.js +14 -14
- package/build/testing/test.js +19 -17
- package/build/testing/wait-for-event.js +5 -5
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/event-emitter.js +1 -1
- package/build/utils/format-value.js +6 -6
- package/build/utils/is-date.js +1 -1
- package/build/utils/model-scope.js +10 -10
- package/build/utils/plain-object.js +2 -2
- package/build/utils/ransack.js +35 -35
- package/build/utils/with-tracked-stack-async-hooks.js +8 -8
- package/build/utils/with-tracked-stack.js +6 -6
- package/build/velocious-error.js +9 -3
- package/package.json +3 -3
- package/src/application.js +3 -3
- package/src/authorization/ability.js +6 -6
- package/src/authorization/base-resource.js +1 -1
- package/src/background-jobs/client.js +2 -2
- package/src/background-jobs/forked-runner-child.js +4 -4
- package/src/background-jobs/job-runner.js +2 -2
- package/src/background-jobs/job.js +6 -6
- package/src/background-jobs/json-socket.js +1 -1
- package/src/background-jobs/main.js +13 -13
- package/src/background-jobs/normalize-error.js +2 -2
- package/src/background-jobs/pooled-runner-child.js +3 -3
- package/src/background-jobs/scheduler.js +1 -1
- package/src/background-jobs/status-reporter.js +2 -2
- package/src/background-jobs/store.js +23 -23
- package/src/background-jobs/types.js +6 -6
- package/src/background-jobs/web/controller.js +6 -6
- package/src/background-jobs/web/counts-channel.js +1 -1
- package/src/background-jobs/worker.js +8 -8
- package/src/beacon/client.js +3 -3
- package/src/beacon/in-process-client.js +3 -3
- package/src/beacon/types.js +1 -1
- package/src/cli/base-command.js +1 -1
- package/src/cli/commands/console.js +1 -1
- package/src/cli/commands/db/schema/dump.js +1 -1
- package/src/cli/commands/db/schema/load.js +1 -1
- package/src/cli/commands/db/seed.js +1 -1
- package/src/cli/commands/generate/frontend-models.js +1 -1
- package/src/cli/commands/lint/relationships.js +1 -1
- package/src/cli/commands/run-script.js +1 -1
- package/src/cli/commands/runner.js +1 -1
- package/src/cli/index.js +2 -2
- package/src/cli/tenant-database-command-helper.js +2 -2
- package/src/configuration-types.js +48 -47
- package/src/configuration.js +150 -65
- package/src/controller.js +11 -8
- package/src/current.js +2 -2
- package/src/database/annotations-async-hooks.js +3 -3
- package/src/database/annotations.js +1 -1
- package/src/database/drivers/base-column.js +1 -1
- package/src/database/drivers/base-foreign-key.js +1 -1
- package/src/database/drivers/base-table.js +1 -1
- package/src/database/drivers/base.js +18 -18
- package/src/database/drivers/mssql/column.js +1 -1
- package/src/database/drivers/mssql/index.js +2 -2
- package/src/database/drivers/mssql/options.js +1 -1
- package/src/database/drivers/mssql/structure-sql.js +1 -1
- package/src/database/drivers/mssql/table.js +1 -1
- package/src/database/drivers/mysql/column.js +1 -1
- package/src/database/drivers/mysql/index.js +4 -4
- package/src/database/drivers/mysql/options.js +1 -1
- package/src/database/drivers/mysql/query.js +7 -7
- package/src/database/drivers/mysql/structure-sql.js +71 -10
- package/src/database/drivers/pgsql/column.js +1 -1
- package/src/database/drivers/pgsql/index.js +6 -6
- package/src/database/drivers/pgsql/structure-sql.js +1 -1
- package/src/database/drivers/sqlite/base.js +7 -7
- package/src/database/drivers/sqlite/column.js +1 -1
- package/src/database/drivers/sqlite/connection-sql-js.js +1 -1
- package/src/database/drivers/sqlite/foreign-key.js +1 -1
- package/src/database/drivers/sqlite/index.js +1 -1
- package/src/database/drivers/sqlite/index.native.js +2 -2
- package/src/database/drivers/sqlite/index.web.js +2 -2
- package/src/database/drivers/sqlite/query.js +2 -2
- package/src/database/drivers/sqlite/query.native.js +2 -2
- package/src/database/drivers/sqlite/query.web.js +2 -2
- package/src/database/drivers/sqlite/table-rebuilder.js +1 -1
- package/src/database/migration/index.js +2 -2
- package/src/database/migrator/types.js +2 -2
- package/src/database/operation.js +59 -6
- package/src/database/pool/async-tracked-multi-connection.js +75 -24
- package/src/database/pool/base-methods-forward.js +2 -2
- package/src/database/pool/base.js +48 -17
- package/src/database/pool/single-multi-use.js +501 -103
- package/src/database/query/delete-base.js +1 -1
- package/src/database/query/index.js +3 -3
- package/src/database/query/insert-base.js +4 -4
- package/src/database/query/model-class-query.js +39 -39
- package/src/database/query/preloader/belongs-to.js +2 -2
- package/src/database/query/preloader/ensure-model-class-initialized.js +3 -2
- package/src/database/query/preloader/has-many.js +3 -3
- package/src/database/query/preloader/has-one.js +1 -1
- package/src/database/query/preloader.js +9 -2
- package/src/database/query/query-data.js +7 -7
- package/src/database/query/update-base.js +3 -3
- package/src/database/query/upsert-base.js +2 -2
- package/src/database/query/where-model-class-hash.js +13 -13
- package/src/database/query/with-count.js +12 -12
- package/src/database/query-parser/options.js +2 -2
- package/src/database/query-parser/select-parser.js +1 -1
- package/src/database/record/acts-as-list.js +2 -2
- package/src/database/record/attachments/handle.js +6 -6
- package/src/database/record/attachments/normalize-input.js +11 -11
- package/src/database/record/attachments/storage-drivers/filesystem.js +1 -1
- package/src/database/record/attachments/storage-drivers/native.js +5 -5
- package/src/database/record/attachments/storage-drivers/s3.js +10 -10
- package/src/database/record/attachments/store.js +24 -20
- package/src/database/record/auditing.js +123 -29
- package/src/database/record/counter-cache-magnitude.js +11 -11
- package/src/database/record/index.js +227 -174
- package/src/database/record/instance-relationships/base.js +4 -4
- package/src/database/record/instance-relationships/belongs-to.js +1 -1
- package/src/database/record/instance-relationships/has-many.js +3 -3
- package/src/database/record/instance-relationships/has-one.js +1 -1
- package/src/database/record/record-not-found-error.js +1 -0
- package/src/database/record/relationships/base.js +22 -0
- package/src/database/record/state-machine.js +6 -6
- package/src/database/record/validators/base.js +1 -1
- package/src/database/structure-sql-loader.js +3 -3
- package/src/database/table-data/table-column.js +3 -3
- package/src/database/use-live-query.js +3 -3
- package/src/environment-handlers/base.js +56 -37
- package/src/environment-handlers/browser.js +1 -1
- package/src/environment-handlers/node/cli/commands/console.js +4 -4
- package/src/environment-handlers/node/cli/commands/db/seed.js +2 -2
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +1 -1
- package/src/environment-handlers/node/cli/commands/run-script.js +2 -2
- package/src/environment-handlers/node/cli/commands/runner.js +2 -2
- package/src/environment-handlers/node/cli/commands/server.js +1 -1
- package/src/environment-handlers/node.js +36 -36
- package/src/error-logger.js +2 -2
- package/src/error-reporting/request-details.js +32 -32
- package/src/frontend-model-controller.js +215 -213
- package/src/frontend-model-resource/base-resource.js +44 -44
- package/src/frontend-model-resource/velocious-attachment-resource.js +1 -1
- package/src/frontend-models/base.js +146 -142
- package/src/frontend-models/clear-pending-debounced-callback.js +2 -2
- package/src/frontend-models/model-registry.js +4 -4
- package/src/frontend-models/outgoing-event-buffer.js +1 -1
- package/src/frontend-models/preloader.js +1 -1
- package/src/frontend-models/query.js +60 -60
- package/src/frontend-models/resource-definition.js +9 -9
- package/src/frontend-models/transport-serialization.js +27 -27
- package/src/frontend-models/websocket-channel.js +4 -4
- package/src/frontend-models/websocket-publishers.js +1 -1
- package/src/http-client/request.js +1 -1
- package/src/http-client/response.js +1 -1
- package/src/http-server/client/index.js +4 -4
- package/src/http-server/client/params-to-object.js +16 -16
- package/src/http-server/client/request-buffer/index.js +5 -2
- package/src/http-server/client/request-parser.js +2 -2
- package/src/http-server/client/request-runner.js +2 -2
- package/src/http-server/client/request.js +2 -2
- package/src/http-server/client/websocket-request.js +6 -6
- package/src/http-server/client/websocket-session.js +28 -28
- package/src/http-server/cookie.js +2 -2
- package/src/http-server/development-reloader.js +1 -1
- package/src/http-server/index.js +5 -5
- package/src/http-server/remote-address.js +1 -1
- package/src/http-server/server-lock.js +4 -4
- package/src/http-server/websocket-channel-subscribers.js +4 -4
- package/src/http-server/websocket-channel.js +1 -1
- package/src/http-server/websocket-connection.js +3 -3
- package/src/http-server/websocket-event-log-store.js +9 -9
- package/src/http-server/websocket-events-host.js +7 -7
- package/src/http-server/websocket-events.js +4 -4
- package/src/http-server/worker-handler/channel-subscriber-dispatch.js +1 -1
- package/src/http-server/worker-handler/in-process.js +5 -5
- package/src/http-server/worker-handler/index.js +10 -10
- package/src/http-server/worker-handler/worker-thread.js +8 -8
- package/src/logger/base-logger.js +1 -1
- package/src/logger.js +12 -12
- package/src/mailer/backends/smtp.js +3 -3
- package/src/mailer/base.js +14 -14
- package/src/mailer/delivery.js +3 -3
- package/src/mailer/index.js +1 -1
- package/src/mailer.js +1 -1
- package/src/plugins/sqljs-wasm-route-controller.js +1 -1
- package/src/record-payload-values.js +3 -3
- package/src/routes/base-route.js +5 -5
- package/src/routes/basic-route.js +4 -4
- package/src/routes/get-route.js +2 -2
- package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
- package/src/routes/index.js +3 -3
- package/src/routes/namespace-route.js +1 -1
- package/src/routes/plugin-routes.js +1 -1
- package/src/routes/post-route.js +2 -2
- package/src/routes/resolver.js +5 -5
- package/src/routes/resource-route.js +1 -1
- package/src/sync/conflict-strategy.js +1 -1
- package/src/sync/query-scope.js +7 -7
- package/src/sync/server-change-feed.js +13 -13
- package/src/sync/server-sequence-allocator.js +5 -5
- package/src/sync/signed-sync-envelope-replay-service.js +20 -20
- package/src/sync/stable-json.js +4 -4
- package/src/sync/sync-api-client-types.js +7 -7
- package/src/sync/sync-api-client.js +26 -26
- package/src/sync/sync-change-fanout.js +6 -6
- package/src/sync/sync-client-registry.js +3 -3
- package/src/sync/sync-client-types.js +10 -10
- package/src/sync/sync-client.js +18 -18
- package/src/sync/sync-envelope-replay-service.js +76 -76
- package/src/sync/sync-model-change-feed-service.js +7 -7
- package/src/sync/sync-publish-suppression.js +2 -2
- package/src/sync/sync-publisher-types.js +11 -11
- package/src/sync/sync-publisher.js +19 -19
- package/src/sync/sync-realtime-bridge.js +8 -8
- package/src/sync/sync-replay-upsert-applier.js +16 -16
- package/src/sync/sync-resource-base.js +14 -14
- package/src/sync/sync-scope-attributes.js +1 -1
- package/src/sync/sync-scope-store.js +5 -5
- package/src/sync/sync-websocket-channel.js +5 -5
- package/src/tenants/default-tenant-database-provisioning.js +1 -1
- package/src/tenants/tenant-aggregator.js +13 -13
- package/src/tenants/tenant-handle.js +252 -0
- package/src/tenants/tenant-iterator.js +6 -6
- package/src/tenants/tenant-model-scope.js +132 -0
- package/src/tenants/tenant.js +15 -2
- package/src/testing/browser-test-app.js +2 -2
- package/src/testing/expect-to-change.js +1 -1
- package/src/testing/expect-utils.js +29 -29
- package/src/testing/expect.js +18 -18
- package/src/testing/factory/association-declaration.js +2 -2
- package/src/testing/factory/declarations.js +5 -5
- package/src/testing/factory/definition-builder.js +39 -39
- package/src/testing/factory/evaluation-context.js +16 -16
- package/src/testing/factory/factory-definition.js +2 -2
- package/src/testing/factory/factory-registry.js +34 -34
- package/src/testing/factory/factory-runner.js +8 -8
- package/src/testing/factory/linter.js +2 -2
- package/src/testing/factory/model-contract.js +3 -3
- package/src/testing/factory/sequence.js +2 -2
- package/src/testing/factory/strategies/attributes-for.js +1 -1
- package/src/testing/factory/strategies/base.js +24 -24
- package/src/testing/factory/strategies/build.js +2 -2
- package/src/testing/factory/strategies/create.js +4 -4
- package/src/testing/test-files-finder.js +1 -1
- package/src/testing/test-runner.js +14 -14
- package/src/testing/test.js +19 -17
- package/src/testing/wait-for-event.js +5 -5
- package/src/utils/event-emitter.js +1 -1
- package/src/utils/format-value.js +6 -6
- package/src/utils/is-date.js +1 -1
- package/src/utils/model-scope.js +10 -10
- package/src/utils/plain-object.js +2 -2
- package/src/utils/ransack.js +35 -35
- package/src/utils/with-tracked-stack-async-hooks.js +8 -8
- package/src/utils/with-tracked-stack.js +6 -6
- package/src/velocious-error.js +9 -3
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import SyncEnvelopeReplayService from "./sync-envelope-replay-service.js";
|
|
2
|
+
export type SignedSyncMutation = import("./device-identity.js").SignedSyncMutation;
|
|
3
|
+
export type SignedOfflineGrant = import("./offline-grant.js").SignedOfflineGrant;
|
|
1
4
|
/**
|
|
2
5
|
* @typedef {import("./device-identity.js").SignedSyncMutation} SignedSyncMutation
|
|
3
6
|
* @typedef {import("./offline-grant.js").SignedOfflineGrant} SignedOfflineGrant
|
|
@@ -20,59 +23,59 @@
|
|
|
20
23
|
* `abilityFactory`; without one, routed signed replay fails closed.
|
|
21
24
|
*/
|
|
22
25
|
export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayService {
|
|
26
|
+
abilityFactory: ((args: {
|
|
27
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
28
|
+
configuration: import("../configuration.js").default | null;
|
|
29
|
+
grant: import("./offline-grant.js").OfflineGrant;
|
|
30
|
+
}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null) | null;
|
|
31
|
+
backendPublicKey: import("node:crypto").webcrypto.JsonWebKey;
|
|
32
|
+
offlineGrantSigningKeys: import("./offline-grant.js").OfflineGrantSigningKey[];
|
|
33
|
+
actorLookup: ((userId: string) => Promise<{
|
|
34
|
+
id: () => string;
|
|
35
|
+
} | null>) | null;
|
|
23
36
|
/**
|
|
24
37
|
* Creates a signed sync-envelope replay service.
|
|
25
38
|
* @param {object} args - Constructor arguments.
|
|
26
39
|
* @param {import("./device-identity.js").SyncJsonWebKey} args.backendPublicKey - Backend public key used to verify device certificates.
|
|
27
40
|
* @param {Array<import("./offline-grant.js").OfflineGrantSigningKey>} [args.offlineGrantSigningKeys] - Offline-grant verification keys.
|
|
28
41
|
* @param {(userId: string) => Promise<{id: () => string} | null>} [args.actorLookup] - Optional lookup from grant user id to an actor object with an `id()` method. Defaults to a wrapper around the grant user id.
|
|
29
|
-
* @param {(args: {actor:
|
|
30
|
-
* @param {Record<string,
|
|
42
|
+
* @param {(args: {actor: ReturnType<typeof JSON.parse>, configuration: import("../configuration.js").default | null, grant: import("./offline-grant.js").OfflineGrant}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null} [args.abilityFactory] - Builds the actor/grant-scoped ability used to authorize routed resources. Required for routed signed replay; without it every routed sync fails closed.
|
|
43
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} [args.rest] - Remaining arguments forwarded to {@link SyncEnvelopeReplayService}.
|
|
31
44
|
*/
|
|
32
45
|
constructor({ abilityFactory, backendPublicKey, offlineGrantSigningKeys, actorLookup, ...rest }: {
|
|
33
46
|
backendPublicKey: import("./device-identity.js").SyncJsonWebKey;
|
|
34
|
-
offlineGrantSigningKeys?: import("./offline-grant.js").OfflineGrantSigningKey
|
|
35
|
-
actorLookup?: (
|
|
47
|
+
offlineGrantSigningKeys?: Array<import("./offline-grant.js").OfflineGrantSigningKey>;
|
|
48
|
+
actorLookup?: (userId: string) => Promise<{
|
|
36
49
|
id: () => string;
|
|
37
|
-
} | null
|
|
38
|
-
abilityFactory?: (
|
|
39
|
-
actor:
|
|
50
|
+
} | null>;
|
|
51
|
+
abilityFactory?: (args: {
|
|
52
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
40
53
|
configuration: import("../configuration.js").default | null;
|
|
41
54
|
grant: import("./offline-grant.js").OfflineGrant;
|
|
42
|
-
}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null
|
|
43
|
-
rest?: Record<string,
|
|
55
|
+
}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null;
|
|
56
|
+
rest?: Record<string, ReturnType<typeof JSON.parse>>;
|
|
44
57
|
});
|
|
45
|
-
abilityFactory: ((args: {
|
|
46
|
-
actor: unknown;
|
|
47
|
-
configuration: import("../configuration.js").default | null;
|
|
48
|
-
grant: import("./offline-grant.js").OfflineGrant;
|
|
49
|
-
}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null) | null;
|
|
50
|
-
backendPublicKey: import("node:crypto").webcrypto.JsonWebKey;
|
|
51
|
-
offlineGrantSigningKeys: import("./offline-grant.js").OfflineGrantSigningKey[];
|
|
52
|
-
actorLookup: ((userId: string) => Promise<{
|
|
53
|
-
id: () => string;
|
|
54
|
-
} | null>) | null;
|
|
55
58
|
/**
|
|
56
59
|
* Verifies signed mutations and then runs the generic replay loop over the
|
|
57
60
|
* derived sync envelopes. Verified actor, grant, and derived syncs are kept
|
|
58
61
|
* in the request-local `requestState` object so concurrent replay calls on
|
|
59
62
|
* one service instance cannot cross their authentication state.
|
|
60
|
-
* @param {Record<string,
|
|
61
|
-
* @param {Record<string,
|
|
62
|
-
* @returns {Promise<{syncs: Array<Record<string,
|
|
63
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} params - Request params.
|
|
64
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} [requestState] - Request-local state shared with the base replay hooks.
|
|
65
|
+
* @returns {Promise<{syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}>} Replay response.
|
|
63
66
|
*/
|
|
64
|
-
replay(params: Record<string,
|
|
65
|
-
syncs: Array<Record<string,
|
|
67
|
+
replay(params: Record<string, ReturnType<typeof JSON.parse>>, requestState?: Record<string, ReturnType<typeof JSON.parse>>): Promise<{
|
|
68
|
+
syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>;
|
|
66
69
|
}>;
|
|
67
70
|
/**
|
|
68
71
|
* Returns the verified actor prepared during {@link SignedSyncEnvelopeReplayService#replay}.
|
|
69
|
-
* @param {Record<string,
|
|
70
|
-
* @param {Record<string,
|
|
71
|
-
* @returns {Promise<{authenticated: true, actor:
|
|
72
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} _params - Request params.
|
|
73
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} requestState - Request-local state.
|
|
74
|
+
* @returns {Promise<{authenticated: true, actor: ReturnType<typeof JSON.parse>} | {authenticated: false, errorCode: string, errorMessage: string}>} Auth result.
|
|
72
75
|
*/
|
|
73
|
-
authenticateReplay(_params: Record<string,
|
|
76
|
+
authenticateReplay(_params: Record<string, ReturnType<typeof JSON.parse>>, requestState: Record<string, ReturnType<typeof JSON.parse>>): Promise<{
|
|
74
77
|
authenticated: true;
|
|
75
|
-
actor:
|
|
78
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
76
79
|
} | {
|
|
77
80
|
authenticated: false;
|
|
78
81
|
errorCode: string;
|
|
@@ -80,37 +83,49 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
80
83
|
}>;
|
|
81
84
|
/**
|
|
82
85
|
* Returns the sync envelopes derived from the verified signed mutations.
|
|
83
|
-
* @param {Record<string,
|
|
84
|
-
* @param {Record<string,
|
|
85
|
-
* @returns {Array<Record<string,
|
|
86
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} _params - Request params.
|
|
87
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} requestState - Request-local state.
|
|
88
|
+
* @returns {Array<Record<string, ReturnType<typeof JSON.parse>>>} Sync envelopes.
|
|
89
|
+
*/
|
|
90
|
+
replaySyncs(_params: Record<string, ReturnType<typeof JSON.parse>>, requestState: Record<string, ReturnType<typeof JSON.parse>>): Array<Record<string, ReturnType<typeof JSON.parse>>>;
|
|
91
|
+
/**
|
|
92
|
+
* Builds the replay context carrying the verified signed actor and grant
|
|
93
|
+
* (with its scopes) plus the offline runtime marker, so resource hooks and
|
|
94
|
+
* ability factories authorize against the signer instead of the uploader.
|
|
95
|
+
* @param {{actor: ReturnType<typeof JSON.parse>, params: Record<string, ReturnType<typeof JSON.parse>>, requestState: Record<string, ReturnType<typeof JSON.parse>>}} args - Actor, request params, and request-local state.
|
|
96
|
+
* @returns {Promise<Record<string, ReturnType<typeof JSON.parse>>>} Replay context.
|
|
86
97
|
*/
|
|
87
|
-
|
|
98
|
+
buildReplayContext({ actor, requestState }: {
|
|
99
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
100
|
+
params: Record<string, ReturnType<typeof JSON.parse>>;
|
|
101
|
+
requestState: Record<string, ReturnType<typeof JSON.parse>>;
|
|
102
|
+
}): Promise<Record<string, ReturnType<typeof JSON.parse>>>;
|
|
88
103
|
/**
|
|
89
104
|
* Derives the routed-resource ability from the verified signed actor and
|
|
90
105
|
* grant through the configured `abilityFactory`. The constructor-wide
|
|
91
106
|
* uploader ability is never used for signed replay: without a factory (or a
|
|
92
107
|
* factory result) every routed sync fails closed with a client-safe error.
|
|
93
|
-
* @param {{actor:
|
|
94
|
-
* @returns {Promise<{ability: import("../authorization/ability.js").default, abilityContext: Record<string,
|
|
108
|
+
* @param {{actor: ReturnType<typeof JSON.parse>, context: Record<string, ReturnType<typeof JSON.parse>>}} args - Verified actor and replay context.
|
|
109
|
+
* @returns {Promise<{ability: import("../authorization/ability.js").default, abilityContext: Record<string, ReturnType<typeof JSON.parse>>}>} Scoped ability and resource context.
|
|
95
110
|
*/
|
|
96
111
|
replayAbilityFor({ actor, context }: {
|
|
97
|
-
actor:
|
|
98
|
-
context: Record<string,
|
|
112
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
113
|
+
context: Record<string, ReturnType<typeof JSON.parse>>;
|
|
99
114
|
}): Promise<{
|
|
100
115
|
ability: import("../authorization/ability.js").default;
|
|
101
|
-
abilityContext: Record<string,
|
|
116
|
+
abilityContext: Record<string, ReturnType<typeof JSON.parse>>;
|
|
102
117
|
}>;
|
|
103
118
|
/**
|
|
104
119
|
* Verifies every signed mutation, its offline grant, and the actor/grant
|
|
105
120
|
* consistency, then transforms the envelopes into the sync format the base
|
|
106
121
|
* replay service understands.
|
|
107
|
-
* @param {Record<string,
|
|
108
|
-
* @returns {Promise<{actor:
|
|
122
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} params - Request params.
|
|
123
|
+
* @returns {Promise<{actor: ReturnType<typeof JSON.parse>, grant: import("./offline-grant.js").OfflineGrant, syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}>} Verified actor, common grant, and derived syncs.
|
|
109
124
|
*/
|
|
110
|
-
verifyAndTransformSignedReplay(params: Record<string,
|
|
111
|
-
actor:
|
|
125
|
+
verifyAndTransformSignedReplay(params: Record<string, ReturnType<typeof JSON.parse>>): Promise<{
|
|
126
|
+
actor: ReturnType<typeof JSON.parse>;
|
|
112
127
|
grant: import("./offline-grant.js").OfflineGrant;
|
|
113
|
-
syncs: Array<Record<string,
|
|
128
|
+
syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>;
|
|
114
129
|
}>;
|
|
115
130
|
/**
|
|
116
131
|
* Validates a mutation against the current sync manifest: the model and the
|
|
@@ -142,13 +157,10 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
142
157
|
/**
|
|
143
158
|
* Transforms a verified signed mutation into a generic sync envelope.
|
|
144
159
|
* @param {{mutation: import("./device-identity.js").SyncMutation}} args - Transform args.
|
|
145
|
-
* @returns {Record<string,
|
|
160
|
+
* @returns {Record<string, ReturnType<typeof JSON.parse>>} Sync envelope.
|
|
146
161
|
*/
|
|
147
162
|
syncFromSignedMutation({ mutation }: {
|
|
148
163
|
mutation: import("./device-identity.js").SyncMutation;
|
|
149
|
-
}): Record<string,
|
|
164
|
+
}): Record<string, ReturnType<typeof JSON.parse>>;
|
|
150
165
|
}
|
|
151
|
-
export type SignedSyncMutation = import("./device-identity.js").SignedSyncMutation;
|
|
152
|
-
export type SignedOfflineGrant = import("./offline-grant.js").SignedOfflineGrant;
|
|
153
|
-
import SyncEnvelopeReplayService from "./sync-envelope-replay-service.js";
|
|
154
166
|
//# sourceMappingURL=signed-sync-envelope-replay-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signed-sync-envelope-replay-service.d.ts","sourceRoot":"","sources":["../../../src/sync/signed-sync-envelope-replay-service.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signed-sync-envelope-replay-service.d.ts","sourceRoot":"","sources":["../../../src/sync/signed-sync-envelope-replay-service.js"],"names":[],"mappings":"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"}
|
|
@@ -32,8 +32,8 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
32
32
|
* @param {import("./device-identity.js").SyncJsonWebKey} args.backendPublicKey - Backend public key used to verify device certificates.
|
|
33
33
|
* @param {Array<import("./offline-grant.js").OfflineGrantSigningKey>} [args.offlineGrantSigningKeys] - Offline-grant verification keys.
|
|
34
34
|
* @param {(userId: string) => Promise<{id: () => string} | null>} [args.actorLookup] - Optional lookup from grant user id to an actor object with an `id()` method. Defaults to a wrapper around the grant user id.
|
|
35
|
-
* @param {(args: {actor:
|
|
36
|
-
* @param {Record<string,
|
|
35
|
+
* @param {(args: {actor: ReturnType<typeof JSON.parse>, configuration: import("../configuration.js").default | null, grant: import("./offline-grant.js").OfflineGrant}) => Promise<import("../authorization/ability.js").default | null> | import("../authorization/ability.js").default | null} [args.abilityFactory] - Builds the actor/grant-scoped ability used to authorize routed resources. Required for routed signed replay; without it every routed sync fails closed.
|
|
36
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} [args.rest] - Remaining arguments forwarded to {@link SyncEnvelopeReplayService}.
|
|
37
37
|
*/
|
|
38
38
|
constructor({ abilityFactory, backendPublicKey, offlineGrantSigningKeys, actorLookup, ...rest }) {
|
|
39
39
|
super({
|
|
@@ -52,9 +52,9 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
52
52
|
* derived sync envelopes. Verified actor, grant, and derived syncs are kept
|
|
53
53
|
* in the request-local `requestState` object so concurrent replay calls on
|
|
54
54
|
* one service instance cannot cross their authentication state.
|
|
55
|
-
* @param {Record<string,
|
|
56
|
-
* @param {Record<string,
|
|
57
|
-
* @returns {Promise<{syncs: Array<Record<string,
|
|
55
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} params - Request params.
|
|
56
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} [requestState] - Request-local state shared with the base replay hooks.
|
|
57
|
+
* @returns {Promise<{syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}>} Replay response.
|
|
58
58
|
*/
|
|
59
59
|
async replay(params, requestState = {}) {
|
|
60
60
|
const verified = await this.verifyAndTransformSignedReplay(params);
|
|
@@ -72,9 +72,9 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Returns the verified actor prepared during {@link SignedSyncEnvelopeReplayService#replay}.
|
|
75
|
-
* @param {Record<string,
|
|
76
|
-
* @param {Record<string,
|
|
77
|
-
* @returns {Promise<{authenticated: true, actor:
|
|
75
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} _params - Request params.
|
|
76
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} requestState - Request-local state.
|
|
77
|
+
* @returns {Promise<{authenticated: true, actor: ReturnType<typeof JSON.parse>} | {authenticated: false, errorCode: string, errorMessage: string}>} Auth result.
|
|
78
78
|
*/
|
|
79
79
|
async authenticateReplay(_params, requestState) {
|
|
80
80
|
const actor = requestState?.signedReplayActor;
|
|
@@ -89,9 +89,9 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
91
|
* Returns the sync envelopes derived from the verified signed mutations.
|
|
92
|
-
* @param {Record<string,
|
|
93
|
-
* @param {Record<string,
|
|
94
|
-
* @returns {Array<Record<string,
|
|
92
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} _params - Request params.
|
|
93
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} requestState - Request-local state.
|
|
94
|
+
* @returns {Array<Record<string, ReturnType<typeof JSON.parse>>>} Sync envelopes.
|
|
95
95
|
*/
|
|
96
96
|
replaySyncs(_params, requestState) {
|
|
97
97
|
return requestState?.signedReplaySyncs || [];
|
|
@@ -100,8 +100,8 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
100
100
|
* Builds the replay context carrying the verified signed actor and grant
|
|
101
101
|
* (with its scopes) plus the offline runtime marker, so resource hooks and
|
|
102
102
|
* ability factories authorize against the signer instead of the uploader.
|
|
103
|
-
* @param {{actor:
|
|
104
|
-
* @returns {Promise<Record<string,
|
|
103
|
+
* @param {{actor: ReturnType<typeof JSON.parse>, params: Record<string, ReturnType<typeof JSON.parse>>, requestState: Record<string, ReturnType<typeof JSON.parse>>}} args - Actor, request params, and request-local state.
|
|
104
|
+
* @returns {Promise<Record<string, ReturnType<typeof JSON.parse>>>} Replay context.
|
|
105
105
|
*/
|
|
106
106
|
async buildReplayContext({ actor, requestState }) {
|
|
107
107
|
const grant = /** @type {import("./offline-grant.js").OfflineGrant | undefined} */ (requestState?.signedReplayGrant);
|
|
@@ -117,8 +117,8 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
117
117
|
* grant through the configured `abilityFactory`. The constructor-wide
|
|
118
118
|
* uploader ability is never used for signed replay: without a factory (or a
|
|
119
119
|
* factory result) every routed sync fails closed with a client-safe error.
|
|
120
|
-
* @param {{actor:
|
|
121
|
-
* @returns {Promise<{ability: import("../authorization/ability.js").default, abilityContext: Record<string,
|
|
120
|
+
* @param {{actor: ReturnType<typeof JSON.parse>, context: Record<string, ReturnType<typeof JSON.parse>>}} args - Verified actor and replay context.
|
|
121
|
+
* @returns {Promise<{ability: import("../authorization/ability.js").default, abilityContext: Record<string, ReturnType<typeof JSON.parse>>}>} Scoped ability and resource context.
|
|
122
122
|
*/
|
|
123
123
|
async replayAbilityFor({ actor, context }) {
|
|
124
124
|
const grant = /** @type {import("./offline-grant.js").OfflineGrant} */ (context.offlineGrant);
|
|
@@ -134,8 +134,8 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
134
134
|
* Verifies every signed mutation, its offline grant, and the actor/grant
|
|
135
135
|
* consistency, then transforms the envelopes into the sync format the base
|
|
136
136
|
* replay service understands.
|
|
137
|
-
* @param {Record<string,
|
|
138
|
-
* @returns {Promise<{actor:
|
|
137
|
+
* @param {Record<string, ReturnType<typeof JSON.parse>>} params - Request params.
|
|
138
|
+
* @returns {Promise<{actor: ReturnType<typeof JSON.parse>, grant: import("./offline-grant.js").OfflineGrant, syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}>} Verified actor, common grant, and derived syncs.
|
|
139
139
|
*/
|
|
140
140
|
async verifyAndTransformSignedReplay(params) {
|
|
141
141
|
const rawEntries = Array.isArray(params.signedMutations) ? params.signedMutations : [];
|
|
@@ -153,7 +153,7 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
153
153
|
let grantId = null;
|
|
154
154
|
/** @type {import("./offline-grant.js").OfflineGrant | null} */
|
|
155
155
|
let commonGrant = null;
|
|
156
|
-
/** @type {Array<Record<string,
|
|
156
|
+
/** @type {Array<Record<string, ReturnType<typeof JSON.parse>>>} */
|
|
157
157
|
const syncs = [];
|
|
158
158
|
for (const rawEntry of rawEntries) {
|
|
159
159
|
if (!rawEntry || typeof rawEntry !== "object") {
|
|
@@ -241,7 +241,7 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
241
241
|
* @returns {void} Throws a client-safe error when the grant does not authorize the mutation.
|
|
242
242
|
*/
|
|
243
243
|
validateGrantAgainstSyncPolicy({ mutation, offlineGrant, syncManifest }) {
|
|
244
|
-
const grantResource = /** @type {Record<string,
|
|
244
|
+
const grantResource = /** @type {Record<string, ReturnType<typeof JSON.parse>> | undefined} */ (offlineGrant.resources[mutation.model]);
|
|
245
245
|
const grantOperations = Array.isArray(grantResource?.operations) ? grantResource.operations : [];
|
|
246
246
|
const grantPolicyHash = grantResource?.policyHash;
|
|
247
247
|
if (!grantResource || grantResource.enabled !== true) {
|
|
@@ -260,7 +260,7 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
260
260
|
/**
|
|
261
261
|
* Transforms a verified signed mutation into a generic sync envelope.
|
|
262
262
|
* @param {{mutation: import("./device-identity.js").SyncMutation}} args - Transform args.
|
|
263
|
-
* @returns {Record<string,
|
|
263
|
+
* @returns {Record<string, ReturnType<typeof JSON.parse>>} Sync envelope.
|
|
264
264
|
*/
|
|
265
265
|
syncFromSignedMutation({ mutation }) {
|
|
266
266
|
const operation = mutation.operation;
|
|
@@ -293,4 +293,4 @@ export default class SignedSyncEnvelopeReplayService extends SyncEnvelopeReplayS
|
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVkLXN5bmMtZW52ZWxvcGUtcmVwbGF5LXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zaWduZWQtc3luYy1lbnZlbG9wZS1yZXBsYXktc2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyx5QkFBeUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUN6RSxPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQTtBQUNyRyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUNqRixPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUVsRDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEseUJBQXlCO0lBQ3BGOzs7Ozs7OztPQVFHO0lBQ0gsWUFBWSxFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUM7UUFDM0YsS0FBSyxDQUFDO1lBQ0oscUJBQXFCLEVBQUUsdUJBQXVCO1lBQzlDLEdBQUcsSUFBSTtTQUNSLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUE7UUFFbkcsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFBO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLElBQUksRUFBRSxDQUFBO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQTtJQUN4QyxDQUFDO0lB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O1lBQy9CLElBQUksR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUE7WUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFBO1FBQ2hCLENBQUM7UUFFRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDM0MsZUFBZSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQ3BDLElBQUk7WUFDSixVQUFVO1lBQ1YsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQzVCLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFN5bmNFbnZlbG9wZVJlcGxheVNlcnZpY2UgZnJvbSBcIi4vc3luYy1lbnZlbG9wZS1yZXBsYXktc2VydmljZS5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxTeW5jTWFuaWZlc3RGb3JCYWNrZW5kUHJvamVjdHN9IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qc1wiXG5pbXBvcnQge3ZlcmlmeU9mZmxpbmVHcmFudH0gZnJvbSBcIi4vb2ZmbGluZS1ncmFudC5qc1wiXG5pbXBvcnQge211dGF0aW9uSWRlbXBvdGVuY3lLZXksIHZlcmlmeVNpZ25lZE11dGF0aW9ufSBmcm9tIFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIlxuaW1wb3J0IFZlbG9jaW91c0Vycm9yIGZyb20gXCIuLi92ZWxvY2lvdXMtZXJyb3IuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFNpZ25lZFN5bmNNdXRhdGlvblxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5TaWduZWRPZmZsaW5lR3JhbnR9IFNpZ25lZE9mZmxpbmVHcmFudFxuICovXG5cbi8qKlxuICogU3luYy1lbnZlbG9wZSByZXBsYXkgc2VydmljZSB0aGF0IGF1dGhlbnRpY2F0ZXMgdmlhIGJhY2tlbmQtc2lnbmVkIGRldmljZVxuICogY2VydGlmaWNhdGVzIGFuZCBzaWduZWQgb2ZmbGluZSBncmFudHMgaW5zdGVhZCBvZiBvbmxpbmUgc2Vzc2lvbiB0b2tlbnMuXG4gKlxuICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBWZWxvY2lvdXMgcHJpbWl0aXZlIGZvciBsb25nLW9mZmxpbmUgYW5kIHBlZXItZm9yd2FyZGVkXG4gKiBtdXRhdGlvbnM6IHRoZSBIVFRQIHVwbG9hZGVyIG1heSBkaWZmZXIgZnJvbSB0aGUgbXV0YXRpb24gYWN0b3IsIGJ1dCByZXBsYXlcbiAqIGF1dGhvcml0eSBpcyBkZXJpdmVkIGZyb20gdGhlIHNpZ25lZCBlbnZlbG9wZSBhbmQgZ3JhbnQsIG5vdCB0aGUgdXBsb2FkZXInc1xuICogc2Vzc2lvbi5cbiAqXG4gKiBFdmVyeSBtdXRhdGlvbiBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgY3VycmVudCBzeW5jIG1hbmlmZXN0ICh0aGUgc2FtZVxuICogY29udHJhY3QgYXMgdGhlIGNvbnRyb2xsZXIncyBzeW5jIHJlcGxheSBlbmRwb2ludCk6IHRoZSBtb2RlbCBhbmQgb3BlcmF0aW9uXG4gKiBtdXN0IGJlIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgbWFuaWZlc3QsIHRoZSBncmFudCByZXNvdXJjZSBlbnRyeSBtdXN0IGJlXG4gKiBlbmFibGVkIGFuZCBsaXN0IHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgZ3JhbnQgcG9saWN5IGhhc2ggbXVzdCBlcXVhbCBib3RoIHRoZVxuICogbXV0YXRpb24gcG9saWN5IGhhc2ggYW5kIHRoZSBjdXJyZW50IG1hbmlmZXN0IHBvbGljeSBoYXNoLiBSb3V0ZWQgcmVzb3VyY2VzXG4gKiBhcmUgYXV0aG9yaXplZCB0aHJvdWdoIGFuIGFjdG9yL2dyYW50LXNjb3BlZCBhYmlsaXR5IGJ1aWx0IGJ5IHRoZSBjb25maWd1cmVkXG4gKiBgYWJpbGl0eUZhY3RvcnlgOyB3aXRob3V0IG9uZSwgcm91dGVkIHNpZ25lZCByZXBsYXkgZmFpbHMgY2xvc2VkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduZWRTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlIGV4dGVuZHMgU3luY0VudmVsb3BlUmVwbGF5U2VydmljZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2lnbmVkIHN5bmMtZW52ZWxvcGUgcmVwbGF5IHNlcnZpY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ29uc3RydWN0b3IgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkgdXNlZCB0byB2ZXJpZnkgZGV2aWNlIGNlcnRpZmljYXRlcy5cbiAgICogQHBhcmFtIHtBcnJheTxpbXBvcnQoXCIuL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50U2lnbmluZ0tleT59IFthcmdzLm9mZmxpbmVHcmFudFNpZ25pbmdLZXlzXSAtIE9mZmxpbmUtZ3JhbnQgdmVyaWZpY2F0aW9uIGtleXMuXG4gICAqIEBwYXJhbSB7KHVzZXJJZDogc3RyaW5nKSA9PiBQcm9taXNlPHtpZDogKCkgPT4gc3RyaW5nfSB8IG51bGw+fSBbYXJncy5hY3Rvckxvb2t1cF0gLSBPcHRpb25hbCBsb29rdXAgZnJvbSBncmFudCB1c2VyIGlkIHRvIGFuIGFjdG9yIG9iamVjdCB3aXRoIGFuIGBpZCgpYCBtZXRob2QuIERlZmF1bHRzIHRvIGEgd3JhcHBlciBhcm91bmQgdGhlIGdyYW50IHVzZXIgaWQuXG4gICAqIEBwYXJhbSB7KGFyZ3M6IHthY3RvcjogPywgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0IHwgbnVsbCwgZ3JhbnQ6IGltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnR9KSA9PiBQcm9taXNlPGltcG9ydChcIi4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgbnVsbD4gfCBpbXBvcnQoXCIuLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IG51bGx9IFthcmdzLmFiaWxpdHlGYWN0b3J5XSAtIEJ1aWxkcyB0aGUgYWN0b3IvZ3JhbnQtc2NvcGVkIGFiaWxpdHkgdXNlZCB0byBhdXRob3JpemUgcm91dGVkIHJlc291cmNlcy4gUmVxdWlyZWQgZm9yIHJvdXRlZCBzaWduZWQgcmVwbGF5OyB3aXRob3V0IGl0IGV2ZXJ5IHJvdXRlZCBzeW5jIGZhaWxzIGNsb3NlZC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gW2FyZ3MucmVzdF0gLSBSZW1haW5pbmcgYXJndW1lbnRzIGZvcndhcmRlZCB0byB7QGxpbmsgU3luY0VudmVsb3BlUmVwbGF5U2VydmljZX0uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7YWJpbGl0eUZhY3RvcnksIGJhY2tlbmRQdWJsaWNLZXksIG9mZmxpbmVHcmFudFNpZ25pbmdLZXlzLCBhY3Rvckxvb2t1cCwgLi4ucmVzdH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhY3RvckZvcmVpZ25LZXlDb2x1bW46IFwiYXV0aGVudGljYXRpb25Ub2tlbklkXCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSlcblxuICAgIGlmICghYmFja2VuZFB1YmxpY0tleSkgdGhyb3cgbmV3IEVycm9yKFwiU2lnbmVkU3luY0VudmVsb3BlUmVwbGF5U2VydmljZSByZXF1aXJlcyBiYWNrZW5kUHVibGljS2V5XCIpXG5cbiAgICB0aGlzLmFiaWxpdHlGYWN0b3J5ID0gYWJpbGl0eUZhY3RvcnkgfHwgbnVsbFxuICAgIHRoaXMuYmFja2VuZFB1YmxpY0tleSA9IGJhY2tlbmRQdWJsaWNLZXlcbiAgICB0aGlzLm9mZmxpbmVHcmFudFNpZ25pbmdLZXlzID0gb2ZmbGluZUdyYW50U2lnbmluZ0tleXMgfHwgW11cbiAgICB0aGlzLmFjdG9yTG9va3VwID0gYWN0b3JMb29rdXAgfHwgbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHNpZ25lZCBtdXRhdGlvbnMgYW5kIHRoZW4gcnVucyB0aGUgZ2VuZXJpYyByZXBsYXkgbG9vcCBvdmVyIHRoZVxuICAgKiBkZXJpdmVkIHN5bmMgZW52ZWxvcGVzLiBWZXJpZmllZCBhY3RvciwgZ3JhbnQsIGFuZCBkZXJpdmVkIHN5bmNzIGFyZSBrZXB0XG4gICAqIGluIHRoZSByZXF1ZXN0LWxvY2FsIGByZXF1ZXN0U3RhdGVgIG9iamVjdCBzbyBjb25jdXJyZW50IHJlcGxheSBjYWxscyBvblxuICAgKiBvbmUgc2VydmljZSBpbnN0YW5jZSBjYW5ub3QgY3Jvc3MgdGhlaXIgYXV0aGVudGljYXRpb24gc3RhdGUuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IHBhcmFtcyAtIFJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBbcmVxdWVzdFN0YXRlXSAtIFJlcXVlc3QtbG9jYWwgc3RhdGUgc2hhcmVkIHdpdGggdGhlIGJhc2UgcmVwbGF5IGhvb2tzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7c3luY3M6IEFycmF5PFJlY29yZDxzdHJpbmcsID8+Pn0+fSBSZXBsYXkgcmVzcG9uc2UuXG4gICAqL1xuICBhc3luYyByZXBsYXkocGFyYW1zLCByZXF1ZXN0U3RhdGUgPSB7fSkge1xuICAgIGNvbnN0IHZlcmlmaWVkID0gYXdhaXQgdGhpcy52ZXJpZnlBbmRUcmFuc2Zvcm1TaWduZWRSZXBsYXkocGFyYW1zKVxuXG4gICAgcmVxdWVzdFN0YXRlLnNpZ25lZFJlcGxheUFjdG9yID0gdmVyaWZpZWQuYWN0b3JcbiAgICByZXF1ZXN0U3RhdGUuc2lnbmVkUmVwbGF5R3JhbnQgPSB2ZXJpZmllZC5ncmFudFxuICAgIHJlcXVlc3RTdGF0ZS5zaWduZWRSZXBsYXlTeW5jcyA9IHZlcmlmaWVkLnN5bmNzXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5yZXBsYXkocGFyYW1zLCByZXF1ZXN0U3RhdGUpXG5cbiAgICByZXR1cm4ge1xuICAgICAgc3luY3M6IHJlc3VsdC5zeW5jcy5tYXAoKHN5bmNSZXNwb25zZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qge2lkOiBfaWQsIC4uLnJlc3R9ID0gc3luY1Jlc3BvbnNlXG4gICAgICAgIGNvbnN0IGlkZW1wb3RlbmN5S2V5ID0gdmVyaWZpZWQuc3luY3NbaW5kZXhdPy5pZGVtcG90ZW5jeUtleVxuXG4gICAgICAgIHJldHVybiBpZGVtcG90ZW5jeUtleSA/IHsuLi5yZXN0LCBpZGVtcG90ZW5jeUtleX0gOiBzeW5jUmVzcG9uc2VcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZlcmlmaWVkIGFjdG9yIHByZXBhcmVkIGR1cmluZyB7QGxpbmsgU2lnbmVkU3luY0VudmVsb3BlUmVwbGF5U2VydmljZSNyZXBsYXl9LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBfcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IHJlcXVlc3RTdGF0ZSAtIFJlcXVlc3QtbG9jYWwgc3RhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHthdXRoZW50aWNhdGVkOiB0cnVlLCBhY3RvcjogP30gfCB7YXV0aGVudGljYXRlZDogZmFsc2UsIGVycm9yQ29kZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZ30+fSBBdXRoIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZVJlcGxheShfcGFyYW1zLCByZXF1ZXN0U3RhdGUpIHtcbiAgICBjb25zdCBhY3RvciA9IHJlcXVlc3RTdGF0ZT8uc2lnbmVkUmVwbGF5QWN0b3JcblxuICAgIGlmICghYWN0b3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBlcnJvckNvZGU6IFwibWlzc2luZy1zaWduZWQtcmVwbGF5XCIsXG4gICAgICAgIGVycm9yTWVzc2FnZTogXCJFeHBlY3RlZCBhIHByZS12ZXJpZmllZCBzaWduZWQgcmVwbGF5XCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge2FjdG9yLCBhdXRoZW50aWNhdGVkOiB0cnVlfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN5bmMgZW52ZWxvcGVzIGRlcml2ZWQgZnJvbSB0aGUgdmVyaWZpZWQgc2lnbmVkIG11dGF0aW9ucy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gX3BhcmFtcyAtIFJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSByZXF1ZXN0U3RhdGUgLSBSZXF1ZXN0LWxvY2FsIHN0YXRlLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSBTeW5jIGVudmVsb3Blcy5cbiAgICovXG4gIHJlcGxheVN5bmNzKF9wYXJhbXMsIHJlcXVlc3RTdGF0ZSkge1xuICAgIHJldHVybiByZXF1ZXN0U3RhdGU/LnNpZ25lZFJlcGxheVN5bmNzIHx8IFtdXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSByZXBsYXkgY29udGV4dCBjYXJyeWluZyB0aGUgdmVyaWZpZWQgc2lnbmVkIGFjdG9yIGFuZCBncmFudFxuICAgKiAod2l0aCBpdHMgc2NvcGVzKSBwbHVzIHRoZSBvZmZsaW5lIHJ1bnRpbWUgbWFya2VyLCBzbyByZXNvdXJjZSBob29rcyBhbmRcbiAgICogYWJpbGl0eSBmYWN0b3JpZXMgYXV0aG9yaXplIGFnYWluc3QgdGhlIHNpZ25lciBpbnN0ZWFkIG9mIHRoZSB1cGxvYWRlci5cbiAgICogQHBhcmFtIHt7YWN0b3I6ID8sIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIHJlcXVlc3RTdGF0ZTogUmVjb3JkPHN0cmluZywgPz59fSBhcmdzIC0gQWN0b3IsIHJlcXVlc3QgcGFyYW1zLCBhbmQgcmVxdWVzdC1sb2NhbCBzdGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgPz4+fSBSZXBsYXkgY29udGV4dC5cbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVwbGF5Q29udGV4dCh7YWN0b3IsIHJlcXVlc3RTdGF0ZX0pIHtcbiAgICBjb25zdCBncmFudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9vZmZsaW5lLWdyYW50LmpzXCIpLk9mZmxpbmVHcmFudCB8IHVuZGVmaW5lZH0gKi8gKHJlcXVlc3RTdGF0ZT8uc2lnbmVkUmVwbGF5R3JhbnQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFVzZXI6IGFjdG9yLFxuICAgICAgb2ZmbGluZUdyYW50OiBncmFudCxcbiAgICAgIG9mZmxpbmVHcmFudFNjb3BlczogZ3JhbnQ/LnNjb3BlcyB8fCB7fSxcbiAgICAgIHJlc291cmNlUnVudGltZTogXCJvZmZsaW5lXCJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlcyB0aGUgcm91dGVkLXJlc291cmNlIGFiaWxpdHkgZnJvbSB0aGUgdmVyaWZpZWQgc2lnbmVkIGFjdG9yIGFuZFxuICAgKiBncmFudCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIGBhYmlsaXR5RmFjdG9yeWAuIFRoZSBjb25zdHJ1Y3Rvci13aWRlXG4gICAqIHVwbG9hZGVyIGFiaWxpdHkgaXMgbmV2ZXIgdXNlZCBmb3Igc2lnbmVkIHJlcGxheTogd2l0aG91dCBhIGZhY3RvcnkgKG9yIGFcbiAgICogZmFjdG9yeSByZXN1bHQpIGV2ZXJ5IHJvdXRlZCBzeW5jIGZhaWxzIGNsb3NlZCB3aXRoIGEgY2xpZW50LXNhZmUgZXJyb3IuXG4gICAqIEBwYXJhbSB7e2FjdG9yOiA/LCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCA/Pn19IGFyZ3MgLSBWZXJpZmllZCBhY3RvciBhbmQgcmVwbGF5IGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHthYmlsaXR5OiBpbXBvcnQoXCIuLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCwgYWJpbGl0eUNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+fT59IFNjb3BlZCBhYmlsaXR5IGFuZCByZXNvdXJjZSBjb250ZXh0LlxuICAgKi9cbiAgYXN5bmMgcmVwbGF5QWJpbGl0eUZvcih7YWN0b3IsIGNvbnRleHR9KSB7XG4gICAgY29uc3QgZ3JhbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnR9ICovIChjb250ZXh0Lm9mZmxpbmVHcmFudClcbiAgICBjb25zdCBhYmlsaXR5ID0gdGhpcy5hYmlsaXR5RmFjdG9yeVxuICAgICAgPyBhd2FpdCB0aGlzLmFiaWxpdHlGYWN0b3J5KHthY3RvciwgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLCBncmFudH0pXG4gICAgICA6IG51bGxcblxuICAgIGlmICghYWJpbGl0eSkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIlNpZ25lZCBzeW5jIHJlcGxheSByZXF1aXJlcyBhbiBhY3Rvci9ncmFudC1zY29wZWQgYWJpbGl0eUZhY3RvcnkuXCIsIHtjb2RlOiBcInNpZ25lZC1yZXBsYXktYWJpbGl0eS1taXNzaW5nXCJ9KVxuICAgIH1cblxuICAgIHJldHVybiB7YWJpbGl0eSwgYWJpbGl0eUNvbnRleHQ6IGNvbnRleHR9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgZXZlcnkgc2lnbmVkIG11dGF0aW9uLCBpdHMgb2ZmbGluZSBncmFudCwgYW5kIHRoZSBhY3Rvci9ncmFudFxuICAgKiBjb25zaXN0ZW5jeSwgdGhlbiB0cmFuc2Zvcm1zIHRoZSBlbnZlbG9wZXMgaW50byB0aGUgc3luYyBmb3JtYXQgdGhlIGJhc2VcbiAgICogcmVwbGF5IHNlcnZpY2UgdW5kZXJzdGFuZHMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IHBhcmFtcyAtIFJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7YWN0b3I6ID8sIGdyYW50OiBpbXBvcnQoXCIuL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50LCBzeW5jczogQXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fT59IFZlcmlmaWVkIGFjdG9yLCBjb21tb24gZ3JhbnQsIGFuZCBkZXJpdmVkIHN5bmNzLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5QW5kVHJhbnNmb3JtU2lnbmVkUmVwbGF5KHBhcmFtcykge1xuICAgIGNvbnN0IHJhd0VudHJpZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcy5zaWduZWRNdXRhdGlvbnMpID8gcGFyYW1zLnNpZ25lZE11dGF0aW9ucyA6IFtdXG5cbiAgICBpZiAocmF3RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJFeHBlY3RlZCBzaWduZWQgbXV0YXRpb25zLlwiLCB7Y29kZTogXCJtaXNzaW5nLXNpZ25lZC1tdXRhdGlvbnNcIn0pXG4gICAgfVxuXG4gICAgY29uc3Qgc3luY01hbmlmZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uXG4gICAgICA/IGZyb250ZW5kTW9kZWxTeW5jTWFuaWZlc3RGb3JCYWNrZW5kUHJvamVjdHModGhpcy5jb25maWd1cmF0aW9uLmdldEJhY2tlbmRQcm9qZWN0cygpKVxuICAgICAgOiB7fVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBudWxsfSAqL1xuICAgIGxldCBncmFudFVzZXJJZCA9IG51bGxcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IG51bGx9ICovXG4gICAgbGV0IGdyYW50RGV2aWNlSWQgPSBudWxsXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBudWxsfSAqL1xuICAgIGxldCBncmFudElkID0gbnVsbFxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9vZmZsaW5lLWdyYW50LmpzXCIpLk9mZmxpbmVHcmFudCB8IG51bGx9ICovXG4gICAgbGV0IGNvbW1vbkdyYW50ID0gbnVsbFxuICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSAqL1xuICAgIGNvbnN0IHN5bmNzID0gW11cblxuICAgIGZvciAoY29uc3QgcmF3RW50cnkgb2YgcmF3RW50cmllcykge1xuICAgICAgaWYgKCFyYXdFbnRyeSB8fCB0eXBlb2YgcmF3RW50cnkgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIkludmFsaWQgc2lnbmVkIG11dGF0aW9uIGVudHJ5LlwiLCB7Y29kZTogXCJpbnZhbGlkLXNpZ25lZC1tdXRhdGlvbi1lbnRyeVwifSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmVkTXV0YXRpb24gPSAvKiogQHR5cGUge1NpZ25lZFN5bmNNdXRhdGlvbn0gKi8gKHJhd0VudHJ5LnNpZ25lZE11dGF0aW9uKVxuICAgICAgY29uc3Qgc2lnbmVkT2ZmbGluZUdyYW50ID0gLyoqIEB0eXBlIHtTaWduZWRPZmZsaW5lR3JhbnR9ICovIChyYXdFbnRyeS5zaWduZWRPZmZsaW5lR3JhbnQpXG5cbiAgICAgIGlmICghc2lnbmVkTXV0YXRpb24gfHwgIXNpZ25lZE9mZmxpbmVHcmFudCkge1xuICAgICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiRXhwZWN0ZWQgc2lnbmVkIG11dGF0aW9uIGFuZCBzaWduZWQgb2ZmbGluZSBncmFudC5cIiwge2NvZGU6IFwiaW5jb21wbGV0ZS1zaWduZWQtbXV0YXRpb25cIn0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG11dGF0aW9uID0gYXdhaXQgdmVyaWZ5U2lnbmVkTXV0YXRpb24oe1xuICAgICAgICBiYWNrZW5kUHVibGljS2V5OiB0aGlzLmJhY2tlbmRQdWJsaWNLZXksXG4gICAgICAgIHNpZ25lZE11dGF0aW9uXG4gICAgICB9KVxuICAgICAgY29uc3Qgb2ZmbGluZUdyYW50ID0gYXdhaXQgdmVyaWZ5T2ZmbGluZUdyYW50KHtcbiAgICAgICAgc2lnbmVkR3JhbnQ6IHNpZ25lZE9mZmxpbmVHcmFudCxcbiAgICAgICAgc2lnbmluZ0tleXM6IHRoaXMub2ZmbGluZUdyYW50U2lnbmluZ0tleXNcbiAgICAgIH0pXG5cbiAgICAgIGlmIChtdXRhdGlvbi5hY3RvclVzZXJJZCAhPT0gb2ZmbGluZUdyYW50LnVzZXJJZCkge1xuICAgICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiTXV0YXRpb24gYWN0b3IgZG9lcyBub3QgbWF0Y2ggb2ZmbGluZSBncmFudC5cIiwge2NvZGU6IFwiYWN0b3ItZ3JhbnQtbWlzbWF0Y2hcIn0pXG4gICAgICB9XG5cbiAgICAgIGlmIChtdXRhdGlvbi5hY3RvckRldmljZUlkICE9PSBvZmZsaW5lR3JhbnQuZGV2aWNlSWQpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIk11dGF0aW9uIGRldmljZSBkb2VzIG5vdCBtYXRjaCBvZmZsaW5lIGdyYW50LlwiLCB7Y29kZTogXCJkZXZpY2UtZ3JhbnQtbWlzbWF0Y2hcIn0pXG4gICAgICB9XG5cbiAgICAgIGlmIChtdXRhdGlvbi5vZmZsaW5lR3JhbnRJZCAhPT0gb2ZmbGluZUdyYW50LmdyYW50SWQpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIk11dGF0aW9uIGdyYW50IGlkIGRvZXMgbm90IG1hdGNoIG9mZmxpbmUgZ3JhbnQuXCIsIHtjb2RlOiBcImdyYW50LWlkLW1pc21hdGNoXCJ9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZ3JhbnRVc2VySWQgPT09IG51bGwpIHtcbiAgICAgICAgZ3JhbnRVc2VySWQgPSBvZmZsaW5lR3JhbnQudXNlcklkXG4gICAgICAgIGdyYW50RGV2aWNlSWQgPSBvZmZsaW5lR3JhbnQuZGV2aWNlSWRcbiAgICAgICAgZ3JhbnRJZCA9IG9mZmxpbmVHcmFudC5ncmFudElkXG4gICAgICAgIGNvbW1vbkdyYW50ID0gb2ZmbGluZUdyYW50XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBncmFudFVzZXJJZCAhPT0gb2ZmbGluZUdyYW50LnVzZXJJZCB8fFxuICAgICAgICBncmFudERldmljZUlkICE9PSBvZmZsaW5lR3JhbnQuZGV2aWNlSWQgfHxcbiAgICAgICAgZ3JhbnRJZCAhPT0gb2ZmbGluZUdyYW50LmdyYW50SWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiQWxsIHNpZ25lZCBtdXRhdGlvbnMgaW4gYSBiYXRjaCBtdXN0IHNoYXJlIGFjdG9yLCBkZXZpY2UsIGFuZCBncmFudC5cIiwge2NvZGU6IFwibWl4ZWQtc2lnbmVkLXJlcGxheS1iYXRjaFwifSlcbiAgICAgIH1cblxuICAgICAgdGhpcy52YWxpZGF0ZUN1cnJlbnRTeW5jUG9saWN5KHttdXRhdGlvbiwgc3luY01hbmlmZXN0fSlcbiAgICAgIHRoaXMudmFsaWRhdGVHcmFudEFnYWluc3RTeW5jUG9saWN5KHttdXRhdGlvbiwgb2ZmbGluZUdyYW50LCBzeW5jTWFuaWZlc3R9KVxuXG4gICAgICBjb25zdCBzeW5jID0gdGhpcy5zeW5jRnJvbVNpZ25lZE11dGF0aW9uKHttdXRhdGlvbn0pXG4gICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IG11dGF0aW9uSWRlbXBvdGVuY3lLZXkoe211dGF0aW9ufSlcblxuICAgICAgc3luY3MucHVzaCh7Li4uc3luYywgaWQ6IGlkZW1wb3RlbmN5S2V5LCBpZGVtcG90ZW5jeUtleX0pXG4gICAgfVxuXG4gICAgaWYgKCFncmFudFVzZXJJZCB8fCAhY29tbW9uR3JhbnQpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJDb3VsZCBub3QgcmVzb2x2ZSBzaWduZWQgcmVwbGF5IGFjdG9yLlwiLCB7Y29kZTogXCJtaXNzaW5nLXNpZ25lZC1yZXBsYXktYWN0b3JcIn0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0b3JMb29rdXApIHtcbiAgICAgIGNvbnN0IGxvb2tlZFVwQWN0b3IgPSBhd2FpdCB0aGlzLmFjdG9yTG9va3VwKGdyYW50VXNlcklkKVxuXG4gICAgICBpZiAoIWxvb2tlZFVwQWN0b3IpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIlNpZ25lZCByZXBsYXkgYWN0b3Igbm90IGZvdW5kLlwiLCB7Y29kZTogXCJzaWduZWQtcmVwbGF5LWFjdG9yLW1pc3NpbmdcIn0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7YWN0b3I6IGxvb2tlZFVwQWN0b3IsIGdyYW50OiBjb21tb25HcmFudCwgc3luY3N9XG4gICAgfVxuXG4gICAgcmV0dXJuIHthY3Rvcjoge2lkOiAoKSA9PiBncmFudFVzZXJJZH0sIGdyYW50OiBjb21tb25HcmFudCwgc3luY3N9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgbXV0YXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBzeW5jIG1hbmlmZXN0OiB0aGUgbW9kZWwgYW5kIHRoZVxuICAgKiBvcGVyYXRpb24gbXVzdCBiZSBlbmFibGVkLCBhbmQgdGhlIG11dGF0aW9uJ3MgcG9saWN5IGhhc2ggbXVzdCBtYXRjaCB0aGVcbiAgICogY3VycmVudCBtYW5pZmVzdCBwb2xpY3kgaGFzaC5cbiAgICogQHBhcmFtIHt7bXV0YXRpb246IGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbiwgc3luY01hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLk5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvbj59fSBhcmdzIC0gVmFsaWRhdGlvbiBhcmdzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gVGhyb3dzIGEgY2xpZW50LXNhZmUgZXJyb3Igd2hlbiB0aGUgY3VycmVudCBwb2xpY3kgZGVuaWVzIHRoZSBtdXRhdGlvbi5cbiAgICovXG4gIHZhbGlkYXRlQ3VycmVudFN5bmNQb2xpY3koe211dGF0aW9uLCBzeW5jTWFuaWZlc3R9KSB7XG4gICAgY29uc3Qgc3luY1Jlc291cmNlID0gc3luY01hbmlmZXN0W211dGF0aW9uLm1vZGVsXVxuXG4gICAgaWYgKCFzeW5jUmVzb3VyY2UpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoYFN5bmMgcmVwbGF5IG1vZGVsIGlzIG5vdCBlbmFibGVkOiAke211dGF0aW9uLm1vZGVsfS5gLCB7Y29kZTogXCJzeW5jLXJlcGxheS1tb2RlbC1ub3QtZW5hYmxlZFwifSlcbiAgICB9XG5cbiAgICBpZiAoIXN5bmNSZXNvdXJjZS5vcGVyYXRpb25zLmluY2x1ZGVzKG11dGF0aW9uLm9wZXJhdGlvbikpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoYFN5bmMgcmVwbGF5IG9wZXJhdGlvbiBpcyBub3QgZW5hYmxlZCBmb3IgJHttdXRhdGlvbi5tb2RlbH06ICR7bXV0YXRpb24ub3BlcmF0aW9ufS5gLCB7Y29kZTogXCJzeW5jLXJlcGxheS1vcGVyYXRpb24tbm90LWVuYWJsZWRcIn0pXG4gICAgfVxuXG4gICAgaWYgKHN5bmNSZXNvdXJjZS5wb2xpY3lIYXNoICE9PSBtdXRhdGlvbi5wb2xpY3lIYXNoKSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKGBTeW5jIHJlcGxheSBwb2xpY3kgaGFzaCBtaXNtYXRjaCBmb3IgJHttdXRhdGlvbi5tb2RlbH0uYCwge2NvZGU6IFwic3luYy1yZXBsYXktcG9saWN5LWhhc2gtbWlzbWF0Y2hcIn0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdmVyaWZpZWQgb2ZmbGluZSBncmFudCBhZ2FpbnN0IHRoZSBjdXJyZW50IHN5bmMgcG9saWN5LCB0aGVcbiAgICogc2FtZSBjb250cmFjdCBhcyB0aGUgY29udHJvbGxlcidzIHN5bmMgcmVwbGF5IGVuZHBvaW50OiB0aGUgZ3JhbnQgcmVzb3VyY2VcbiAgICogZW50cnkgbXVzdCBiZSBhIG5vcm1hbGl6ZWQgbWFuaWZlc3QgZW50cnkgKGVuYWJsZWQgd2l0aCBhbiBvcGVyYXRpb25zIGxpc3RcbiAgICogYW5kIHRoZSBjdXJyZW50IHBvbGljeSBoYXNoKSwgaXQgbXVzdCBsaXN0IHRoZSBtdXRhdGlvbiBvcGVyYXRpb24sIGFuZCBpdHNcbiAgICogcG9saWN5IGhhc2ggbXVzdCBlcXVhbCBib3RoIHRoZSBtdXRhdGlvbiBhbmQgY3VycmVudCBtYW5pZmVzdCBoYXNoZXMuXG4gICAqIExlZ2FjeSBhcnJheS90cnVlIGdyYW50LXJlc291cmNlIHNob3J0Y3V0cyBhcmUgbm90IHRoZSBib290c3RyYXAgY29udHJhY3RcbiAgICogYW5kIG5ldmVyIGF1dGhvcml6ZSBhIG11dGF0aW9uLlxuICAgKiBAcGFyYW0ge3ttdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9uLCBvZmZsaW5lR3JhbnQ6IGltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnQsIHN5bmNNYW5pZmVzdDogUmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb24+fX0gYXJncyAtIFZhbGlkYXRpb24gYXJncy5cbiAgICogQHJldHVybnMge3ZvaWR9IFRocm93cyBhIGNsaWVudC1zYWZlIGVycm9yIHdoZW4gdGhlIGdyYW50IGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgbXV0YXRpb24uXG4gICAqL1xuICB2YWxpZGF0ZUdyYW50QWdhaW5zdFN5bmNQb2xpY3koe211dGF0aW9uLCBvZmZsaW5lR3JhbnQsIHN5bmNNYW5pZmVzdH0pIHtcbiAgICBjb25zdCBncmFudFJlc291cmNlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/PiB8IHVuZGVmaW5lZH0gKi8gKG9mZmxpbmVHcmFudC5yZXNvdXJjZXNbbXV0YXRpb24ubW9kZWxdKVxuICAgIGNvbnN0IGdyYW50T3BlcmF0aW9ucyA9IEFycmF5LmlzQXJyYXkoZ3JhbnRSZXNvdXJjZT8ub3BlcmF0aW9ucykgPyBncmFudFJlc291cmNlLm9wZXJhdGlvbnMgOiBbXVxuICAgIGNvbnN0IGdyYW50UG9saWN5SGFzaCA9IGdyYW50UmVzb3VyY2U/LnBvbGljeUhhc2hcblxuICAgIGlmICghZ3JhbnRSZXNvdXJjZSB8fCBncmFudFJlc291cmNlLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoYE9mZmxpbmUgZ3JhbnQgZG9lcyBub3QgYXV0aG9yaXplICR7bXV0YXRpb24ubW9kZWx9LmAsIHtjb2RlOiBcIm9mZmxpbmUtZ3JhbnQtZGVuaWVkXCJ9KVxuICAgIH1cblxuICAgIGlmICghZ3JhbnRPcGVyYXRpb25zLmluY2x1ZGVzKG11dGF0aW9uLm9wZXJhdGlvbikpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoYE9mZmxpbmUgZ3JhbnQgZG9lcyBub3QgYXV0aG9yaXplICR7bXV0YXRpb24ubW9kZWx9OiAke211dGF0aW9uLm9wZXJhdGlvbn0uYCwge2NvZGU6IFwib2ZmbGluZS1ncmFudC1kZW5pZWRcIn0pXG4gICAgfVxuXG4gICAgaWYgKGdyYW50UG9saWN5SGFzaCAhPT0gbXV0YXRpb24ucG9saWN5SGFzaCB8fCBncmFudFBvbGljeUhhc2ggIT09IHN5bmNNYW5pZmVzdFttdXRhdGlvbi5tb2RlbF0/LnBvbGljeUhhc2gpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoYE9mZmxpbmUgZ3JhbnQgcG9saWN5IGhhc2ggbWlzbWF0Y2ggZm9yICR7bXV0YXRpb24ubW9kZWx9LmAsIHtjb2RlOiBcIm9mZmxpbmUtZ3JhbnQtcG9saWN5LWhhc2gtbWlzbWF0Y2hcIn0pXG4gICAgfVxuXG4gICAgaWYgKCFvZmZsaW5lR3JhbnQuc2NvcGVzIHx8IHR5cGVvZiBvZmZsaW5lR3JhbnQuc2NvcGVzICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob2ZmbGluZUdyYW50LnNjb3BlcykpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJPZmZsaW5lIGdyYW50IHNjb3BlcyBhcmUgaW52YWxpZC5cIiwge2NvZGU6IFwib2ZmbGluZS1ncmFudC1zY29wZXMtaW52YWxpZFwifSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIHZlcmlmaWVkIHNpZ25lZCBtdXRhdGlvbiBpbnRvIGEgZ2VuZXJpYyBzeW5jIGVudmVsb3BlLlxuICAgKiBAcGFyYW0ge3ttdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFRyYW5zZm9ybSBhcmdzLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgPz59IFN5bmMgZW52ZWxvcGUuXG4gICAqL1xuICBzeW5jRnJvbVNpZ25lZE11dGF0aW9uKHttdXRhdGlvbn0pIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBtdXRhdGlvbi5vcGVyYXRpb25cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gbXV0YXRpb24uYXR0cmlidXRlcyB8fCB7fVxuICAgIGNvbnN0IHBheWxvYWQgPSBtdXRhdGlvbi5wYXlsb2FkIHx8IHt9XG4gICAgbGV0IHJlc291cmNlSWRcbiAgICBsZXQgZGF0YVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gXCJjcmVhdGVcIikge1xuICAgICAgcmVzb3VyY2VJZCA9IFN0cmluZyhhdHRyaWJ1dGVzLmlkKVxuICAgICAgZGF0YSA9IHsuLi5hdHRyaWJ1dGVzfVxuICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBcInVwZGF0ZVwiKSB7XG4gICAgICByZXNvdXJjZUlkID0gU3RyaW5nKHBheWxvYWQuaWQpXG4gICAgICBkYXRhID0gey4uLmF0dHJpYnV0ZXN9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbWFpbiBjb21tYW5kcyBjYXJyeSB0aGVpciB0YXJnZXQgaWRlbnRpdHkgaW4gYHBheWxvYWQuaWRgLlxuICAgICAgcmVzb3VyY2VJZCA9IFN0cmluZyhwYXlsb2FkLmlkKVxuICAgICAgZGF0YSA9IHsuLi5wYXlsb2FkfVxuICAgICAgZGVsZXRlIGRhdGEuaWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZVZlcnNpb246IG11dGF0aW9uLmJhc2VWZXJzaW9uLFxuICAgICAgY2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCxcbiAgICAgIGNsaWVudFVwZGF0ZWRBdDogbXV0YXRpb24ub2NjdXJyZWRBdCxcbiAgICAgIGRhdGEsXG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgcmVzb3VyY2VUeXBlOiBtdXRhdGlvbi5tb2RlbCxcbiAgICAgIHN5bmNUeXBlOiBvcGVyYXRpb25cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVkLXN5bmMtZW52ZWxvcGUtcmVwbGF5LXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zaWduZWQtc3luYy1lbnZlbG9wZS1yZXBsYXktc2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyx5QkFBeUIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUN6RSxPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQTtBQUNyRyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUNqRixPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUVsRDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEseUJBQXlCO0lBQ3BGOzs7Ozs7OztPQVFHO0lBQ0gsWUFBWSxFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUM7UUFDM0YsS0FBSyxDQUFDO1lBQ0oscUJBQXFCLEVBQUUsdUJBQXVCO1lBQzlDLEdBQUcsSUFBSTtTQUNSLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUE7UUFFbkcsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFBO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLElBQUksRUFBRSxDQUFBO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQTtJQUN4QyxDQUFDO0lB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O1lBQy9CLElBQUksR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUE7WUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFBO1FBQ2hCLENBQUM7UUFFRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDM0MsZUFBZSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQ3BDLElBQUk7WUFDSixVQUFVO1lBQ1YsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQzVCLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFN5bmNFbnZlbG9wZVJlcGxheVNlcnZpY2UgZnJvbSBcIi4vc3luYy1lbnZlbG9wZS1yZXBsYXktc2VydmljZS5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxTeW5jTWFuaWZlc3RGb3JCYWNrZW5kUHJvamVjdHN9IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qc1wiXG5pbXBvcnQge3ZlcmlmeU9mZmxpbmVHcmFudH0gZnJvbSBcIi4vb2ZmbGluZS1ncmFudC5qc1wiXG5pbXBvcnQge211dGF0aW9uSWRlbXBvdGVuY3lLZXksIHZlcmlmeVNpZ25lZE11dGF0aW9ufSBmcm9tIFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIlxuaW1wb3J0IFZlbG9jaW91c0Vycm9yIGZyb20gXCIuLi92ZWxvY2lvdXMtZXJyb3IuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFNpZ25lZFN5bmNNdXRhdGlvblxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5TaWduZWRPZmZsaW5lR3JhbnR9IFNpZ25lZE9mZmxpbmVHcmFudFxuICovXG5cbi8qKlxuICogU3luYy1lbnZlbG9wZSByZXBsYXkgc2VydmljZSB0aGF0IGF1dGhlbnRpY2F0ZXMgdmlhIGJhY2tlbmQtc2lnbmVkIGRldmljZVxuICogY2VydGlmaWNhdGVzIGFuZCBzaWduZWQgb2ZmbGluZSBncmFudHMgaW5zdGVhZCBvZiBvbmxpbmUgc2Vzc2lvbiB0b2tlbnMuXG4gKlxuICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBWZWxvY2lvdXMgcHJpbWl0aXZlIGZvciBsb25nLW9mZmxpbmUgYW5kIHBlZXItZm9yd2FyZGVkXG4gKiBtdXRhdGlvbnM6IHRoZSBIVFRQIHVwbG9hZGVyIG1heSBkaWZmZXIgZnJvbSB0aGUgbXV0YXRpb24gYWN0b3IsIGJ1dCByZXBsYXlcbiAqIGF1dGhvcml0eSBpcyBkZXJpdmVkIGZyb20gdGhlIHNpZ25lZCBlbnZlbG9wZSBhbmQgZ3JhbnQsIG5vdCB0aGUgdXBsb2FkZXInc1xuICogc2Vzc2lvbi5cbiAqXG4gKiBFdmVyeSBtdXRhdGlvbiBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgY3VycmVudCBzeW5jIG1hbmlmZXN0ICh0aGUgc2FtZVxuICogY29udHJhY3QgYXMgdGhlIGNvbnRyb2xsZXIncyBzeW5jIHJlcGxheSBlbmRwb2ludCk6IHRoZSBtb2RlbCBhbmQgb3BlcmF0aW9uXG4gKiBtdXN0IGJlIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgbWFuaWZlc3QsIHRoZSBncmFudCByZXNvdXJjZSBlbnRyeSBtdXN0IGJlXG4gKiBlbmFibGVkIGFuZCBsaXN0IHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgZ3JhbnQgcG9saWN5IGhhc2ggbXVzdCBlcXVhbCBib3RoIHRoZVxuICogbXV0YXRpb24gcG9saWN5IGhhc2ggYW5kIHRoZSBjdXJyZW50IG1hbmlmZXN0IHBvbGljeSBoYXNoLiBSb3V0ZWQgcmVzb3VyY2VzXG4gKiBhcmUgYXV0aG9yaXplZCB0aHJvdWdoIGFuIGFjdG9yL2dyYW50LXNjb3BlZCBhYmlsaXR5IGJ1aWx0IGJ5IHRoZSBjb25maWd1cmVkXG4gKiBgYWJpbGl0eUZhY3RvcnlgOyB3aXRob3V0IG9uZSwgcm91dGVkIHNpZ25lZCByZXBsYXkgZmFpbHMgY2xvc2VkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduZWRTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlIGV4dGVuZHMgU3luY0VudmVsb3BlUmVwbGF5U2VydmljZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2lnbmVkIHN5bmMtZW52ZWxvcGUgcmVwbGF5IHNlcnZpY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ29uc3RydWN0b3IgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkgdXNlZCB0byB2ZXJpZnkgZGV2aWNlIGNlcnRpZmljYXRlcy5cbiAgICogQHBhcmFtIHtBcnJheTxpbXBvcnQoXCIuL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50U2lnbmluZ0tleT59IFthcmdzLm9mZmxpbmVHcmFudFNpZ25pbmdLZXlzXSAtIE9mZmxpbmUtZ3JhbnQgdmVyaWZpY2F0aW9uIGtleXMuXG4gICAqIEBwYXJhbSB7KHVzZXJJZDogc3RyaW5nKSA9PiBQcm9taXNlPHtpZDogKCkgPT4gc3RyaW5nfSB8IG51bGw+fSBbYXJncy5hY3Rvckxvb2t1cF0gLSBPcHRpb25hbCBsb29rdXAgZnJvbSBncmFudCB1c2VyIGlkIHRvIGFuIGFjdG9yIG9iamVjdCB3aXRoIGFuIGBpZCgpYCBtZXRob2QuIERlZmF1bHRzIHRvIGEgd3JhcHBlciBhcm91bmQgdGhlIGdyYW50IHVzZXIgaWQuXG4gICAqIEBwYXJhbSB7KGFyZ3M6IHthY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCB8IG51bGwsIGdyYW50OiBpbXBvcnQoXCIuL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IG51bGw+IHwgaW1wb3J0KFwiLi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCBudWxsfSBbYXJncy5hYmlsaXR5RmFjdG9yeV0gLSBCdWlsZHMgdGhlIGFjdG9yL2dyYW50LXNjb3BlZCBhYmlsaXR5IHVzZWQgdG8gYXV0aG9yaXplIHJvdXRlZCByZXNvdXJjZXMuIFJlcXVpcmVkIGZvciByb3V0ZWQgc2lnbmVkIHJlcGxheTsgd2l0aG91dCBpdCBldmVyeSByb3V0ZWQgc3luYyBmYWlscyBjbG9zZWQuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJncy5yZXN0XSAtIFJlbWFpbmluZyBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIHtAbGluayBTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlfS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHthYmlsaXR5RmFjdG9yeSwgYmFja2VuZFB1YmxpY0tleSwgb2ZmbGluZUdyYW50U2lnbmluZ0tleXMsIGFjdG9yTG9va3VwLCAuLi5yZXN0fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGFjdG9yRm9yZWlnbktleUNvbHVtbjogXCJhdXRoZW50aWNhdGlvblRva2VuSWRcIixcbiAgICAgIC4uLnJlc3RcbiAgICB9KVxuXG4gICAgaWYgKCFiYWNrZW5kUHVibGljS2V5KSB0aHJvdyBuZXcgRXJyb3IoXCJTaWduZWRTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlIHJlcXVpcmVzIGJhY2tlbmRQdWJsaWNLZXlcIilcblxuICAgIHRoaXMuYWJpbGl0eUZhY3RvcnkgPSBhYmlsaXR5RmFjdG9yeSB8fCBudWxsXG4gICAgdGhpcy5iYWNrZW5kUHVibGljS2V5ID0gYmFja2VuZFB1YmxpY0tleVxuICAgIHRoaXMub2ZmbGluZUdyYW50U2lnbmluZ0tleXMgPSBvZmZsaW5lR3JhbnRTaWduaW5nS2V5cyB8fCBbXVxuICAgIHRoaXMuYWN0b3JMb29rdXAgPSBhY3Rvckxvb2t1cCB8fCBudWxsXG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgc2lnbmVkIG11dGF0aW9ucyBhbmQgdGhlbiBydW5zIHRoZSBnZW5lcmljIHJlcGxheSBsb29wIG92ZXIgdGhlXG4gICAqIGRlcml2ZWQgc3luYyBlbnZlbG9wZXMuIFZlcmlmaWVkIGFjdG9yLCBncmFudCwgYW5kIGRlcml2ZWQgc3luY3MgYXJlIGtlcHRcbiAgICogaW4gdGhlIHJlcXVlc3QtbG9jYWwgYHJlcXVlc3RTdGF0ZWAgb2JqZWN0IHNvIGNvbmN1cnJlbnQgcmVwbGF5IGNhbGxzIG9uXG4gICAqIG9uZSBzZXJ2aWNlIGluc3RhbmNlIGNhbm5vdCBjcm9zcyB0aGVpciBhdXRoZW50aWNhdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IHBhcmFtcyAtIFJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3JlcXVlc3RTdGF0ZV0gLSBSZXF1ZXN0LWxvY2FsIHN0YXRlIHNoYXJlZCB3aXRoIHRoZSBiYXNlIHJlcGxheSBob29rcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3N5bmNzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fT59IFJlcGxheSByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIHJlcGxheShwYXJhbXMsIHJlcXVlc3RTdGF0ZSA9IHt9KSB7XG4gICAgY29uc3QgdmVyaWZpZWQgPSBhd2FpdCB0aGlzLnZlcmlmeUFuZFRyYW5zZm9ybVNpZ25lZFJlcGxheShwYXJhbXMpXG5cbiAgICByZXF1ZXN0U3RhdGUuc2lnbmVkUmVwbGF5QWN0b3IgPSB2ZXJpZmllZC5hY3RvclxuICAgIHJlcXVlc3RTdGF0ZS5zaWduZWRSZXBsYXlHcmFudCA9IHZlcmlmaWVkLmdyYW50XG4gICAgcmVxdWVzdFN0YXRlLnNpZ25lZFJlcGxheVN5bmNzID0gdmVyaWZpZWQuc3luY3NcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGVyLnJlcGxheShwYXJhbXMsIHJlcXVlc3RTdGF0ZSlcblxuICAgIHJldHVybiB7XG4gICAgICBzeW5jczogcmVzdWx0LnN5bmNzLm1hcCgoc3luY1Jlc3BvbnNlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB7aWQ6IF9pZCwgLi4ucmVzdH0gPSBzeW5jUmVzcG9uc2VcbiAgICAgICAgY29uc3QgaWRlbXBvdGVuY3lLZXkgPSB2ZXJpZmllZC5zeW5jc1tpbmRleF0/LmlkZW1wb3RlbmN5S2V5XG5cbiAgICAgICAgcmV0dXJuIGlkZW1wb3RlbmN5S2V5ID8gey4uLnJlc3QsIGlkZW1wb3RlbmN5S2V5fSA6IHN5bmNSZXNwb25zZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmVyaWZpZWQgYWN0b3IgcHJlcGFyZWQgZHVyaW5nIHtAbGluayBTaWduZWRTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlI3JlcGxheX0uXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBfcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSByZXF1ZXN0U3RhdGUgLSBSZXF1ZXN0LWxvY2FsIHN0YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7YXV0aGVudGljYXRlZDogdHJ1ZSwgYWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSB8IHthdXRoZW50aWNhdGVkOiBmYWxzZSwgZXJyb3JDb2RlOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nfT59IEF1dGggcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgYXV0aGVudGljYXRlUmVwbGF5KF9wYXJhbXMsIHJlcXVlc3RTdGF0ZSkge1xuICAgIGNvbnN0IGFjdG9yID0gcmVxdWVzdFN0YXRlPy5zaWduZWRSZXBsYXlBY3RvclxuXG4gICAgaWYgKCFhY3Rvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgIGVycm9yQ29kZTogXCJtaXNzaW5nLXNpZ25lZC1yZXBsYXlcIixcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBcIkV4cGVjdGVkIGEgcHJlLXZlcmlmaWVkIHNpZ25lZCByZXBsYXlcIlxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7YWN0b3IsIGF1dGhlbnRpY2F0ZWQ6IHRydWV9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3luYyBlbnZlbG9wZXMgZGVyaXZlZCBmcm9tIHRoZSB2ZXJpZmllZCBzaWduZWQgbXV0YXRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gX3BhcmFtcyAtIFJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gcmVxdWVzdFN0YXRlIC0gUmVxdWVzdC1sb2NhbCBzdGF0ZS5cbiAgICogQHJldHVybnMge0FycmF5PFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFN5bmMgZW52ZWxvcGVzLlxuICAgKi9cbiAgcmVwbGF5U3luY3MoX3BhcmFtcywgcmVxdWVzdFN0YXRlKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RTdGF0ZT8uc2lnbmVkUmVwbGF5U3luY3MgfHwgW11cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHJlcGxheSBjb250ZXh0IGNhcnJ5aW5nIHRoZSB2ZXJpZmllZCBzaWduZWQgYWN0b3IgYW5kIGdyYW50XG4gICAqICh3aXRoIGl0cyBzY29wZXMpIHBsdXMgdGhlIG9mZmxpbmUgcnVudGltZSBtYXJrZXIsIHNvIHJlc291cmNlIGhvb2tzIGFuZFxuICAgKiBhYmlsaXR5IGZhY3RvcmllcyBhdXRob3JpemUgYWdhaW5zdCB0aGUgc2lnbmVyIGluc3RlYWQgb2YgdGhlIHVwbG9hZGVyLlxuICAgKiBAcGFyYW0ge3thY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCByZXF1ZXN0U3RhdGU6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19IGFyZ3MgLSBBY3RvciwgcmVxdWVzdCBwYXJhbXMsIGFuZCByZXF1ZXN0LWxvY2FsIHN0YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBSZXBsYXkgY29udGV4dC5cbiAgICovXG4gIGFzeW5jIGJ1aWxkUmVwbGF5Q29udGV4dCh7YWN0b3IsIHJlcXVlc3RTdGF0ZX0pIHtcbiAgICBjb25zdCBncmFudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9vZmZsaW5lLWdyYW50LmpzXCIpLk9mZmxpbmVHcmFudCB8IHVuZGVmaW5lZH0gKi8gKHJlcXVlc3RTdGF0ZT8uc2lnbmVkUmVwbGF5R3JhbnQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFVzZXI6IGFjdG9yLFxuICAgICAgb2ZmbGluZUdyYW50OiBncmFudCxcbiAgICAgIG9mZmxpbmVHcmFudFNjb3BlczogZ3JhbnQ/LnNjb3BlcyB8fCB7fSxcbiAgICAgIHJlc291cmNlUnVudGltZTogXCJvZmZsaW5lXCJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlcyB0aGUgcm91dGVkLXJlc291cmNlIGFiaWxpdHkgZnJvbSB0aGUgdmVyaWZpZWQgc2lnbmVkIGFjdG9yIGFuZFxuICAgKiBncmFudCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIGBhYmlsaXR5RmFjdG9yeWAuIFRoZSBjb25zdHJ1Y3Rvci13aWRlXG4gICAqIHVwbG9hZGVyIGFiaWxpdHkgaXMgbmV2ZXIgdXNlZCBmb3Igc2lnbmVkIHJlcGxheTogd2l0aG91dCBhIGZhY3RvcnkgKG9yIGFcbiAgICogZmFjdG9yeSByZXN1bHQpIGV2ZXJ5IHJvdXRlZCBzeW5jIGZhaWxzIGNsb3NlZCB3aXRoIGEgY2xpZW50LXNhZmUgZXJyb3IuXG4gICAqIEBwYXJhbSB7e2FjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgY29udGV4dDogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fX0gYXJncyAtIFZlcmlmaWVkIGFjdG9yIGFuZCByZXBsYXkgY29udGV4dC5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2FiaWxpdHk6IGltcG9ydChcIi4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0LCBhYmlsaXR5Q29udGV4dDogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fT59IFNjb3BlZCBhYmlsaXR5IGFuZCByZXNvdXJjZSBjb250ZXh0LlxuICAgKi9cbiAgYXN5bmMgcmVwbGF5QWJpbGl0eUZvcih7YWN0b3IsIGNvbnRleHR9KSB7XG4gICAgY29uc3QgZ3JhbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnR9ICovIChjb250ZXh0Lm9mZmxpbmVHcmFudClcbiAgICBjb25zdCBhYmlsaXR5ID0gdGhpcy5hYmlsaXR5RmFjdG9yeVxuICAgICAgPyBhd2FpdCB0aGlzLmFiaWxpdHlGYWN0b3J5KHthY3RvciwgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLCBncmFudH0pXG4gICAgICA6IG51bGxcblxuICAgIGlmICghYWJpbGl0eSkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIlNpZ25lZCBzeW5jIHJlcGxheSByZXF1aXJlcyBhbiBhY3Rvci9ncmFudC1zY29wZWQgYWJpbGl0eUZhY3RvcnkuXCIsIHtjb2RlOiBcInNpZ25lZC1yZXBsYXktYWJpbGl0eS1taXNzaW5nXCJ9KVxuICAgIH1cblxuICAgIHJldHVybiB7YWJpbGl0eSwgYWJpbGl0eUNvbnRleHQ6IGNvbnRleHR9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgZXZlcnkgc2lnbmVkIG11dGF0aW9uLCBpdHMgb2ZmbGluZSBncmFudCwgYW5kIHRoZSBhY3Rvci9ncmFudFxuICAgKiBjb25zaXN0ZW5jeSwgdGhlbiB0cmFuc2Zvcm1zIHRoZSBlbnZlbG9wZXMgaW50byB0aGUgc3luYyBmb3JtYXQgdGhlIGJhc2VcbiAgICogcmVwbGF5IHNlcnZpY2UgdW5kZXJzdGFuZHMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2FjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgZ3JhbnQ6IGltcG9ydChcIi4vb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnQsIHN5bmNzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fT59IFZlcmlmaWVkIGFjdG9yLCBjb21tb24gZ3JhbnQsIGFuZCBkZXJpdmVkIHN5bmNzLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5QW5kVHJhbnNmb3JtU2lnbmVkUmVwbGF5KHBhcmFtcykge1xuICAgIGNvbnN0IHJhd0VudHJpZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcy5zaWduZWRNdXRhdGlvbnMpID8gcGFyYW1zLnNpZ25lZE11dGF0aW9ucyA6IFtdXG5cbiAgICBpZiAocmF3RW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJFeHBlY3RlZCBzaWduZWQgbXV0YXRpb25zLlwiLCB7Y29kZTogXCJtaXNzaW5nLXNpZ25lZC1tdXRhdGlvbnNcIn0pXG4gICAgfVxuXG4gICAgY29uc3Qgc3luY01hbmlmZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uXG4gICAgICA/IGZyb250ZW5kTW9kZWxTeW5jTWFuaWZlc3RGb3JCYWNrZW5kUHJvamVjdHModGhpcy5jb25maWd1cmF0aW9uLmdldEJhY2tlbmRQcm9qZWN0cygpKVxuICAgICAgOiB7fVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBudWxsfSAqL1xuICAgIGxldCBncmFudFVzZXJJZCA9IG51bGxcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IG51bGx9ICovXG4gICAgbGV0IGdyYW50RGV2aWNlSWQgPSBudWxsXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBudWxsfSAqL1xuICAgIGxldCBncmFudElkID0gbnVsbFxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9vZmZsaW5lLWdyYW50LmpzXCIpLk9mZmxpbmVHcmFudCB8IG51bGx9ICovXG4gICAgbGV0IGNvbW1vbkdyYW50ID0gbnVsbFxuICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gKi9cbiAgICBjb25zdCBzeW5jcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHJhd0VudHJ5IG9mIHJhd0VudHJpZXMpIHtcbiAgICAgIGlmICghcmF3RW50cnkgfHwgdHlwZW9mIHJhd0VudHJ5ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJJbnZhbGlkIHNpZ25lZCBtdXRhdGlvbiBlbnRyeS5cIiwge2NvZGU6IFwiaW52YWxpZC1zaWduZWQtbXV0YXRpb24tZW50cnlcIn0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNpZ25lZE11dGF0aW9uID0gLyoqIEB0eXBlIHtTaWduZWRTeW5jTXV0YXRpb259ICovIChyYXdFbnRyeS5zaWduZWRNdXRhdGlvbilcbiAgICAgIGNvbnN0IHNpZ25lZE9mZmxpbmVHcmFudCA9IC8qKiBAdHlwZSB7U2lnbmVkT2ZmbGluZUdyYW50fSAqLyAocmF3RW50cnkuc2lnbmVkT2ZmbGluZUdyYW50KVxuXG4gICAgICBpZiAoIXNpZ25lZE11dGF0aW9uIHx8ICFzaWduZWRPZmZsaW5lR3JhbnQpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIkV4cGVjdGVkIHNpZ25lZCBtdXRhdGlvbiBhbmQgc2lnbmVkIG9mZmxpbmUgZ3JhbnQuXCIsIHtjb2RlOiBcImluY29tcGxldGUtc2lnbmVkLW11dGF0aW9uXCJ9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtdXRhdGlvbiA9IGF3YWl0IHZlcmlmeVNpZ25lZE11dGF0aW9uKHtcbiAgICAgICAgYmFja2VuZFB1YmxpY0tleTogdGhpcy5iYWNrZW5kUHVibGljS2V5LFxuICAgICAgICBzaWduZWRNdXRhdGlvblxuICAgICAgfSlcbiAgICAgIGNvbnN0IG9mZmxpbmVHcmFudCA9IGF3YWl0IHZlcmlmeU9mZmxpbmVHcmFudCh7XG4gICAgICAgIHNpZ25lZEdyYW50OiBzaWduZWRPZmZsaW5lR3JhbnQsXG4gICAgICAgIHNpZ25pbmdLZXlzOiB0aGlzLm9mZmxpbmVHcmFudFNpZ25pbmdLZXlzXG4gICAgICB9KVxuXG4gICAgICBpZiAobXV0YXRpb24uYWN0b3JVc2VySWQgIT09IG9mZmxpbmVHcmFudC51c2VySWQpIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIk11dGF0aW9uIGFjdG9yIGRvZXMgbm90IG1hdGNoIG9mZmxpbmUgZ3JhbnQuXCIsIHtjb2RlOiBcImFjdG9yLWdyYW50LW1pc21hdGNoXCJ9KVxuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb24uYWN0b3JEZXZpY2VJZCAhPT0gb2ZmbGluZUdyYW50LmRldmljZUlkKSB7XG4gICAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJNdXRhdGlvbiBkZXZpY2UgZG9lcyBub3QgbWF0Y2ggb2ZmbGluZSBncmFudC5cIiwge2NvZGU6IFwiZGV2aWNlLWdyYW50LW1pc21hdGNoXCJ9KVxuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb24ub2ZmbGluZUdyYW50SWQgIT09IG9mZmxpbmVHcmFudC5ncmFudElkKSB7XG4gICAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJNdXRhdGlvbiBncmFudCBpZCBkb2VzIG5vdCBtYXRjaCBvZmZsaW5lIGdyYW50LlwiLCB7Y29kZTogXCJncmFudC1pZC1taXNtYXRjaFwifSlcbiAgICAgIH1cblxuICAgICAgaWYgKGdyYW50VXNlcklkID09PSBudWxsKSB7XG4gICAgICAgIGdyYW50VXNlcklkID0gb2ZmbGluZUdyYW50LnVzZXJJZFxuICAgICAgICBncmFudERldmljZUlkID0gb2ZmbGluZUdyYW50LmRldmljZUlkXG4gICAgICAgIGdyYW50SWQgPSBvZmZsaW5lR3JhbnQuZ3JhbnRJZFxuICAgICAgICBjb21tb25HcmFudCA9IG9mZmxpbmVHcmFudFxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZ3JhbnRVc2VySWQgIT09IG9mZmxpbmVHcmFudC51c2VySWQgfHxcbiAgICAgICAgZ3JhbnREZXZpY2VJZCAhPT0gb2ZmbGluZUdyYW50LmRldmljZUlkIHx8XG4gICAgICAgIGdyYW50SWQgIT09IG9mZmxpbmVHcmFudC5ncmFudElkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIkFsbCBzaWduZWQgbXV0YXRpb25zIGluIGEgYmF0Y2ggbXVzdCBzaGFyZSBhY3RvciwgZGV2aWNlLCBhbmQgZ3JhbnQuXCIsIHtjb2RlOiBcIm1peGVkLXNpZ25lZC1yZXBsYXktYmF0Y2hcIn0pXG4gICAgICB9XG5cbiAgICAgIHRoaXMudmFsaWRhdGVDdXJyZW50U3luY1BvbGljeSh7bXV0YXRpb24sIHN5bmNNYW5pZmVzdH0pXG4gICAgICB0aGlzLnZhbGlkYXRlR3JhbnRBZ2FpbnN0U3luY1BvbGljeSh7bXV0YXRpb24sIG9mZmxpbmVHcmFudCwgc3luY01hbmlmZXN0fSlcblxuICAgICAgY29uc3Qgc3luYyA9IHRoaXMuc3luY0Zyb21TaWduZWRNdXRhdGlvbih7bXV0YXRpb259KVxuICAgICAgY29uc3QgaWRlbXBvdGVuY3lLZXkgPSBtdXRhdGlvbklkZW1wb3RlbmN5S2V5KHttdXRhdGlvbn0pXG5cbiAgICAgIHN5bmNzLnB1c2goey4uLnN5bmMsIGlkOiBpZGVtcG90ZW5jeUtleSwgaWRlbXBvdGVuY3lLZXl9KVxuICAgIH1cblxuICAgIGlmICghZ3JhbnRVc2VySWQgfHwgIWNvbW1vbkdyYW50KSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiQ291bGQgbm90IHJlc29sdmUgc2lnbmVkIHJlcGxheSBhY3Rvci5cIiwge2NvZGU6IFwibWlzc2luZy1zaWduZWQtcmVwbGF5LWFjdG9yXCJ9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdG9yTG9va3VwKSB7XG4gICAgICBjb25zdCBsb29rZWRVcEFjdG9yID0gYXdhaXQgdGhpcy5hY3Rvckxvb2t1cChncmFudFVzZXJJZClcblxuICAgICAgaWYgKCFsb29rZWRVcEFjdG9yKSB7XG4gICAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJTaWduZWQgcmVwbGF5IGFjdG9yIG5vdCBmb3VuZC5cIiwge2NvZGU6IFwic2lnbmVkLXJlcGxheS1hY3Rvci1taXNzaW5nXCJ9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge2FjdG9yOiBsb29rZWRVcEFjdG9yLCBncmFudDogY29tbW9uR3JhbnQsIHN5bmNzfVxuICAgIH1cblxuICAgIHJldHVybiB7YWN0b3I6IHtpZDogKCkgPT4gZ3JhbnRVc2VySWR9LCBncmFudDogY29tbW9uR3JhbnQsIHN5bmNzfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIG11dGF0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgc3luYyBtYW5pZmVzdDogdGhlIG1vZGVsIGFuZCB0aGVcbiAgICogb3BlcmF0aW9uIG11c3QgYmUgZW5hYmxlZCwgYW5kIHRoZSBtdXRhdGlvbidzIHBvbGljeSBoYXNoIG11c3QgbWF0Y2ggdGhlXG4gICAqIGN1cnJlbnQgbWFuaWZlc3QgcG9saWN5IGhhc2guXG4gICAqIEBwYXJhbSB7e211dGF0aW9uOiBpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb24sIHN5bmNNYW5pZmVzdDogUmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb24+fX0gYXJncyAtIFZhbGlkYXRpb24gYXJncy5cbiAgICogQHJldHVybnMge3ZvaWR9IFRocm93cyBhIGNsaWVudC1zYWZlIGVycm9yIHdoZW4gdGhlIGN1cnJlbnQgcG9saWN5IGRlbmllcyB0aGUgbXV0YXRpb24uXG4gICAqL1xuICB2YWxpZGF0ZUN1cnJlbnRTeW5jUG9saWN5KHttdXRhdGlvbiwgc3luY01hbmlmZXN0fSkge1xuICAgIGNvbnN0IHN5bmNSZXNvdXJjZSA9IHN5bmNNYW5pZmVzdFttdXRhdGlvbi5tb2RlbF1cblxuICAgIGlmICghc3luY1Jlc291cmNlKSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKGBTeW5jIHJlcGxheSBtb2RlbCBpcyBub3QgZW5hYmxlZDogJHttdXRhdGlvbi5tb2RlbH0uYCwge2NvZGU6IFwic3luYy1yZXBsYXktbW9kZWwtbm90LWVuYWJsZWRcIn0pXG4gICAgfVxuXG4gICAgaWYgKCFzeW5jUmVzb3VyY2Uub3BlcmF0aW9ucy5pbmNsdWRlcyhtdXRhdGlvbi5vcGVyYXRpb24pKSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKGBTeW5jIHJlcGxheSBvcGVyYXRpb24gaXMgbm90IGVuYWJsZWQgZm9yICR7bXV0YXRpb24ubW9kZWx9OiAke211dGF0aW9uLm9wZXJhdGlvbn0uYCwge2NvZGU6IFwic3luYy1yZXBsYXktb3BlcmF0aW9uLW5vdC1lbmFibGVkXCJ9KVxuICAgIH1cblxuICAgIGlmIChzeW5jUmVzb3VyY2UucG9saWN5SGFzaCAhPT0gbXV0YXRpb24ucG9saWN5SGFzaCkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShgU3luYyByZXBsYXkgcG9saWN5IGhhc2ggbWlzbWF0Y2ggZm9yICR7bXV0YXRpb24ubW9kZWx9LmAsIHtjb2RlOiBcInN5bmMtcmVwbGF5LXBvbGljeS1oYXNoLW1pc21hdGNoXCJ9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHZlcmlmaWVkIG9mZmxpbmUgZ3JhbnQgYWdhaW5zdCB0aGUgY3VycmVudCBzeW5jIHBvbGljeSwgdGhlXG4gICAqIHNhbWUgY29udHJhY3QgYXMgdGhlIGNvbnRyb2xsZXIncyBzeW5jIHJlcGxheSBlbmRwb2ludDogdGhlIGdyYW50IHJlc291cmNlXG4gICAqIGVudHJ5IG11c3QgYmUgYSBub3JtYWxpemVkIG1hbmlmZXN0IGVudHJ5IChlbmFibGVkIHdpdGggYW4gb3BlcmF0aW9ucyBsaXN0XG4gICAqIGFuZCB0aGUgY3VycmVudCBwb2xpY3kgaGFzaCksIGl0IG11c3QgbGlzdCB0aGUgbXV0YXRpb24gb3BlcmF0aW9uLCBhbmQgaXRzXG4gICAqIHBvbGljeSBoYXNoIG11c3QgZXF1YWwgYm90aCB0aGUgbXV0YXRpb24gYW5kIGN1cnJlbnQgbWFuaWZlc3QgaGFzaGVzLlxuICAgKiBMZWdhY3kgYXJyYXkvdHJ1ZSBncmFudC1yZXNvdXJjZSBzaG9ydGN1dHMgYXJlIG5vdCB0aGUgYm9vdHN0cmFwIGNvbnRyYWN0XG4gICAqIGFuZCBuZXZlciBhdXRob3JpemUgYSBtdXRhdGlvbi5cbiAgICogQHBhcmFtIHt7bXV0YXRpb246IGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbiwgb2ZmbGluZUdyYW50OiBpbXBvcnQoXCIuL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50LCBzeW5jTWFuaWZlc3Q6IFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uPn19IGFyZ3MgLSBWYWxpZGF0aW9uIGFyZ3MuXG4gICAqIEByZXR1cm5zIHt2b2lkfSBUaHJvd3MgYSBjbGllbnQtc2FmZSBlcnJvciB3aGVuIHRoZSBncmFudCBkb2VzIG5vdCBhdXRob3JpemUgdGhlIG11dGF0aW9uLlxuICAgKi9cbiAgdmFsaWRhdGVHcmFudEFnYWluc3RTeW5jUG9saWN5KHttdXRhdGlvbiwgb2ZmbGluZUdyYW50LCBzeW5jTWFuaWZlc3R9KSB7XG4gICAgY29uc3QgZ3JhbnRSZXNvdXJjZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgdW5kZWZpbmVkfSAqLyAob2ZmbGluZUdyYW50LnJlc291cmNlc1ttdXRhdGlvbi5tb2RlbF0pXG4gICAgY29uc3QgZ3JhbnRPcGVyYXRpb25zID0gQXJyYXkuaXNBcnJheShncmFudFJlc291cmNlPy5vcGVyYXRpb25zKSA/IGdyYW50UmVzb3VyY2Uub3BlcmF0aW9ucyA6IFtdXG4gICAgY29uc3QgZ3JhbnRQb2xpY3lIYXNoID0gZ3JhbnRSZXNvdXJjZT8ucG9saWN5SGFzaFxuXG4gICAgaWYgKCFncmFudFJlc291cmNlIHx8IGdyYW50UmVzb3VyY2UuZW5hYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShgT2ZmbGluZSBncmFudCBkb2VzIG5vdCBhdXRob3JpemUgJHttdXRhdGlvbi5tb2RlbH0uYCwge2NvZGU6IFwib2ZmbGluZS1ncmFudC1kZW5pZWRcIn0pXG4gICAgfVxuXG4gICAgaWYgKCFncmFudE9wZXJhdGlvbnMuaW5jbHVkZXMobXV0YXRpb24ub3BlcmF0aW9uKSkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShgT2ZmbGluZSBncmFudCBkb2VzIG5vdCBhdXRob3JpemUgJHttdXRhdGlvbi5tb2RlbH06ICR7bXV0YXRpb24ub3BlcmF0aW9ufS5gLCB7Y29kZTogXCJvZmZsaW5lLWdyYW50LWRlbmllZFwifSlcbiAgICB9XG5cbiAgICBpZiAoZ3JhbnRQb2xpY3lIYXNoICE9PSBtdXRhdGlvbi5wb2xpY3lIYXNoIHx8IGdyYW50UG9saWN5SGFzaCAhPT0gc3luY01hbmlmZXN0W211dGF0aW9uLm1vZGVsXT8ucG9saWN5SGFzaCkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShgT2ZmbGluZSBncmFudCBwb2xpY3kgaGFzaCBtaXNtYXRjaCBmb3IgJHttdXRhdGlvbi5tb2RlbH0uYCwge2NvZGU6IFwib2ZmbGluZS1ncmFudC1wb2xpY3ktaGFzaC1taXNtYXRjaFwifSlcbiAgICB9XG5cbiAgICBpZiAoIW9mZmxpbmVHcmFudC5zY29wZXMgfHwgdHlwZW9mIG9mZmxpbmVHcmFudC5zY29wZXMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvZmZsaW5lR3JhbnQuc2NvcGVzKSkge1xuICAgICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIk9mZmxpbmUgZ3JhbnQgc2NvcGVzIGFyZSBpbnZhbGlkLlwiLCB7Y29kZTogXCJvZmZsaW5lLWdyYW50LXNjb3Blcy1pbnZhbGlkXCJ9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGEgdmVyaWZpZWQgc2lnbmVkIG11dGF0aW9uIGludG8gYSBnZW5lcmljIHN5bmMgZW52ZWxvcGUuXG4gICAqIEBwYXJhbSB7e211dGF0aW9uOiBpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259fSBhcmdzIC0gVHJhbnNmb3JtIGFyZ3MuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFN5bmMgZW52ZWxvcGUuXG4gICAqL1xuICBzeW5jRnJvbVNpZ25lZE11dGF0aW9uKHttdXRhdGlvbn0pIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBtdXRhdGlvbi5vcGVyYXRpb25cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gbXV0YXRpb24uYXR0cmlidXRlcyB8fCB7fVxuICAgIGNvbnN0IHBheWxvYWQgPSBtdXRhdGlvbi5wYXlsb2FkIHx8IHt9XG4gICAgbGV0IHJlc291cmNlSWRcbiAgICBsZXQgZGF0YVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gXCJjcmVhdGVcIikge1xuICAgICAgcmVzb3VyY2VJZCA9IFN0cmluZyhhdHRyaWJ1dGVzLmlkKVxuICAgICAgZGF0YSA9IHsuLi5hdHRyaWJ1dGVzfVxuICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBcInVwZGF0ZVwiKSB7XG4gICAgICByZXNvdXJjZUlkID0gU3RyaW5nKHBheWxvYWQuaWQpXG4gICAgICBkYXRhID0gey4uLmF0dHJpYnV0ZXN9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbWFpbiBjb21tYW5kcyBjYXJyeSB0aGVpciB0YXJnZXQgaWRlbnRpdHkgaW4gYHBheWxvYWQuaWRgLlxuICAgICAgcmVzb3VyY2VJZCA9IFN0cmluZyhwYXlsb2FkLmlkKVxuICAgICAgZGF0YSA9IHsuLi5wYXlsb2FkfVxuICAgICAgZGVsZXRlIGRhdGEuaWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZVZlcnNpb246IG11dGF0aW9uLmJhc2VWZXJzaW9uLFxuICAgICAgY2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCxcbiAgICAgIGNsaWVudFVwZGF0ZWRBdDogbXV0YXRpb24ub2NjdXJyZWRBdCxcbiAgICAgIGRhdGEsXG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgcmVzb3VyY2VUeXBlOiBtdXRhdGlvbi5tb2RlbCxcbiAgICAgIHN5bmNUeXBlOiBvcGVyYXRpb25cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Serializes a JSON-compatible value with recursively sorted object keys, so
|
|
3
3
|
* equal values always produce byte-identical strings (used for sync scope and
|
|
4
4
|
* change-feed identity comparisons).
|
|
5
|
-
* @param {
|
|
5
|
+
* @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
|
|
6
6
|
* @returns {string} - Stable JSON string.
|
|
7
7
|
*/
|
|
8
|
-
export default function stableJsonStringify(value:
|
|
8
|
+
export default function stableJsonStringify(value: ReturnType<typeof JSON.parse>): string;
|
|
9
9
|
//# sourceMappingURL=stable-json.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stable-json.d.ts","sourceRoot":"","sources":["../../../src/sync/stable-json.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"stable-json.d.ts","sourceRoot":"","sources":["../../../src/sync/stable-json.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAHtC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGU,GAFpC,MAAM,CAIlB"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Serializes a JSON-compatible value with recursively sorted object keys, so
|
|
4
4
|
* equal values always produce byte-identical strings (used for sync scope and
|
|
5
5
|
* change-feed identity comparisons).
|
|
6
|
-
* @param {
|
|
6
|
+
* @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
|
|
7
7
|
* @returns {string} - Stable JSON string.
|
|
8
8
|
*/
|
|
9
9
|
export default function stableJsonStringify(value) {
|
|
@@ -11,8 +11,8 @@ export default function stableJsonStringify(value) {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Produces a recursively key-sorted JSON value.
|
|
14
|
-
* @param {
|
|
15
|
-
* @returns {
|
|
14
|
+
* @param {ReturnType<typeof JSON.parse>} value - JSON-compatible value.
|
|
15
|
+
* @returns {ReturnType<typeof JSON.parse>} - Stable JSON-compatible value.
|
|
16
16
|
*/
|
|
17
17
|
function stableJsonValue(value) {
|
|
18
18
|
if (Array.isArray(value))
|
|
@@ -22,6 +22,6 @@ function stableJsonValue(value) {
|
|
|
22
22
|
return Object.keys(value).sort().reduce((memo, key) => {
|
|
23
23
|
memo[key] = stableJsonValue(value[key]);
|
|
24
24
|
return memo;
|
|
25
|
-
}, /** @type {Record<string,
|
|
25
|
+
}, /** @type {Record<string, ReturnType<typeof JSON.parse>>} */ ({}));
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zdGFibGUtanNvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxtQkFBbUIsQ0FBQyxLQUFLO0lBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0UsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFckQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRXZDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUFFLDREQUE0RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogU2VyaWFsaXplcyBhIEpTT04tY29tcGF0aWJsZSB2YWx1ZSB3aXRoIHJlY3Vyc2l2ZWx5IHNvcnRlZCBvYmplY3Qga2V5cywgc29cbiAqIGVxdWFsIHZhbHVlcyBhbHdheXMgcHJvZHVjZSBieXRlLWlkZW50aWNhbCBzdHJpbmdzICh1c2VkIGZvciBzeW5jIHNjb3BlIGFuZFxuICogY2hhbmdlLWZlZWQgaWRlbnRpdHkgY29tcGFyaXNvbnMpLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBKU09OIHN0cmluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhYmxlSnNvblN0cmluZ2lmeSh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhYmxlSnNvblZhbHVlKHZhbHVlKSlcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBhIHJlY3Vyc2l2ZWx5IGtleS1zb3J0ZWQgSlNPTiB2YWx1ZS5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IHZhbHVlIC0gSlNPTi1jb21wYXRpYmxlIHZhbHVlLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIFN0YWJsZSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZUpzb25WYWx1ZSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHN0YWJsZUpzb25WYWx1ZShpdGVtKSlcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiB2YWx1ZVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpLnJlZHVjZSgobWVtbywga2V5KSA9PiB7XG4gICAgbWVtb1trZXldID0gc3RhYmxlSnNvblZhbHVlKHZhbHVlW2tleV0pXG5cbiAgICByZXR1cm4gbWVtb1xuICB9LCAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi8gKHt9KSlcbn1cbiJdfQ==
|