@decaf-ts/core 0.8.85 → 0.9.1-9.tasks
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 +1 -1
- package/dist/core.cjs +6705 -2
- package/dist/core.js +6932 -2
- package/lib/auth/constants.cjs +1 -1
- package/lib/auth/decorators.cjs +1 -1
- package/lib/auth/index.cjs +1 -1
- package/lib/esm/auth/constants.js +1 -1
- package/lib/esm/auth/decorators.js +1 -1
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/esm/fs/FilesystemAdapter.js +3 -2
- package/lib/esm/fs/FsDispatch.js +1 -1
- package/lib/esm/fs/helpers.js +1 -1
- package/lib/esm/fs/index.js +1 -1
- package/lib/esm/fs/indexStore.js +1 -1
- package/lib/esm/fs/locks/FilesystemLock.js +1 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
- package/lib/esm/fs/types.d.ts +6 -0
- package/lib/esm/fs/types.js +1 -1
- package/lib/esm/identity/decorators.js +1 -1
- package/lib/esm/identity/index.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
- package/lib/esm/interfaces/ErrorParser.js +1 -1
- package/lib/esm/interfaces/Executor.js +1 -1
- package/lib/esm/interfaces/Observable.js +1 -1
- package/lib/esm/interfaces/Observer.js +1 -1
- package/lib/esm/interfaces/Paginatable.js +1 -1
- package/lib/esm/interfaces/Queriable.js +1 -1
- package/lib/esm/interfaces/RawExecutor.js +1 -1
- package/lib/esm/interfaces/SequenceOptions.js +1 -1
- package/lib/esm/interfaces/index.js +1 -1
- package/lib/esm/migrations/Migration.js +1 -1
- package/lib/esm/migrations/MigrationService.js +1 -1
- package/lib/esm/migrations/MigrationTasks.js +1 -1
- package/lib/esm/migrations/constants.js +1 -1
- package/lib/esm/migrations/decorators.js +1 -1
- package/lib/esm/migrations/index.js +1 -1
- package/lib/esm/migrations/types.js +1 -1
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/model/SequenceModel.js +1 -1
- package/lib/esm/model/construction.d.ts +1 -1
- package/lib/esm/model/construction.js +25 -3
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/index.js +1 -1
- package/lib/esm/model/indexing.js +1 -1
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/overrides/Metadata.js +1 -1
- package/lib/esm/overrides/Model.js +1 -1
- package/lib/esm/overrides/ModelBuilder.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/injectables.js +1 -1
- package/lib/esm/overrides/overrides.js +29 -1
- package/lib/esm/persistence/Adapter.js +14 -2
- package/lib/esm/persistence/Context.js +1 -1
- package/lib/esm/persistence/ContextLock.js +1 -1
- package/lib/esm/persistence/Dispatch.d.ts +7 -0
- package/lib/esm/persistence/Dispatch.js +20 -3
- package/lib/esm/persistence/ObserverHandler.js +1 -1
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/constants.js +2 -1
- package/lib/esm/persistence/decorators.js +1 -1
- package/lib/esm/persistence/errors.js +1 -1
- package/lib/esm/persistence/event-filters.js +1 -1
- package/lib/esm/persistence/generators.js +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/transactions.js +1 -1
- package/lib/esm/persistence/types.d.ts +1 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/query/Condition.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/Paginator.js +1 -1
- package/lib/esm/query/Statement.js +1 -1
- package/lib/esm/query/constants.js +1 -1
- package/lib/esm/query/decorators.js +1 -1
- package/lib/esm/query/errors.js +1 -1
- package/lib/esm/query/index.js +1 -1
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/query/selectors.js +1 -1
- package/lib/esm/query/types.js +1 -1
- package/lib/esm/query/utils.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamStatement.js +1 -1
- package/lib/esm/ram/constants.js +1 -1
- package/lib/esm/ram/handlers.js +1 -1
- package/lib/esm/ram/index.js +1 -1
- package/lib/esm/ram/types.js +1 -1
- package/lib/esm/repository/Repository.d.ts +2 -2
- package/lib/esm/repository/Repository.js +19 -16
- package/lib/esm/repository/constants.js +1 -1
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/errors.js +1 -1
- package/lib/esm/repository/index.js +1 -1
- package/lib/esm/repository/injectables.js +4 -2
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.js +1 -1
- package/lib/esm/services/ModelService.d.ts +4 -5
- package/lib/esm/services/ModelService.js +4 -2
- package/lib/esm/services/PersistenceService.js +1 -1
- package/lib/esm/services/index.js +1 -1
- package/lib/esm/services/services.js +1 -1
- package/lib/esm/tasks/CleanUpTask.js +1 -1
- package/lib/esm/tasks/TaskContext.d.ts +3 -1
- package/lib/esm/tasks/TaskContext.js +9 -2
- package/lib/esm/tasks/TaskEngine.d.ts +2 -0
- package/lib/esm/tasks/TaskEngine.js +84 -20
- package/lib/esm/tasks/TaskErrors.js +1 -1
- package/lib/esm/tasks/TaskEventBus.js +1 -1
- package/lib/esm/tasks/TaskEventService.d.ts +7 -0
- package/lib/esm/tasks/TaskEventService.js +16 -0
- package/lib/esm/tasks/TaskHandler.js +1 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
- package/lib/esm/tasks/TaskService.d.ts +5 -1
- package/lib/esm/tasks/TaskService.js +11 -37
- package/lib/esm/tasks/TaskStateChangeError.js +1 -1
- package/lib/esm/tasks/TaskTracker.js +1 -1
- package/lib/esm/tasks/builder.js +1 -1
- package/lib/esm/tasks/constants.js +1 -1
- package/lib/esm/tasks/decorators.js +1 -1
- package/lib/esm/tasks/index.d.ts +1 -0
- package/lib/esm/tasks/index.js +2 -1
- package/lib/esm/tasks/logging.js +4 -7
- package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
- package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
- package/lib/esm/tasks/models/TaskEventModel.js +1 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
- package/lib/esm/tasks/models/TaskModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
- package/lib/esm/tasks/models/index.js +1 -1
- package/lib/esm/tasks/types.d.ts +8 -3
- package/lib/esm/tasks/types.js +1 -1
- package/lib/esm/tasks/utils.js +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +1 -1
- package/lib/esm/utils/decorators.js +1 -1
- package/lib/esm/utils/errors.js +1 -1
- package/lib/esm/utils/index.js +1 -1
- package/lib/esm/utils/throttling.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.d.ts +2 -1
- package/lib/esm/utils/utils.js +23 -6
- package/lib/esm/workers/TaskEngine.js +15 -4
- package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
- package/lib/esm/workers/index.js +1 -1
- package/lib/esm/workers/messages.js +1 -1
- package/lib/esm/workers/types.js +1 -1
- package/lib/esm/workers/workerThread.js +36 -8
- package/lib/fs/FilesystemAdapter.cjs +3 -2
- package/lib/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/fs/FsDispatch.cjs +1 -1
- package/lib/fs/helpers.cjs +1 -1
- package/lib/fs/index.cjs +1 -1
- package/lib/fs/indexStore.cjs +1 -1
- package/lib/fs/locks/FilesystemLock.cjs +1 -1
- package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
- package/lib/fs/types.cjs +1 -1
- package/lib/fs/types.d.ts +6 -0
- package/lib/identity/decorators.cjs +1 -1
- package/lib/identity/index.cjs +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.cjs +1 -1
- package/lib/interfaces/ErrorParser.cjs +1 -1
- package/lib/interfaces/Executor.cjs +1 -1
- package/lib/interfaces/Observable.cjs +1 -1
- package/lib/interfaces/Observer.cjs +1 -1
- package/lib/interfaces/Paginatable.cjs +1 -1
- package/lib/interfaces/Queriable.cjs +1 -1
- package/lib/interfaces/RawExecutor.cjs +1 -1
- package/lib/interfaces/SequenceOptions.cjs +1 -1
- package/lib/interfaces/index.cjs +1 -1
- package/lib/migrations/Migration.cjs +1 -1
- package/lib/migrations/MigrationService.cjs +1 -1
- package/lib/migrations/MigrationTasks.cjs +1 -1
- package/lib/migrations/constants.cjs +1 -1
- package/lib/migrations/decorators.cjs +1 -1
- package/lib/migrations/index.cjs +1 -1
- package/lib/migrations/types.cjs +1 -1
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/model/SequenceModel.cjs +1 -1
- package/lib/model/construction.cjs +25 -3
- package/lib/model/construction.d.ts +1 -1
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/index.cjs +1 -1
- package/lib/model/indexing.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/overrides/Metadata.cjs +1 -1
- package/lib/overrides/Model.cjs +1 -1
- package/lib/overrides/ModelBuilder.cjs +1 -1
- package/lib/overrides/index.cjs +1 -1
- package/lib/overrides/injectables.cjs +1 -1
- package/lib/overrides/overrides.cjs +29 -1
- package/lib/persistence/Adapter.cjs +14 -2
- package/lib/persistence/Context.cjs +1 -1
- package/lib/persistence/ContextLock.cjs +1 -1
- package/lib/persistence/Dispatch.cjs +20 -3
- package/lib/persistence/Dispatch.d.ts +7 -0
- package/lib/persistence/ObserverHandler.cjs +1 -1
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/constants.cjs +2 -1
- package/lib/persistence/decorators.cjs +1 -1
- package/lib/persistence/errors.cjs +1 -1
- package/lib/persistence/event-filters.cjs +1 -1
- package/lib/persistence/generators.cjs +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/transactions.cjs +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +1 -0
- package/lib/query/Condition.cjs +1 -1
- package/lib/query/MethodQueryBuilder.cjs +1 -1
- package/lib/query/Paginator.cjs +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/constants.cjs +1 -1
- package/lib/query/decorators.cjs +1 -1
- package/lib/query/errors.cjs +1 -1
- package/lib/query/index.cjs +1 -1
- package/lib/query/options.cjs +1 -1
- package/lib/query/selectors.cjs +1 -1
- package/lib/query/types.cjs +1 -1
- package/lib/query/utils.cjs +1 -1
- package/lib/ram/RamAdapter.cjs +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamStatement.cjs +1 -1
- package/lib/ram/constants.cjs +1 -1
- package/lib/ram/handlers.cjs +1 -1
- package/lib/ram/index.cjs +1 -1
- package/lib/ram/types.cjs +1 -1
- package/lib/repository/Repository.cjs +19 -16
- package/lib/repository/Repository.d.ts +2 -2
- package/lib/repository/constants.cjs +1 -1
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/errors.cjs +1 -1
- package/lib/repository/index.cjs +1 -1
- package/lib/repository/injectables.cjs +4 -2
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/utils.cjs +1 -1
- package/lib/services/ModelService.cjs +4 -2
- package/lib/services/ModelService.d.ts +4 -5
- package/lib/services/PersistenceService.cjs +1 -1
- package/lib/services/index.cjs +1 -1
- package/lib/services/services.cjs +1 -1
- package/lib/tasks/CleanUpTask.cjs +1 -1
- package/lib/tasks/TaskContext.cjs +9 -2
- package/lib/tasks/TaskContext.d.ts +3 -1
- package/lib/tasks/TaskEngine.cjs +84 -20
- package/lib/tasks/TaskEngine.d.ts +2 -0
- package/lib/tasks/TaskErrors.cjs +1 -1
- package/lib/tasks/TaskEventBus.cjs +1 -1
- package/lib/tasks/TaskEventService.cjs +20 -0
- package/lib/tasks/TaskEventService.d.ts +7 -0
- package/lib/tasks/TaskHandler.cjs +1 -1
- package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
- package/lib/tasks/TaskService.cjs +10 -36
- package/lib/tasks/TaskService.d.ts +5 -1
- package/lib/tasks/TaskStateChangeError.cjs +1 -1
- package/lib/tasks/TaskTracker.cjs +1 -1
- package/lib/tasks/builder.cjs +1 -1
- package/lib/tasks/constants.cjs +1 -1
- package/lib/tasks/decorators.cjs +1 -1
- package/lib/tasks/index.cjs +2 -1
- package/lib/tasks/index.d.ts +1 -0
- package/lib/tasks/logging.cjs +4 -7
- package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
- package/lib/tasks/models/TaskErrorModel.cjs +1 -1
- package/lib/tasks/models/TaskEventModel.cjs +1 -1
- package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
- package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
- package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/tasks/models/TaskModel.cjs +1 -1
- package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
- package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
- package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/tasks/models/index.cjs +1 -1
- package/lib/tasks/types.cjs +1 -1
- package/lib/tasks/types.d.ts +8 -3
- package/lib/tasks/utils.cjs +1 -1
- package/lib/utils/ContextualLoggedClass.cjs +1 -1
- package/lib/utils/decorators.cjs +1 -1
- package/lib/utils/errors.cjs +1 -1
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/throttling.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +22 -5
- package/lib/utils/utils.d.ts +2 -1
- package/lib/workers/TaskEngine.cjs +15 -4
- package/lib/workers/WorkThreadEnvironment.cjs +1 -1
- package/lib/workers/index.cjs +1 -1
- package/lib/workers/messages.cjs +1 -1
- package/lib/workers/types.cjs +1 -1
- package/lib/workers/workerThread.cjs +35 -7
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/lib/auth/constants.js.map +0 -1
- package/lib/auth/decorators.js.map +0 -1
- package/lib/auth/index.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
- package/lib/esm/fs/FsDispatch.js.map +0 -1
- package/lib/esm/fs/helpers.js.map +0 -1
- package/lib/esm/fs/index.js.map +0 -1
- package/lib/esm/fs/indexStore.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/esm/fs/types.js.map +0 -1
- package/lib/esm/identity/decorators.js.map +0 -1
- package/lib/esm/identity/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/esm/interfaces/ErrorParser.js.map +0 -1
- package/lib/esm/interfaces/Executor.js.map +0 -1
- package/lib/esm/interfaces/Observable.js.map +0 -1
- package/lib/esm/interfaces/Observer.js.map +0 -1
- package/lib/esm/interfaces/Paginatable.js.map +0 -1
- package/lib/esm/interfaces/Queriable.js.map +0 -1
- package/lib/esm/interfaces/RawExecutor.js.map +0 -1
- package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
- package/lib/esm/interfaces/index.js.map +0 -1
- package/lib/esm/migrations/Migration.js.map +0 -1
- package/lib/esm/migrations/MigrationService.js.map +0 -1
- package/lib/esm/migrations/MigrationTasks.js.map +0 -1
- package/lib/esm/migrations/constants.js.map +0 -1
- package/lib/esm/migrations/decorators.js.map +0 -1
- package/lib/esm/migrations/index.js.map +0 -1
- package/lib/esm/migrations/types.js.map +0 -1
- package/lib/esm/model/BaseModel.js.map +0 -1
- package/lib/esm/model/SequenceModel.js.map +0 -1
- package/lib/esm/model/construction.js.map +0 -1
- package/lib/esm/model/decorators.js.map +0 -1
- package/lib/esm/model/index.js.map +0 -1
- package/lib/esm/model/indexing.js.map +0 -1
- package/lib/esm/model/types.js.map +0 -1
- package/lib/esm/overrides/Metadata.js.map +0 -1
- package/lib/esm/overrides/Model.js.map +0 -1
- package/lib/esm/overrides/ModelBuilder.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/injectables.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/persistence/Adapter.js.map +0 -1
- package/lib/esm/persistence/Context.js.map +0 -1
- package/lib/esm/persistence/ContextLock.js.map +0 -1
- package/lib/esm/persistence/Dispatch.js.map +0 -1
- package/lib/esm/persistence/ObserverHandler.js.map +0 -1
- package/lib/esm/persistence/Sequence.js.map +0 -1
- package/lib/esm/persistence/constants.js.map +0 -1
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/esm/persistence/errors.js.map +0 -1
- package/lib/esm/persistence/event-filters.js.map +0 -1
- package/lib/esm/persistence/generators.js.map +0 -1
- package/lib/esm/persistence/index.js.map +0 -1
- package/lib/esm/persistence/transactions.js.map +0 -1
- package/lib/esm/persistence/types.js.map +0 -1
- package/lib/esm/query/Condition.js.map +0 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
- package/lib/esm/query/Paginator.js.map +0 -1
- package/lib/esm/query/Statement.js.map +0 -1
- package/lib/esm/query/constants.js.map +0 -1
- package/lib/esm/query/decorators.js.map +0 -1
- package/lib/esm/query/errors.js.map +0 -1
- package/lib/esm/query/index.js.map +0 -1
- package/lib/esm/query/options.js.map +0 -1
- package/lib/esm/query/selectors.js.map +0 -1
- package/lib/esm/query/types.js.map +0 -1
- package/lib/esm/query/utils.js.map +0 -1
- package/lib/esm/ram/RamAdapter.js.map +0 -1
- package/lib/esm/ram/RamPaginator.js.map +0 -1
- package/lib/esm/ram/RamStatement.js.map +0 -1
- package/lib/esm/ram/constants.js.map +0 -1
- package/lib/esm/ram/handlers.js.map +0 -1
- package/lib/esm/ram/index.js.map +0 -1
- package/lib/esm/ram/types.js.map +0 -1
- package/lib/esm/repository/Repository.js.map +0 -1
- package/lib/esm/repository/constants.js.map +0 -1
- package/lib/esm/repository/decorators.js.map +0 -1
- package/lib/esm/repository/errors.js.map +0 -1
- package/lib/esm/repository/index.js.map +0 -1
- package/lib/esm/repository/injectables.js.map +0 -1
- package/lib/esm/repository/types.js.map +0 -1
- package/lib/esm/repository/utils.js.map +0 -1
- package/lib/esm/services/ModelService.js.map +0 -1
- package/lib/esm/services/PersistenceService.js.map +0 -1
- package/lib/esm/services/index.js.map +0 -1
- package/lib/esm/services/services.js.map +0 -1
- package/lib/esm/tasks/CleanUpTask.js.map +0 -1
- package/lib/esm/tasks/TaskContext.js.map +0 -1
- package/lib/esm/tasks/TaskEngine.js.map +0 -1
- package/lib/esm/tasks/TaskErrors.js.map +0 -1
- package/lib/esm/tasks/TaskEventBus.js.map +0 -1
- package/lib/esm/tasks/TaskHandler.js.map +0 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/esm/tasks/TaskService.js.map +0 -1
- package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/esm/tasks/TaskTracker.js.map +0 -1
- package/lib/esm/tasks/builder.js.map +0 -1
- package/lib/esm/tasks/constants.js.map +0 -1
- package/lib/esm/tasks/decorators.js.map +0 -1
- package/lib/esm/tasks/index.js.map +0 -1
- package/lib/esm/tasks/logging.js.map +0 -1
- package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/esm/tasks/models/index.js.map +0 -1
- package/lib/esm/tasks/types.js.map +0 -1
- package/lib/esm/tasks/utils.js.map +0 -1
- package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/esm/utils/errors.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/throttling.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/workers/TaskEngine.js.map +0 -1
- package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/esm/workers/index.js.map +0 -1
- package/lib/esm/workers/messages.js.map +0 -1
- package/lib/esm/workers/types.js.map +0 -1
- package/lib/esm/workers/workerThread.js.map +0 -1
- package/lib/fs/FilesystemAdapter.js.map +0 -1
- package/lib/fs/FsDispatch.js.map +0 -1
- package/lib/fs/helpers.js.map +0 -1
- package/lib/fs/index.js.map +0 -1
- package/lib/fs/indexStore.js.map +0 -1
- package/lib/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/fs/types.js.map +0 -1
- package/lib/identity/decorators.js.map +0 -1
- package/lib/identity/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/interfaces/ErrorParser.js.map +0 -1
- package/lib/interfaces/Executor.js.map +0 -1
- package/lib/interfaces/Observable.js.map +0 -1
- package/lib/interfaces/Observer.js.map +0 -1
- package/lib/interfaces/Paginatable.js.map +0 -1
- package/lib/interfaces/Queriable.js.map +0 -1
- package/lib/interfaces/RawExecutor.js.map +0 -1
- package/lib/interfaces/SequenceOptions.js.map +0 -1
- package/lib/interfaces/index.js.map +0 -1
- package/lib/migrations/Migration.js.map +0 -1
- package/lib/migrations/MigrationService.js.map +0 -1
- package/lib/migrations/MigrationTasks.js.map +0 -1
- package/lib/migrations/constants.js.map +0 -1
- package/lib/migrations/decorators.js.map +0 -1
- package/lib/migrations/index.js.map +0 -1
- package/lib/migrations/types.js.map +0 -1
- package/lib/model/BaseModel.js.map +0 -1
- package/lib/model/SequenceModel.js.map +0 -1
- package/lib/model/construction.js.map +0 -1
- package/lib/model/decorators.js.map +0 -1
- package/lib/model/index.js.map +0 -1
- package/lib/model/indexing.js.map +0 -1
- package/lib/model/types.js.map +0 -1
- package/lib/overrides/Metadata.js.map +0 -1
- package/lib/overrides/Model.js.map +0 -1
- package/lib/overrides/ModelBuilder.js.map +0 -1
- package/lib/overrides/index.js.map +0 -1
- package/lib/overrides/injectables.js.map +0 -1
- package/lib/overrides/overrides.js.map +0 -1
- package/lib/persistence/Adapter.js.map +0 -1
- package/lib/persistence/Context.js.map +0 -1
- package/lib/persistence/ContextLock.js.map +0 -1
- package/lib/persistence/Dispatch.js.map +0 -1
- package/lib/persistence/ObserverHandler.js.map +0 -1
- package/lib/persistence/Sequence.js.map +0 -1
- package/lib/persistence/constants.js.map +0 -1
- package/lib/persistence/decorators.js.map +0 -1
- package/lib/persistence/errors.js.map +0 -1
- package/lib/persistence/event-filters.js.map +0 -1
- package/lib/persistence/generators.js.map +0 -1
- package/lib/persistence/index.js.map +0 -1
- package/lib/persistence/transactions.js.map +0 -1
- package/lib/persistence/types.js.map +0 -1
- package/lib/query/Condition.js.map +0 -1
- package/lib/query/MethodQueryBuilder.js.map +0 -1
- package/lib/query/Paginator.js.map +0 -1
- package/lib/query/Statement.js.map +0 -1
- package/lib/query/constants.js.map +0 -1
- package/lib/query/decorators.js.map +0 -1
- package/lib/query/errors.js.map +0 -1
- package/lib/query/index.js.map +0 -1
- package/lib/query/options.js.map +0 -1
- package/lib/query/selectors.js.map +0 -1
- package/lib/query/types.js.map +0 -1
- package/lib/query/utils.js.map +0 -1
- package/lib/ram/RamAdapter.js.map +0 -1
- package/lib/ram/RamPaginator.js.map +0 -1
- package/lib/ram/RamStatement.js.map +0 -1
- package/lib/ram/constants.js.map +0 -1
- package/lib/ram/handlers.js.map +0 -1
- package/lib/ram/index.js.map +0 -1
- package/lib/ram/types.js.map +0 -1
- package/lib/repository/Repository.js.map +0 -1
- package/lib/repository/constants.js.map +0 -1
- package/lib/repository/decorators.js.map +0 -1
- package/lib/repository/errors.js.map +0 -1
- package/lib/repository/index.js.map +0 -1
- package/lib/repository/injectables.js.map +0 -1
- package/lib/repository/types.js.map +0 -1
- package/lib/repository/utils.js.map +0 -1
- package/lib/services/ModelService.js.map +0 -1
- package/lib/services/PersistenceService.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/services/services.js.map +0 -1
- package/lib/tasks/CleanUpTask.js.map +0 -1
- package/lib/tasks/TaskContext.js.map +0 -1
- package/lib/tasks/TaskEngine.js.map +0 -1
- package/lib/tasks/TaskErrors.js.map +0 -1
- package/lib/tasks/TaskEventBus.js.map +0 -1
- package/lib/tasks/TaskHandler.js.map +0 -1
- package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/tasks/TaskService.js.map +0 -1
- package/lib/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/tasks/TaskTracker.js.map +0 -1
- package/lib/tasks/builder.js.map +0 -1
- package/lib/tasks/constants.js.map +0 -1
- package/lib/tasks/decorators.js.map +0 -1
- package/lib/tasks/index.js.map +0 -1
- package/lib/tasks/logging.js.map +0 -1
- package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/tasks/models/TaskModel.js.map +0 -1
- package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/tasks/models/index.js.map +0 -1
- package/lib/tasks/types.js.map +0 -1
- package/lib/tasks/utils.js.map +0 -1
- package/lib/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/utils/decorators.js.map +0 -1
- package/lib/utils/errors.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/throttling.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/workers/TaskEngine.js.map +0 -1
- package/lib/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/workers/index.js.map +0 -1
- package/lib/workers/messages.js.map +0 -1
- package/lib/workers/types.js.map +0 -1
- package/lib/workers/workerThread.js.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { TaskModel } from "./models/TaskModel.js";
|
|
2
|
-
import { Repository } from "./../repository/Repository.js";
|
|
3
2
|
import { TaskEventModel } from "./models/TaskEventModel.js";
|
|
4
3
|
import { TaskHandlerRegistry } from "./TaskHandlerRegistry.js";
|
|
5
4
|
import { TaskEventBus } from "./TaskEventBus.js";
|
|
@@ -25,7 +24,12 @@ export class TaskEngine extends AbsContextual {
|
|
|
25
24
|
return TaskContext;
|
|
26
25
|
}
|
|
27
26
|
get adapter() {
|
|
28
|
-
|
|
27
|
+
if (!this._adapter) {
|
|
28
|
+
this._adapter = this.config.adapter;
|
|
29
|
+
if (this.config.overrides)
|
|
30
|
+
this._adapter = this.adapter.for(this.config.overrides);
|
|
31
|
+
}
|
|
32
|
+
return this._adapter;
|
|
29
33
|
}
|
|
30
34
|
get registry() {
|
|
31
35
|
return this.config.registry;
|
|
@@ -36,17 +40,17 @@ export class TaskEngine extends AbsContextual {
|
|
|
36
40
|
get tasks() {
|
|
37
41
|
if (this._tasks)
|
|
38
42
|
return this._tasks;
|
|
39
|
-
this._tasks =
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
this._tasks = new (this.adapter.repository())(this.adapter, TaskModel, true).override({
|
|
44
|
+
afterQueryHandlers: true,
|
|
45
|
+
});
|
|
42
46
|
return this._tasks;
|
|
43
47
|
}
|
|
44
48
|
get events() {
|
|
45
49
|
if (this._events)
|
|
46
50
|
return this._events;
|
|
47
|
-
this._events =
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
this._events = new (this.adapter.repository())(this.adapter, TaskEventModel, true).override({
|
|
52
|
+
afterQueryHandlers: true,
|
|
53
|
+
});
|
|
50
54
|
return this._events;
|
|
51
55
|
}
|
|
52
56
|
static createTaskContext(base, overrides) {
|
|
@@ -300,14 +304,26 @@ export class TaskEngine extends AbsContextual {
|
|
|
300
304
|
// -------------------------
|
|
301
305
|
async executeClaimed(task) {
|
|
302
306
|
const { ctx, log } = (await this.logCtx([], task.classification, true)).for(this.executeClaimed);
|
|
307
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
308
|
+
const engine = this;
|
|
309
|
+
let logPipeQueue = Promise.resolve();
|
|
303
310
|
const taskCtx = new TaskContext(ctx).accumulate({
|
|
304
311
|
taskId: task.id,
|
|
305
312
|
logger: new TaskLogger(log, this.config.streamBufferSize, this.config.maxLoggingBuffer),
|
|
306
313
|
attempt: task.attempt,
|
|
307
|
-
resultCache: {},
|
|
308
|
-
pipe: async (
|
|
309
|
-
const
|
|
310
|
-
|
|
314
|
+
resultCache: { "task.attempt": task.attempt },
|
|
315
|
+
pipe: async function (...args) {
|
|
316
|
+
const normalized = engine.normalizePipeArgs(args);
|
|
317
|
+
if (!normalized.length)
|
|
318
|
+
return;
|
|
319
|
+
logPipeQueue = logPipeQueue.then(async () => {
|
|
320
|
+
const [updated, logs] = await engine.appendLog(this, task, normalized);
|
|
321
|
+
// Keep the original task object reference updated so composite execution doesn't
|
|
322
|
+
// overwrite logTail with stale state.
|
|
323
|
+
Object.assign(task, updated);
|
|
324
|
+
await engine.emitLog(this, task.id, logs);
|
|
325
|
+
});
|
|
326
|
+
await logPipeQueue;
|
|
311
327
|
},
|
|
312
328
|
flush: async () => {
|
|
313
329
|
return taskCtx.logger.flush(taskCtx.pipe);
|
|
@@ -334,7 +350,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
334
350
|
if (task.atomicity === TaskType.COMPOSITE) {
|
|
335
351
|
output = await this.runComposite(task, taskCtx);
|
|
336
352
|
try {
|
|
337
|
-
|
|
353
|
+
const latest = await this.tasks.read(task.id, taskCtx);
|
|
354
|
+
Object.assign(task, latest);
|
|
338
355
|
}
|
|
339
356
|
catch {
|
|
340
357
|
// keep best-effort task state
|
|
@@ -350,6 +367,9 @@ export class TaskEngine extends AbsContextual {
|
|
|
350
367
|
if (!handler)
|
|
351
368
|
throw new InternalError(`No task handler registered for type: ${task.classification}`);
|
|
352
369
|
output = await handler.run(task.input, taskCtx);
|
|
370
|
+
// TaskHandlers shouldn't need to explicitly call ctx.flush().
|
|
371
|
+
// Flush buffered logs before we persist final task state.
|
|
372
|
+
await taskCtx.flush();
|
|
353
373
|
log.verbose(`handler finished for ${task.id}`);
|
|
354
374
|
}
|
|
355
375
|
task.status = TaskStatus.SUCCEEDED;
|
|
@@ -357,14 +377,24 @@ export class TaskEngine extends AbsContextual {
|
|
|
357
377
|
task.error = undefined;
|
|
358
378
|
task.leaseOwner = undefined;
|
|
359
379
|
task.leaseExpiry = undefined;
|
|
360
|
-
|
|
380
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
381
|
+
Object.assign(task, persisted);
|
|
361
382
|
taskCtx.logger.info(`task ${task.id} success state ${task.status}`);
|
|
362
383
|
log.info(`task ${task.id} success state ${task.status} attempt ${task.attempt}`);
|
|
363
384
|
await this.emitStatus(taskCtx, task, TaskStatus.SUCCEEDED, output);
|
|
364
385
|
}
|
|
365
386
|
catch (err) {
|
|
387
|
+
// Ensure buffered handler logs are persisted before we emit any engine-generated logs/events.
|
|
388
|
+
// This preserves chronological ordering when TaskHandlers don't call ctx.flush().
|
|
389
|
+
try {
|
|
390
|
+
await taskCtx.flush();
|
|
391
|
+
}
|
|
392
|
+
catch {
|
|
393
|
+
// best-effort
|
|
394
|
+
}
|
|
366
395
|
try {
|
|
367
|
-
|
|
396
|
+
const latest = await this.tasks.read(task.id, taskCtx);
|
|
397
|
+
Object.assign(task, latest);
|
|
368
398
|
}
|
|
369
399
|
catch {
|
|
370
400
|
// keep best-effort task state for retries/failures
|
|
@@ -394,7 +424,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
394
424
|
task.error = serialized;
|
|
395
425
|
task.leaseOwner = undefined;
|
|
396
426
|
task.leaseExpiry = undefined;
|
|
397
|
-
|
|
427
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
428
|
+
Object.assign(task, persisted);
|
|
398
429
|
log.warn(`task ${task.id} waiting retry state ${task.status} attempt ${task.attempt}`);
|
|
399
430
|
await taskCtx.pipe(LogLevel.warn, `Retry scheduled`, {
|
|
400
431
|
nextRunAt,
|
|
@@ -409,7 +440,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
409
440
|
task.error = serialized;
|
|
410
441
|
task.leaseOwner = undefined;
|
|
411
442
|
task.leaseExpiry = undefined;
|
|
412
|
-
|
|
443
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
444
|
+
Object.assign(task, persisted);
|
|
413
445
|
log.error(`task ${task.id} failed state ${task.status} attempt ${task.attempt}`);
|
|
414
446
|
await taskCtx.pipe(LogLevel.error, `Task failed (max attempts reached)`, {
|
|
415
447
|
maxAttempts: task.maxAttempts,
|
|
@@ -506,6 +538,7 @@ export class TaskEngine extends AbsContextual {
|
|
|
506
538
|
}
|
|
507
539
|
}
|
|
508
540
|
while (idx < steps.length) {
|
|
541
|
+
context.setStep(idx);
|
|
509
542
|
const step = steps[idx];
|
|
510
543
|
const handler = this.registry.get(step.classification);
|
|
511
544
|
if (!handler)
|
|
@@ -516,6 +549,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
516
549
|
]);
|
|
517
550
|
try {
|
|
518
551
|
const out = await handler.run(step.input, context);
|
|
552
|
+
// Ensure step-tagged logs are flushed before advancing the step pointer.
|
|
553
|
+
await context.flush();
|
|
519
554
|
const stepIndex = idx;
|
|
520
555
|
const now = new Date();
|
|
521
556
|
results[stepIndex] = new TaskStepResultModel({
|
|
@@ -530,7 +565,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
530
565
|
idx = stepIndex + 1;
|
|
531
566
|
task.stepResults = results;
|
|
532
567
|
task.currentStep = idx;
|
|
533
|
-
|
|
568
|
+
const persisted = await this.tasks.update(task);
|
|
569
|
+
Object.assign(task, persisted);
|
|
534
570
|
await this.emitProgress(context, task.id, {
|
|
535
571
|
currentStep: idx,
|
|
536
572
|
totalSteps: steps.length,
|
|
@@ -549,7 +585,8 @@ export class TaskEngine extends AbsContextual {
|
|
|
549
585
|
task.currentStep = idx;
|
|
550
586
|
task.error = serializeError(err);
|
|
551
587
|
// persist failure context before throwing (retry logic happens outside)
|
|
552
|
-
|
|
588
|
+
const persisted = await this.tasks.update(task);
|
|
589
|
+
Object.assign(task, persisted);
|
|
553
590
|
throw err;
|
|
554
591
|
}
|
|
555
592
|
}
|
|
@@ -636,11 +673,17 @@ export class TaskEngine extends AbsContextual {
|
|
|
636
673
|
// -------------------------
|
|
637
674
|
async appendLog(ctx, task, logEntries) {
|
|
638
675
|
const isMulti = Array.isArray(logEntries) && Array.isArray(logEntries[0]);
|
|
676
|
+
const step = task.atomicity === TaskType.COMPOSITE
|
|
677
|
+
? ctx instanceof TaskContext
|
|
678
|
+
? (ctx.step ?? task.currentStep)
|
|
679
|
+
: task.currentStep
|
|
680
|
+
: undefined;
|
|
639
681
|
const entries = (isMulti ? logEntries : [logEntries]).map(([level, msg, meta]) => {
|
|
640
682
|
return new TaskLogEntryModel({
|
|
641
683
|
level,
|
|
642
684
|
msg,
|
|
643
685
|
meta,
|
|
686
|
+
step,
|
|
644
687
|
});
|
|
645
688
|
});
|
|
646
689
|
const nextTail = [...(task.logTail ?? []), ...entries].slice(-this.config.logTailMax);
|
|
@@ -681,9 +724,30 @@ export class TaskEngine extends AbsContextual {
|
|
|
681
724
|
level: e.level,
|
|
682
725
|
msg: e.msg,
|
|
683
726
|
meta: e.meta,
|
|
727
|
+
step: e.step,
|
|
684
728
|
})));
|
|
685
729
|
this.bus.emit(evt, ctx);
|
|
686
730
|
}
|
|
731
|
+
normalizePipeArgs(args) {
|
|
732
|
+
if (!args.length)
|
|
733
|
+
return [];
|
|
734
|
+
if (args.length === 1) {
|
|
735
|
+
const value = args[0];
|
|
736
|
+
if (!Array.isArray(value))
|
|
737
|
+
return [];
|
|
738
|
+
if (value.length === 0)
|
|
739
|
+
return [];
|
|
740
|
+
// Either [level,msg,meta?] or [[level,msg,meta?], ...]
|
|
741
|
+
if (Array.isArray(value[0])) {
|
|
742
|
+
return value.filter(Array.isArray);
|
|
743
|
+
}
|
|
744
|
+
return [value];
|
|
745
|
+
}
|
|
746
|
+
const [level, msg, meta] = args;
|
|
747
|
+
if (typeof level !== "string" || typeof msg !== "string")
|
|
748
|
+
return [];
|
|
749
|
+
return [[level, msg, meta]];
|
|
750
|
+
}
|
|
687
751
|
async emitProgress(ctx, taskId, data) {
|
|
688
752
|
const evt = await this.persistEvent(ctx, taskId, TaskEventType.PROGRESS, data);
|
|
689
753
|
this.bus.emit(evt, ctx);
|
|
@@ -700,4 +764,4 @@ export class TaskEngine extends AbsContextual {
|
|
|
700
764
|
return this.adapter.context(operation, overrides, TaskModel, ...args);
|
|
701
765
|
}
|
|
702
766
|
}
|
|
703
|
-
//# sourceMappingURL=TaskEngine.js.map
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YXNrcy9UYXNrRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsOEJBQTJCO0FBRS9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUNBQWdDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQ0FBOEI7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBdUI7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQ0FBMkI7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHdDQUFxQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0NBQW1DO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQ0FBa0M7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNDQUFtQztBQUMvRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxHQUNULHVCQUFvQjtBQUlyQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUNMLGFBQWEsR0FHZCw0Q0FBdUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxtQkFBZ0I7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSx5QkFBc0I7QUFDNUMsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixrQ0FBK0I7QUFHaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxxQkFBa0I7QUFPdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQ0FBZ0M7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSx5QkFBc0I7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFELE9BQU8s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QztRQUNwRSxPQUFPLENBQUMsQ0FBQyxLQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxLQUFLLENBQUMsWUFBWSxDQUMxQixHQUEwQixFQUMxQixNQUFjLEVBQ2QsSUFBUztRQUVULE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FDakMsR0FBRyxFQUNILE1BQU0sRUFDTixhQUFhLENBQUMsUUFBUSxFQUN0QixJQUFJLENBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FDMUIsR0FBMEIsRUFDMUIsTUFBYyxFQUNkLElBQW1CLEVBQ25CLE9BQVk7UUFFWixNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVRLFFBQVE7UUFDZixPQUFPLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUM7SUFDcEQsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPLENBQ3BCLFNBTVUsRUFDVixTQUF5QyxFQUN6QyxHQUFHLElBQVc7UUFFZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tNb2RlbFwiO1xuaW1wb3J0IHsgUmVwbyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFRhc2tFdmVudE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tFdmVudE1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4vVGFza0hhbmRsZXJSZWdpc3RyeVwiO1xuaW1wb3J0IHsgVGFza0V2ZW50QnVzIH0gZnJvbSBcIi4vVGFza0V2ZW50QnVzXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi4vcXVlcnkvQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBUYXNrU3RlcFJlc3VsdE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tTdGVwUmVzdWx0TW9kZWxcIjtcbmltcG9ydCB7IFRhc2tMb2dFbnRyeU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tMb2dFbnRyeU1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrQmFja29mZk1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tCYWNrb2ZmTW9kZWxcIjtcbmltcG9ydCB7IFRhc2tTdGVwU3BlY01vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tTdGVwU3BlY01vZGVsXCI7XG5pbXBvcnQge1xuICBEZWZhdWx0VGFza0VuZ2luZUNvbmZpZyxcbiAgVGFza0V2ZW50VHlwZSxcbiAgVGFza1N0YXR1cyxcbiAgVGFza1R5cGUsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0NvbnRleHRcIjtcbmltcG9ydCB7IENvbnRleHRPZiwgRmxhZ3NPZiB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7XG4gIEFic0NvbnRleHR1YWwsXG4gIENvbnRleHR1YWxBcmdzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG59IGZyb20gXCIuLi91dGlscy9Db250ZXh0dWFsTG9nZ2VkQ2xhc3NcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IsIE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGNvbXB1dGVCYWNrb2ZmTXMsIHNlcmlhbGl6ZUVycm9yLCBzbGVlcCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBUYXNrQ29udGV4dCB9IGZyb20gXCIuL1Rhc2tDb250ZXh0XCI7XG5pbXBvcnQge1xuICBUYXNrU3RhdGVDaGFuZ2VFcnJvcixcbiAgVGFza1N0YXRlQ2hhbmdlUmVxdWVzdCxcbn0gZnJvbSBcIi4vVGFza1N0YXRlQ2hhbmdlRXJyb3JcIjtcbmltcG9ydCB7IERhdGVUYXJnZXQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgVGFza0xvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7XG4gIFRhc2tFbmdpbmVDb25maWcsXG4gIFRhc2tFbmdpbmVBdXRvU2h1dGRvd25Db25maWcsXG4gIFRhc2tGbGFncyxcbiAgVGFza1Byb2dyZXNzUGF5bG9hZCxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFRhc2tFcnJvck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tFcnJvck1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrVHJhY2tlciB9IGZyb20gXCIuL1Rhc2tUcmFja2VyXCI7XG5pbXBvcnQgeyBMb2NrIH0gZnJvbSBcIkBkZWNhZi10cy90cmFuc2FjdGlvbmFsLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9pbmRleFwiO1xuXG5leHBvcnQgY2xhc3MgVGFza0VuZ2luZTxcbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PixcbiAgQyBleHRlbmRzIFRhc2tFbmdpbmVDb25maWc8QT4gPSBUYXNrRW5naW5lQ29uZmlnPEE+LFxuPiBleHRlbmRzIEFic0NvbnRleHR1YWw8Q29udGV4dE9mPEE+PiB7XG4gIHByaXZhdGUgX3Rhc2tzPzogUmVwbzxUYXNrTW9kZWw+O1xuICBwcml2YXRlIF9ldmVudHM/OiBSZXBvPFRhc2tFdmVudE1vZGVsPjtcbiAgcHJpdmF0ZSBfYWRhcHRlcj86IEE7XG5cbiAgcHJvdGVjdGVkIGxvY2sgPSBuZXcgTG9jaygpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgQ29udGV4dCgpOiBDb25zdHJ1Y3RvcjxDb250ZXh0T2Y8QT4+IHtcbiAgICByZXR1cm4gVGFza0NvbnRleHQgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxDb250ZXh0T2Y8QT4+O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBhZGFwdGVyKCk6IEEge1xuICAgIGlmICghdGhpcy5fYWRhcHRlcikge1xuICAgICAgdGhpcy5fYWRhcHRlciA9IHRoaXMuY29uZmlnLmFkYXB0ZXI7XG4gICAgICBpZiAodGhpcy5jb25maWcub3ZlcnJpZGVzKVxuICAgICAgICB0aGlzLl9hZGFwdGVyID0gdGhpcy5hZGFwdGVyLmZvcih0aGlzLmNvbmZpZy5vdmVycmlkZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWRhcHRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcmVnaXN0cnkoKTogVGFza0hhbmRsZXJSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlZ2lzdHJ5ITtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYnVzKCk6IFRhc2tFdmVudEJ1cyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ1cyE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhc2tzKCk6IFJlcG88VGFza01vZGVsPiB7XG4gICAgaWYgKHRoaXMuX3Rhc2tzKSByZXR1cm4gdGhpcy5fdGFza3M7XG4gICAgdGhpcy5fdGFza3MgPSBuZXcgKHRoaXMuYWRhcHRlci5yZXBvc2l0b3J5KCkpKFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgVGFza01vZGVsLFxuICAgICAgdHJ1ZVxuICAgICkub3ZlcnJpZGUoe1xuICAgICAgYWZ0ZXJRdWVyeUhhbmRsZXJzOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90YXNrcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZXZlbnRzKCk6IFJlcG88VGFza0V2ZW50TW9kZWw+IHtcbiAgICBpZiAodGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcy5fZXZlbnRzO1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyAodGhpcy5hZGFwdGVyLnJlcG9zaXRvcnkoKSkoXG4gICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICBUYXNrRXZlbnRNb2RlbCxcbiAgICAgIHRydWVcbiAgICApLm92ZXJyaWRlKHtcbiAgICAgIGFmdGVyUXVlcnlIYW5kbGVyczogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJ1bm5pbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpZGxlRGVsYXlNczogbnVtYmVyO1xuXG4gIHN0YXRpYyBjcmVhdGVUYXNrQ29udGV4dChcbiAgICBiYXNlPzogQ29udGV4dDxhbnk+LFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8VGFza0ZsYWdzPlxuICApOiBUYXNrQ29udGV4dCB7XG4gICAgY29uc3QgY3R4ID0gbmV3IFRhc2tDb250ZXh0KGJhc2UpO1xuICAgIGlmIChvdmVycmlkZXMgJiYgT2JqZWN0LmtleXMob3ZlcnJpZGVzKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjdHguYWNjdW11bGF0ZShvdmVycmlkZXMpIGFzIFRhc2tDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbmZpZzogQykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgYXV0b1NodXRkb3duID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdFRhc2tFbmdpbmVDb25maWcuYXV0b1NodXRkb3duLFxuICAgICAgY29uZmlnLmF1dG9TaHV0ZG93blxuICAgICk7XG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0VGFza0VuZ2luZUNvbmZpZywgY29uZmlnLCB7XG4gICAgICBhdXRvU2h1dGRvd24sXG4gICAgICBidXM6IGNvbmZpZy5idXMgfHwgbmV3IFRhc2tFdmVudEJ1cygpLFxuICAgICAgcmVnaXN0cnk6IGNvbmZpZy5yZWdpc3RyeSB8fCBuZXcgVGFza0hhbmRsZXJSZWdpc3RyeSgpLFxuICAgIH0pO1xuICAgIHRoaXMuaWRsZURlbGF5TXMgPSB0aGlzLmNvbmZpZy5wb2xsTXNJZGxlO1xuICB9XG5cbiAgYXN5bmMgcHVzaDxJLCBPPihcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz4sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxUYXNrTW9kZWw8SSwgTz4+O1xuICBhc3luYyBwdXNoPEksIE8+KFxuICAgIHRhc2s6IFRhc2tNb2RlbDxJLCBPPixcbiAgICB0cmFjazogZmFsc2UsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxUYXNrTW9kZWw8SSwgTz4+O1xuICBhc3luYyBwdXNoPEksIE8+KFxuICAgIHRhc2s6IFRhc2tNb2RlbDxJLCBPPixcbiAgICB0cmFjazogdHJ1ZSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPHtcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz47XG4gICAgdHJhY2tlcjogVGFza1RyYWNrZXI8KHR5cGVvZiB0YXNrKVtcIm91dHB1dFwiXT47XG4gIH0+O1xuICBhc3luYyBwdXNoPEksIE8sIFRSQUNLIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIHRyYWNrOiBUUkFDSyA9IGZhbHNlIGFzIFRSQUNLLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8XG4gICAgVFJBQ0sgZXh0ZW5kcyB0cnVlXG4gICAgICA/IHsgdGFzazogVGFza01vZGVsPEksIE8+OyB0cmFja2VyOiBUYXNrVHJhY2tlcjxPPiB9XG4gICAgICA6IFRhc2tNb2RlbFxuICA+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBPcGVyYXRpb25LZXlzLkNSRUFURSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnB1c2gpO1xuICAgIGxvZy52ZXJib3NlKGBwdXNoaW5nIHRhc2sgJHt0YXNrLmNsYXNzaWZpY2F0aW9ufWApO1xuICAgIGNvbnN0IHQgPSBhd2FpdCB0aGlzLnRhc2tzLmNyZWF0ZSh0YXNrLCBjdHgpO1xuICAgIGxvZy5pbmZvKGAke3Rhc2suY2xhc3NpZmljYXRpb259IHRhc2sgcmVnaXN0ZXJlZCB1bmRlciAke3QuaWR9YCk7XG4gICAgaWYgKCF0cmFjaykgcmV0dXJuIHQgYXMgYW55O1xuICAgIGNvbnN0IHRyYWNrZXIgPSBuZXcgVGFza1RyYWNrZXI8Tz4odGhpcy5idXMsIHQpO1xuICAgIHJldHVybiB7IHRhc2s6IHQsIHRyYWNrZXIgfSBhcyBhbnk7XG4gIH1cblxuICBzY2hlZHVsZTxJLCBPPihcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz4sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKToge1xuICAgIGZvcjogKHdoZW46IERhdGVUYXJnZXQpID0+IFByb21pc2U8VGFza01vZGVsPEksIE8+PjtcbiAgfTtcbiAgc2NoZWR1bGU8SSwgTz4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIHRyYWNrOiBmYWxzZSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiB7XG4gICAgZm9yOiAod2hlbjogRGF0ZVRhcmdldCkgPT4gUHJvbWlzZTxUYXNrTW9kZWw8SSwgTz4+O1xuICB9O1xuICBzY2hlZHVsZTxJLCBPPihcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz4sXG4gICAgdHJhY2s6IHRydWUsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKToge1xuICAgIGZvcjogKFxuICAgICAgd2hlbjogRGF0ZVRhcmdldFxuICAgICkgPT4gUHJvbWlzZTx7IHRhc2s6IFRhc2tNb2RlbDxJLCBPPjsgdHJhY2tlcjogVGFza1RyYWNrZXI8Tz4gfT47XG4gIH07XG4gIHNjaGVkdWxlPEksIE8sIFRSQUNLIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIHRyYWNrOiBUUkFDSyA9IGZhbHNlIGFzIFRSQUNLLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IHtcbiAgICBmb3I6IChcbiAgICAgIHdoZW46IERhdGVUYXJnZXRcbiAgICApID0+IFByb21pc2U8XG4gICAgICBUUkFDSyBleHRlbmRzIHRydWVcbiAgICAgICAgPyB7IHRhc2s6IFRhc2tNb2RlbDxJLCBPPjsgdHJhY2tlcjogVGFza1RyYWNrZXI8Tz4gfVxuICAgICAgICA6IFRhc2tNb2RlbDxJLCBPPlxuICAgID47XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBmb3I6IGFzeW5jIChcbiAgICAgICAgd2hlbjogRGF0ZVRhcmdldFxuICAgICAgKTogUHJvbWlzZTxcbiAgICAgICAgVFJBQ0sgZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyB7IHRhc2s6IFRhc2tNb2RlbDxJLCBPPjsgdHJhY2tlcjogVGFza1RyYWNrZXI8Tz4gfVxuICAgICAgICAgIDogVGFza01vZGVsPEksIE8+XG4gICAgICA+ID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZWR1bGVkVG86IERhdGUgPSB3aGVuIGluc3RhbmNlb2YgRGF0ZSA/IHdoZW4gOiB3aGVuLmJ1aWxkKCk7XG4gICAgICAgIHRhc2suc3RhdHVzID0gVGFza1N0YXR1cy5TQ0hFRFVMRUQ7XG4gICAgICAgIHRhc2suc2NoZWR1bGVkVG8gPSBzY2hlZHVsZWRUbztcbiAgICAgICAgdGFzay5uZXh0UnVuQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2subGVhc2VPd25lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGFzay5sZWFzZUV4cGlyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnB1c2godGFzaywgdHJhY2ssIC4uLmFyZ3MpKSBhcyBhbnk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyB0cmFjayhpZDogc3RyaW5nLCAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55Pikge1xuICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIE9wZXJhdGlvbktleXMuUkVBRCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnRyYWNrKTtcbiAgICBsb2cudmVyYm9zZShgdHJhY2tpbmcgdGFzayAke2lkfWApO1xuICAgIGxldCB0YXNrID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKGlkLCBjdHgpO1xuICAgIHRhc2sgPSBhd2FpdCB0aGlzLmVuc3VyZVRhc2tFcnJvcih0YXNrLCBjdHgpO1xuICAgIGxvZy5pbmZvKGAke3Rhc2suY2xhc3NpZmljYXRpb259IHRhc2sgZm91bmQgd2l0aCBpZCAke2lkfWApO1xuICAgIGNvbnN0IHRyYWNrZXIgPSBuZXcgVGFza1RyYWNrZXI8KHR5cGVvZiB0YXNrKVtcIm91dHB1dFwiXT4odGhpcy5idXMsIHRhc2spO1xuICAgIHJldHVybiB7IHRhc2ssIHRyYWNrZXIgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbnN1cmVUYXNrRXJyb3IoXG4gICAgdGFzazogVGFza01vZGVsLFxuICAgIGN0eDogQ29udGV4dFxuICApOiBQcm9taXNlPFRhc2tNb2RlbD4ge1xuICAgIGlmIChcbiAgICAgICFbVGFza1N0YXR1cy5GQUlMRUQsIFRhc2tTdGF0dXMuQ0FOQ0VMRURdLmluY2x1ZGVzKHRhc2suc3RhdHVzKSB8fFxuICAgICAgdGFzay5lcnJvclxuICAgICkge1xuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfVxuICAgIGxldCBjdXJyZW50ID0gdGFzaztcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDY7IGF0dGVtcHQgKz0gMSkge1xuICAgICAgYXdhaXQgc2xlZXAoMjApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKGN1cnJlbnQuaWQsIGN0eCk7XG4gICAgICAgIGlmIChsYXRlc3QuZXJyb3IpIHJldHVybiBsYXRlc3Q7XG4gICAgICAgIGN1cnJlbnQgPSBsYXRlc3Q7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxUYXNrTW9kZWw+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiY2FuY2VsXCIsIHRydWUpKS5mb3IodGhpcy5jYW5jZWwpO1xuICAgIGNvbnN0IHQgPSBhd2FpdCB0aGlzLnRhc2tzLnJlYWQoaWQsIGN0eCk7XG4gICAgaWYgKHQuc3RhdHVzID09PSBUYXNrU3RhdHVzLlNVQ0NFRURFRCB8fCB0LnN0YXR1cyA9PT0gVGFza1N0YXR1cy5GQUlMRUQpXG4gICAgICByZXR1cm4gdDtcbiAgICB0LnN0YXR1cyA9IFRhc2tTdGF0dXMuQ0FOQ0VMRUQ7XG4gICAgY29uc3QgY2FuY2VsRXJyb3IgPSBuZXcgVGFza0Vycm9yTW9kZWwoe1xuICAgICAgbWVzc2FnZTogYFRhc2sgJHt0LmlkfSBjYW5jZWxlZGAsXG4gICAgICBjb2RlOiA0MDAsXG4gICAgfSk7XG4gICAgdC5lcnJvciA9IGNhbmNlbEVycm9yO1xuICAgIHQubGVhc2VPd25lciA9IHVuZGVmaW5lZDtcbiAgICB0LmxlYXNlRXhwaXJ5ID0gdW5kZWZpbmVkO1xuICAgIHQubmV4dFJ1bkF0ID0gdW5kZWZpbmVkO1xuICAgIHQuc2NoZWR1bGVkVG8gPSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0LCBjdHgpO1xuICAgIGF3YWl0IHRoaXMuZW1pdFN0YXR1cyhjdHgsIHNhdmVkLCBUYXNrU3RhdHVzLkNBTkNFTEVELCBjYW5jZWxFcnJvcik7XG4gICAgcmV0dXJuIHNhdmVkO1xuICB9XG5cbiAgYXN5bmMgaXNSdW5uaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgY29uc3QgcnVubmluZyA9IHRoaXMucnVubmluZztcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBydW5uaW5nO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwicnVuXCIsIHRydWUpKS5mb3IodGhpcy5zdGFydCk7XG4gICAgYXdhaXQgdGhpcy5sb2NrLmFjcXVpcmUoKTtcbiAgICBpZiAodGhpcy5ydW5uaW5nKSByZXR1cm47XG4gICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHRoaXMuaWRsZURlbGF5TXMgPSB0aGlzLmNvbmZpZy5wb2xsTXNJZGxlO1xuICAgIHZvaWQgdGhpcy5sb29wKGN0eCk7XG4gIH1cblxuICBhc3luYyBzdG9wKC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUGVyc2lzdGVuY2VLZXlzLlNIVVRET1dOLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuc3RvcCk7XG4gICAgYXdhaXQgdGhpcy5sb2NrLmFjcXVpcmUoKTtcbiAgICBpZiAoIXRoaXMucnVubmluZylcbiAgICAgIGxvZy53YXJuKGBzdG9wIG1ldGhvZCBjYWxsZWQgd2hlbiB0YXNrIGVuZ2luZSB3YXMgbm90IHJ1bm5pbmdgKTtcbiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuXG4gICAgY29uc3QgcnVubmluZ1Rhc2tzID0gYXdhaXQgdGhpcy50YXNrc1xuICAgICAgLnNlbGVjdChbXCJpZFwiXSlcbiAgICAgIC53aGVyZShDb25kaXRpb24uYXR0cjxUYXNrTW9kZWw+KFwic3RhdHVzXCIpLmVxKFRhc2tTdGF0dXMuUlVOTklORykpXG4gICAgICAuZXhlY3V0ZShjdHgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9XG4gICAgICBjdHguZ2V0T3JVbmRlZmluZWQ/LihcImdyYWNlZnVsU2h1dGRvd25Nc1RpbWVvdXRcIikgPz9cbiAgICAgIHRoaXMuY29uZmlnLmdyYWNlZnVsU2h1dGRvd25Nc1RpbWVvdXQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbG9nLmVycm9yKGBHcmFjZWZ1bCBzaHV0ZG93biBpbnRlcnJ1cHRlZCBhZnRlciAke3RpbWVvdXR9IG1zLi4uYCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIHJ1bm5pbmdUYXNrcy5tYXAoXG4gICAgICAgICAgKHsgaWQgfSkgPT5cbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50cmFjayhpZCwgY3R4KVxuICAgICAgICAgICAgICAgIC50aGVuKCh7IHRyYWNrZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJhY2tlci5yZXNvbHZlKCkudGhlbihyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgIGBHcmFjZWZ1bCBzaHV0ZG93biBjb21wbGV0ZWQgYmVmb3JlIGV4cGlyeS4gY29uY2x1ZGVkICR7cmVzdWx0Lmxlbmd0aH0gdGFza3NgXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFdvcmtlciBsb29wXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9vcCguLi5hcmdzOiBDb250ZXh0dWFsQXJnczxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMubG9vcCk7XG4gICAgY29uc3QgYXV0b1NodXRkb3duQ29uZmlnOiBUYXNrRW5naW5lQXV0b1NodXRkb3duQ29uZmlnID0gdGhpcy5jb25maWdcbiAgICAgIC5hdXRvU2h1dGRvd24gPz8ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBiYWNrb2ZmU3RlcE1zOiAwLFxuICAgICAgbWF4SWRsZURlbGF5TXM6IHRoaXMuY29uZmlnLnBvbGxNc0lkbGUsXG4gICAgfTtcbiAgICBjb25zdCBtYXhJZGxlRGVsYXkgPSBNYXRoLm1heChcbiAgICAgIGF1dG9TaHV0ZG93bkNvbmZpZy5tYXhJZGxlRGVsYXlNcyA/PyB0aGlzLmNvbmZpZy5wb2xsTXNJZGxlLFxuICAgICAgdGhpcy5jb25maWcucG9sbE1zSWRsZVxuICAgICk7XG4gICAgY29uc3QgYmFja29mZlN0ZXBNcyA9IGF1dG9TaHV0ZG93bkNvbmZpZy5iYWNrb2ZmU3RlcE1zID8/IDA7XG5cbiAgICB3aGlsZSAoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgY29uc3QgY2xhaW1lZCA9IGF3YWl0IHRoaXMuY2xhaW1CYXRjaChjdHgpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNsYWltZWQubWFwKCh0KSA9PiB0aGlzLmV4ZWN1dGVDbGFpbWVkKHQpKSk7XG5cbiAgICAgIGNvbnN0IGlkbGUgPSBjbGFpbWVkLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlmIChpZGxlKSB7XG4gICAgICAgIGlmIChhdXRvU2h1dGRvd25Db25maWcuZW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuaWRsZURlbGF5TXMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIHRoaXMuaWRsZURlbGF5TXMgKyBiYWNrb2ZmU3RlcE1zLFxuICAgICAgICAgICAgbWF4SWRsZURlbGF5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5pZGxlRGVsYXlNcyA+PSBtYXhJZGxlRGVsYXkpIHtcbiAgICAgICAgICAgIGN0eC5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgYGF1dG8tc2h1dGRvd24gdHJpZ2dlcmVkIGFmdGVyICR7dGhpcy5pZGxlRGVsYXlNc31tcyBpZGxlIHBvbGxpbmdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9wKGN0eCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaWRsZURlbGF5TXMgPSB0aGlzLmNvbmZpZy5wb2xsTXNJZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlkbGVEZWxheU1zID0gdGhpcy5jb25maWcucG9sbE1zSWRsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FpdE1zID0gaWRsZSA/IHRoaXMuaWRsZURlbGF5TXMgOiB0aGlzLmNvbmZpZy5wb2xsTXNCdXN5O1xuICAgICAgYXdhaXQgc2xlZXAoTWF0aC5tYXgod2FpdE1zLCAwKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNsYWltQmF0Y2goY3R4OiBDb250ZXh0PGFueT4pOiBQcm9taXNlPFRhc2tNb2RlbFtdPiB7XG4gICAgY29uc3QgbG9nID0gY3R4LmxvZ2dlci5mb3IodGhpcy5jbGFpbUJhdGNoKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gUnVubmFibGU6XG4gICAgLy8gLSBQRU5ESU5HXG4gICAgLy8gLSBXQUlUSU5HX1JFVFJZIHdpdGggbmV4dFJ1bkF0IDw9IG5vd1xuICAgIC8vIC0gUlVOTklORyB3aXRoIGV4cGlyZWQgbGVhc2UgKHJlY292ZXJ5KVxuICAgIGNvbnN0IGNvbmRQZW5kaW5nID0gQ29uZGl0aW9uLmF0dHJpYnV0ZTxUYXNrTW9kZWw+KFwic3RhdHVzXCIpLmVxKFxuICAgICAgVGFza1N0YXR1cy5QRU5ESU5HXG4gICAgKTtcbiAgICBjb25zdCBjb25kUmV0cnkgPSBDb25kaXRpb24uYXR0cmlidXRlPFRhc2tNb2RlbD4oXCJzdGF0dXNcIilcbiAgICAgIC5lcShUYXNrU3RhdHVzLldBSVRJTkdfUkVUUlkpXG4gICAgICAuYW5kKENvbmRpdGlvbi5hdHRyaWJ1dGU8VGFza01vZGVsPihcIm5leHRSdW5BdFwiKS5sdGUobm93KSk7XG5cbiAgICBjb25zdCBjb25kTGVhc2VFeHBpcmVkID0gQ29uZGl0aW9uLmF0dHJpYnV0ZTxUYXNrTW9kZWw+KFwic3RhdHVzXCIpXG4gICAgICAuZXEoVGFza1N0YXR1cy5SVU5OSU5HKVxuICAgICAgLmFuZChDb25kaXRpb24uYXR0cmlidXRlPFRhc2tNb2RlbD4oXCJsZWFzZUV4cGlyeVwiKS5sdGUobm93KSk7XG5cbiAgICBjb25zdCBjb25kU2NoZWR1bGVkID0gQ29uZGl0aW9uLmF0dHJpYnV0ZTxUYXNrTW9kZWw+KFwic3RhdHVzXCIpXG4gICAgICAuZXEoVGFza1N0YXR1cy5TQ0hFRFVMRUQpXG4gICAgICAuYW5kKENvbmRpdGlvbi5hdHRyaWJ1dGU8VGFza01vZGVsPihcInNjaGVkdWxlZFRvXCIpLmx0ZShub3cpKTtcblxuICAgIGNvbnN0IHJ1bm5hYmxlID0gY29uZFBlbmRpbmdcbiAgICAgIC5vcihjb25kUmV0cnkpXG4gICAgICAub3IoY29uZExlYXNlRXhwaXJlZClcbiAgICAgIC5vcihjb25kU2NoZWR1bGVkKTtcblxuICAgIC8vIEZldGNoIG1vcmUgdGhhbiBjb25jdXJyZW5jeSBiZWNhdXNlIHNvbWUgd2lsbCBmYWlsIHRvIGNsYWltIGR1ZSB0byBjb25mbGljdHNcbiAgICBjb25zdCBjYW5kaWRhdGVzOiBUYXNrTW9kZWxbXSA9IGF3YWl0IHRoaXMudGFza3NcbiAgICAgIC5zZWxlY3QoKVxuICAgICAgLndoZXJlKHJ1bm5hYmxlKVxuICAgICAgLmxpbWl0KE1hdGgubWF4KHRoaXMuY29uZmlnLmNvbmN1cnJlbmN5ICogNCwgMjApKVxuICAgICAgLmV4ZWN1dGUoKTtcblxuICAgIGxvZy52ZXJib3NlKGBjbGFpbUJhdGNoIGNhbmRpZGF0ZXM6JHtjYW5kaWRhdGVzLmxlbmd0aH1gKTtcblxuICAgIGNvbnN0IG91dDogVGFza01vZGVsW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY2FuZGlkYXRlcykge1xuICAgICAgY29uc3QgY2xhaW1lZCA9IGF3YWl0IHRoaXMudHJ5Q2xhaW0oYywgY3R4KTtcbiAgICAgIGlmIChjbGFpbWVkKSBvdXQucHVzaChjbGFpbWVkKTtcbiAgICAgIGlmIChvdXQubGVuZ3RoID49IHRoaXMuY29uZmlnLmNvbmN1cnJlbmN5KSBicmVhaztcbiAgICB9XG4gICAgbG9nLnZlcmJvc2UoYGNsYWltQmF0Y2ggY2xhaW1lZDoke291dC5sZW5ndGh9YCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB0cnlDbGFpbShcbiAgICB0YXNrOiBUYXNrTW9kZWwsXG4gICAgY3R4OiBDb250ZXh0XG4gICk6IFByb21pc2U8VGFza01vZGVsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZyA9IGN0eC5sb2dnZXIuZm9yKHRoaXMuY2xhaW1CYXRjaCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBsZXQgc291cmNlOiBUYXNrTW9kZWwgPSB0YXNrO1xuICAgIHRyeSB7XG4gICAgICBzb3VyY2UgPSBhd2FpdCB0aGlzLnRhc2tzLnJlYWQodGFzay5pZCwgY3R4KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIGNhbmRpZGF0ZSBwYXlsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1lZCA9IG5ldyBUYXNrTW9kZWwoe1xuICAgICAgLi4uc291cmNlLFxuICAgICAgc3RhdHVzOiBUYXNrU3RhdHVzLlJVTk5JTkcsXG4gICAgICBsZWFzZU93bmVyOiB0aGlzLmNvbmZpZy53b3JrZXJJZC50b1N0cmluZygpLFxuICAgICAgbGVhc2VFeHBpcnk6IG5ldyBEYXRlKFxuICAgICAgICBub3cgKyAocGFyc2VJbnQodGhpcy5jb25maWcubGVhc2VNcy50b1N0cmluZygpKSB8fCA2MF8wMDApXG4gICAgICApLFxuICAgICAgc2NoZWR1bGVkVG86IHVuZGVmaW5lZCxcbiAgICAgIG5leHRSdW5BdDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgbG9nLmluZm8oXG4gICAgICBgcnVubmluZyBoYW5kbGVyIGZvciAke3Rhc2suaWR9ICgke3Rhc2suY2xhc3NpZmljYXRpb259KSBhdG9taWNpdHkgJHt0YXNrLmF0b21pY2l0eX1gXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgLy8gb3B0aW1pc3RpYyB1cGRhdGU7IGNvbmZsaWN0IGVycm9ycyBkZXBlbmQgb24gYWRhcHRlciBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudGFza3MudXBkYXRlKGNsYWltZWQsIGN0eCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEV4ZWN1dGlvblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGV4ZWN1dGVDbGFpbWVkKHRhc2s6IFRhc2tNb2RlbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgdGFzay5jbGFzc2lmaWNhdGlvbiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuZXhlY3V0ZUNsYWltZWRcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IGVuZ2luZSA9IHRoaXM7XG4gICAgbGV0IGxvZ1BpcGVRdWV1ZTogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0IHRhc2tDdHg6IFRhc2tDb250ZXh0ID0gbmV3IFRhc2tDb250ZXh0KGN0eCkuYWNjdW11bGF0ZSh7XG4gICAgICB0YXNrSWQ6IHRhc2suaWQsXG4gICAgICBsb2dnZXI6IG5ldyBUYXNrTG9nZ2VyKFxuICAgICAgICBsb2csXG4gICAgICAgIHRoaXMuY29uZmlnLnN0cmVhbUJ1ZmZlclNpemUsXG4gICAgICAgIHRoaXMuY29uZmlnLm1heExvZ2dpbmdCdWZmZXJcbiAgICAgICksXG4gICAgICBhdHRlbXB0OiB0YXNrLmF0dGVtcHQsXG4gICAgICByZXN1bHRDYWNoZTogeyBcInRhc2suYXR0ZW1wdFwiOiB0YXNrLmF0dGVtcHQgfSxcbiAgICAgIHBpcGU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBUYXNrQ29udGV4dCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGVuZ2luZS5ub3JtYWxpemVQaXBlQXJncyhhcmdzKTtcbiAgICAgICAgaWYgKCFub3JtYWxpemVkLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsb2dQaXBlUXVldWUgPSBsb2dQaXBlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgW3VwZGF0ZWQsIGxvZ3NdID0gYXdhaXQgZW5naW5lLmFwcGVuZExvZyhcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgbm9ybWFsaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwgdGFzayBvYmplY3QgcmVmZXJlbmNlIHVwZGF0ZWQgc28gY29tcG9zaXRlIGV4ZWN1dGlvbiBkb2Vzbid0XG4gICAgICAgICAgLy8gb3ZlcndyaXRlIGxvZ1RhaWwgd2l0aCBzdGFsZSBzdGF0ZS5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIHVwZGF0ZWQpO1xuICAgICAgICAgIGF3YWl0IGVuZ2luZS5lbWl0TG9nKHRoaXMsIHRhc2suaWQsIGxvZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgbG9nUGlwZVF1ZXVlO1xuICAgICAgfSxcbiAgICAgIGZsdXNoOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0YXNrQ3R4LmxvZ2dlci5mbHVzaCh0YXNrQ3R4LnBpcGUpO1xuICAgICAgfSxcbiAgICAgIHByb2dyZXNzOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFByb2dyZXNzKHRhc2tDdHgsIHRhc2suaWQsIGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGhlYXJ0YmVhdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBleHRlbmQgbGVhc2VcbiAgICAgICAgaWYgKHRhc2subGVhc2VPd25lciAhPT0gdGhpcy5jb25maWcud29ya2VySWQpIHJldHVybjtcbiAgICAgICAgdGFzay5sZWFzZUV4cGlyeSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyB0aGlzLmNvbmZpZy5sZWFzZU1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0YXNrID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzayk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGlmIHdlIGxvc2UgdGhlIGNsYWltLCBleGVjdXRpb24gc2hvdWxkIHN0aWxsIHByb2NlZWQ7IG5leHQgdXBkYXRlIHdpbGwgZmFpbCBhbmQgYmUgcmV0cmllZCBieSByZWNvdmVyeVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pIGFzIFRhc2tDb250ZXh0O1xuXG4gICAgYXdhaXQgdGhpcy5lbWl0U3RhdHVzKHRhc2tDdHgsIHRhc2ssIFRhc2tTdGF0dXMuUlVOTklORyk7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IG91dHB1dDogYW55O1xuICAgICAgaWYgKHRhc2suYXRvbWljaXR5ID09PSBUYXNrVHlwZS5DT01QT1NJVEUpIHtcbiAgICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5ydW5Db21wb3NpdGUodGFzaywgdGFza0N0eCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKHRhc2suaWQsIHRhc2tDdHgpO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFzaywgbGF0ZXN0KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8ga2VlcCBiZXN0LWVmZm9ydCB0YXNrIHN0YXRlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dD8uc3RlcFJlc3VsdHMpIHtcbiAgICAgICAgICB0YXNrLnN0ZXBSZXN1bHRzID0gb3V0cHV0LnN0ZXBSZXN1bHRzO1xuICAgICAgICAgIHRhc2suY3VycmVudFN0ZXAgPSBvdXRwdXQuc3RlcFJlc3VsdHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZWdpc3RyeS5nZXQodGFzay5jbGFzc2lmaWNhdGlvbik7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBgaGFuZGxlciB0eXBlIGZvciAke3Rhc2suaWR9IGlzICR7aGFuZGxlcj8uY29uc3RydWN0b3I/Lm5hbWUgPz8gXCJub25lXCJ9YFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWhhbmRsZXIpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgTm8gdGFzayBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIHR5cGU6ICR7dGFzay5jbGFzc2lmaWNhdGlvbn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgb3V0cHV0ID0gYXdhaXQgaGFuZGxlci5ydW4odGFzay5pbnB1dCwgdGFza0N0eCk7XG4gICAgICAgIC8vIFRhc2tIYW5kbGVycyBzaG91bGRuJ3QgbmVlZCB0byBleHBsaWNpdGx5IGNhbGwgY3R4LmZsdXNoKCkuXG4gICAgICAgIC8vIEZsdXNoIGJ1ZmZlcmVkIGxvZ3MgYmVmb3JlIHdlIHBlcnNpc3QgZmluYWwgdGFzayBzdGF0ZS5cbiAgICAgICAgYXdhaXQgdGFza0N0eC5mbHVzaCgpO1xuICAgICAgICBsb2cudmVyYm9zZShgaGFuZGxlciBmaW5pc2hlZCBmb3IgJHt0YXNrLmlkfWApO1xuICAgICAgfVxuXG4gICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuU1VDQ0VFREVEO1xuICAgICAgdGFzay5vdXRwdXQgPSBvdXRwdXQ7XG4gICAgICB0YXNrLmVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgdGFzay5sZWFzZU93bmVyID0gdW5kZWZpbmVkO1xuICAgICAgdGFzay5sZWFzZUV4cGlyeSA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzaywgdGFza0N0eCk7XG4gICAgICBPYmplY3QuYXNzaWduKHRhc2ssIHBlcnNpc3RlZCk7XG4gICAgICB0YXNrQ3R4LmxvZ2dlci5pbmZvKGB0YXNrICR7dGFzay5pZH0gc3VjY2VzcyBzdGF0ZSAke3Rhc2suc3RhdHVzfWApO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGB0YXNrICR7dGFzay5pZH0gc3VjY2VzcyBzdGF0ZSAke3Rhc2suc3RhdHVzfSBhdHRlbXB0ICR7dGFzay5hdHRlbXB0fWBcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXModGFza0N0eCwgdGFzaywgVGFza1N0YXR1cy5TVUNDRUVERUQsIG91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIC8vIEVuc3VyZSBidWZmZXJlZCBoYW5kbGVyIGxvZ3MgYXJlIHBlcnNpc3RlZCBiZWZvcmUgd2UgZW1pdCBhbnkgZW5naW5lLWdlbmVyYXRlZCBsb2dzL2V2ZW50cy5cbiAgICAgIC8vIFRoaXMgcHJlc2VydmVzIGNocm9ub2xvZ2ljYWwgb3JkZXJpbmcgd2hlbiBUYXNrSGFuZGxlcnMgZG9uJ3QgY2FsbCBjdHguZmx1c2goKS5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRhc2tDdHguZmx1c2goKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBiZXN0LWVmZm9ydFxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKHRhc2suaWQsIHRhc2tDdHgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIGxhdGVzdCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8ga2VlcCBiZXN0LWVmZm9ydCB0YXNrIHN0YXRlIGZvciByZXRyaWVzL2ZhaWx1cmVzXG4gICAgICB9XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVGFza1N0YXRlQ2hhbmdlRXJyb3IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVUYXNrU3RhdGVDaGFuZ2UoZXJyLnJlcXVlc3QsIHRhc2ssIHRhc2tDdHgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IoXCJ0YXNrIGV4ZWN1dGlvbiBlcnJvclwiLCBlcnIpO1xuICAgICAgaWYgKHRhc2suYXRvbWljaXR5ID09PSBUYXNrVHlwZS5DT01QT1NJVEUpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3VsdHMgPSB0aGlzLm5vcm1hbGl6ZVN0ZXBSZXN1bHRzKHRhc2suc3RlcFJlc3VsdHMpO1xuICAgICAgICB0YXNrLnN0ZXBSZXN1bHRzID0gbm9ybWFsaXplZFJlc3VsdHM7XG4gICAgICAgIGlmICh0YXNrLmN1cnJlbnRTdGVwID09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmYWlsZWRJZHggPSBub3JtYWxpemVkUmVzdWx0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoc3RlcCkgPT4gc3RlcC5zdGF0dXMgPT09IFRhc2tTdGF0dXMuRkFJTEVEXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmFpbGVkSWR4ID49IDApIHRhc2suY3VycmVudFN0ZXAgPSBmYWlsZWRJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRBdHRlbXB0ID0gKHRhc2suYXR0ZW1wdCA/PyAwKSArIDE7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVFcnJvcihlcnIpO1xuXG4gICAgICBpZiAobmV4dEF0dGVtcHQgPCB0YXNrLm1heEF0dGVtcHRzKSB7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gY29tcHV0ZUJhY2tvZmZNcyhcbiAgICAgICAgICBuZXh0QXR0ZW1wdCxcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUJhY2tvZmYodGFzay5iYWNrb2ZmKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXh0UnVuQXQgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgZGVsYXkpO1xuXG4gICAgICAgIHRhc2suYXR0ZW1wdCA9IG5leHRBdHRlbXB0O1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuV0FJVElOR19SRVRSWTtcbiAgICAgICAgdGFzay5uZXh0UnVuQXQgPSBuZXh0UnVuQXQ7XG4gICAgICAgIHRhc2suZXJyb3IgPSBzZXJpYWxpemVkO1xuICAgICAgICB0YXNrLmxlYXNlT3duZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2subGVhc2VFeHBpcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2ssIHRhc2tDdHgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIHBlcnNpc3RlZCk7XG4gICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgIGB0YXNrICR7dGFzay5pZH0gd2FpdGluZyByZXRyeSBzdGF0ZSAke3Rhc2suc3RhdHVzfSBhdHRlbXB0ICR7dGFzay5hdHRlbXB0fWBcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGFza0N0eC5waXBlKExvZ0xldmVsLndhcm4sIGBSZXRyeSBzY2hlZHVsZWRgLCB7XG4gICAgICAgICAgbmV4dFJ1bkF0LFxuICAgICAgICAgIGRlbGF5TXM6IGRlbGF5LFxuICAgICAgICAgIGF0dGVtcHQ6IG5leHRBdHRlbXB0LFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0U3RhdHVzKFxuICAgICAgICAgIHRhc2tDdHgsXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUlksXG4gICAgICAgICAgc2VyaWFsaXplZCxcbiAgICAgICAgICBlcnJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhc2suYXR0ZW1wdCA9IG5leHRBdHRlbXB0O1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuRkFJTEVEO1xuICAgICAgICB0YXNrLmVycm9yID0gc2VyaWFsaXplZDtcbiAgICAgICAgdGFzay5sZWFzZU93bmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrLmxlYXNlRXhwaXJ5ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2ssIHRhc2tDdHgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIHBlcnNpc3RlZCk7XG4gICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICBgdGFzayAke3Rhc2suaWR9IGZhaWxlZCBzdGF0ZSAke3Rhc2suc3RhdHVzfSBhdHRlbXB0ICR7dGFzay5hdHRlbXB0fWBcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGFza0N0eC5waXBlKFxuICAgICAgICAgIExvZ0xldmVsLmVycm9yLFxuICAgICAgICAgIGBUYXNrIGZhaWxlZCAobWF4IGF0dGVtcHRzIHJlYWNoZWQpYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYXhBdHRlbXB0czogdGFzay5tYXhBdHRlbXB0cyxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFN0YXR1cyhcbiAgICAgICAgICB0YXNrQ3R4LFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgVGFza1N0YXR1cy5GQUlMRUQsXG4gICAgICAgICAgc2VyaWFsaXplZCxcbiAgICAgICAgICBlcnJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlVGFza1N0YXRlQ2hhbmdlKFxuICAgIHJlcXVlc3Q6IFRhc2tTdGF0ZUNoYW5nZVJlcXVlc3QsXG4gICAgdGFzazogVGFza01vZGVsLFxuICAgIGN0eDogVGFza0NvbnRleHRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGFzay5sZWFzZU93bmVyID0gdW5kZWZpbmVkO1xuICAgIHRhc2subGVhc2VFeHBpcnkgPSB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChyZXF1ZXN0LnN0YXR1cykge1xuICAgICAgY2FzZSBUYXNrU3RhdHVzLkNBTkNFTEVEOiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbEVycm9yID1cbiAgICAgICAgICByZXF1ZXN0LmVycm9yID8/XG4gICAgICAgICAgbmV3IFRhc2tFcnJvck1vZGVsKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBUYXNrICR7dGFzay5pZH0gY2FuY2VsZWRgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuQ0FOQ0VMRUQ7XG4gICAgICAgIHRhc2suZXJyb3IgPSBjYW5jZWxFcnJvcjtcbiAgICAgICAgdGFzay5uZXh0UnVuQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2suc2NoZWR1bGVkVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2sgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCBjdHgpO1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXMoY3R4LCB0YXNrLCBUYXNrU3RhdHVzLkNBTkNFTEVELCBjYW5jZWxFcnJvcik7XG4gICAgICAgIGF3YWl0IGN0eC5waXBlKExvZ0xldmVsLndhcm4sIGBUYXNrIGNhbmNlbGVkIHZpYSBjb250ZXh0YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFza1N0YXR1cy5XQUlUSU5HX1JFVFJZOiB7XG4gICAgICAgIGNvbnN0IG5leHRBdHRlbXB0ID0gKHRhc2suYXR0ZW1wdCA/PyAwKSArIDE7XG4gICAgICAgIGNvbnN0IGJhY2tvZmYgPSB0aGlzLm5vcm1hbGl6ZUJhY2tvZmYodGFzay5iYWNrb2ZmKTtcbiAgICAgICAgY29uc3QgZGVsYXkgPSBjb21wdXRlQmFja29mZk1zKG5leHRBdHRlbXB0LCBiYWNrb2ZmKTtcbiAgICAgICAgY29uc3QgbmV4dFJ1bkF0ID1cbiAgICAgICAgICByZXF1ZXN0LnNjaGVkdWxlZFRvIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgPyByZXF1ZXN0LnNjaGVkdWxlZFRvXG4gICAgICAgICAgICA6IG5ldyBEYXRlKERhdGUubm93KCkgKyBkZWxheSk7XG4gICAgICAgIGNvbnN0IHJldHJ5RXJyb3IgPVxuICAgICAgICAgIHJlcXVlc3QuZXJyb3IgPz9cbiAgICAgICAgICBuZXcgVGFza0Vycm9yTW9kZWwoe1xuICAgICAgICAgICAgbWVzc2FnZTogYFRhc2sgJHt0YXNrLmlkfSByZXF1ZXN0ZWQgcmV0cnlgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuV0FJVElOR19SRVRSWTtcbiAgICAgICAgdGFzay5hdHRlbXB0ID0gbmV4dEF0dGVtcHQ7XG4gICAgICAgIHRhc2suZXJyb3IgPSByZXRyeUVycm9yO1xuICAgICAgICB0YXNrLm5leHRSdW5BdCA9IG5leHRSdW5BdDtcbiAgICAgICAgdGFzay5zY2hlZHVsZWRUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGFzayA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2ssIGN0eCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFN0YXR1cyhjdHgsIHRhc2ssIFRhc2tTdGF0dXMuV0FJVElOR19SRVRSWSwgcmV0cnlFcnJvcik7XG4gICAgICAgIGF3YWl0IGN0eC5waXBlKExvZ0xldmVsLndhcm4sIGBSZXRyeSByZXF1ZXN0ZWRgLCB7XG4gICAgICAgICAgbmV4dFJ1bkF0LFxuICAgICAgICAgIGRlbGF5TXM6IGRlbGF5LFxuICAgICAgICAgIGF0dGVtcHQ6IG5leHRBdHRlbXB0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSBUYXNrU3RhdHVzLlNDSEVEVUxFRDoge1xuICAgICAgICBpZiAoIXJlcXVlc3Quc2NoZWR1bGVkVG8pXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJTY2hlZHVsZWQgc3RhdGUgcmVxdWlyZXMgYSB0YXJnZXQgZGF0ZVwiKTtcbiAgICAgICAgY29uc3QgcmVzY2hlZHVsZUVycm9yID1cbiAgICAgICAgICByZXF1ZXN0LmVycm9yID8/XG4gICAgICAgICAgbmV3IFRhc2tFcnJvck1vZGVsKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBUYXNrICR7dGFzay5pZH0gcmVzY2hlZHVsZWRgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuU0NIRURVTEVEO1xuICAgICAgICB0YXNrLnNjaGVkdWxlZFRvID0gcmVxdWVzdC5zY2hlZHVsZWRUbztcbiAgICAgICAgdGFzay5lcnJvciA9IHJlc2NoZWR1bGVFcnJvcjtcbiAgICAgICAgdGFzay5uZXh0UnVuQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2sgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCBjdHgpO1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXMoY3R4LCB0YXNrLCBUYXNrU3RhdHVzLlNDSEVEVUxFRCwgcmVzY2hlZHVsZUVycm9yKTtcbiAgICAgICAgYXdhaXQgY3R4LnBpcGUoTG9nTGV2ZWwuaW5mbywgYFRhc2sgcmVzY2hlZHVsZWRgLCB7XG4gICAgICAgICAgc2NoZWR1bGVkVG86IHJlcXVlc3Quc2NoZWR1bGVkVG8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCB0YXNrIHN0YXRlIGNoYW5nZSByZXF1ZXN0ZWQ6ICR7cmVxdWVzdC5zdGF0dXN9YFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBydW5Db21wb3NpdGUoXG4gICAgdGFzazogVGFza01vZGVsLFxuICAgIGNvbnRleHQ6IFRhc2tDb250ZXh0XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyBjdHggfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtjb250ZXh0XSwgdGFzay5jbGFzc2lmaWNhdGlvbiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnJ1bkNvbXBvc2l0ZSk7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLm5vcm1hbGl6ZVN0ZXBzKHRhc2suc3RlcHMpO1xuICAgIGxldCBpZHggPSB0YXNrLmN1cnJlbnRTdGVwID8/IDA7XG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubm9ybWFsaXplU3RlcFJlc3VsdHModGFzay5zdGVwUmVzdWx0cyk7XG5cbiAgICBjb25zdCBjYWNoZVJlc3VsdCA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgY29udGV4dC5jYWNoZVJlc3VsdChrZXksIHZhbHVlKTtcbiAgICAgIGlmIChjdHggaW5zdGFuY2VvZiBUYXNrQ29udGV4dCAmJiBjdHggIT09IGNvbnRleHQpIHtcbiAgICAgICAgY3R4LmNhY2hlUmVzdWx0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0c1tpXTtcbiAgICAgIGlmIChleGlzdGluZz8uc3RhdHVzID09PSBUYXNrU3RhdHVzLlNVQ0NFRURFRCkge1xuICAgICAgICBjb25zdCBwcmV2U3RlcCA9IHN0ZXBzW2ldO1xuICAgICAgICBpZiAoIXByZXZTdGVwKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgJHt0YXNrLmlkfTpzdGVwOiR7aX1gO1xuICAgICAgICBjYWNoZVJlc3VsdChwcmV2U3RlcC5jbGFzc2lmaWNhdGlvbiwgZXhpc3Rpbmcub3V0cHV0KTtcbiAgICAgICAgY2FjaGVSZXN1bHQoY2FjaGVLZXksIGV4aXN0aW5nLm91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGlkeCA8IHN0ZXBzLmxlbmd0aCkge1xuICAgICAgY29udGV4dC5zZXRTdGVwKGlkeCk7XG4gICAgICBjb25zdCBzdGVwID0gc3RlcHNbaWR4XTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnJlZ2lzdHJ5LmdldChzdGVwLmNsYXNzaWZpY2F0aW9uKTtcbiAgICAgIGlmICghaGFuZGxlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyB0YXNrIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgY29tcG9zaXRlIHN0ZXA6ICR7c3RlcC5jbGFzc2lmaWNhdGlvbn1gXG4gICAgICAgICk7XG5cbiAgICAgIGF3YWl0IGNvbnRleHQucGlwZShbXG4gICAgICAgIExvZ0xldmVsLmluZm8sXG4gICAgICAgIGBDb21wb3NpdGUgc3RlcCAke2lkeCArIDF9LyR7c3RlcHMubGVuZ3RofTogJHtzdGVwLmNsYXNzaWZpY2F0aW9ufWAsXG4gICAgICBdKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgaGFuZGxlci5ydW4oc3RlcC5pbnB1dCwgY29udGV4dCk7XG4gICAgICAgIC8vIEVuc3VyZSBzdGVwLXRhZ2dlZCBsb2dzIGFyZSBmbHVzaGVkIGJlZm9yZSBhZHZhbmNpbmcgdGhlIHN0ZXAgcG9pbnRlci5cbiAgICAgICAgYXdhaXQgY29udGV4dC5mbHVzaCgpO1xuXG4gICAgICAgIGNvbnN0IHN0ZXBJbmRleCA9IGlkeDtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgcmVzdWx0c1tzdGVwSW5kZXhdID0gbmV3IFRhc2tTdGVwUmVzdWx0TW9kZWwoe1xuICAgICAgICAgIHN0YXR1czogVGFza1N0YXR1cy5TVUNDRUVERUQsXG4gICAgICAgICAgb3V0cHV0OiBvdXQsXG4gICAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IGAke3Rhc2suaWR9OnN0ZXA6JHtzdGVwSW5kZXh9YDtcbiAgICAgICAgY2FjaGVSZXN1bHQoc3RlcC5jbGFzc2lmaWNhdGlvbiwgb3V0KTtcbiAgICAgICAgY2FjaGVSZXN1bHQoY2FjaGVLZXksIG91dCk7XG4gICAgICAgIGlkeCA9IHN0ZXBJbmRleCArIDE7XG5cbiAgICAgICAgdGFzay5zdGVwUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRhc2suY3VycmVudFN0ZXAgPSBpZHg7XG5cbiAgICAgICAgY29uc3QgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzayk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGFzaywgcGVyc2lzdGVkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0UHJvZ3Jlc3MoY29udGV4dCwgdGFzay5pZCwge1xuICAgICAgICAgIGN1cnJlbnRTdGVwOiBpZHgsXG4gICAgICAgICAgdG90YWxTdGVwczogc3RlcHMubGVuZ3RoLFxuICAgICAgICAgIG91dHB1dDogb3V0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJlc3VsdHNbaWR4XSA9IG5ldyBUYXNrU3RlcFJlc3VsdE1vZGVsKHtcbiAgICAgICAgICBzdGF0dXM6IFRhc2tTdGF0dXMuRkFJTEVELFxuICAgICAgICAgIGVycm9yOiBzZXJpYWxpemVFcnJvcihlcnIpLFxuICAgICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgICB9KTtcbiAgICAgICAgdGFzay5zdGVwUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRhc2suY3VycmVudFN0ZXAgPSBpZHg7XG4gICAgICAgIHRhc2suZXJyb3IgPSBzZXJpYWxpemVFcnJvcihlcnIpO1xuXG4gICAgICAgIC8vIHBlcnNpc3QgZmFpbHVyZSBjb250ZXh0IGJlZm9yZSB0aHJvd2luZyAocmV0cnkgbG9naWMgaGFwcGVucyBvdXRzaWRlKVxuICAgICAgICBjb25zdCBwZXJzaXN0ZWQgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCBwZXJzaXN0ZWQpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RlcFJlc3VsdHM6IHJlc3VsdHMgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVCYWNrb2ZmKFxuICAgIGJhY2tvZmY6IFRhc2tCYWNrb2ZmTW9kZWwgfCBzdHJpbmcgfCBvYmplY3QgfCBhbnlcbiAgKSB7XG4gICAgaWYgKGJhY2tvZmYgaW5zdGFuY2VvZiBUYXNrQmFja29mZk1vZGVsKSByZXR1cm4gYmFja29mZjtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0gYmFja29mZiA/PyB7fTtcbiAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBheWxvYWQgPSB7fTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUYXNrQmFja29mZk1vZGVsKHBheWxvYWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZVN0ZXBzKFxuICAgIHN0ZXBzOiBUYXNrU3RlcFNwZWNNb2RlbFtdIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFRhc2tTdGVwU3BlY01vZGVsW10ge1xuICAgIGlmICghc3RlcHMpIHJldHVybiBbXTtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0gc3RlcHM7XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShwYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXlsb2FkIGluc3RhbmNlb2YgU2V0KSBwYXlsb2FkID0gQXJyYXkuZnJvbShwYXlsb2FkKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gcGF5bG9hZC5tYXAoKHN0ZXApID0+IHtcbiAgICAgIGlmIChzdGVwIGluc3RhbmNlb2YgVGFza1N0ZXBTcGVjTW9kZWwpIHJldHVybiBzdGVwO1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzdGVwO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGFza1N0ZXBTcGVjTW9kZWwodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZVN0ZXBSZXN1bHRzKFxuICAgIHJlc3VsdHM6IFRhc2tTdGVwUmVzdWx0TW9kZWxbXSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBUYXNrU3RlcFJlc3VsdE1vZGVsW10ge1xuICAgIGlmICghcmVzdWx0cykgcmV0dXJuIFtdO1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSByZXN1bHRzO1xuICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bG9hZCA9IEpTT04ucGFyc2UocGF5bG9hZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFNldCkgcGF5bG9hZCA9IEFycmF5LmZyb20ocGF5bG9hZCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHBheWxvYWQubWFwKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUYXNrU3RlcFJlc3VsdE1vZGVsKSByZXR1cm4gcmVzdWx0O1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPSByZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUYXNrU3RlcFJlc3VsdE1vZGVsKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRXZlbnRzICsgbG9nIHRhaWwgcGVyc2lzdGVuY2VcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3RlY3RlZCBhc3luYyBhcHBlbmRMb2coXG4gICAgY3R4OiBUYXNrQ29udGV4dCB8IENvbnRleHQsXG4gICAgdGFzazogVGFza01vZGVsLFxuICAgIGxvZ0VudHJpZXM6XG4gICAgICB8IFtMb2dMZXZlbCwgc3RyaW5nXVxuICAgICAgfCBbTG9nTGV2ZWwsIHN0cmluZywgYW55XVxuICAgICAgfCAoW0xvZ0xldmVsLCBzdHJpbmddIHwgW0xvZ0xldmVsLCBzdHJpbmcsIGFueV0pW11cbiAgKTogUHJvbWlzZTxbVGFza01vZGVsLCBUYXNrTG9nRW50cnlNb2RlbFtdXT4ge1xuICAgIGNvbnN0IGlzTXVsdGkgPSBBcnJheS5pc0FycmF5KGxvZ0VudHJpZXMpICYmIEFycmF5LmlzQXJyYXkobG9nRW50cmllc1swXSk7XG4gICAgY29uc3Qgc3RlcCA9XG4gICAgICB0YXNrLmF0b21pY2l0eSA9PT0gVGFza1R5cGUuQ09NUE9TSVRFXG4gICAgICAgID8gY3R4IGluc3RhbmNlb2YgVGFza0NvbnRleHRcbiAgICAgICAgICA/IChjdHguc3RlcCA/PyB0YXNrLmN1cnJlbnRTdGVwKVxuICAgICAgICAgIDogdGFzay5jdXJyZW50U3RlcFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbnRyaWVzID0gKGlzTXVsdGkgPyBsb2dFbnRyaWVzIDogW2xvZ0VudHJpZXNdKS5tYXAoXG4gICAgICAoW2xldmVsLCBtc2csIG1ldGFdKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFza0xvZ0VudHJ5TW9kZWwoe1xuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICAgIHN0ZXAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBuZXh0VGFpbCA9IFsuLi4odGFzay5sb2dUYWlsID8/IFtdKSwgLi4uZW50cmllc10uc2xpY2UoXG4gICAgICAtdGhpcy5jb25maWcubG9nVGFpbE1heFxuICAgICk7XG4gICAgdGFzay5sb2dUYWlsID0gbmV4dFRhaWw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFthd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCBjdHgpLCBlbnRyaWVzXTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbdGFzaywgW11dO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0U3RhdHVzKFxuICAgIGN0eDogVGFza0NvbnRleHQgfCBDb250ZXh0LFxuICAgIHRhc2s6IFRhc2tNb2RlbCxcbiAgICBzdGF0dXM6IFRhc2tTdGF0dXMsXG4gICAgb3V0cHV0T3JFcnJvcj86IGFueSB8IEVycm9yLFxuICAgIG9yaWdpbmFsRXJyb3I/OiBFcnJvclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3R4IGluc3RhbmNlb2YgVGFza0NvbnRleHQpIHtcbiAgICAgIGF3YWl0IGN0eC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQ6IFRhc2tQcm9ncmVzc1BheWxvYWQgPSB7IHN0YXR1cyB9O1xuICAgIGlmIChvdXRwdXRPckVycm9yICYmIG91dHB1dE9yRXJyb3IgaW5zdGFuY2VvZiBUYXNrRXJyb3JNb2RlbClcbiAgICAgIHBheWxvYWQuZXJyb3IgPSBvdXRwdXRPckVycm9yO1xuICAgIGVsc2UgaWYgKG91dHB1dE9yRXJyb3IpIHBheWxvYWQub3V0cHV0ID0gb3V0cHV0T3JFcnJvcjtcbiAgICBpZiAodGFzay5uZXh0UnVuQXQpIHBheWxvYWQubmV4dFJ1bkF0ID0gdGFzay5uZXh0UnVuQXQ7XG4gICAgaWYgKHRhc2suc2NoZWR1bGVkVG8pIHBheWxvYWQuc2NoZWR1bGVkVG8gPSB0YXNrLnNjaGVkdWxlZFRvO1xuICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMucGVyc2lzdEV2ZW50KFxuICAgICAgY3R4LFxuICAgICAgdGFzay5pZCxcbiAgICAgIFRhc2tFdmVudFR5cGUuU1RBVFVTLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgY29uc3QgZW1pdHRlZFBheWxvYWQgPVxuICAgICAgb3JpZ2luYWxFcnJvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgcGF5bG9hZCwgeyBvcmlnaW5hbEVycm9yIH0pXG4gICAgICAgIDogcGF5bG9hZDtcbiAgICBjb25zdCBlbWl0dGVkID0gbmV3IFRhc2tFdmVudE1vZGVsKHtcbiAgICAgIC4uLnBlcnNpc3RlZCxcbiAgICAgIHBheWxvYWQ6IGVtaXR0ZWRQYXlsb2FkLFxuICAgIH0pO1xuICAgIHRoaXMuYnVzLmVtaXQoZW1pdHRlZCwgY3R4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0TG9nKFxuICAgIGN0eDogVGFza0NvbnRleHQgfCBDb250ZXh0LFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIGVudHJpZXM6IFRhc2tMb2dFbnRyeU1vZGVsW11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZ0ID0gYXdhaXQgdGhpcy5wZXJzaXN0RXZlbnQoXG4gICAgICBjdHgsXG4gICAgICB0YXNrSWQsXG4gICAgICBUYXNrRXZlbnRUeXBlLkxPRyxcbiAgICAgIGVudHJpZXMubWFwKChlKSA9PiAoe1xuICAgICAgICB0czogZS50cyxcbiAgICAgICAgbGV2ZWw6IGUubGV2ZWwsXG4gICAgICAgIG1zZzogZS5tc2csXG4gICAgICAgIG1ldGE6IGUubWV0YSxcbiAgICAgICAgc3RlcDogZS5zdGVwLFxuICAgICAgfSkpXG4gICAgKTtcbiAgICB0aGlzLmJ1cy5lbWl0KGV2dCwgY3R4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVQaXBlQXJncyhcbiAgICBhcmdzOiBhbnlbXVxuICApOiAoW0xvZ0xldmVsLCBzdHJpbmddIHwgW0xvZ0xldmVsLCBzdHJpbmcsIGFueV0pW10ge1xuICAgIGlmICghYXJncy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFtdO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gRWl0aGVyIFtsZXZlbCxtc2csbWV0YT9dIG9yIFtbbGV2ZWwsbXNnLG1ldGE/XSwgLi4uXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55W10pLmZpbHRlcihBcnJheS5pc0FycmF5KSBhcyBhbnk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3ZhbHVlIGFzIGFueV07XG4gICAgfVxuXG4gICAgY29uc3QgW2xldmVsLCBtc2csIG1ldGFdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGxldmVsICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtc2cgIT09IFwic3RyaW5nXCIpIHJldHVybiBbXTtcbiAgICByZXR1cm4gW1tsZXZlbCBhcyBMb2dMZXZlbCwgbXNnLCBtZXRhXSBhcyBhbnldO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGVtaXRQcm9ncmVzcyhcbiAgICBjdHg6IFRhc2tDb250ZXh0IHwgQ29udGV4dCxcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBhbnlcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZ0ID0gYXdhaXQgdGhpcy5wZXJzaXN0RXZlbnQoXG4gICAgICBjdHgsXG4gICAgICB0YXNrSWQsXG4gICAgICBUYXNrRXZlbnRUeXBlLlBST0dSRVNTLFxuICAgICAgZGF0YVxuICAgICk7XG4gICAgdGhpcy5idXMuZW1pdChldnQsIGN0eCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcGVyc2lzdEV2ZW50KFxuICAgIGN0eDogVGFza0NvbnRleHQgfCBDb250ZXh0LFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIHR5cGU6IFRhc2tFdmVudFR5cGUsXG4gICAgcGF5bG9hZDogYW55XG4gICk6IFByb21pc2U8VGFza0V2ZW50TW9kZWw+IHtcbiAgICBjb25zdCBldnQgPSBuZXcgVGFza0V2ZW50TW9kZWwoeyB0YXNrSWQsIGNsYXNzaWZpY2F0aW9uOiB0eXBlLCBwYXlsb2FkIH0pO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCB0aGlzLmV2ZW50cy5jcmVhdGUoZXZ0LCBjdHgpO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFRhc2tFbmdpbmU8JHt0aGlzLmNvbmZpZy5hZGFwdGVyLmFsaWFzfT5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY29udGV4dChcbiAgICBvcGVyYXRpb246XG4gICAgICB8ICgoLi4uYXJnczogYW55W10pID0+IGFueSlcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFXG4gICAgICB8IHN0cmluZyxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8RmxhZ3NPZjxDb250ZXh0T2Y8QT4+PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPENvbnRleHRPZjxBPj4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuY29udGV4dChvcGVyYXRpb24sIG92ZXJyaWRlcywgVGFza01vZGVsLCAuLi5hcmdzKTtcbiAgfVxufVxuIl19
|
|
@@ -50,4 +50,4 @@ export class TaskRescheduleError extends TaskControlError {
|
|
|
50
50
|
super(TaskRescheduleError.name, taskId, message, details, meta, 202);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0Vycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YXNrcy9UYXNrRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXNEcEQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBYyxFQUNkLFVBQXNDO0lBRXRDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsSUFBSSxPQUFRLEtBQWEsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hFLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDL0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFLN0MsWUFDRSxJQUFZLEVBQ1osTUFBYyxFQUNkLE9BQWUsRUFDZixPQUF3QixFQUN4QixJQUEwQixFQUMxQixJQUFJLEdBQUcsR0FBRztRQUVWLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBQ2pELFlBQ0UsTUFBYyxFQUNkLE9BQXdCLEVBQ3hCLElBQTBCO1FBRTFCLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksUUFBUSxNQUFNLFNBQVMsQ0FBQztRQUM1RCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFDbEQsWUFDRSxNQUFjLEVBQ2QsT0FBd0IsRUFDeEIsSUFBMEI7UUFFMUIsTUFBTSxTQUFTLEdBQ2IsSUFBSSxFQUFFLFNBQVMsWUFBWSxJQUFJO1lBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUM5QixDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FDWCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLE1BQU0sdUJBQXVCLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0UsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQUNuRCxZQUNFLE1BQWMsRUFDZCxPQUF3QixFQUN4QixJQUEwQjtRQUUxQixNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsTUFBTSxXQUFXLENBQUM7UUFDOUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFDdkQsWUFDRSxNQUFjLEVBQ2QsT0FBd0IsRUFDeEIsSUFBMEI7UUFFMUIsTUFBTSxXQUFXLEdBQ2YsSUFBSSxFQUFFLFdBQVcsWUFBWSxJQUFJO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUNoQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FDWCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLE1BQU0sZUFBZSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVGFza0Vycm9yTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvVGFza0Vycm9yTW9kZWxcIjtcbmltcG9ydCB7IFRhc2tTdGF0dXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBuZXh0IGFjdGlvbiB0byB0YWtlIGFmdGVyIGEgdGFzayBlcnJvci5cbiAqIFVzZWQgdG8gaWRlbnRpZnkgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlIHRvIHRhc2sgZmFpbHVyZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tOZXh0QWN0aW9uID1cbiAgfCBUYXNrU3RhdHVzLkNBTkNFTEVEXG4gIHwgVGFza1N0YXR1cy5XQUlUSU5HX1JFVFJZXG4gIHwgVGFza1N0YXR1cy5TQ0hFRFVMRURcbiAgfCBUYXNrU3RhdHVzLkZBSUxFRDtcblxuLyoqXG4gKiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgYWRkZWQgdG8gZXJyb3JzIGZyb20gVGFza1RyYWNrZXIucmVzb2x2ZSgpIGFuZCBUYXNrVHJhY2tlci53YWl0KClcbiAqL1xuZXhwb3J0IHR5cGUgVGFza0Vycm9yUHJvcHMgPSB7XG4gIC8qKiBUaGUgbmV4dCBhY3Rpb24gdG8gdGFrZSBpbiByZXNwb25zZSB0byB0aGlzIGVycm9yICovXG4gIG5leHRBY3Rpb246IFRhc2tOZXh0QWN0aW9uO1xuICAvKiogVGhlIHRhc2sgSUQgdGhpcyBlcnJvciByZWxhdGVzIHRvIChvcHRpb25hbCwgcHJlc2VudCBvbiBUYXNrQ29udHJvbEVycm9yKSAqL1xuICB0YXNrSWQ/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGVycm9yIGRldGFpbHMgKG9wdGlvbmFsLCBwcmVzZW50IG9uIFRhc2tDb250cm9sRXJyb3IpICovXG4gIGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbDtcbiAgLyoqIEFkZGl0aW9uYWwgbWV0YWRhdGEgKG9wdGlvbmFsLCBwcmVzZW50IG9uIFRhc2tDb250cm9sRXJyb3IpICovXG4gIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcblxuLyoqXG4gKiBHZW5lcmljIHR5cGUgdGhhdCBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIGVycm9yIHR5cGUgd2hpbGUgYWRkaW5nIHRhc2stc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIFVzZSB0aGlzIHRvIHR5cGUgZXJyb3JzIGZyb20gVGFza1RyYWNrZXIucmVzb2x2ZSgpIGFuZCBUYXNrVHJhY2tlci53YWl0KCkuXG4gKlxuICogVGhlIG9yaWdpbmFsIGVycm9yIGlzIHByZXNlcnZlZCAoZS5nLiwgVmFsaWRhdGlvbkVycm9yIHN0YXlzIFZhbGlkYXRpb25FcnJvciksXG4gKiB3aXRoIHRoZSBuZXh0QWN0aW9uIHByb3BlcnR5IGFkZGVkIHRvIGlkZW50aWZ5IHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZTpcbiAqIC0gYFRhc2tTdGF0dXMuQ0FOQ0VMRURgOiBUYXNrIHdhcyBleHBsaWNpdGx5IGNhbmNlbGVkXG4gKiAtIGBUYXNrU3RhdHVzLlNDSEVEVUxFRGA6IFRhc2sgd2FzIHJlc2NoZWR1bGVkXG4gKiAtIGBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUllgOiBUYXNrIGlzIHdhaXRpbmcgZm9yIHJldHJ5XG4gKiAtIGBUYXNrU3RhdHVzLkZBSUxFRGA6IFRhc2sgaGFzIHBlcm1hbmVudGx5IGZhaWxlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0cmFja2VyLnJlc29sdmUoKTtcbiAqIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gKiAgIGlmIChpc1Rhc2tFcnJvcjxWYWxpZGF0aW9uRXJyb3I+KGVycm9yLCBWYWxpZGF0aW9uRXJyb3IpKSB7XG4gKiAgICAgLy8gZXJyb3IgaXMgdHlwZWQgYXMgVGFza0Vycm9yRnJvbTxWYWxpZGF0aW9uRXJyb3I+XG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IubmV4dEFjdGlvbik7IC8vIFRhc2tOZXh0QWN0aW9uXG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IuY29kZSk7ICAgICAgIC8vIFZhbGlkYXRpb25FcnJvcidzIGNvZGUgcHJvcGVydHlcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tFcnJvckZyb208RSBleHRlbmRzIEVycm9yPiA9IEUgJiBUYXNrRXJyb3JQcm9wcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFza0Vycm9yPEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPihcbiAgZXJyb3I6IHVua25vd24sXG4gIEVycm9yQ2xhc3M/OiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBFXG4pOiBlcnJvciBpcyBUYXNrRXJyb3JGcm9tPEU+IHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoXCJuZXh0QWN0aW9uXCIgaW4gZXJyb3IpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKGVycm9yIGFzIGFueSkubmV4dEFjdGlvbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoRXJyb3JDbGFzcyAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3JDbGFzcykpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrQ29udHJvbEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbDtcbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY29kZSA9IDUwMFxuICApIHtcbiAgICBzdXBlcihuYW1lLCBtZXNzYWdlLCBjb2RlKTtcbiAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tGYWlsRXJyb3IgZXh0ZW5kcyBUYXNrQ29udHJvbEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGFza0lkOiBzdHJpbmcsXG4gICAgZGV0YWlscz86IFRhc2tFcnJvck1vZGVsLFxuICAgIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkZXRhaWxzPy5tZXNzYWdlID8/IGBUYXNrICR7dGFza0lkfSBmYWlsZWRgO1xuICAgIHN1cGVyKFRhc2tGYWlsRXJyb3IubmFtZSwgdGFza0lkLCBtZXNzYWdlLCBkZXRhaWxzLCBtZXRhLCA1MDApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrUmV0cnlFcnJvciBleHRlbmRzIFRhc2tDb250cm9sRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgbmV4dFJ1bkF0ID1cbiAgICAgIG1ldGE/Lm5leHRSdW5BdCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgPyBtZXRhLm5leHRSdW5BdC50b0lTT1N0cmluZygpXG4gICAgICAgIDogbWV0YT8ubmV4dFJ1bkF0O1xuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgZGV0YWlscz8ubWVzc2FnZSA/P1xuICAgICAgYFRhc2sgJHt0YXNrSWR9IHNjaGVkdWxlZCBmb3IgcmV0cnkke25leHRSdW5BdCA/IGAgYXQgJHtuZXh0UnVuQXR9YCA6IFwiXCJ9YDtcbiAgICBzdXBlcihUYXNrUmV0cnlFcnJvci5uYW1lLCB0YXNrSWQsIG1lc3NhZ2UsIGRldGFpbHMsIG1ldGEsIDQwOSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tDYW5jZWxFcnJvciBleHRlbmRzIFRhc2tDb250cm9sRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGRldGFpbHM/Lm1lc3NhZ2UgPz8gYFRhc2sgJHt0YXNrSWR9IGNhbmNlbGVkYDtcbiAgICBzdXBlcihUYXNrQ2FuY2VsRXJyb3IubmFtZSwgdGFza0lkLCBtZXNzYWdlLCBkZXRhaWxzLCBtZXRhLCA0MDApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrUmVzY2hlZHVsZUVycm9yIGV4dGVuZHMgVGFza0NvbnRyb2xFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbCxcbiAgICBtZXRhPzogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBjb25zdCBzY2hlZHVsZWRUbyA9XG4gICAgICBtZXRhPy5zY2hlZHVsZWRUbyBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgPyBtZXRhLnNjaGVkdWxlZFRvLnRvSVNPU3RyaW5nKClcbiAgICAgICAgOiBtZXRhPy5zY2hlZHVsZWRUbztcbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGRldGFpbHM/Lm1lc3NhZ2UgPz9cbiAgICAgIGBUYXNrICR7dGFza0lkfSByZXNjaGVkdWxlZCR7c2NoZWR1bGVkVG8gPyBgIHRvICR7c2NoZWR1bGVkVG99YCA6IFwiXCJ9YDtcbiAgICBzdXBlcihUYXNrUmVzY2hlZHVsZUVycm9yLm5hbWUsIHRhc2tJZCwgbWVzc2FnZSwgZGV0YWlscywgbWV0YSwgMjAyKTtcbiAgfVxufVxuIl19
|
|
@@ -39,4 +39,4 @@ export class TaskEventBus extends ObserverHandler {
|
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0V2ZW50QnVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rhc2tzL1Rhc2tFdmVudEJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLG1DQUFnQztBQUd6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLDRDQUF1QztBQU9qRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGtDQUE2QjtBQUcvQyxNQUFNLE9BQU8sWUFBYSxTQUFRLGVBQTRCO0lBQTlEOztRQUNxQixjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFvRDFFLENBQUM7SUFsRFUsT0FBTyxDQUFDLFFBQWtCLEVBQUUsTUFBdUI7UUFDMUQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRVEsU0FBUyxDQUFDLFFBQWtCO1FBQ25DLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFtQixFQUFFLEdBQVk7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRVEsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsS0FBOEIsRUFDOUIsS0FBcUQsRUFDckQsRUFBWSxFQUNaLEdBQW1CLEVBQ25CLEdBQUcsSUFBeUI7UUFFNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUNyQyxJQUFJLENBQUMsZUFBZSxFQUNwQixTQUFTLEVBQ1QsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUNSLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLElBQUksQ0FBQyxTQUFTO2FBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUNQLDZCQUE2QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUMzRCxDQUFDO2dCQUNGLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQ1AsK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUNoRixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXNrRXZlbnRNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrRXZlbnRNb2RlbFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0NvbnRleHRcIjtcbmltcG9ydCB7IE9ic2VydmVySGFuZGxlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IEV2ZW50SWRzLCBPYnNlcnZlckZpbHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgVGFza0NvbnRleHQgfSBmcm9tIFwiLi9UYXNrQ29udGV4dFwiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cywgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29udGV4dHVhbEFyZ3MgfSBmcm9tIFwiLi4vdXRpbHMvaW5kZXhcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvaW5kZXhcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgVGFza0V2ZW50QnVzIGV4dGVuZHMgT2JzZXJ2ZXJIYW5kbGVyPFRhc2tDb250ZXh0PiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBsaXN0ZW5lcnMgPSBuZXcgU2V0PChldnQ6IFRhc2tFdmVudE1vZGVsKSA9PiB2b2lkPigpO1xuXG4gIG92ZXJyaWRlIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyLCBmaWx0ZXI/OiBPYnNlcnZlckZpbHRlcik6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBzdXBlci5vYnNlcnZlKG9ic2VydmVyLCBmaWx0ZXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdW5PYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcikge1xuICAgIHN1cGVyLnVuT2JzZXJ2ZShvYnNlcnZlcik7XG4gIH1cblxuICBlbWl0KGV2dDogVGFza0V2ZW50TW9kZWwsIGN0eDogQ29udGV4dCkge1xuICAgIHRoaXMudXBkYXRlT2JzZXJ2ZXJzKFRhc2tFdmVudE1vZGVsLCBldnQuY2xhc3NpZmljYXRpb24sIGV2dC5pZCwgZXZ0LCBjdHgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgc3RyaW5nLFxuICAgIGV2ZW50OiBPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nLFxuICAgIGlkOiBFdmVudElkcyxcbiAgICBldnQ6IFRhc2tFdmVudE1vZGVsLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IEFkYXB0ZXIubG9nQ3R4PENvbnRleHQ+KFxuICAgICAgdGhpcy51cGRhdGVPYnNlcnZlcnMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICB0aGlzLm9ic2VydmVyc1xuICAgICAgICAuZmlsdGVyKChvKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIgfSA9IG87XG4gICAgICAgICAgaWYgKCFmaWx0ZXIpIHJldHVybiB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyKG1vZGVsLCBldmVudCwgaWQsIC4uLmN0eEFyZ3MpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmaWx0ZXIgb2JzZXJ2ZXIgJHtvLm9ic2VydmVyLnRvU3RyaW5nKCl9OiAke2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKG8pID0+IHtcbiAgICAgICAgICBvLm9ic2VydmVyLnJlZnJlc2goZXZ0LCAuLi5jdHhBcmdzKTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpKSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKVxuICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byB1cGRhdGUgb2JzZXJ2YWJsZSAke3RoaXMub2JzZXJ2ZXJzW2ldLnRvU3RyaW5nKCl9OiAke3Jlc3VsdC5yZWFzb259YFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Repo } from "../repository/Repository";
|
|
2
|
+
import { ModelService } from "../services/ModelService";
|
|
3
|
+
import { TaskEventModel } from "./models/TaskEventModel";
|
|
4
|
+
export declare class TaskEventService extends ModelService<TaskEventModel> {
|
|
5
|
+
constructor();
|
|
6
|
+
get repo(): Repo<TaskEventModel>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Service } from "./../services/services.js";
|
|
2
|
+
import { ModelService } from "./../services/ModelService.js";
|
|
3
|
+
import { TaskEventModel } from "./models/TaskEventModel.js";
|
|
4
|
+
import { TaskModel } from "./models/TaskModel.js";
|
|
5
|
+
export class TaskEventService extends ModelService {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(TaskEventModel);
|
|
8
|
+
}
|
|
9
|
+
get repo() {
|
|
10
|
+
if (!this._repository) {
|
|
11
|
+
this._repository = Service.get(TaskModel)["events"];
|
|
12
|
+
}
|
|
13
|
+
return this._repository;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0V2ZW50U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YXNrcy9UYXNrRXZlbnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0NBQTZCO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0NBQWlDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsbUNBQWdDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsOEJBQTJCO0FBRy9DLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxZQUE0QjtJQUNoRTtRQUNFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBYSxJQUFJO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBZ0IsQ0FBc0IsQ0FDcEUsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvc2VydmljZXNcIjtcbmltcG9ydCB7IHR5cGUgUmVwbyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE1vZGVsU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9Nb2RlbFNlcnZpY2VcIjtcbmltcG9ydCB7IFRhc2tFdmVudE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL1Rhc2tFdmVudE1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvVGFza01vZGVsXCI7XG5pbXBvcnQgeyBUYXNrU2VydmljZSB9IGZyb20gXCIuL1Rhc2tTZXJ2aWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYXNrRXZlbnRTZXJ2aWNlIGV4dGVuZHMgTW9kZWxTZXJ2aWNlPFRhc2tFdmVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFRhc2tFdmVudE1vZGVsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCByZXBvKCk6IFJlcG88VGFza0V2ZW50TW9kZWw+IHtcbiAgICBpZiAoIXRoaXMuX3JlcG9zaXRvcnkpIHtcbiAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSAoU2VydmljZS5nZXQoVGFza01vZGVsIGFzIGFueSkgYXMgVGFza1NlcnZpY2U8YW55PilbXG4gICAgICAgIFwiZXZlbnRzXCJcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5O1xuICB9XG59XG4iXX0=
|
|
@@ -32,4 +32,4 @@ export class TaskHandler extends AbsContextual {
|
|
|
32
32
|
return output;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0hhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFza3MvVGFza0hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSx1QkFBb0I7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFrQiw0Q0FBdUM7QUFHL0UsTUFBTSxPQUFnQixXQUNwQixTQUFRLGFBQTBCO0lBS2xDLElBQUksSUFBSTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ2IsTUFBTSxJQUFJLGFBQWEsQ0FDckIsaUVBQWlFLENBQ2xFLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixxQkFBcUIsQ0FDbkIsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFRLEVBQUUsR0FBRyxJQUFpQztRQUN0RSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLFNBQVMsQ0FBQyxNQUFTLEVBQUUsR0FBZ0I7UUFDN0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGFza0hhbmRsZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVGFza3NLZXkgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCB3cmFwTWV0aG9kV2l0aENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEFic0NvbnRleHR1YWwsIENvbnRleHR1YWxBcmdzIH0gZnJvbSBcIi4uL3V0aWxzL0NvbnRleHR1YWxMb2dnZWRDbGFzc1wiO1xuaW1wb3J0IHsgVGFza0NvbnRleHQgfSBmcm9tIFwiLi9UYXNrQ29udGV4dFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFza0hhbmRsZXI8SSwgTz5cbiAgZXh0ZW5kcyBBYnNDb250ZXh0dWFsPFRhc2tDb250ZXh0PlxuICBpbXBsZW1lbnRzIElUYXNrSGFuZGxlcjxJLCBPPlxue1xuICBwcml2YXRlIF90eXBlPzogc3RyaW5nO1xuXG4gIGdldCB0eXBlKCkge1xuICAgIGlmICghdGhpcy5fdHlwZSkge1xuICAgICAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSwgVGFza3NLZXkpO1xuICAgICAgaWYgKHR5cGVvZiBtZXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBtZXRhO1xuICAgICAgfSBlbHNlIGlmIChtZXRhICYmIHR5cGVvZiBtZXRhLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IG1ldGEudHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLl90eXBlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB0eXBlIGFubm90YXRpb24gZm9yIHRoaXMgaGFuZGxlciBmb3VuZC4gZGlkIHlvdSB1c2UgQHRhc2soKT9gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgd3JhcE1ldGhvZFdpdGhDb250ZXh0KFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucnVuUHJlZml4LmJpbmQodGhpcyksXG4gICAgICB0aGlzLnJ1bi5iaW5kKHRoaXMpLFxuICAgICAgdGhpcy5ydW5TdWZmaXguYmluZCh0aGlzKSxcbiAgICAgIHRoaXMucnVuLm5hbWVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJ1blByZWZpeChpbnB1dDogSSwgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8VGFza0NvbnRleHQ+KSB7XG4gICAgY29uc3QgeyBsb2csIGN0eCwgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5ydW5QcmVmaXgpO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIHRhc2sgJHtjdHgudGFza0lkfSBhdHRlbXB0ICR7Y3R4LmF0dGVtcHR9YCk7XG4gICAgcmV0dXJuIFtpbnB1dCwgLi4uY3R4QXJnc107XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuU3VmZml4KG91dHB1dDogTywgY3R4OiBUYXNrQ29udGV4dCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSB0aGlzLmxvZ0N0eChbY3R4XSwgdGhpcy5ydW5QcmVmaXgpO1xuICAgIGxvZy5pbmZvKGBDb25jbHVkZWQgdGFzayAke2N0eC50YXNrSWR9IGF0dGVtcHQgJHtjdHguYXR0ZW1wdH1gKTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgYWJzdHJhY3QgcnVuKGlucHV0OiBJLCBjdHg6IFRhc2tDb250ZXh0KTogUHJvbWlzZTxPPjtcbn1cbiJdfQ==
|
|
@@ -29,4 +29,4 @@ export class TaskHandlerRegistry {
|
|
|
29
29
|
return this.handlers.get(type);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0hhbmRsZXJSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YXNrcy9UYXNrSGFuZGxlclJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QjtRQUZpQixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFHMUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFUyxVQUFVO1FBQ2xCLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9DLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDL0QsSUFBSSxDQUFlLENBQUM7Z0JBQ3BCLElBQUksQ0FBQztvQkFDSCxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQztnQkFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksYUFBYSxDQUNyQix5Q0FBeUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUNyRCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXFCO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNqQyxNQUFNLElBQUksYUFBYSxDQUFDLDJCQUEyQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRhc2tIYW5kbGVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBUYXNrSGFuZGxlclJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBJVGFza0hhbmRsZXI+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCBwcmVSZWdpc3RlcmVkSGFuZGxlcnMgPSBNZXRhZGF0YS50YXNrcygpO1xuICAgIGlmIChwcmVSZWdpc3RlcmVkSGFuZGxlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByZVJlZ2lzdGVyZWRIYW5kbGVycykuZm9yRWFjaCgoW2tleSwgaGFuZGxlcl0pID0+IHtcbiAgICAgICAgbGV0IGg6IElUYXNrSGFuZGxlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBoID0gbmV3IGhhbmRsZXIoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBpbml0aWFsaXplIGhhbmRsZXIgd2l0aCBrZXkgJHtrZXl9OiAke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyKGgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIoaGFuZGxlcjogSVRhc2tIYW5kbGVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMuaGFzKGhhbmRsZXIudHlwZSkpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRHVwbGljYXRlIHRhc2sgaGFuZGxlcjogJHtoYW5kbGVyLnR5cGV9YCk7XG4gICAgdGhpcy5oYW5kbGVycy5zZXQoaGFuZGxlci50eXBlLCBoYW5kbGVyKTtcbiAgfVxuXG4gIGdldCh0eXBlOiBzdHJpbmcpOiBJVGFza0hhbmRsZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlKTtcbiAgfVxufVxuIl19
|
|
@@ -14,10 +14,12 @@ import type { ArrayMode } from "../services/ModelService";
|
|
|
14
14
|
import { TaskEngineConfig } from "./types";
|
|
15
15
|
import { TaskTracker } from "./TaskTracker";
|
|
16
16
|
import { TaskEventModel } from "./models/index";
|
|
17
|
+
import { SelectSelector, WhereOption } from "../query/index";
|
|
17
18
|
export type TaskServiceConfig<A extends Adapter<any, any, any, any>, T extends TaskEngine<A> = TaskEngine<A>, C extends TaskEngineConfig<A> = TaskEngineConfig<A>> = C & {
|
|
18
19
|
engine?: Constructor<T>;
|
|
19
20
|
};
|
|
20
21
|
export declare class TaskService<A extends Adapter<any, any, any, any>> extends ClientBasedService<TaskEngine<A>, TaskEngineConfig<A>> {
|
|
22
|
+
protected get adapter(): A;
|
|
21
23
|
protected get tasks(): Repo<TaskModel>;
|
|
22
24
|
protected get events(): Repo<TaskEventModel>;
|
|
23
25
|
constructor();
|
|
@@ -35,6 +37,8 @@ export declare class TaskService<A extends Adapter<any, any, any, any>> extends
|
|
|
35
37
|
task: TaskModel;
|
|
36
38
|
tracker: TaskTracker<any>;
|
|
37
39
|
}>;
|
|
40
|
+
select<S extends readonly SelectSelector<TaskModel>[]>(): WhereOption<TaskModel, TaskModel[]>;
|
|
41
|
+
select<S extends readonly SelectSelector<TaskModel>[]>(selector: readonly [...S]): WhereOption<TaskModel, Pick<TaskModel, S[number]>[]>;
|
|
38
42
|
create(model: TaskModel, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel>;
|
|
39
43
|
createAll(models: TaskModel[], ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel[]>;
|
|
40
44
|
delete(key: PrimaryKeyType, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel>;
|
|
@@ -45,7 +49,7 @@ export declare class TaskService<A extends Adapter<any, any, any, any>> extends
|
|
|
45
49
|
update(model: TaskModel, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel>;
|
|
46
50
|
updateAll(models: TaskModel[], ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel[]>;
|
|
47
51
|
listBy(key: keyof TaskModel, order: OrderDirection, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel<any, any>[]>;
|
|
48
|
-
paginateBy(key: keyof TaskModel, order: OrderDirection, ref: Omit<DirectionLimitOffset, "direction">, ...args: MaybeContextualArg<ContextOf<A>>): Promise<import("
|
|
52
|
+
paginateBy(key: keyof TaskModel, order: OrderDirection, ref: Omit<DirectionLimitOffset, "direction">, ...args: MaybeContextualArg<ContextOf<A>>): Promise<import("../query/Paginator").SerializedPage<TaskModel<any, any>>>;
|
|
49
53
|
findOneBy(key: keyof TaskModel, value: any, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel<any, any>>;
|
|
50
54
|
findBy(key: keyof TaskModel, value: any, ...args: MaybeContextualArg<ContextOf<A>>): Promise<TaskModel<any, any>[]>;
|
|
51
55
|
statement(name: string, ...args: MaybeContextualArg<ContextOf<A>>): Promise<any>;
|