velocious 1.0.146 → 1.0.148
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 +15 -0
- package/build/src/application.d.ts +25 -16
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +17 -17
- package/build/src/cli/base-command.d.ts +26 -14
- package/build/src/cli/base-command.d.ts.map +1 -1
- package/build/src/cli/base-command.js +13 -13
- package/build/src/cli/browser-cli.d.ts +5 -5
- package/build/src/cli/browser-cli.js +6 -6
- package/build/src/cli/commands/db/create.d.ts +4 -4
- package/build/src/cli/commands/db/create.js +5 -5
- package/build/src/cli/commands/destroy/migration.d.ts +0 -1
- package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/base-models.d.ts +0 -1
- package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/cli/commands/generate/migration.d.ts +0 -1
- package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
- package/build/src/cli/commands/generate/model.d.ts +0 -1
- package/build/src/cli/commands/generate/model.d.ts.map +1 -1
- package/build/src/cli/commands/init.d.ts +0 -1
- package/build/src/cli/commands/init.d.ts.map +1 -1
- package/build/src/cli/commands/routes.d.ts +0 -1
- package/build/src/cli/commands/routes.d.ts.map +1 -1
- package/build/src/cli/commands/server.d.ts +0 -1
- package/build/src/cli/commands/server.d.ts.map +1 -1
- package/build/src/cli/commands/test.d.ts +0 -1
- package/build/src/cli/commands/test.d.ts.map +1 -1
- package/build/src/cli/index.d.ts +11 -11
- package/build/src/cli/index.d.ts.map +1 -1
- package/build/src/cli/index.js +9 -9
- package/build/src/cli/use-browser-cli.d.ts +2 -2
- package/build/src/cli/use-browser-cli.js +3 -3
- package/build/src/configuration-resolver.d.ts +2 -2
- package/build/src/configuration-resolver.js +3 -3
- package/build/src/configuration-types.d.ts +149 -44
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +43 -43
- package/build/src/configuration.d.ts +75 -59
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +68 -56
- package/build/src/controller.d.ts +29 -29
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +28 -28
- package/build/src/database/drivers/base-column.d.ts +15 -15
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +15 -15
- package/build/src/database/drivers/base-columns-index.d.ts +10 -10
- package/build/src/database/drivers/base-columns-index.js +11 -11
- package/build/src/database/drivers/base-foreign-key.d.ts +12 -12
- package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/base-foreign-key.js +11 -11
- package/build/src/database/drivers/base-table.d.ts +15 -15
- package/build/src/database/drivers/base-table.d.ts.map +1 -1
- package/build/src/database/drivers/base-table.js +16 -15
- package/build/src/database/drivers/base.d.ts +189 -131
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +159 -142
- package/build/src/database/drivers/mssql/column.d.ts +5 -4
- package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/column.js +3 -3
- package/build/src/database/drivers/mssql/connect-connection.d.ts +6 -1
- package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/connect-connection.js +6 -2
- package/build/src/database/drivers/mssql/index.d.ts +5 -15
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +57 -56
- package/build/src/database/drivers/mssql/options.d.ts +2 -2
- package/build/src/database/drivers/mssql/options.js +13 -13
- package/build/src/database/drivers/mssql/sql/create-database.js +5 -5
- package/build/src/database/drivers/mssql/structure-sql.d.ts +6 -6
- package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/structure-sql.js +23 -15
- package/build/src/database/drivers/mssql/table.d.ts +4 -5
- package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/table.js +8 -6
- package/build/src/database/drivers/mysql/column.d.ts +5 -4
- package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/column.js +3 -3
- package/build/src/database/drivers/mysql/index.d.ts +8 -8
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +45 -45
- package/build/src/database/drivers/mysql/options.d.ts +2 -2
- package/build/src/database/drivers/mysql/options.js +5 -5
- package/build/src/database/drivers/mysql/query.d.ts +4 -3
- package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/query.js +5 -4
- package/build/src/database/drivers/mysql/structure-sql.d.ts +7 -7
- package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/structure-sql.js +12 -10
- package/build/src/database/drivers/mysql/table.d.ts +4 -5
- package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/table.js +5 -4
- package/build/src/database/drivers/pgsql/column.d.ts +5 -4
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +3 -3
- package/build/src/database/drivers/pgsql/index.d.ts +1 -6
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +31 -31
- package/build/src/database/drivers/pgsql/options.d.ts +3 -3
- package/build/src/database/drivers/pgsql/options.js +4 -4
- package/build/src/database/drivers/pgsql/structure-sql.d.ts +6 -6
- package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/structure-sql.js +21 -14
- package/build/src/database/drivers/pgsql/table.d.ts +4 -5
- package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/table.js +4 -3
- package/build/src/database/drivers/sqlite/base.d.ts +22 -20
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +58 -55
- package/build/src/database/drivers/sqlite/column.d.ts +7 -6
- package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/column.js +5 -5
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +5 -5
- package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/connection-sql-js.js +5 -5
- package/build/src/database/drivers/sqlite/foreign-key.d.ts +4 -4
- package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/foreign-key.js +4 -4
- package/build/src/database/drivers/sqlite/index.js +3 -3
- package/build/src/database/drivers/sqlite/index.web.d.ts +9 -2
- package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.web.js +8 -5
- package/build/src/database/drivers/sqlite/options.d.ts +3 -3
- package/build/src/database/drivers/sqlite/options.js +4 -4
- package/build/src/database/drivers/sqlite/query.d.ts +4 -4
- package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.js +5 -5
- package/build/src/database/drivers/sqlite/query.native.d.ts +9 -1
- package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.native.js +7 -1
- package/build/src/database/drivers/sqlite/query.web.d.ts +4 -4
- package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/query.web.js +5 -5
- package/build/src/database/drivers/sqlite/sql/alter-table.js +5 -5
- package/build/src/database/drivers/sqlite/structure-sql.d.ts +3 -3
- package/build/src/database/drivers/sqlite/structure-sql.js +5 -5
- package/build/src/database/drivers/sqlite/table.d.ts +9 -7
- package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table.js +12 -8
- package/build/src/database/drivers/structure-sql/utils.d.ts +8 -8
- package/build/src/database/drivers/structure-sql/utils.js +9 -9
- package/build/src/database/handler.d.ts +1 -1
- package/build/src/database/handler.js +2 -2
- package/build/src/database/initializer-from-require-context.d.ts +5 -5
- package/build/src/database/initializer-from-require-context.js +6 -6
- package/build/src/database/migration/index.d.ts +98 -62
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +74 -74
- package/build/src/database/migrator/files-finder.d.ts +3 -3
- package/build/src/database/migrator/files-finder.js +4 -4
- package/build/src/database/migrator/types.d.ts +12 -0
- package/build/src/database/migrator/types.d.ts.map +1 -1
- package/build/src/database/migrator/types.js +1 -1
- package/build/src/database/migrator.d.ts +24 -24
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +25 -25
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +8 -8
- package/build/src/database/pool/async-tracked-multi-connection.js +18 -18
- package/build/src/database/pool/base-methods-forward.d.ts +2 -2
- package/build/src/database/pool/base-methods-forward.js +3 -3
- package/build/src/database/pool/base.d.ts +19 -19
- package/build/src/database/pool/base.js +20 -20
- package/build/src/database/pool/single-multi-use.js +6 -6
- package/build/src/database/query/alter-table-base.d.ts +3 -3
- package/build/src/database/query/alter-table-base.js +5 -5
- package/build/src/database/query/base.d.ts +5 -5
- package/build/src/database/query/base.d.ts.map +1 -1
- package/build/src/database/query/base.js +6 -6
- package/build/src/database/query/create-database-base.d.ts +11 -2
- package/build/src/database/query/create-database-base.d.ts.map +1 -1
- package/build/src/database/query/create-database-base.js +6 -6
- package/build/src/database/query/create-index-base.d.ts +25 -7
- package/build/src/database/query/create-index-base.d.ts.map +1 -1
- package/build/src/database/query/create-index-base.js +9 -9
- package/build/src/database/query/create-table-base.d.ts +6 -6
- package/build/src/database/query/create-table-base.js +7 -7
- package/build/src/database/query/delete-base.d.ts +6 -6
- package/build/src/database/query/delete-base.d.ts.map +1 -1
- package/build/src/database/query/delete-base.js +5 -5
- package/build/src/database/query/drop-table-base.d.ts +5 -5
- package/build/src/database/query/drop-table-base.js +7 -7
- package/build/src/database/query/from-base.d.ts +4 -4
- package/build/src/database/query/from-base.js +5 -5
- package/build/src/database/query/from-plain.d.ts +1 -1
- package/build/src/database/query/from-plain.js +2 -2
- package/build/src/database/query/from-table.d.ts +1 -1
- package/build/src/database/query/from-table.js +2 -2
- package/build/src/database/query/index.d.ts +88 -48
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +46 -46
- package/build/src/database/query/insert-base.d.ts +16 -15
- package/build/src/database/query/insert-base.d.ts.map +1 -1
- package/build/src/database/query/insert-base.js +12 -11
- package/build/src/database/query/join-base.d.ts +4 -4
- package/build/src/database/query/join-base.js +5 -5
- package/build/src/database/query/join-object.d.ts +6 -6
- package/build/src/database/query/join-object.js +7 -7
- package/build/src/database/query/join-plain.d.ts +1 -1
- package/build/src/database/query/join-plain.js +2 -2
- package/build/src/database/query/model-class-query.d.ts +28 -28
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +25 -25
- package/build/src/database/query/order-base.d.ts +4 -4
- package/build/src/database/query/order-base.js +5 -5
- package/build/src/database/query/order-plain.d.ts +2 -2
- package/build/src/database/query/order-plain.js +3 -3
- package/build/src/database/query/preloader/belongs-to.d.ts +3 -3
- package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.js +15 -13
- package/build/src/database/query/preloader/has-many.d.ts +3 -3
- package/build/src/database/query/preloader/has-many.js +7 -7
- package/build/src/database/query/preloader/has-one.d.ts +3 -3
- package/build/src/database/query/preloader/has-one.js +7 -7
- package/build/src/database/query/preloader.d.ts +6 -6
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +5 -5
- package/build/src/database/query/select-base.d.ts +3 -3
- package/build/src/database/query/select-base.js +4 -4
- package/build/src/database/query/select-plain.d.ts +1 -1
- package/build/src/database/query/select-plain.js +2 -2
- package/build/src/database/query/select-table-and-column.d.ts +2 -2
- package/build/src/database/query/select-table-and-column.js +3 -3
- 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 +7 -7
- package/build/src/database/query/where-base.d.ts +4 -4
- package/build/src/database/query/where-base.js +5 -5
- package/build/src/database/query/where-hash.d.ts +8 -7
- package/build/src/database/query/where-hash.d.ts.map +1 -1
- package/build/src/database/query/where-hash.js +11 -7
- package/build/src/database/query/where-plain.d.ts +2 -2
- package/build/src/database/query/where-plain.js +3 -3
- package/build/src/database/query-parser/base-query-parser.d.ts +3 -3
- package/build/src/database/query-parser/base-query-parser.js +4 -4
- package/build/src/database/query-parser/from-parser.d.ts +4 -4
- package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
- package/build/src/database/query-parser/from-parser.js +5 -5
- package/build/src/database/query-parser/group-parser.d.ts +4 -4
- package/build/src/database/query-parser/group-parser.js +5 -5
- package/build/src/database/query-parser/joins-parser.d.ts +3 -3
- package/build/src/database/query-parser/joins-parser.js +4 -4
- package/build/src/database/query-parser/limit-parser.d.ts +3 -3
- package/build/src/database/query-parser/limit-parser.js +4 -4
- package/build/src/database/query-parser/options.d.ts +35 -20
- package/build/src/database/query-parser/options.d.ts.map +1 -1
- package/build/src/database/query-parser/options.js +19 -19
- package/build/src/database/query-parser/order-parser.d.ts +3 -3
- package/build/src/database/query-parser/order-parser.js +4 -4
- package/build/src/database/query-parser/select-parser.d.ts +3 -3
- package/build/src/database/query-parser/select-parser.js +4 -4
- package/build/src/database/query-parser/where-parser.d.ts +3 -3
- package/build/src/database/query-parser/where-parser.js +4 -4
- package/build/src/database/record/index.d.ts +200 -184
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +193 -167
- package/build/src/database/record/instance-relationships/base.d.ts +21 -15
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +15 -15
- package/build/src/database/record/instance-relationships/belongs-to.d.ts +3 -3
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
- package/build/src/database/record/instance-relationships/has-many.d.ts +21 -15
- package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-many.js +23 -17
- package/build/src/database/record/instance-relationships/has-one.d.ts +4 -4
- package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-one.js +7 -7
- package/build/src/database/record/relationships/base.d.ts +48 -15
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +16 -16
- package/build/src/database/record/relationships/belongs-to.js +3 -3
- package/build/src/database/record/relationships/has-many.js +3 -3
- package/build/src/database/record/relationships/has-one.js +3 -3
- package/build/src/database/record/user-module.d.ts +3 -3
- package/build/src/database/record/user-module.js +4 -4
- package/build/src/database/record/validators/base.d.ts +9 -9
- package/build/src/database/record/validators/base.d.ts.map +1 -1
- package/build/src/database/record/validators/base.js +8 -8
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.js +6 -5
- package/build/src/database/record/validators/uniqueness.js +7 -7
- package/build/src/database/table-data/index.d.ts +53 -50
- package/build/src/database/table-data/index.d.ts.map +1 -1
- package/build/src/database/table-data/index.js +51 -51
- package/build/src/database/table-data/table-column.d.ts +84 -51
- package/build/src/database/table-data/table-column.d.ts.map +1 -1
- package/build/src/database/table-data/table-column.js +57 -56
- package/build/src/database/table-data/table-foreign-key.d.ts +15 -15
- package/build/src/database/table-data/table-foreign-key.js +16 -16
- package/build/src/database/table-data/table-index.d.ts +13 -7
- package/build/src/database/table-data/table-index.d.ts.map +1 -1
- package/build/src/database/table-data/table-index.js +8 -8
- package/build/src/database/table-data/table-reference.d.ts +2 -2
- package/build/src/database/table-data/table-reference.js +3 -3
- package/build/src/database/use-database.d.ts +3 -3
- package/build/src/database/use-database.js +4 -4
- package/build/src/environment-handlers/base.d.ts +84 -66
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +58 -58
- package/build/src/environment-handlers/browser.d.ts +9 -9
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +18 -18
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -4
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +11 -11
- package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/init.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/init.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/routes.d.ts +5 -5
- package/build/src/environment-handlers/node/cli/commands/routes.js +6 -6
- package/build/src/environment-handlers/node/cli/commands/server.js +3 -3
- package/build/src/environment-handlers/node.d.ts +5 -40
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +46 -46
- package/build/src/error-logger.d.ts +3 -2
- package/build/src/error-logger.d.ts.map +1 -1
- package/build/src/error-logger.js +5 -4
- package/build/src/http-client/header.d.ts +2 -2
- package/build/src/http-client/header.js +3 -3
- package/build/src/http-client/index.d.ts +10 -10
- package/build/src/http-client/index.d.ts.map +1 -1
- package/build/src/http-client/index.js +11 -11
- package/build/src/http-client/request.d.ts +16 -10
- package/build/src/http-client/request.d.ts.map +1 -1
- package/build/src/http-client/request.js +17 -11
- package/build/src/http-client/response.d.ts +7 -7
- package/build/src/http-client/response.d.ts.map +1 -1
- package/build/src/http-client/response.js +8 -8
- package/build/src/http-client/websocket-client.d.ts +28 -28
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-client/websocket-client.js +26 -26
- package/build/src/http-server/client/index.d.ts +13 -13
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +14 -14
- package/build/src/http-server/client/params-to-object.d.ts +15 -15
- 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 -13
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts +7 -7
- package/build/src/http-server/client/request-buffer/form-data-part.js +8 -8
- package/build/src/http-server/client/request-buffer/header.d.ts +2 -2
- package/build/src/http-server/client/request-buffer/header.js +3 -3
- package/build/src/http-server/client/request-buffer/index.d.ts +20 -20
- package/build/src/http-server/client/request-buffer/index.js +22 -22
- package/build/src/http-server/client/request-parser.d.ts +21 -20
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +22 -21
- package/build/src/http-server/client/request-runner.d.ts +6 -6
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +17 -4
- package/build/src/http-server/client/request.d.ts +9 -8
- package/build/src/http-server/client/request.d.ts.map +1 -1
- package/build/src/http-server/client/request.js +9 -8
- package/build/src/http-server/client/response.d.ts +17 -17
- package/build/src/http-server/client/response.js +18 -18
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +6 -6
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +9 -9
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +6 -6
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +9 -9
- package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +7 -7
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +8 -8
- package/build/src/http-server/client/websocket-request.d.ts +17 -13
- package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-request.js +10 -10
- package/build/src/http-server/client/websocket-session.d.ts +26 -26
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +27 -27
- package/build/src/http-server/index.d.ts +19 -19
- package/build/src/http-server/index.d.ts.map +1 -1
- package/build/src/http-server/index.js +20 -20
- package/build/src/http-server/server-client.d.ts +13 -13
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +14 -14
- package/build/src/http-server/websocket-events-host.d.ts +7 -7
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +7 -7
- package/build/src/http-server/websocket-events.d.ts +7 -7
- package/build/src/http-server/websocket-events.d.ts.map +1 -1
- package/build/src/http-server/websocket-events.js +7 -7
- package/build/src/http-server/worker-handler/index.d.ts +22 -22
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +20 -20
- package/build/src/http-server/worker-handler/worker-thread.d.ts +17 -17
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +16 -16
- package/build/src/initializer.d.ts +6 -6
- package/build/src/initializer.js +7 -7
- package/build/src/logger.d.ts +38 -34
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +53 -47
- package/build/src/routes/app-routes.d.ts +2 -2
- package/build/src/routes/app-routes.js +3 -3
- package/build/src/routes/base-route.d.ts +22 -22
- package/build/src/routes/base-route.d.ts.map +1 -1
- package/build/src/routes/base-route.js +21 -21
- package/build/src/routes/basic-route.d.ts +3 -3
- package/build/src/routes/basic-route.js +15 -15
- package/build/src/routes/get-route.d.ts +2 -2
- package/build/src/routes/get-route.js +8 -8
- package/build/src/routes/index.d.ts +2 -2
- package/build/src/routes/index.js +3 -3
- package/build/src/routes/namespace-route.d.ts +2 -2
- package/build/src/routes/namespace-route.js +8 -8
- package/build/src/routes/post-route.d.ts +2 -2
- package/build/src/routes/post-route.js +8 -8
- package/build/src/routes/resolver.d.ts +21 -19
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +50 -25
- package/build/src/routes/resource-route.d.ts +6 -6
- package/build/src/routes/resource-route.js +12 -12
- package/build/src/testing/format-value.d.ts +6 -6
- package/build/src/testing/format-value.d.ts.map +1 -1
- package/build/src/testing/format-value.js +11 -11
- package/build/src/testing/request-client.d.ts +10 -10
- package/build/src/testing/request-client.d.ts.map +1 -1
- package/build/src/testing/request-client.js +11 -11
- package/build/src/testing/test-files-finder.d.ts +17 -16
- package/build/src/testing/test-files-finder.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.js +17 -16
- package/build/src/testing/test-runner.d.ts +78 -39
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +40 -40
- package/build/src/testing/test.d.ts +61 -61
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +77 -56
- package/build/src/utils/backtrace-cleaner.d.ts +4 -4
- package/build/src/utils/backtrace-cleaner.js +5 -5
- package/build/src/utils/ensure-error.d.ts +3 -3
- package/build/src/utils/ensure-error.d.ts.map +1 -1
- package/build/src/utils/ensure-error.js +3 -3
- package/build/src/utils/file-exists.d.ts +2 -2
- package/build/src/utils/file-exists.js +3 -3
- package/build/src/utils/nest-callbacks.d.ts +3 -3
- package/build/src/utils/nest-callbacks.js +4 -4
- package/build/src/utils/rest-args-error.d.ts +2 -2
- package/build/src/utils/rest-args-error.js +3 -3
- package/build/src/utils/singularize-model-name.d.ts +2 -2
- package/build/src/utils/singularize-model-name.js +3 -3
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts +4 -4
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.js +5 -5
- package/build/src/utils/with-tracked-stack.d.ts +5 -4
- package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack.js +12 -18
- package/package.json +1 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import BaseRoute from "./base-route.js";
|
|
3
3
|
export default class VelociousBasicRoute extends BaseRoute {
|
|
4
|
-
/** @param {string} name */
|
|
4
|
+
/** @param {string} name - Route name. */
|
|
5
5
|
get(name) {
|
|
6
6
|
const GetRoute = VelociousBasicRoute.GetRouteType;
|
|
7
7
|
const route = new GetRoute({ name });
|
|
8
8
|
this.routes.push(route);
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* @param {object} args
|
|
12
|
-
* @param {Record<string,
|
|
13
|
-
* @param {string} args.path
|
|
14
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
15
|
-
* @returns {{restPath: string} | undefined}
|
|
11
|
+
* @param {object} args - Options object.
|
|
12
|
+
* @param {Record<string, unknown>} args.params - Parameters object.
|
|
13
|
+
* @param {string} args.path - Path.
|
|
14
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
15
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
16
16
|
*/
|
|
17
17
|
matchWithPath({ params, path, request }) {
|
|
18
18
|
throw new Error(`No 'matchWithPath' implemented on ${this.constructor.name}`);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* @param {string} name
|
|
22
|
-
* @param {function(import("./namespace-route.js").default) : void} callback
|
|
23
|
-
* @returns {void}
|
|
21
|
+
* @param {string} name - Name.
|
|
22
|
+
* @param {function(import("./namespace-route.js").default) : void} callback - Callback function.
|
|
23
|
+
* @returns {void} - No return value.
|
|
24
24
|
*/
|
|
25
25
|
namespace(name, callback) {
|
|
26
26
|
const NamespaceRoute = VelociousBasicRoute.NameSpaceRouteType;
|
|
@@ -33,8 +33,8 @@ export default class VelociousBasicRoute extends BaseRoute {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* @param {string} name
|
|
37
|
-
* @returns {void}
|
|
36
|
+
* @param {string} name - Name.
|
|
37
|
+
* @returns {void} - No return value.
|
|
38
38
|
*/
|
|
39
39
|
post(name) {
|
|
40
40
|
const PostRoute = VelociousBasicRoute.PostRouteType;
|
|
@@ -44,9 +44,9 @@ export default class VelociousBasicRoute extends BaseRoute {
|
|
|
44
44
|
this.routes.push(route);
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* @param {string} name
|
|
48
|
-
* @param {function(import("./resource-route.js").default) : void} [callback]
|
|
49
|
-
* @returns {void}
|
|
47
|
+
* @param {string} name - Name.
|
|
48
|
+
* @param {function(import("./resource-route.js").default) : void} [callback] - Callback function.
|
|
49
|
+
* @returns {void} - No return value.
|
|
50
50
|
*/
|
|
51
51
|
resources(name, callback) {
|
|
52
52
|
const ResourceRoute = VelociousBasicRoute.ResourceRouteType;
|
|
@@ -59,4 +59,4 @@ export default class VelociousBasicRoute extends BaseRoute {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2Jhc2ljLXJvdXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUV2QyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFvQixTQUFRLFNBQVM7SUFDeEQseUNBQXlDO0lBQ3pDLEdBQUcsQ0FBQyxJQUFJO1FBQ04sTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFBO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQy9FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLGtCQUFrQixDQUFBO1FBRTdELElBQUksQ0FBQyxjQUFjO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRXBFLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUV4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV2QixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLElBQUk7UUFDUCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUE7UUFFbkQsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFFMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBRW5DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLGlCQUFpQixDQUFBO1FBRTNELElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBRWxFLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUV2QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV2QixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VSb3V0ZSBmcm9tIFwiLi9iYXNlLXJvdXRlLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzQmFzaWNSb3V0ZSBleHRlbmRzIEJhc2VSb3V0ZSB7XG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFJvdXRlIG5hbWUuICovXG4gIGdldChuYW1lKSB7XG4gICAgY29uc3QgR2V0Um91dGUgPSBWZWxvY2lvdXNCYXNpY1JvdXRlLkdldFJvdXRlVHlwZVxuICAgIGNvbnN0IHJvdXRlID0gbmV3IEdldFJvdXRlKHtuYW1lfSlcblxuICAgIHRoaXMucm91dGVzLnB1c2gocm91dGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gYXJncy5wYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aCAtIFBhdGguXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge3tyZXN0UGF0aDogc3RyaW5nfSB8IHVuZGVmaW5lZH0gLSBSRVNUIHBhdGggbWV0YWRhdGEgZm9yIHRoaXMgcm91dGUuXG4gICAqL1xuICBtYXRjaFdpdGhQYXRoKHtwYXJhbXMsIHBhdGgsIHJlcXVlc3R9KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICdtYXRjaFdpdGhQYXRoJyBpbXBsZW1lbnRlZCBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL25hbWVzcGFjZS1yb3V0ZS5qc1wiKS5kZWZhdWx0KSA6IHZvaWR9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG5hbWVzcGFjZShuYW1lLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IE5hbWVzcGFjZVJvdXRlID0gVmVsb2Npb3VzQmFzaWNSb3V0ZS5OYW1lU3BhY2VSb3V0ZVR5cGVcblxuICAgIGlmICghTmFtZXNwYWNlUm91dGUpIHRocm93IG5ldyBFcnJvcihcIk5vIE5hbWVzcGFjZVJvdXRlIHJlZ2lzdGVyZWRcIilcblxuICAgIGNvbnN0IHJvdXRlID0gbmV3IE5hbWVzcGFjZVJvdXRlKHtuYW1lfSlcblxuICAgIHRoaXMucm91dGVzLnB1c2gocm91dGUpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKHJvdXRlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHBvc3QobmFtZSkge1xuICAgIGNvbnN0IFBvc3RSb3V0ZSA9IFZlbG9jaW91c0Jhc2ljUm91dGUuUG9zdFJvdXRlVHlwZVxuXG4gICAgaWYgKCFQb3N0Um91dGUpIHRocm93IG5ldyBFcnJvcihcIk5vIFBvc3RSb3V0ZSByZWdpc3RlcmVkXCIpXG5cbiAgICBjb25zdCByb3V0ZSA9IG5ldyBQb3N0Um91dGUoe25hbWV9KVxuXG4gICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW1wb3J0KFwiLi9yZXNvdXJjZS1yb3V0ZS5qc1wiKS5kZWZhdWx0KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcmVzb3VyY2VzKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgUmVzb3VyY2VSb3V0ZSA9IFZlbG9jaW91c0Jhc2ljUm91dGUuUmVzb3VyY2VSb3V0ZVR5cGVcblxuICAgIGlmICghUmVzb3VyY2VSb3V0ZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gUmVzb3VyY2VSb3V0ZSByZWdpc3RlcmVkXCIpXG5cbiAgICBjb25zdCByb3V0ZSA9IG5ldyBSZXNvdXJjZVJvdXRlKHtuYW1lfSlcblxuICAgIHRoaXMucm91dGVzLnB1c2gocm91dGUpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKHJvdXRlKVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default VelociousRouteGetRoute;
|
|
2
2
|
declare class VelociousRouteGetRoute extends BaseRoute {
|
|
3
3
|
/**
|
|
4
|
-
* @param {object} args
|
|
5
|
-
* @param {string} args.name
|
|
4
|
+
* @param {object} args - Options object.
|
|
5
|
+
* @param {string} args.name - Name.
|
|
6
6
|
*/
|
|
7
7
|
constructor({ name, ...restArgs }: {
|
|
8
8
|
name: string;
|
|
@@ -4,8 +4,8 @@ import BaseRoute from "./base-route.js";
|
|
|
4
4
|
import restArgsError from "../utils/rest-args-error.js";
|
|
5
5
|
class VelociousRouteGetRoute extends BaseRoute {
|
|
6
6
|
/**
|
|
7
|
-
* @param {object} args
|
|
8
|
-
* @param {string} args.name
|
|
7
|
+
* @param {object} args - Options object.
|
|
8
|
+
* @param {string} args.name - Name.
|
|
9
9
|
*/
|
|
10
10
|
constructor({ name, ...restArgs }) {
|
|
11
11
|
super();
|
|
@@ -19,11 +19,11 @@ class VelociousRouteGetRoute extends BaseRoute {
|
|
|
19
19
|
];
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* @param {object} args
|
|
23
|
-
* @param {Record<string,
|
|
24
|
-
* @param {string} args.path
|
|
25
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
26
|
-
* @returns {{restPath: string} | undefined}
|
|
22
|
+
* @param {object} args - Options object.
|
|
23
|
+
* @param {Record<string, unknown>} args.params - Parameters object.
|
|
24
|
+
* @param {string} args.path - Path.
|
|
25
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
26
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
27
27
|
*/
|
|
28
28
|
matchWithPath({ params, path, request }) {
|
|
29
29
|
const match = path.match(this.regExp);
|
|
@@ -39,4 +39,4 @@ class VelociousRouteGetRoute extends BaseRoute {
|
|
|
39
39
|
}
|
|
40
40
|
BaseRoute.registerRouteGetType(VelociousRouteGetRoute);
|
|
41
41
|
export default VelociousRouteGetRoute;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlcy9nZXQtcm91dGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUE7QUFFckQsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFDdkMsT0FBTyxhQUFhLE1BQU0sNkJBQTZCLENBQUE7QUFFdkQsTUFBTSxzQkFBdUIsU0FBUSxTQUFTO0lBQzVDOzs7T0FHRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0IsS0FBSyxFQUFFLENBQUE7UUFDUCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU87WUFDTCxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUM7U0FDcEQsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVyQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFBLENBQUMscUNBQXFDO1lBRTVGLCtFQUErRTtZQUMvRSxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU07WUFFakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBRXpCLE9BQU8sRUFBQyxRQUFRLEVBQUMsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsU0FBUyxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLENBQUE7QUFFdEQsZUFBZSxzQkFBc0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gXCJlc2NhcGUtc3RyaW5nLXJlZ2V4cFwiXG5cbmltcG9ydCBCYXNlUm91dGUgZnJvbSBcIi4vYmFzZS1yb3V0ZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuY2xhc3MgVmVsb2Npb3VzUm91dGVHZXRSb3V0ZSBleHRlbmRzIEJhc2VSb3V0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lIC0gTmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtuYW1lLCAuLi5yZXN0QXJnc30pIHtcbiAgICBzdXBlcigpXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5yZWdFeHAgPSBuZXcgUmVnRXhwKGBeKCR7ZXNjYXBlU3RyaW5nUmVnZXhwKG5hbWUpfSkoLiopJGApXG4gIH1cblxuICBnZXRIdW1hblBhdGhzKCkge1xuICAgIHJldHVybiBbXG4gICAgICB7bWV0aG9kOiBcIkdFVFwiLCBhY3Rpb246IHRoaXMubmFtZSwgcGF0aDogdGhpcy5uYW1lfVxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBhcmdzLnBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wYXRoIC0gUGF0aC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7e3Jlc3RQYXRoOiBzdHJpbmd9IHwgdW5kZWZpbmVkfSAtIFJFU1QgcGF0aCBtZXRhZGF0YSBmb3IgdGhpcyByb3V0ZS5cbiAgICovXG4gIG1hdGNoV2l0aFBhdGgoe3BhcmFtcywgcGF0aCwgcmVxdWVzdH0pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaCh0aGlzLnJlZ0V4cClcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgW19iZWdpbm5pZ1NsYXNoLCBfbWF0Y2hlZE5hbWUsIHJlc3RQYXRoXSA9IG1hdGNoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAgICAgLy8gUHJldmVudCBwYXJ0aWFsIHByZWZpeCBtYXRjaGVzIChlLmcuLCBcInBhcmFtc1wiIG1hdGNoaW5nIFwicGFyYW1zLXdpdGgtcXVlcnlcIilcbiAgICAgIGlmIChyZXN0UGF0aCAmJiAhcmVzdFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHJldHVyblxuXG4gICAgICBwYXJhbXMuYWN0aW9uID0gdGhpcy5uYW1lXG5cbiAgICAgIHJldHVybiB7cmVzdFBhdGh9XG4gICAgfVxuICB9XG59XG5cbkJhc2VSb3V0ZS5yZWdpc3RlclJvdXRlR2V0VHlwZShWZWxvY2lvdXNSb3V0ZUdldFJvdXRlKVxuXG5leHBvcnQgZGVmYXVsdCBWZWxvY2lvdXNSb3V0ZUdldFJvdXRlXG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default class VelociousRoutes {
|
|
2
2
|
rootRoute: RootRoute;
|
|
3
3
|
/**
|
|
4
|
-
* @param {function(import("./root-route.js").default) : void} callback
|
|
5
|
-
* @returns {void}
|
|
4
|
+
* @param {function(import("./root-route.js").default) : void} callback - Callback function.
|
|
5
|
+
* @returns {void} - No return value.
|
|
6
6
|
*/
|
|
7
7
|
draw(callback: (arg0: import("./root-route.js").default) => void): void;
|
|
8
8
|
}
|
|
@@ -7,11 +7,11 @@ import ResourceRoute from "./resource-route.js"; // eslint-disable-line no-unuse
|
|
|
7
7
|
export default class VelociousRoutes {
|
|
8
8
|
rootRoute = new RootRoute();
|
|
9
9
|
/**
|
|
10
|
-
* @param {function(import("./root-route.js").default) : void} callback
|
|
11
|
-
* @returns {void}
|
|
10
|
+
* @param {function(import("./root-route.js").default) : void} callback - Callback function.
|
|
11
|
+
* @returns {void} - No return value.
|
|
12
12
|
*/
|
|
13
13
|
draw(callback) {
|
|
14
14
|
callback(this.rootRoute);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQSxDQUFDLHFDQUFxQztBQUMzRSxPQUFPLGNBQWMsTUFBTSxzQkFBc0IsQ0FBQSxDQUFDLHFDQUFxQztBQUN2RixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQSxDQUFDLHFDQUFxQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQSxDQUFDLHFDQUFxQztBQUVyRixNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWU7SUFDbEMsU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7SUFFM0I7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLFFBQVE7UUFDWCxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgR2V0Um91dGUgZnJvbSBcIi4vZ2V0LXJvdXRlLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuaW1wb3J0IE5hbWVTcGFjZVJvdXRlIGZyb20gXCIuL25hbWVzcGFjZS1yb3V0ZS5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbmltcG9ydCBQb3N0Um91dGUgZnJvbSBcIi4vcG9zdC1yb3V0ZS5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbmltcG9ydCBSb290Um91dGUgZnJvbSBcIi4vcm9vdC1yb3V0ZS5qc1wiXG5pbXBvcnQgUmVzb3VyY2VSb3V0ZSBmcm9tIFwiLi9yZXNvdXJjZS1yb3V0ZS5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzUm91dGVzIHtcbiAgcm9vdFJvdXRlID0gbmV3IFJvb3RSb3V0ZSgpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW1wb3J0KFwiLi9yb290LXJvdXRlLmpzXCIpLmRlZmF1bHQpIDogdm9pZH0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZHJhdyhjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMucm9vdFJvdXRlKVxuICB9XG59XG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default VelociousRouteNamespaceRoute;
|
|
2
2
|
declare class VelociousRouteNamespaceRoute extends BasicRoute {
|
|
3
3
|
/**
|
|
4
|
-
* @param {object} args
|
|
5
|
-
* @param {string} args.name
|
|
4
|
+
* @param {object} args - Options object.
|
|
5
|
+
* @param {string} args.name - Name.
|
|
6
6
|
*/
|
|
7
7
|
constructor({ name, ...restArgs }: {
|
|
8
8
|
name: string;
|
|
@@ -5,8 +5,8 @@ import BasicRoute from "./basic-route.js";
|
|
|
5
5
|
import escapeStringRegexp from "escape-string-regexp";
|
|
6
6
|
class VelociousRouteNamespaceRoute extends BasicRoute {
|
|
7
7
|
/**
|
|
8
|
-
* @param {object} args
|
|
9
|
-
* @param {string} args.name
|
|
8
|
+
* @param {object} args - Options object.
|
|
9
|
+
* @param {string} args.name - Name.
|
|
10
10
|
*/
|
|
11
11
|
constructor({ name, ...restArgs }) {
|
|
12
12
|
super();
|
|
@@ -20,11 +20,11 @@ class VelociousRouteNamespaceRoute extends BasicRoute {
|
|
|
20
20
|
];
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* @param {object} args
|
|
24
|
-
* @param {Record<string,
|
|
25
|
-
* @param {string} args.path
|
|
26
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
27
|
-
* @returns {{restPath: string} | undefined}
|
|
23
|
+
* @param {object} args - Options object.
|
|
24
|
+
* @param {Record<string, unknown>} args.params - Parameters object.
|
|
25
|
+
* @param {string} args.path - Path.
|
|
26
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
27
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
28
28
|
*/
|
|
29
29
|
matchWithPath({ params, path, request }) {
|
|
30
30
|
const match = path.match(this.regExp);
|
|
@@ -37,4 +37,4 @@ class VelociousRouteNamespaceRoute extends BasicRoute {
|
|
|
37
37
|
}
|
|
38
38
|
BaseRoute.registerRouteNamespaceType(VelociousRouteNamespaceRoute);
|
|
39
39
|
export default VelociousRouteNamespaceRoute;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlLXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlcy9uYW1lc3BhY2Utcm91dGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBQ3ZELE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sVUFBVSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUE7QUFFckQsTUFBTSw0QkFBNkIsU0FBUSxVQUFVO0lBQ25EOzs7T0FHRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0IsS0FBSyxFQUFFLENBQUE7UUFDUCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU87WUFDTCxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQztTQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGFBQWEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXJDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxxQ0FBcUM7WUFFNUYsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBRTdCLE9BQU8sRUFBQyxRQUFRLEVBQUMsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsU0FBUyxDQUFDLDBCQUEwQixDQUFDLDRCQUE0QixDQUFDLENBQUE7QUFFbEUsZUFBZSw0QkFBNEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBCYXNlUm91dGUgZnJvbSBcIi4vYmFzZS1yb3V0ZS5qc1wiXG5pbXBvcnQgQmFzaWNSb3V0ZSBmcm9tIFwiLi9iYXNpYy1yb3V0ZS5qc1wiXG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gXCJlc2NhcGUtc3RyaW5nLXJlZ2V4cFwiXG5cbmNsYXNzIFZlbG9jaW91c1JvdXRlTmFtZXNwYWNlUm91dGUgZXh0ZW5kcyBCYXNpY1JvdXRlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm5hbWUgLSBOYW1lLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe25hbWUsIC4uLnJlc3RBcmdzfSkge1xuICAgIHN1cGVyKClcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLnJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4oJHtlc2NhcGVTdHJpbmdSZWdleHAobmFtZSl9KSguKikkYClcbiAgfVxuXG4gIGdldEh1bWFuUGF0aHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHttZXRob2Q6IFwiR0VUXCIsIGFjdGlvbjogbnVsbCwgcGF0aDogdGhpcy5uYW1lfVxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBhcmdzLnBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wYXRoIC0gUGF0aC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7e3Jlc3RQYXRoOiBzdHJpbmd9IHwgdW5kZWZpbmVkfSAtIFJFU1QgcGF0aCBtZXRhZGF0YSBmb3IgdGhpcyByb3V0ZS5cbiAgICovXG4gIG1hdGNoV2l0aFBhdGgoe3BhcmFtcywgcGF0aCwgcmVxdWVzdH0pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaCh0aGlzLnJlZ0V4cClcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgW19iZWdpbm5pZ1NsYXNoLCBfbWF0Y2hlZE5hbWUsIHJlc3RQYXRoXSA9IG1hdGNoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAgICAgcGFyYW1zLmNvbnRyb2xsZXIgPSB0aGlzLm5hbWVcblxuICAgICAgcmV0dXJuIHtyZXN0UGF0aH1cbiAgICB9XG4gIH1cbn1cblxuQmFzZVJvdXRlLnJlZ2lzdGVyUm91dGVOYW1lc3BhY2VUeXBlKFZlbG9jaW91c1JvdXRlTmFtZXNwYWNlUm91dGUpXG5cbmV4cG9ydCBkZWZhdWx0IFZlbG9jaW91c1JvdXRlTmFtZXNwYWNlUm91dGVcbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default VelociousRoutePostRoute;
|
|
2
2
|
declare class VelociousRoutePostRoute extends BaseRoute {
|
|
3
3
|
/**
|
|
4
|
-
* @param {object} args
|
|
5
|
-
* @param {string} args.name
|
|
4
|
+
* @param {object} args - Options object.
|
|
5
|
+
* @param {string} args.name - Name.
|
|
6
6
|
*/
|
|
7
7
|
constructor({ name, ...restArgs }: {
|
|
8
8
|
name: string;
|
|
@@ -4,8 +4,8 @@ import escapeStringRegexp from "escape-string-regexp";
|
|
|
4
4
|
import restArgsError from "../utils/rest-args-error.js";
|
|
5
5
|
class VelociousRoutePostRoute extends BaseRoute {
|
|
6
6
|
/**
|
|
7
|
-
* @param {object} args
|
|
8
|
-
* @param {string} args.name
|
|
7
|
+
* @param {object} args - Options object.
|
|
8
|
+
* @param {string} args.name - Name.
|
|
9
9
|
*/
|
|
10
10
|
constructor({ name, ...restArgs }) {
|
|
11
11
|
super();
|
|
@@ -20,11 +20,11 @@ class VelociousRoutePostRoute extends BaseRoute {
|
|
|
20
20
|
];
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* @param {object} args
|
|
24
|
-
* @param {Record<string,
|
|
25
|
-
* @param {string} args.path
|
|
26
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
27
|
-
* @returns {{restPath: string} | undefined}
|
|
23
|
+
* @param {object} args - Options object.
|
|
24
|
+
* @param {Record<string, unknown>} args.params - Parameters object.
|
|
25
|
+
* @param {string} args.path - Path.
|
|
26
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
27
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
28
28
|
*/
|
|
29
29
|
matchWithPath({ params, path, request }) {
|
|
30
30
|
const match = path.match(this.regExp);
|
|
@@ -37,4 +37,4 @@ class VelociousRoutePostRoute extends BaseRoute {
|
|
|
37
37
|
}
|
|
38
38
|
BaseRoute.registerRoutePostType(VelociousRoutePostRoute);
|
|
39
39
|
export default VelociousRoutePostRoute;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0ZXMvcG9zdC1yb3V0ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFDdkMsT0FBTyxrQkFBa0IsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRCxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RCxNQUFNLHVCQUF3QixTQUFRLFNBQVM7SUFDN0M7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQztRQUM3QixLQUFLLEVBQUUsQ0FBQTtRQUNQLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxDQUFDO2dCQUNOLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQUM7U0FDcEQsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVyQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFBLENBQUMscUNBQXFDO1lBRTVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUV6QixPQUFPLEVBQUMsUUFBUSxFQUFDLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO0FBRXhELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VSb3V0ZSBmcm9tIFwiLi9iYXNlLXJvdXRlLmpzXCJcbmltcG9ydCBlc2NhcGVTdHJpbmdSZWdleHAgZnJvbSBcImVzY2FwZS1zdHJpbmctcmVnZXhwXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG5jbGFzcyBWZWxvY2lvdXNSb3V0ZVBvc3RSb3V0ZSBleHRlbmRzIEJhc2VSb3V0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lIC0gTmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtuYW1lLCAuLi5yZXN0QXJnc30pIHtcbiAgICBzdXBlcigpXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5yZWdFeHAgPSBuZXcgUmVnRXhwKGBeKCR7ZXNjYXBlU3RyaW5nUmVnZXhwKG5hbWUpfSkoLiopJGApXG4gIH1cblxuICBnZXRIdW1hblBhdGhzKCkge1xuICAgIHJldHVybiBbe1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIiwgYWN0aW9uOiB0aGlzLm5hbWUsIHBhdGg6IHRoaXMubmFtZX1cbiAgICBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gYXJncy5wYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aCAtIFBhdGguXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge3tyZXN0UGF0aDogc3RyaW5nfSB8IHVuZGVmaW5lZH0gLSBSRVNUIHBhdGggbWV0YWRhdGEgZm9yIHRoaXMgcm91dGUuXG4gICAqL1xuICBtYXRjaFdpdGhQYXRoKHtwYXJhbXMsIHBhdGgsIHJlcXVlc3R9KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBtYXRjaCA9IHBhdGgubWF0Y2godGhpcy5yZWdFeHApXG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IFtfYmVnaW5uaWdTbGFzaCwgX21hdGNoZWROYW1lLCByZXN0UGF0aF0gPSBtYXRjaCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgICAgIHBhcmFtcy5hY3Rpb24gPSB0aGlzLm5hbWVcblxuICAgICAgcmV0dXJuIHtyZXN0UGF0aH1cbiAgICB9XG4gIH1cbn1cblxuQmFzZVJvdXRlLnJlZ2lzdGVyUm91dGVQb3N0VHlwZShWZWxvY2lvdXNSb3V0ZVBvc3RSb3V0ZSlcblxuZXhwb3J0IGRlZmF1bHQgVmVsb2Npb3VzUm91dGVQb3N0Um91dGVcbiJdfQ==
|
|
@@ -1,50 +1,52 @@
|
|
|
1
1
|
export default class VelociousRoutesResolver {
|
|
2
2
|
/**
|
|
3
|
-
* @param {object} args
|
|
4
|
-
* @param {import("../configuration.js").default} args.configuration
|
|
5
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
6
|
-
* @param {import("../http-server/client/response.js").default} args.response
|
|
3
|
+
* @param {object} args - Options object.
|
|
4
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
5
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
6
|
+
* @param {import("../http-server/client/response.js").default} args.response - Response object.
|
|
7
7
|
*/
|
|
8
8
|
constructor({ configuration, request, response }: {
|
|
9
9
|
configuration: import("../configuration.js").default;
|
|
10
|
-
request: import("../http-server/client/request.js").default;
|
|
10
|
+
request: import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default;
|
|
11
11
|
response: import("../http-server/client/response.js").default;
|
|
12
12
|
});
|
|
13
13
|
/** @type {Logger | undefined} */
|
|
14
14
|
logger: Logger | undefined;
|
|
15
15
|
configuration: import("../configuration.js").default;
|
|
16
|
-
params:
|
|
17
|
-
|
|
16
|
+
params: {
|
|
17
|
+
[x: string]: unknown;
|
|
18
|
+
};
|
|
19
|
+
request: import("../http-server/client/websocket-request.js").default | import("../http-server/client/request.js").default;
|
|
18
20
|
response: import("../http-server/client/response.js").default;
|
|
19
21
|
resolve(): Promise<void>;
|
|
20
22
|
/**
|
|
21
|
-
* @param {import("./base-route.js").default} route
|
|
22
|
-
* @param {string} path
|
|
23
|
-
* @returns {{restPath: string} | undefined}
|
|
23
|
+
* @param {import("./base-route.js").default} route - Route.
|
|
24
|
+
* @param {string} path - Path.
|
|
25
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
24
26
|
*/
|
|
25
27
|
matchPathWithRoutes(route: import("./base-route.js").default, path: string): {
|
|
26
28
|
restPath: string;
|
|
27
29
|
} | undefined;
|
|
28
30
|
/**
|
|
29
|
-
* @param {object} args
|
|
30
|
-
* @param {string} args.action
|
|
31
|
-
* @param {typeof import("../controller.js").default} args.controllerClass
|
|
32
|
-
* @returns {Promise<void>}
|
|
31
|
+
* @param {object} args - Options object.
|
|
32
|
+
* @param {string} args.action - Action.
|
|
33
|
+
* @param {typeof import("../controller.js").default} args.controllerClass - Controller class.
|
|
34
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
33
35
|
*/
|
|
34
36
|
_logActionStart({ action, controllerClass }: {
|
|
35
37
|
action: string;
|
|
36
38
|
controllerClass: typeof import("../controller.js").default;
|
|
37
39
|
}): Promise<void>;
|
|
38
40
|
/**
|
|
39
|
-
* @param {Date} date
|
|
40
|
-
* @returns {string}
|
|
41
|
+
* @param {Date} date - Date value.
|
|
42
|
+
* @returns {string} - The timestamp.
|
|
41
43
|
*/
|
|
42
44
|
_formatTimestamp(date: Date): string;
|
|
43
45
|
/**
|
|
44
|
-
* @param {
|
|
45
|
-
* @returns {
|
|
46
|
+
* @param {unknown} value - Value to use.
|
|
47
|
+
* @returns {unknown} - The sanitize params for logging.
|
|
46
48
|
*/
|
|
47
|
-
_sanitizeParamsForLogging(value:
|
|
49
|
+
_sanitizeParamsForLogging(value: unknown): unknown;
|
|
48
50
|
}
|
|
49
51
|
import { Logger } from "../logger.js";
|
|
50
52
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/routes/resolver.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/routes/resolver.js"],"names":[],"mappings":"AAUA;IAIE;;;;;OAKG;IACH,kDAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACmF,OAAO,EAA/H,OAAO,kCAAkC,EAAE,OAAO,GAAG,OAAO,4CAA4C,EAAE,OAAO;QACvD,QAAQ,EAAlE,OAAO,mCAAmC,EAAE,OAAO;KAC7D,EAUA;IAlBD,iCAAiC;IACjC,QADW,MAAM,GAAG,SAAS,CACvB;IAaJ,qDAAkC;IAClC;;MAA8B;IAC9B,2HAAsB;IACtB,8DAAwB;IAG1B,yBA+EC;IAED;;;;OAIG;IACH,2BAJW,OAAO,iBAAiB,EAAE,OAAO,QACjC,MAAM,GACJ;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAsB1C;IAED;;;;;OAKG;IACH,6CAJG;QAAqB,MAAM,EAAnB,MAAM;QAC0C,eAAe,EAA/D,cAAc,kBAAkB,EAAE,OAAO;KACjD,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;OAGG;IACH,uBAHW,IAAI,GACF,MAAM,CAqBlB;IAED;;;OAGG;IACH,iCAHW,OAAO,GACL,OAAO,CA2BnB;CACF;uBAhNoB,cAAc"}
|
|
@@ -5,14 +5,15 @@ import fs from "fs/promises";
|
|
|
5
5
|
import * as inflection from "inflection";
|
|
6
6
|
import { Logger } from "../logger.js";
|
|
7
7
|
import UploadedFile from "../http-server/client/uploaded-file/uploaded-file.js";
|
|
8
|
+
import ensureError from "../utils/ensure-error.js";
|
|
8
9
|
export default class VelociousRoutesResolver {
|
|
9
10
|
/** @type {Logger | undefined} */
|
|
10
11
|
logger;
|
|
11
12
|
/**
|
|
12
|
-
* @param {object} args
|
|
13
|
-
* @param {import("../configuration.js").default} args.configuration
|
|
14
|
-
* @param {import("../http-server/client/request.js").default} args.request
|
|
15
|
-
* @param {import("../http-server/client/response.js").default} args.response
|
|
13
|
+
* @param {object} args - Options object.
|
|
14
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration instance.
|
|
15
|
+
* @param {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default} args.request - Request object.
|
|
16
|
+
* @param {import("../http-server/client/response.js").default} args.response - Response object.
|
|
16
17
|
*/
|
|
17
18
|
constructor({ configuration, request, response }) {
|
|
18
19
|
if (!configuration)
|
|
@@ -33,8 +34,11 @@ export default class VelociousRoutesResolver {
|
|
|
33
34
|
const currentPath = rawPath.split("?")[0];
|
|
34
35
|
let viewPath;
|
|
35
36
|
const matchResult = this.matchPathWithRoutes(currentRoute, currentPath);
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const actionParam = this.params.action;
|
|
38
|
+
const controllerParam = this.params.controller;
|
|
39
|
+
const actionValue = typeof actionParam == "string" ? actionParam : (Array.isArray(actionParam) ? actionParam[0] : undefined);
|
|
40
|
+
let action = typeof actionValue == "string" ? inflection.camelize(actionValue.replaceAll("-", "_"), true) : undefined;
|
|
41
|
+
let controller = typeof controllerParam == "string" ? controllerParam : (Array.isArray(controllerParam) ? controllerParam[0] : undefined);
|
|
38
42
|
if (!matchResult) {
|
|
39
43
|
const __filename = fileURLToPath(import.meta.url);
|
|
40
44
|
const __dirname = dirname(__filename);
|
|
@@ -71,15 +75,33 @@ export default class VelociousRoutesResolver {
|
|
|
71
75
|
}
|
|
72
76
|
this.logger ||= new Logger(controllerClass.name, { configuration: this.configuration });
|
|
73
77
|
await this._logActionStart({ action, controllerClass });
|
|
74
|
-
|
|
75
|
-
await
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
try {
|
|
79
|
+
await this.configuration.ensureConnections(async () => {
|
|
80
|
+
await controllerInstance._runBeforeCallbacks();
|
|
81
|
+
await controllerInstance[action]();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const ensuredError = ensureError(error);
|
|
86
|
+
const errorContext = {
|
|
87
|
+
action,
|
|
88
|
+
controller,
|
|
89
|
+
httpMethod: this.request.httpMethod(),
|
|
90
|
+
path: this.request.path(),
|
|
91
|
+
stage: "controller-action"
|
|
92
|
+
};
|
|
93
|
+
const errorWithContext = /** @type {{velociousContext?: object}} */ (ensuredError);
|
|
94
|
+
errorWithContext.velociousContext = {
|
|
95
|
+
...(errorWithContext.velociousContext || {}),
|
|
96
|
+
controllerAction: errorContext
|
|
97
|
+
};
|
|
98
|
+
throw ensuredError;
|
|
99
|
+
}
|
|
78
100
|
}
|
|
79
101
|
/**
|
|
80
|
-
* @param {import("./base-route.js").default} route
|
|
81
|
-
* @param {string} path
|
|
82
|
-
* @returns {{restPath: string} | undefined}
|
|
102
|
+
* @param {import("./base-route.js").default} route - Route.
|
|
103
|
+
* @param {string} path - Path.
|
|
104
|
+
* @returns {{restPath: string} | undefined} - REST path metadata for this route.
|
|
83
105
|
*/
|
|
84
106
|
matchPathWithRoutes(route, path) {
|
|
85
107
|
const pathWithoutSlash = path.replace(/^\//, "").split("?")[0];
|
|
@@ -99,16 +121,16 @@ export default class VelociousRoutesResolver {
|
|
|
99
121
|
}
|
|
100
122
|
}
|
|
101
123
|
/**
|
|
102
|
-
* @param {object} args
|
|
103
|
-
* @param {string} args.action
|
|
104
|
-
* @param {typeof import("../controller.js").default} args.controllerClass
|
|
105
|
-
* @returns {Promise<void>}
|
|
124
|
+
* @param {object} args - Options object.
|
|
125
|
+
* @param {string} args.action - Action.
|
|
126
|
+
* @param {typeof import("../controller.js").default} args.controllerClass - Controller class.
|
|
127
|
+
* @returns {Promise<void>} - Resolves when complete.
|
|
106
128
|
*/
|
|
107
129
|
async _logActionStart({ action, controllerClass }) {
|
|
108
130
|
const request = this.request;
|
|
109
131
|
const timestamp = this._formatTimestamp(new Date());
|
|
110
132
|
const remoteAddress = request.remoteAddress?.() || request.header("x-forwarded-for") || "unknown";
|
|
111
|
-
const loggedParams = this._sanitizeParamsForLogging(this.params);
|
|
133
|
+
const loggedParams = /** @type {Record<string, unknown>} */ (this._sanitizeParamsForLogging(this.params));
|
|
112
134
|
delete loggedParams.action;
|
|
113
135
|
delete loggedParams.controller;
|
|
114
136
|
await this.logger.info(() => `Started ${request.httpMethod()} "${request.path()}" for ${remoteAddress} at ${timestamp}`);
|
|
@@ -116,11 +138,14 @@ export default class VelociousRoutesResolver {
|
|
|
116
138
|
await this.logger.info(() => [` Parameters:`, loggedParams]);
|
|
117
139
|
}
|
|
118
140
|
/**
|
|
119
|
-
* @param {Date} date
|
|
120
|
-
* @returns {string}
|
|
141
|
+
* @param {Date} date - Date value.
|
|
142
|
+
* @returns {string} - The timestamp.
|
|
121
143
|
*/
|
|
122
144
|
_formatTimestamp(date) {
|
|
123
|
-
/**
|
|
145
|
+
/**
|
|
146
|
+
* @param {number} num - Num.
|
|
147
|
+
* @returns {string} - The pad.
|
|
148
|
+
*/
|
|
124
149
|
const pad = (num) => String(num).padStart(2, "0");
|
|
125
150
|
const year = date.getFullYear();
|
|
126
151
|
const month = pad(date.getMonth() + 1);
|
|
@@ -136,8 +161,8 @@ export default class VelociousRoutesResolver {
|
|
|
136
161
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds} ${offsetSign}${offsetHours}${offsetRemainingMinutes}`;
|
|
137
162
|
}
|
|
138
163
|
/**
|
|
139
|
-
* @param {
|
|
140
|
-
* @returns {
|
|
164
|
+
* @param {unknown} value - Value to use.
|
|
165
|
+
* @returns {unknown} - The sanitize params for logging.
|
|
141
166
|
*/
|
|
142
167
|
_sanitizeParamsForLogging(value) {
|
|
143
168
|
if (value instanceof UploadedFile) {
|
|
@@ -151,7 +176,7 @@ export default class VelociousRoutesResolver {
|
|
|
151
176
|
return value.map((item) => this._sanitizeParamsForLogging(item));
|
|
152
177
|
}
|
|
153
178
|
if (value && typeof value === "object") {
|
|
154
|
-
/** @type {Record<string,
|
|
179
|
+
/** @type {Record<string, unknown>} */
|
|
155
180
|
const result = {};
|
|
156
181
|
for (const key of Object.keys(value)) {
|
|
157
182
|
result[key] = this._sanitizeParamsForLogging(value[key]);
|
|
@@ -161,4 +186,4 @@ export default class VelociousRoutesResolver {
|
|
|
161
186
|
return value;
|
|
162
187
|
}
|
|
163
188
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc29sdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxZQUFZLE1BQU0sc0RBQXNELENBQUE7QUFFL0UsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUMsaUNBQWlDO0lBQ2pDLE1BQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksY0FBYyxDQUFBO1FBQ2xCLElBQUksWUFBWSxHQUFHLElBQUksQ0FB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O0lBQ3RILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQ2xDLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDakMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO2FBQ25CLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdkMsa0NBQWtDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtZQUVqQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUMxRCxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaXJuYW1lfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gXCJ1cmxcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBVcGxvYWRlZEZpbGUgZnJvbSBcIi4uL2h0dHAtc2VydmVyL2NsaWVudC91cGxvYWRlZC1maWxlL3VwbG9hZGVkLWZpbGUuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNSb3V0ZXNSZXNvbHZlciB7XG4gIC8qKiBAdHlwZSB7TG9nZ2VyIHwgdW5kZWZpbmVkfSAqL1xuICBsb2dnZXJcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlc3BvbnNlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgcmVxdWVzdCwgcmVzcG9uc2V9KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFyZXF1ZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXF1ZXN0IGdpdmVuXCIpXG4gICAgaWYgKCFyZXNwb25zZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVzcG9uc2UgZ2l2ZW5cIilcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBhcmFtcyA9IHJlcXVlc3QucGFyYW1zKClcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cblxuICBhc3luYyByZXNvbHZlKCkge1xuICAgIGxldCBjb250cm9sbGVyUGF0aFxuICAgIGxldCBjdXJyZW50Um91dGUgPSB0aGlzLmNvbmZpZ3VyYXRpb24ucm91dGVzLnJvb3RSb3V0ZVxuICAgIGNvbnN0IHJhd1BhdGggPSB0aGlzLnJlcXVlc3QucGF0aCgpXG4gICAgY29uc3QgY3VycmVudFBhdGggPSByYXdQYXRoLnNwbGl0KFwiP1wiKVswXVxuICAgIGxldCB2aWV3UGF0aFxuXG4gICAgY29uc3QgbWF0Y2hSZXN1bHQgPSB0aGlzLm1hdGNoUGF0aFdpdGhSb3V0ZXMoY3VycmVudFJvdXRlLCBjdXJyZW50UGF0aClcbiAgICBsZXQgYWN0aW9uID0gdGhpcy5wYXJhbXMuYWN0aW9uID8gaW5mbGVjdGlvbi5jYW1lbGl6ZSh0aGlzLnBhcmFtcy5hY3Rpb24ucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpLCB0cnVlKSA6IHVuZGVmaW5lZFxuICAgIGxldCBjb250cm9sbGVyID0gdGhpcy5wYXJhbXMuY29udHJvbGxlclxuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuICAgICAgY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgICAgY29uc3QgcmVxdWVzdGVkUGF0aCA9IGN1cnJlbnRQYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKSB8fCBcIl9yb290XCJcbiAgICAgIGNvbnN0IGF0dGVtcHRlZENvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7cmVxdWVzdGVkUGF0aH0vY29udHJvbGxlci5qc2BcblxuICAgICAgYXdhaXQgKHRoaXMubG9nZ2VyIHx8IG5ldyBMb2dnZXIoXCJSb3V0ZXNSZXNvbHZlclwiLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSkpLndhcm4oYE5vIHJvdXRlIG1hdGNoZWQgZm9yICR7cmF3UGF0aH0uIFRyaWVkIGNvbnRyb2xsZXIgYXQgJHthdHRlbXB0ZWRDb250cm9sbGVyUGF0aH1gKVxuXG4gICAgICBjb250cm9sbGVyID0gXCJlcnJvcnNcIlxuICAgICAgY29udHJvbGxlclBhdGggPSBcIi4vYnVpbHQtaW4vZXJyb3JzL2NvbnRyb2xsZXIuanNcIlxuICAgICAgYWN0aW9uID0gXCJub3RGb3VuZFwiXG4gICAgICB2aWV3UGF0aCA9IGF3YWl0IGZzLnJlYWxwYXRoKGAke19fZGlybmFtZX0vYnVpbHQtaW4vZXJyb3JzYClcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaWYgKCFjb250cm9sbGVyKSBjb250cm9sbGVyID0gXCJfcm9vdFwiXG5cbiAgICAgIGNvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn0vY29udHJvbGxlci5qc2BcbiAgICAgIHZpZXdQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWF0Y2hlZCB0aGUgcm91dGUgYnV0IGRpZG4ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdDogJHtyYXdQYXRofSAoYWN0aW9uOiAke2FjdGlvbn0sIGNvbnRyb2xsZXI6ICR7Y29udHJvbGxlcn0sIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcyl9KWApXG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlckNsYXNzSW1wb3J0ID0gYXdhaXQgaW1wb3J0KGNvbnRyb2xsZXJQYXRoKVxuICAgIGNvbnN0IGNvbnRyb2xsZXJDbGFzcyA9IGNvbnRyb2xsZXJDbGFzc0ltcG9ydC5kZWZhdWx0XG4gICAgY29uc3QgY29udHJvbGxlckluc3RhbmNlID0gbmV3IGNvbnRyb2xsZXJDbGFzcyh7XG4gICAgICBhY3Rpb24sXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcyxcbiAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgdmlld1BhdGhcbiAgICB9KVxuXG4gICAgaWYgKCEoYWN0aW9uIGluIGNvbnRyb2xsZXJJbnN0YW5jZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBhY3Rpb24gb24gY29udHJvbGxlcjogJHtjb250cm9sbGVyfSMke2FjdGlvbn1gKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyIHx8PSBuZXcgTG9nZ2VyKGNvbnRyb2xsZXJDbGFzcy5uYW1lLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcblxuICAgIGF3YWl0IHRoaXMuX2xvZ0FjdGlvblN0YXJ0KHthY3Rpb24sIGNvbnRyb2xsZXJDbGFzc30pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgY29udHJvbGxlckluc3RhbmNlLl9ydW5CZWZvcmVDYWxsYmFja3MoKVxuICAgICAgYXdhaXQgY29udHJvbGxlckluc3RhbmNlW2FjdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2Utcm91dGUuanNcIikuZGVmYXVsdH0gcm91dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHJldHVybnMge3tyZXN0UGF0aDogc3RyaW5nfSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIG1hdGNoUGF0aFdpdGhSb3V0ZXMocm91dGUsIHBhdGgpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dFNsYXNoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIikuc3BsaXQoXCI/XCIpWzBdXG5cbiAgICBmb3IgKGNvbnN0IHN1YlJvdXRlIG9mIHJvdXRlLnJvdXRlcykge1xuICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdWJSb3V0ZS5tYXRjaFdpdGhQYXRoKHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcyxcbiAgICAgICAgcGF0aDogcGF0aFdpdGhvdXRTbGFzaCxcbiAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0XG4gICAgICB9KVxuXG4gICAgICBpZiAoIW1hdGNoUmVzdWx0KSBjb250aW51ZVxuXG4gICAgICBjb25zdCB7cmVzdFBhdGh9ID0gbWF0Y2hSZXN1bHRcblxuICAgICAgaWYgKHJlc3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoUGF0aFdpdGhSb3V0ZXMoc3ViUm91dGUsIHJlc3RQYXRoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF0Y2hSZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYWN0aW9uXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdH0gYXJncy5jb250cm9sbGVyQ2xhc3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfbG9nQWN0aW9uU3RhcnQoe2FjdGlvbiwgY29udHJvbGxlckNsYXNzfSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3RcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLl9mb3JtYXRUaW1lc3RhbXAobmV3IERhdGUoKSlcbiAgICBjb25zdCByZW1vdGVBZGRyZXNzID0gcmVxdWVzdC5yZW1vdGVBZGRyZXNzPy4oKSB8fCByZXF1ZXN0LmhlYWRlcihcIngtZm9yd2FyZGVkLWZvclwiKSB8fCBcInVua25vd25cIlxuICAgIGNvbnN0IGxvZ2dlZFBhcmFtcyA9IHRoaXMuX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyh0aGlzLnBhcmFtcylcblxuICAgIGRlbGV0ZSBsb2dnZWRQYXJhbXMuYWN0aW9uXG4gICAgZGVsZXRlIGxvZ2dlZFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IGBTdGFydGVkICR7cmVxdWVzdC5odHRwTWV0aG9kKCl9IFwiJHtyZXF1ZXN0LnBhdGgoKX1cIiBmb3IgJHtyZW1vdGVBZGRyZXNzfSBhdCAke3RpbWVzdGFtcH1gKVxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmluZm8oKCkgPT4gYFByb2Nlc3NpbmcgYnkgJHtjb250cm9sbGVyQ2xhc3MubmFtZX0jJHthY3Rpb259YClcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IFtgICBQYXJhbWV0ZXJzOmAsIGxvZ2dlZFBhcmFtc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEYXRlfSBkYXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBfZm9ybWF0VGltZXN0YW1wKGRhdGUpIHtcbiAgICAvKiogQHBhcmFtIHtudW1iZXJ9IG51bSAqL1xuICAgIGNvbnN0IHBhZCA9IChudW0pID0+IFN0cmluZyhudW0pLnBhZFN0YXJ0KDIsIFwiMFwiKVxuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICBjb25zdCBtb250aCA9IHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKVxuICAgIGNvbnN0IGRheSA9IHBhZChkYXRlLmdldERhdGUoKSlcbiAgICBjb25zdCBob3VycyA9IHBhZChkYXRlLmdldEhvdXJzKCkpXG4gICAgY29uc3QgbWludXRlcyA9IHBhZChkYXRlLmdldE1pbnV0ZXMoKSlcbiAgICBjb25zdCBzZWNvbmRzID0gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKVxuICAgIGNvbnN0IG9mZnNldE1pbnV0ZXMgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KClcbiAgICBjb25zdCBvZmZzZXRTaWduID0gb2Zmc2V0TWludXRlcyA+IDAgPyBcIi1cIiA6IFwiK1wiXG4gICAgY29uc3Qgb2Zmc2V0VG90YWxNaW51dGVzID0gTWF0aC5hYnMob2Zmc2V0TWludXRlcylcbiAgICBjb25zdCBvZmZzZXRIb3VycyA9IHBhZChNYXRoLmZsb29yKG9mZnNldFRvdGFsTWludXRlcyAvIDYwKSlcbiAgICBjb25zdCBvZmZzZXRSZW1haW5pbmdNaW51dGVzID0gcGFkKG9mZnNldFRvdGFsTWludXRlcyAlIDYwKVxuXG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30gJHtvZmZzZXRTaWdufSR7b2Zmc2V0SG91cnN9JHtvZmZzZXRSZW1haW5pbmdNaW51dGVzfWBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIF9zYW5pdGl6ZVBhcmFtc0ZvckxvZ2dpbmcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVcGxvYWRlZEZpbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzTmFtZTogdmFsdWUuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgZmlsZW5hbWU6IHZhbHVlLmZpbGVuYW1lKCksXG4gICAgICAgIHNpemU6IHZhbHVlLnNpemUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKGl0ZW0pKVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyh2YWx1ZVtrZXldKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiJdfQ==
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc29sdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxZQUFZLE1BQU0sc0RBQXNELENBQUE7QUFDL0UsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUMsaUNBQWlDO0lBQ2pDLE1BQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksY0FBYyxD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QUE7SUFDdEgsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QixDQUFDLEtBQUs7UUFDN0IsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFLENBQUM7WUFDbEMsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNqQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7YUFDbkIsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxzQ0FBc0M7WUFDdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBRWpCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzFELENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gXCJwYXRoXCJcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSBcInVybFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IFVwbG9hZGVkRmlsZSBmcm9tIFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvdXBsb2FkZWQtZmlsZS5qc1wiXG5pbXBvcnQgZW5zdXJlRXJyb3IgZnJvbSBcIi4uL3V0aWxzL2Vuc3VyZS1lcnJvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1JvdXRlc1Jlc29sdmVyIHtcbiAgLyoqIEB0eXBlIHtMb2dnZXIgfCB1bmRlZmluZWR9ICovXG4gIGxvZ2dlclxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHJlc3BvbnNlfSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuICAgIGlmICghcmVzcG9uc2UpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlc3BvbnNlIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5wYXJhbXMgPSByZXF1ZXN0LnBhcmFtcygpXG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZSgpIHtcbiAgICBsZXQgY29udHJvbGxlclBhdGhcbiAgICBsZXQgY3VycmVudFJvdXRlID0gdGhpcy5jb25maWd1cmF0aW9uLnJvdXRlcy5yb290Um91dGVcbiAgICBjb25zdCByYXdQYXRoID0gdGhpcy5yZXF1ZXN0LnBhdGgoKVxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcmF3UGF0aC5zcGxpdChcIj9cIilbMF1cbiAgICBsZXQgdmlld1BhdGhcblxuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdGhpcy5tYXRjaFBhdGhXaXRoUm91dGVzKGN1cnJlbnRSb3V0ZSwgY3VycmVudFBhdGgpXG4gICAgY29uc3QgYWN0aW9uUGFyYW0gPSB0aGlzLnBhcmFtcy5hY3Rpb25cbiAgICBjb25zdCBjb250cm9sbGVyUGFyYW0gPSB0aGlzLnBhcmFtcy5jb250cm9sbGVyXG4gICAgY29uc3QgYWN0aW9uVmFsdWUgPSB0eXBlb2YgYWN0aW9uUGFyYW0gPT0gXCJzdHJpbmdcIiA/IGFjdGlvblBhcmFtIDogKEFycmF5LmlzQXJyYXkoYWN0aW9uUGFyYW0pID8gYWN0aW9uUGFyYW1bMF0gOiB1bmRlZmluZWQpXG4gICAgbGV0IGFjdGlvbiA9IHR5cGVvZiBhY3Rpb25WYWx1ZSA9PSBcInN0cmluZ1wiID8gaW5mbGVjdGlvbi5jYW1lbGl6ZShhY3Rpb25WYWx1ZS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIiksIHRydWUpIDogdW5kZWZpbmVkXG4gICAgbGV0IGNvbnRyb2xsZXIgPSB0eXBlb2YgY29udHJvbGxlclBhcmFtID09IFwic3RyaW5nXCIgPyBjb250cm9sbGVyUGFyYW0gOiAoQXJyYXkuaXNBcnJheShjb250cm9sbGVyUGFyYW0pID8gY29udHJvbGxlclBhcmFtWzBdIDogdW5kZWZpbmVkKVxuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuICAgICAgY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgICAgY29uc3QgcmVxdWVzdGVkUGF0aCA9IGN1cnJlbnRQYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKSB8fCBcIl9yb290XCJcbiAgICAgIGNvbnN0IGF0dGVtcHRlZENvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7cmVxdWVzdGVkUGF0aH0vY29udHJvbGxlci5qc2BcblxuICAgICAgYXdhaXQgKHRoaXMubG9nZ2VyIHx8IG5ldyBMb2dnZXIoXCJSb3V0ZXNSZXNvbHZlclwiLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSkpLndhcm4oYE5vIHJvdXRlIG1hdGNoZWQgZm9yICR7cmF3UGF0aH0uIFRyaWVkIGNvbnRyb2xsZXIgYXQgJHthdHRlbXB0ZWRDb250cm9sbGVyUGF0aH1gKVxuXG4gICAgICBjb250cm9sbGVyID0gXCJlcnJvcnNcIlxuICAgICAgY29udHJvbGxlclBhdGggPSBcIi4vYnVpbHQtaW4vZXJyb3JzL2NvbnRyb2xsZXIuanNcIlxuICAgICAgYWN0aW9uID0gXCJub3RGb3VuZFwiXG4gICAgICB2aWV3UGF0aCA9IGF3YWl0IGZzLnJlYWxwYXRoKGAke19fZGlybmFtZX0vYnVpbHQtaW4vZXJyb3JzYClcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaWYgKCFjb250cm9sbGVyKSBjb250cm9sbGVyID0gXCJfcm9vdFwiXG5cbiAgICAgIGNvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn0vY29udHJvbGxlci5qc2BcbiAgICAgIHZpZXdQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWF0Y2hlZCB0aGUgcm91dGUgYnV0IGRpZG4ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdDogJHtyYXdQYXRofSAoYWN0aW9uOiAke2FjdGlvbn0sIGNvbnRyb2xsZXI6ICR7Y29udHJvbGxlcn0sIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcyl9KWApXG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlckNsYXNzSW1wb3J0ID0gYXdhaXQgaW1wb3J0KGNvbnRyb2xsZXJQYXRoKVxuICAgIGNvbnN0IGNvbnRyb2xsZXJDbGFzcyA9IGNvbnRyb2xsZXJDbGFzc0ltcG9ydC5kZWZhdWx0XG4gICAgY29uc3QgY29udHJvbGxlckluc3RhbmNlID0gbmV3IGNvbnRyb2xsZXJDbGFzcyh7XG4gICAgICBhY3Rpb24sXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcyxcbiAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgdmlld1BhdGhcbiAgICB9KVxuXG4gICAgaWYgKCEoYWN0aW9uIGluIGNvbnRyb2xsZXJJbnN0YW5jZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBhY3Rpb24gb24gY29udHJvbGxlcjogJHtjb250cm9sbGVyfSMke2FjdGlvbn1gKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyIHx8PSBuZXcgTG9nZ2VyKGNvbnRyb2xsZXJDbGFzcy5uYW1lLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcblxuICAgIGF3YWl0IHRoaXMuX2xvZ0FjdGlvblN0YXJ0KHthY3Rpb24sIGNvbnRyb2xsZXJDbGFzc30pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29udHJvbGxlckluc3RhbmNlLl9ydW5CZWZvcmVDYWxsYmFja3MoKVxuICAgICAgICBhd2FpdCBjb250cm9sbGVySW5zdGFuY2VbYWN0aW9uXSgpXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlbnN1cmVkRXJyb3IgPSBlbnN1cmVFcnJvcihlcnJvcilcbiAgICAgIGNvbnN0IGVycm9yQ29udGV4dCA9IHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBodHRwTWV0aG9kOiB0aGlzLnJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICBwYXRoOiB0aGlzLnJlcXVlc3QucGF0aCgpLFxuICAgICAgICBzdGFnZTogXCJjb250cm9sbGVyLWFjdGlvblwiXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yV2l0aENvbnRleHQgPSAvKiogQHR5cGUge3t2ZWxvY2lvdXNDb250ZXh0Pzogb2JqZWN0fX0gKi8gKGVuc3VyZWRFcnJvcilcblxuICAgICAgZXJyb3JXaXRoQ29udGV4dC52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZXJyb3JXaXRoQ29udGV4dC52ZWxvY2lvdXNDb250ZXh0IHx8IHt9KSxcbiAgICAgICAgY29udHJvbGxlckFjdGlvbjogZXJyb3JDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVuc3VyZWRFcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1yb3V0ZS5qc1wiKS5kZWZhdWx0fSByb3V0ZSAtIFJvdXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGguXG4gICAqIEByZXR1cm5zIHt7cmVzdFBhdGg6IHN0cmluZ30gfCB1bmRlZmluZWR9IC0gUkVTVCBwYXRoIG1ldGFkYXRhIGZvciB0aGlzIHJvdXRlLlxuICAgKi9cbiAgbWF0Y2hQYXRoV2l0aFJvdXRlcyhyb3V0ZSwgcGF0aCkge1xuICAgIGNvbnN0IHBhdGhXaXRob3V0U2xhc2ggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKS5zcGxpdChcIj9cIilbMF1cblxuICAgIGZvciAoY29uc3Qgc3ViUm91dGUgb2Ygcm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN1YlJvdXRlLm1hdGNoV2l0aFBhdGgoe1xuICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1zLFxuICAgICAgICBwYXRoOiBwYXRoV2l0aG91dFNsYXNoLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3RcbiAgICAgIH0pXG5cbiAgICAgIGlmICghbWF0Y2hSZXN1bHQpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IHtyZXN0UGF0aH0gPSBtYXRjaFJlc3VsdFxuXG4gICAgICBpZiAocmVzdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hQYXRoV2l0aFJvdXRlcyhzdWJSb3V0ZSwgcmVzdFBhdGgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXRjaFJlc3VsdFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hY3Rpb24gLSBBY3Rpb24uXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdH0gYXJncy5jb250cm9sbGVyQ2xhc3MgLSBDb250cm9sbGVyIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX2xvZ0FjdGlvblN0YXJ0KHthY3Rpb24sIGNvbnRyb2xsZXJDbGFzc30pIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5fZm9ybWF0VGltZXN0YW1wKG5ldyBEYXRlKCkpXG4gICAgY29uc3QgcmVtb3RlQWRkcmVzcyA9IHJlcXVlc3QucmVtb3RlQWRkcmVzcz8uKCkgfHwgcmVxdWVzdC5oZWFkZXIoXCJ4LWZvcndhcmRlZC1mb3JcIikgfHwgXCJ1bmtub3duXCJcbiAgICBjb25zdCBsb2dnZWRQYXJhbXMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHRoaXMucGFyYW1zKSlcblxuICAgIGRlbGV0ZSBsb2dnZWRQYXJhbXMuYWN0aW9uXG4gICAgZGVsZXRlIGxvZ2dlZFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IGBTdGFydGVkICR7cmVxdWVzdC5odHRwTWV0aG9kKCl9IFwiJHtyZXF1ZXN0LnBhdGgoKX1cIiBmb3IgJHtyZW1vdGVBZGRyZXNzfSBhdCAke3RpbWVzdGFtcH1gKVxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmluZm8oKCkgPT4gYFByb2Nlc3NpbmcgYnkgJHtjb250cm9sbGVyQ2xhc3MubmFtZX0jJHthY3Rpb259YClcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IFtgICBQYXJhbWV0ZXJzOmAsIGxvZ2dlZFBhcmFtc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdGltZXN0YW1wLlxuICAgKi9cbiAgX2Zvcm1hdFRpbWVzdGFtcChkYXRlKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bSAtIE51bS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwYWQuXG4gICAgICovXG4gICAgY29uc3QgcGFkID0gKG51bSkgPT4gU3RyaW5nKG51bSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIGNvbnN0IG1vbnRoID0gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpXG4gICAgY29uc3QgZGF5ID0gcGFkKGRhdGUuZ2V0RGF0ZSgpKVxuICAgIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgICBjb25zdCBtaW51dGVzID0gcGFkKGRhdGUuZ2V0TWludXRlcygpKVxuICAgIGNvbnN0IHNlY29uZHMgPSBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpXG4gICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKVxuICAgIGNvbnN0IG9mZnNldFNpZ24gPSBvZmZzZXRNaW51dGVzID4gMCA/IFwiLVwiIDogXCIrXCJcbiAgICBjb25zdCBvZmZzZXRUb3RhbE1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKVxuICAgIGNvbnN0IG9mZnNldEhvdXJzID0gcGFkKE1hdGguZmxvb3Iob2Zmc2V0VG90YWxNaW51dGVzIC8gNjApKVxuICAgIGNvbnN0IG9mZnNldFJlbWFpbmluZ01pbnV0ZXMgPSBwYWQob2Zmc2V0VG90YWxNaW51dGVzICUgNjApXG5cbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aG91cnN9OiR7bWludXRlc306JHtzZWNvbmRzfSAke29mZnNldFNpZ259JHtvZmZzZXRIb3Vyc30ke29mZnNldFJlbWFpbmluZ01pbnV0ZXN9YFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEByZXR1cm5zIHt1bmtub3dufSAtIFRoZSBzYW5pdGl6ZSBwYXJhbXMgZm9yIGxvZ2dpbmcuXG4gICAqL1xuICBfc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVXBsb2FkZWRGaWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzc05hbWU6IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgIGZpbGVuYW1lOiB2YWx1ZS5maWxlbmFtZSgpLFxuICAgICAgICBzaXplOiB2YWx1ZS5zaXplKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHRoaXMuX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyhpdGVtKSlcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqL1xuICAgICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHZhbHVlW2tleV0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIl19
|