@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
|
@@ -46,16 +46,24 @@ if (!initialPort) {
|
|
|
46
46
|
throw new Error("workerThread.ts must be run inside a worker thread");
|
|
47
47
|
}
|
|
48
48
|
const port = initialPort;
|
|
49
|
-
const
|
|
49
|
+
const rawEnvironment = worker_threads_1.workerData.environment;
|
|
50
|
+
const environment = Object.assign({}, WorkThreadEnvironment_1.DefaultWorkThreadEnvironment, rawEnvironment, {
|
|
51
|
+
persistence: Object.assign({}, WorkThreadEnvironment_1.DefaultWorkThreadEnvironment.persistence, rawEnvironment?.persistence ?? {}),
|
|
52
|
+
taskEngine: Object.assign({}, WorkThreadEnvironment_1.DefaultWorkThreadEnvironment.taskEngine, rawEnvironment?.taskEngine ?? {}),
|
|
53
|
+
modules: Object.assign({}, WorkThreadEnvironment_1.DefaultWorkThreadEnvironment.modules, rawEnvironment?.modules ?? {}),
|
|
54
|
+
});
|
|
50
55
|
const persistence = environment.persistence;
|
|
51
56
|
const moduleLoadPromise = loadModules(environment.modules);
|
|
52
57
|
async function loadModules(modules) {
|
|
53
|
-
const imports = modules?.imports
|
|
54
|
-
if (!imports.length) {
|
|
58
|
+
const imports = modules?.imports;
|
|
59
|
+
if (!Array.isArray(imports) || !imports.length) {
|
|
55
60
|
throw new Error("Worker modules configuration must include at least one import");
|
|
56
61
|
}
|
|
57
62
|
const loaded = [];
|
|
58
63
|
for (const specifier of imports) {
|
|
64
|
+
if (typeof specifier !== "string") {
|
|
65
|
+
throw new Error("Worker modules imports must contain only strings");
|
|
66
|
+
}
|
|
59
67
|
const normalized = await (0, utils_1.normalizeImport)(Promise.resolve(`${specifier}`).then(s => __importStar(require(s))));
|
|
60
68
|
loaded.push(normalized);
|
|
61
69
|
}
|
|
@@ -126,19 +134,39 @@ async function runJob(job) {
|
|
|
126
134
|
throw new Error(`No task handler registered for type: ${job.classification}`);
|
|
127
135
|
}
|
|
128
136
|
const taskLogger = new tasks_1.TaskLogger(workerLogger, job.streamBufferSize, job.maxLoggingBuffer);
|
|
129
|
-
const
|
|
137
|
+
const postLogs = async (entries) => {
|
|
130
138
|
if (!entries.length)
|
|
131
139
|
return;
|
|
132
140
|
post(toLogMessage(job.jobId, entries));
|
|
133
141
|
};
|
|
142
|
+
const normalizePipeArgs = (args) => {
|
|
143
|
+
if (!args.length)
|
|
144
|
+
return [];
|
|
145
|
+
if (args.length === 1) {
|
|
146
|
+
const value = args[0];
|
|
147
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
148
|
+
return [];
|
|
149
|
+
if (Array.isArray(value[0])) {
|
|
150
|
+
return value.filter(Array.isArray);
|
|
151
|
+
}
|
|
152
|
+
return [value];
|
|
153
|
+
}
|
|
154
|
+
const [level, msg, meta] = args;
|
|
155
|
+
if (typeof level !== "string" || typeof msg !== "string")
|
|
156
|
+
return [];
|
|
157
|
+
return [[level, msg, meta]];
|
|
158
|
+
};
|
|
134
159
|
const ctx = tasks_1.TaskEngine.createTaskContext(undefined, {
|
|
135
160
|
logger: taskLogger,
|
|
136
161
|
taskId: job.taskId,
|
|
137
162
|
attempt: job.attempt,
|
|
138
|
-
pipe: async (
|
|
163
|
+
pipe: async (...args) => {
|
|
164
|
+
const normalized = normalizePipeArgs(args);
|
|
165
|
+
await postLogs(normalized);
|
|
166
|
+
},
|
|
139
167
|
flush: async () => {
|
|
140
168
|
const logs = await taskLogger.flush();
|
|
141
|
-
await
|
|
169
|
+
await postLogs(logs);
|
|
142
170
|
},
|
|
143
171
|
progress: async (payload) => {
|
|
144
172
|
post({
|
|
@@ -217,4 +245,4 @@ port.on("message", (message) => {
|
|
|
217
245
|
});
|
|
218
246
|
}
|
|
219
247
|
});
|
|
220
|
-
//# sourceMappingURL=workerThread.js.map
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtlcnMvd29ya2VyVGhyZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0NBQXNCO0FBQ3RCLG1EQUF3RDtBQUN4RCx1RUFJaUM7QUFPakMsZ0RBQTJDO0FBQzNDLDREQUF5QztBQUN6QyxnREFLa0I7QUFDbEIsK0NBQTRDO0FBQzVDLDhFQUFxRTtBQUdyRSxNQUFNLFdBQVcsR0FBRywyQkFBVSxDQUFDO0FBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUV6QixNQUFNLGNBQWMsR0FBRywyQkFBVSxDQUFDLFdBQXlDLENBQUM7QUFDNUUsTUFBTSxXQUFXLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQzNELEVBQUUsRUFDRixvREFBNEIsRUFDNUIsY0FBYyxFQUNkO0lBQ0UsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQ3hCLEVBQUUsRUFDRixvREFBNEIsQ0FBQyxXQUFXLEVBQ3hDLGNBQWMsRUFBRSxXQUFXLElBQUksRUFBRSxDQUNsQztJQUNELFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUN2QixFQUFFLEVBQ0Ysb0RBQTRCLENBQUMsVUFBVSxFQUN2QyxjQUFjLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FDakM7SUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FDcEIsRUFBRSxFQUNGLG9EQUE0QixDQUFDLE9BQU8sRUFDcEMsY0FBYyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQzlCO0NBQ0YsQ0FDRixDQUFDO0FBQ0YsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztBQUM1QyxNQUFNLGlCQUFp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QyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDcEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuLi9vdmVycmlkZXNcIjtcbmltcG9ydCB7IHBhcmVudFBvcnQsIHdvcmtlckRhdGEgfSBmcm9tIFwid29ya2VyX3RocmVhZHNcIjtcbmltcG9ydCB7XG4gIFdvcmtUaHJlYWRFbnZpcm9ubWVudFNoYXBlLFxuICBEZWZhdWx0V29ya1RocmVhZEVudmlyb25tZW50LFxuICBXb3JrVGhyZWFkTW9kdWxlc0NvbmZpZyxcbn0gZnJvbSBcIi4vV29ya1RocmVhZEVudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBXb3JrZXJUb01haW5NZXNzYWdlLFxuICBNYWluVG9Xb3JrZXJNZXNzYWdlLFxuICBXb3JrZXJKb2JQYXlsb2FkLFxuICBXb3JrZXJMb2dFbnRyeSxcbn0gZnJvbSBcIi4vbWVzc2FnZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUltcG9ydCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHtcbiAgc2VyaWFsaXplRXJyb3IsXG4gIFRhc2tFbmdpbmUsXG4gIFRhc2tIYW5kbGVyUmVnaXN0cnksXG4gIFRhc2tMb2dnZXIsXG59IGZyb20gXCIuLi90YXNrc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgVGFza1N0YXRlQ2hhbmdlRXJyb3IgfSBmcm9tIFwiLi4vdGFza3MvVGFza1N0YXRlQ2hhbmdlRXJyb3JcIjtcbmltcG9ydCB7IFRhc2tDb250ZXh0IH0gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tDb250ZXh0XCI7XG5cbmNvbnN0IGluaXRpYWxQb3J0ID0gcGFyZW50UG9ydDtcbmlmICghaW5pdGlhbFBvcnQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyVGhyZWFkLnRzIG11c3QgYmUgcnVuIGluc2lkZSBhIHdvcmtlciB0aHJlYWRcIik7XG59XG5jb25zdCBwb3J0ID0gaW5pdGlhbFBvcnQ7XG5cbmNvbnN0IHJhd0Vudmlyb25tZW50ID0gd29ya2VyRGF0YS5lbnZpcm9ubWVudCBhcyBXb3JrVGhyZWFkRW52aXJvbm1lbnRTaGFwZTtcbmNvbnN0IGVudmlyb25tZW50OiBXb3JrVGhyZWFkRW52aXJvbm1lbnRTaGFwZSA9IE9iamVjdC5hc3NpZ24oXG4gIHt9LFxuICBEZWZhdWx0V29ya1RocmVhZEVudmlyb25tZW50LFxuICByYXdFbnZpcm9ubWVudCxcbiAge1xuICAgIHBlcnNpc3RlbmNlOiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0V29ya1RocmVhZEVudmlyb25tZW50LnBlcnNpc3RlbmNlLFxuICAgICAgcmF3RW52aXJvbm1lbnQ/LnBlcnNpc3RlbmNlID8/IHt9XG4gICAgKSxcbiAgICB0YXNrRW5naW5lOiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0V29ya1RocmVhZEVudmlyb25tZW50LnRhc2tFbmdpbmUsXG4gICAgICByYXdFbnZpcm9ubWVudD8udGFza0VuZ2luZSA/PyB7fVxuICAgICksXG4gICAgbW9kdWxlczogT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdFdvcmtUaHJlYWRFbnZpcm9ubWVudC5tb2R1bGVzLFxuICAgICAgcmF3RW52aXJvbm1lbnQ/Lm1vZHVsZXMgPz8ge31cbiAgICApLFxuICB9XG4pO1xuY29uc3QgcGVyc2lzdGVuY2UgPSBlbnZpcm9ubWVudC5wZXJzaXN0ZW5jZTtcbmNvbnN0IG1vZHVsZUxvYWRQcm9taXNlID0gbG9hZE1vZHVsZXMoZW52aXJvbm1lbnQubW9kdWxlcyk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNb2R1bGVzKG1vZHVsZXM6IFdvcmtUaHJlYWRNb2R1bGVzQ29uZmlnKSB7XG4gIGNvbnN0IGltcG9ydHMgPSBtb2R1bGVzPy5pbXBvcnRzO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoaW1wb3J0cykgfHwgIWltcG9ydHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJXb3JrZXIgbW9kdWxlcyBjb25maWd1cmF0aW9uIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgaW1wb3J0XCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGxvYWRlZDogYW55W10gPSBbXTtcbiAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaW1wb3J0cykge1xuICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgbW9kdWxlcyBpbXBvcnRzIG11c3QgY29udGFpbiBvbmx5IHN0cmluZ3NcIik7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KHNwZWNpZmllcikpO1xuICAgIGxvYWRlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBsb2FkZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBZGFwdGVyKCk6IFByb21pc2U8QWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+PiB7XG4gIGNvbnN0IGxvYWRlZE1vZHVsZXMgPSBhd2FpdCBtb2R1bGVMb2FkUHJvbWlzZTtcbiAgaWYgKCFsb2FkZWRNb2R1bGVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2FkIGFkYXB0ZXIgbW9kdWxlIGZvciB3b3JrZXJcIik7XG4gIH1cbiAgaWYgKFxuICAgIHBlcnNpc3RlbmNlLmFkYXB0ZXJNb2R1bGUgJiZcbiAgICBlbnZpcm9ubWVudC5tb2R1bGVzLmltcG9ydHNbMF0gIT09IHBlcnNpc3RlbmNlLmFkYXB0ZXJNb2R1bGVcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFkYXB0ZXIgbW9kdWxlIG1pc21hdGNoOiBleHBlY3RlZCAke3BlcnNpc3RlbmNlLmFkYXB0ZXJNb2R1bGV9IGFzIHRoZSBmaXJzdCBpbXBvcnRgXG4gICAgKTtcbiAgfVxuICBjb25zdCBhZGFwdGVyRXhwb3J0cyA9IGxvYWRlZE1vZHVsZXNbMF07XG4gIGNvbnN0IEFkYXB0ZXJDdG9yID0gcGVyc2lzdGVuY2UuYWRhcHRlckNsYXNzXG4gICAgPyAoYWRhcHRlckV4cG9ydHMgYXMgYW55KVtwZXJzaXN0ZW5jZS5hZGFwdGVyQ2xhc3NdXG4gICAgOiAoYWRhcHRlckV4cG9ydHMgYXMgYW55KS5kZWZhdWx0IHx8IGFkYXB0ZXJFeHBvcnRzO1xuICBpZiAoIUFkYXB0ZXJDdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuYWJsZSB0byByZXNvbHZlIGFkYXB0ZXIgY29uc3RydWN0b3IgJHtwZXJzaXN0ZW5jZS5hZGFwdGVyQ2xhc3N9IGZyb20gJHtlbnZpcm9ubWVudC5tb2R1bGVzLmltcG9ydHNbMF19YFxuICAgICk7XG4gIH1cbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQWRhcHRlckN0b3IoLi4uKHBlcnNpc3RlbmNlLmFkYXB0ZXJBcmdzIHx8IFtdKSk7XG4gIGlmIChwZXJzaXN0ZW5jZS5hbGlhcykge1xuICAgIEFkYXB0ZXIuc2V0Q3VycmVudChwZXJzaXN0ZW5jZS5hbGlhcyk7XG4gIH0gZWxzZSBpZiAoKGluc3RhbmNlIGFzIGFueSkuZmxhdm91cikge1xuICAgIEFkYXB0ZXIuc2V0Q3VycmVudCgoaW5zdGFuY2UgYXMgYW55KS5mbGF2b3VyKTtcbiAgfVxuICBpZiAodHlwZW9mIChpbnN0YW5jZSBhcyBhbnkpLmluaXRpYWxpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGF3YWl0IChpbnN0YW5jZSBhcyBhbnkpLmluaXRpYWxpemUoKTtcbiAgfVxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmxldCBhZGFwdGVyUHJvbWlzZTogUHJvbWlzZTxBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4+IHwgdW5kZWZpbmVkO1xuY29uc3QgcmVnaXN0cnlQcm9taXNlID0gbW9kdWxlTG9hZFByb21pc2UudGhlbigoKSA9PiBuZXcgVGFza0hhbmRsZXJSZWdpc3RyeSgpKTtcblxuZnVuY3Rpb24gZ2V0QWRhcHRlcigpOiBQcm9taXNlPEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pj4ge1xuICBpZiAoIWFkYXB0ZXJQcm9taXNlKSBhZGFwdGVyUHJvbWlzZSA9IHJlc29sdmVBZGFwdGVyKCk7XG4gIHJldHVybiBhZGFwdGVyUHJvbWlzZTtcbn1cbmNvbnN0IHdvcmtlckxvZ2dlciA9IExvZ2dpbmcuZ2V0KCkuZm9yKGBUYXNrV29ya2VyOiR7ZW52aXJvbm1lbnQud29ya2VySWR9YCk7XG5cbmZ1bmN0aW9uIHBvc3QobWVzc2FnZTogV29ya2VyVG9NYWluTWVzc2FnZSkge1xuICBwb3J0LnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0b0xvZ01lc3NhZ2UoXG4gIGpvYklkOiBzdHJpbmcsXG4gIGVudHJpZXM6IFdvcmtlckxvZ0VudHJ5W11cbik6IFdvcmtlclRvTWFpbk1lc3NhZ2Uge1xuICByZXR1cm4geyB0eXBlOiBcImxvZ1wiLCB3b3JrZXJJZDogZW52aXJvbm1lbnQud29ya2VySWQsIGpvYklkLCBlbnRyaWVzIH07XG59XG5cbmdldEFkYXB0ZXIoKVxuICAudGhlbigoKSA9PiB7XG4gICAgcG9zdCh7XG4gICAgICB0eXBlOiBcInJlYWR5XCIsXG4gICAgICB3b3JrZXJJZDogZW52aXJvbm1lbnQud29ya2VySWQsXG4gICAgfSk7XG4gIH0pXG4gIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgcG9zdCh7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICB3b3JrZXJJZDogZW52aXJvbm1lbnQud29ya2VySWQsXG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcblxuYXN5bmMgZnVuY3Rpb24gcnVuSm9iKGpvYjogV29ya2VySm9iUGF5bG9hZCkge1xuICBhd2FpdCBnZXRBZGFwdGVyKCk7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcmVnaXN0cnlQcm9taXNlO1xuICBjb25zdCBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0KGpvYi5jbGFzc2lmaWNhdGlvbik7XG4gIGlmICghaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyB0YXNrIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgdHlwZTogJHtqb2IuY2xhc3NpZmljYXRpb259YFxuICAgICk7XG4gIH1cbiAgY29uc3QgdGFza0xvZ2dlciA9IG5ldyBUYXNrTG9nZ2VyKFxuICAgIHdvcmtlckxvZ2dlcixcbiAgICBqb2Iuc3RyZWFtQnVmZmVyU2l6ZSxcbiAgICBqb2IubWF4TG9nZ2luZ0J1ZmZlclxuICApO1xuXG4gIGNvbnN0IHBvc3RMb2dzID0gYXN5bmMgKGVudHJpZXM6IFdvcmtlckxvZ0VudHJ5W10pID0+IHtcbiAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgcG9zdCh0b0xvZ01lc3NhZ2Uoam9iLmpvYklkLCBlbnRyaWVzKSk7XG4gIH07XG5cbiAgY29uc3Qgbm9ybWFsaXplUGlwZUFyZ3MgPSAoYXJnczogYW55W10pOiBXb3JrZXJMb2dFbnRyeVtdID0+IHtcbiAgICBpZiAoIWFyZ3MubGVuZ3RoKSByZXR1cm4gW107XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55W10pLmZpbHRlcihBcnJheS5pc0FycmF5KSBhcyBXb3JrZXJMb2dFbnRyeVtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt2YWx1ZSBhcyBXb3JrZXJMb2dFbnRyeV07XG4gICAgfVxuICAgIGNvbnN0IFtsZXZlbCwgbXNnLCBtZXRhXSA9IGFyZ3M7XG4gICAgaWYgKHR5cGVvZiBsZXZlbCAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbXNnICE9PSBcInN0cmluZ1wiKSByZXR1cm4gW107XG4gICAgcmV0dXJuIFtbbGV2ZWwsIG1zZywgbWV0YV0gYXMgV29ya2VyTG9nRW50cnldO1xuICB9O1xuXG4gIGNvbnN0IGN0eCA9IFRhc2tFbmdpbmUuY3JlYXRlVGFza0NvbnRleHQodW5kZWZpbmVkLCB7XG4gICAgbG9nZ2VyOiB0YXNrTG9nZ2VyLFxuICAgIHRhc2tJZDogam9iLnRhc2tJZCxcbiAgICBhdHRlbXB0OiBqb2IuYXR0ZW1wdCxcbiAgICBwaXBlOiBhc3luYyAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQaXBlQXJncyhhcmdzKTtcbiAgICAgIGF3YWl0IHBvc3RMb2dzKG5vcm1hbGl6ZWQpO1xuICAgIH0sXG4gICAgZmx1c2g6IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0YXNrTG9nZ2VyLmZsdXNoKCk7XG4gICAgICBhd2FpdCBwb3N0TG9ncyhsb2dzIGFzIFdvcmtlckxvZ0VudHJ5W10pO1xuICAgIH0sXG4gICAgcHJvZ3Jlc3M6IGFzeW5jIChwYXlsb2FkOiBhbnkpID0+IHtcbiAgICAgIHBvc3Qoe1xuICAgICAgICB0eXBlOiBcInByb2dyZXNzXCIsXG4gICAgICAgIHdvcmtlcklkOiBlbnZpcm9ubWVudC53b3JrZXJJZCxcbiAgICAgICAgam9iSWQ6IGpvYi5qb2JJZCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGVhcnRiZWF0OiBhc3luYyAoKSA9PiB7XG4gICAgICBwb3N0KHtcbiAgICAgICAgdHlwZTogXCJoZWFydGJlYXRcIixcbiAgICAgICAgd29ya2VySWQ6IGVudmlyb25tZW50LndvcmtlcklkLFxuICAgICAgICBqb2JJZDogam9iLmpvYklkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICByZXN1bHRDYWNoZTogam9iLnJlc3VsdENhY2hlID8/IHt9LFxuICB9KSBhcyBUYXNrQ29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGhhbmRsZXIucnVuKGpvYi5pbnB1dCwgY3R4KTtcbiAgICBhd2FpdCBjdHguZmx1c2goKTtcbiAgICBwb3N0KHtcbiAgICAgIHR5cGU6IFwicmVzdWx0XCIsXG4gICAgICB3b3JrZXJJZDogZW52aXJvbm1lbnQud29ya2VySWQsXG4gICAgICBqb2JJZDogam9iLmpvYklkLFxuICAgICAgc3RhdHVzOiBcInN1Y2Nlc3NcIixcbiAgICAgIG91dHB1dCxcbiAgICAgIGNhY2hlOiBjdHgucmVzdWx0Q2FjaGUgPz8ge30sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBhd2FpdCBjdHguZmx1c2goKTtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUYXNrU3RhdGVDaGFuZ2VFcnJvcikge1xuICAgICAgcG9zdCh7XG4gICAgICAgIHR5cGU6IFwicmVzdWx0XCIsXG4gICAgICAgIHdvcmtlcklkOiBlbnZpcm9ubWVudC53b3JrZXJJZCxcbiAgICAgICAgam9iSWQ6IGpvYi5qb2JJZCxcbiAgICAgICAgc3RhdHVzOiBcInN0YXRlLWNoYW5nZVwiLFxuICAgICAgICByZXF1ZXN0OiBlcnJvci5yZXF1ZXN0LFxuICAgICAgICBjYWNoZTogY3R4LnJlc3VsdENhY2hlID8/IHt9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVFcnJvcihlcnJvcik7XG4gICAgcG9zdCh7XG4gICAgICB0eXBlOiBcInJlc3VsdFwiLFxuICAgICAgd29ya2VySWQ6IGVudmlyb25tZW50LndvcmtlcklkLFxuICAgICAgam9iSWQ6IGpvYi5qb2JJZCxcbiAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgbmFtZTpcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGVycm9yLm5hbWVcbiAgICAgICAgICAgIDogKHNlcmlhbGl6ZWQgYXMgYW55KT8uY29kZSB8fCBcIkVycm9yXCIsXG4gICAgICAgIG1lc3NhZ2U6IHNlcmlhbGl6ZWQ/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycm9yKSxcbiAgICAgICAgc3RhY2s6IHNlcmlhbGl6ZWQ/LnN0YWNrLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiBjdHgucmVzdWx0Q2FjaGUgPz8ge30sXG4gICAgfSk7XG4gIH1cbn1cblxucG9ydC5vbihcIm1lc3NhZ2VcIiwgKG1lc3NhZ2U6IE1haW5Ub1dvcmtlck1lc3NhZ2UpID0+IHtcbiAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJjb250cm9sXCIpIHtcbiAgICBpZiAobWVzc2FnZS5jb21tYW5kID09PSBcInN0b3BcIiB8fCBtZXNzYWdlLmNvbW1hbmQgPT09IFwic2h1dGRvd25cIikge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJleGVjdXRlXCIpIHtcbiAgICB2b2lkIHJ1bkpvYihtZXNzYWdlLmpvYikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgcG9zdCh7XG4gICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgd29ya2VySWQ6IGVudmlyb25tZW50LndvcmtlcklkLFxuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICBzdGFjazogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXX0=
|