@tc-libs/task 2.0.1
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 +11 -0
- package/package.json +27 -0
- package/src/constants/index.d.ts +1 -0
- package/src/constants/index.js +5 -0
- package/src/constants/index.js.map +1 -0
- package/src/constants/task-run.list.constant.d.ts +9 -0
- package/src/constants/task-run.list.constant.js +11 -0
- package/src/constants/task-run.list.constant.js.map +1 -0
- package/src/constants/task.enum.d.ts +6 -0
- package/src/constants/task.enum.js +11 -0
- package/src/constants/task.enum.js.map +1 -0
- package/src/constants/task.list.constant.d.ts +9 -0
- package/src/constants/task.list.constant.js +18 -0
- package/src/constants/task.list.constant.js.map +1 -0
- package/src/controllers/task-run.admin.controller.d.ts +10 -0
- package/src/controllers/task-run.admin.controller.js +67 -0
- package/src/controllers/task-run.admin.controller.js.map +1 -0
- package/src/controllers/task.admin.controller.d.ts +11 -0
- package/src/controllers/task.admin.controller.js +81 -0
- package/src/controllers/task.admin.controller.js.map +1 -0
- package/src/dtos/task-run.request.dto.d.ts +3 -0
- package/src/dtos/task-run.request.dto.js +23 -0
- package/src/dtos/task-run.request.dto.js.map +1 -0
- package/src/dtos/task.request.dto.d.ts +3 -0
- package/src/dtos/task.request.dto.js +23 -0
- package/src/dtos/task.request.dto.js.map +1 -0
- package/src/index.d.ts +4 -0
- package/src/index.js +8 -0
- package/src/index.js.map +1 -0
- package/src/repository/entities/task-run.entity.d.ts +24 -0
- package/src/repository/entities/task-run.entity.js +80 -0
- package/src/repository/entities/task-run.entity.js.map +1 -0
- package/src/repository/entities/task.entity.d.ts +22 -0
- package/src/repository/entities/task.entity.js +76 -0
- package/src/repository/entities/task.entity.js.map +1 -0
- package/src/repository/index.d.ts +5 -0
- package/src/repository/index.js +9 -0
- package/src/repository/index.js.map +1 -0
- package/src/repository/repositories/task-run.repository.d.ts +11 -0
- package/src/repository/repositories/task-run.repository.js +28 -0
- package/src/repository/repositories/task-run.repository.js.map +1 -0
- package/src/repository/repositories/task.repository.d.ts +11 -0
- package/src/repository/repositories/task.repository.js +28 -0
- package/src/repository/repositories/task.repository.js.map +1 -0
- package/src/repository/task.repository.module.d.ts +2 -0
- package/src/repository/task.repository.module.js +33 -0
- package/src/repository/task.repository.module.js.map +1 -0
- package/src/serializations/task-run.get.serialization.d.ts +3 -0
- package/src/serializations/task-run.get.serialization.js +8 -0
- package/src/serializations/task-run.get.serialization.js.map +1 -0
- package/src/serializations/task-run.list.serialization.d.ts +3 -0
- package/src/serializations/task-run.list.serialization.js +8 -0
- package/src/serializations/task-run.list.serialization.js.map +1 -0
- package/src/serializations/task.get.serialization.d.ts +3 -0
- package/src/serializations/task.get.serialization.js +8 -0
- package/src/serializations/task.get.serialization.js.map +1 -0
- package/src/serializations/task.list.serialization.d.ts +3 -0
- package/src/serializations/task.list.serialization.js +8 -0
- package/src/serializations/task.list.serialization.js.map +1 -0
- package/src/services/abstracts/task.abstract.service.d.ts +19 -0
- package/src/services/abstracts/task.abstract.service.js +86 -0
- package/src/services/abstracts/task.abstract.service.js.map +1 -0
- package/src/services/index.d.ts +3 -0
- package/src/services/index.js +7 -0
- package/src/services/index.js.map +1 -0
- package/src/services/task-run.service.d.ts +16 -0
- package/src/services/task-run.service.js +54 -0
- package/src/services/task-run.service.js.map +1 -0
- package/src/services/task.service.d.ts +21 -0
- package/src/services/task.service.js +92 -0
- package/src/services/task.service.js.map +1 -0
- package/src/task.module.d.ts +2 -0
- package/src/task.module.js +19 -0
- package/src/task.module.js.map +1 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./task.repository.module"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./entities/task.entity"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./entities/task-run.entity"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./repositories/task.repository"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./repositories/task-run.repository"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/task/src/repository/index.ts"],"names":[],"mappings":";;;AAAA,mEAAyC;AACzC,iEAAuC;AACvC,qEAA2C;AAC3C,yEAA+C;AAC/C,6EAAmD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DatabaseMongoRepositoryAbstract } from '@tc-libs/database';
|
|
2
|
+
import { Logger } from '@nestjs/common';
|
|
3
|
+
import { Connection, Model } from 'mongoose';
|
|
4
|
+
import { AppCacheService } from '@tc-libs/app-cache';
|
|
5
|
+
import { TaskRunDoc, TaskRunEntity } from '../entities/task-run.entity';
|
|
6
|
+
export declare class TaskRunRepository extends DatabaseMongoRepositoryAbstract<TaskRunEntity, TaskRunDoc> {
|
|
7
|
+
protected readonly taskRunModel: Model<TaskRunEntity>;
|
|
8
|
+
protected readonly connection: Connection;
|
|
9
|
+
protected readonly _logger: Logger;
|
|
10
|
+
constructor(taskRunModel: Model<TaskRunEntity>, connection: Connection, _cache: AppCacheService);
|
|
11
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskRunRepository = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const database_1 = require("@tc-libs/database");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const mongoose_1 = require("mongoose");
|
|
8
|
+
const app_cache_1 = require("@tc-libs/app-cache");
|
|
9
|
+
const task_run_entity_1 = require("../entities/task-run.entity");
|
|
10
|
+
const task_repository_1 = require("./task.repository");
|
|
11
|
+
let TaskRunRepository = class TaskRunRepository extends database_1.DatabaseMongoRepositoryAbstract {
|
|
12
|
+
constructor(taskRunModel, connection, _cache) {
|
|
13
|
+
super(taskRunModel, connection, _cache);
|
|
14
|
+
this.taskRunModel = taskRunModel;
|
|
15
|
+
this.connection = connection;
|
|
16
|
+
this._logger = new common_1.Logger(task_repository_1.TaskRepository.name);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.TaskRunRepository = TaskRunRepository;
|
|
20
|
+
exports.TaskRunRepository = TaskRunRepository = tslib_1.__decorate([
|
|
21
|
+
(0, common_1.Injectable)(),
|
|
22
|
+
tslib_1.__param(0, (0, database_1.DatabaseModel)(task_run_entity_1.TaskRunEntity.name)),
|
|
23
|
+
tslib_1.__param(1, (0, database_1.DatabaseConnection)()),
|
|
24
|
+
tslib_1.__metadata("design:paramtypes", [mongoose_1.Model,
|
|
25
|
+
mongoose_1.Connection,
|
|
26
|
+
app_cache_1.AppCacheService])
|
|
27
|
+
], TaskRunRepository);
|
|
28
|
+
//# sourceMappingURL=task-run.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-run.repository.js","sourceRoot":"","sources":["../../../../../../packages/task/src/repository/repositories/task-run.repository.ts"],"names":[],"mappings":";;;;AAAA,gDAI2B;AAC3B,2CAAoD;AACpD,uCAA6C;AAC7C,kDAAqD;AACrD,iEAAwE;AACxE,uDAAmD;AAG5C,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,0CAGtC;IAEC,YAEE,YAAqD,EAErD,UAAyC,EACzC,MAAuB;QAEvB,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QALrB,iBAAY,GAAZ,YAAY,CAAsB;QAElC,eAAU,GAAV,UAAU,CAAY;QALxB,YAAO,GAAW,IAAI,eAAM,CAAC,gCAAc,CAAC,IAAI,CAAC,CAAC;IASrE,CAAC;CACF,CAAA;AAdY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAOR,mBAAA,IAAA,wBAAa,EAAC,+BAAa,CAAC,IAAI,CAAC,CAAA;IAEjC,mBAAA,IAAA,6BAAkB,GAAE,CAAA;6CADY,gBAAK;QAEP,qBAAU;QACjC,2BAAe;GAVd,iBAAiB,CAc7B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DatabaseMongoRepositoryAbstract } from '@tc-libs/database';
|
|
2
|
+
import { Logger } from '@nestjs/common';
|
|
3
|
+
import { Connection, Model } from 'mongoose';
|
|
4
|
+
import { AppCacheService } from '@tc-libs/app-cache';
|
|
5
|
+
import { TaskDoc, TaskEntity } from '../entities/task.entity';
|
|
6
|
+
export declare class TaskRepository extends DatabaseMongoRepositoryAbstract<TaskEntity, TaskDoc> {
|
|
7
|
+
protected readonly taskModel: Model<TaskEntity>;
|
|
8
|
+
protected readonly connection: Connection;
|
|
9
|
+
protected readonly _logger: Logger;
|
|
10
|
+
constructor(taskModel: Model<TaskEntity>, connection: Connection, _cache: AppCacheService);
|
|
11
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var TaskRepository_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TaskRepository = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const database_1 = require("@tc-libs/database");
|
|
7
|
+
const common_1 = require("@nestjs/common");
|
|
8
|
+
const mongoose_1 = require("mongoose");
|
|
9
|
+
const app_cache_1 = require("@tc-libs/app-cache");
|
|
10
|
+
const task_entity_1 = require("../entities/task.entity");
|
|
11
|
+
let TaskRepository = TaskRepository_1 = class TaskRepository extends database_1.DatabaseMongoRepositoryAbstract {
|
|
12
|
+
constructor(taskModel, connection, _cache) {
|
|
13
|
+
super(taskModel, connection, _cache);
|
|
14
|
+
this.taskModel = taskModel;
|
|
15
|
+
this.connection = connection;
|
|
16
|
+
this._logger = new common_1.Logger(TaskRepository_1.name);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.TaskRepository = TaskRepository;
|
|
20
|
+
exports.TaskRepository = TaskRepository = TaskRepository_1 = tslib_1.__decorate([
|
|
21
|
+
(0, common_1.Injectable)(),
|
|
22
|
+
tslib_1.__param(0, (0, database_1.DatabaseModel)(task_entity_1.TaskEntity.name)),
|
|
23
|
+
tslib_1.__param(1, (0, database_1.DatabaseConnection)()),
|
|
24
|
+
tslib_1.__metadata("design:paramtypes", [mongoose_1.Model,
|
|
25
|
+
mongoose_1.Connection,
|
|
26
|
+
app_cache_1.AppCacheService])
|
|
27
|
+
], TaskRepository);
|
|
28
|
+
//# sourceMappingURL=task.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.repository.js","sourceRoot":"","sources":["../../../../../../packages/task/src/repository/repositories/task.repository.ts"],"names":[],"mappings":";;;;;AAAA,gDAI2B;AAC3B,2CAAoD;AACpD,uCAA6C;AAC7C,kDAAqD;AACrD,yDAA8D;AAGvD,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,0CAGnC;IAEC,YAEE,SAA+C,EAE/C,UAAyC,EACzC,MAAuB;QAEvB,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QALlB,cAAS,GAAT,SAAS,CAAmB;QAE5B,eAAU,GAAV,UAAU,CAAY;QALxB,YAAO,GAAW,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IASrE,CAAC;CACF,CAAA;AAdY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAOR,mBAAA,IAAA,wBAAa,EAAC,wBAAU,CAAC,IAAI,CAAC,CAAA;IAE9B,mBAAA,IAAA,6BAAkB,GAAE,CAAA;6CADS,gBAAK;QAEJ,qBAAU;QACjC,2BAAe;GAVd,cAAc,CAc1B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskRepositoryModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const mongoose_1 = require("@nestjs/mongoose");
|
|
7
|
+
const task_repository_1 = require("./repositories/task.repository");
|
|
8
|
+
const task_run_repository_1 = require("./repositories/task-run.repository");
|
|
9
|
+
const task_entity_1 = require("./entities/task.entity");
|
|
10
|
+
const task_run_entity_1 = require("./entities/task-run.entity");
|
|
11
|
+
let TaskRepositoryModule = class TaskRepositoryModule {
|
|
12
|
+
};
|
|
13
|
+
exports.TaskRepositoryModule = TaskRepositoryModule;
|
|
14
|
+
exports.TaskRepositoryModule = TaskRepositoryModule = tslib_1.__decorate([
|
|
15
|
+
(0, common_1.Module)({
|
|
16
|
+
providers: [task_repository_1.TaskRepository, task_run_repository_1.TaskRunRepository],
|
|
17
|
+
exports: [task_repository_1.TaskRepository, task_run_repository_1.TaskRunRepository],
|
|
18
|
+
controllers: [],
|
|
19
|
+
imports: [
|
|
20
|
+
mongoose_1.MongooseModule.forFeature([
|
|
21
|
+
{
|
|
22
|
+
name: task_entity_1.TaskEntity.name,
|
|
23
|
+
schema: task_entity_1.TaskSchema,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: task_run_entity_1.TaskRunEntity.name,
|
|
27
|
+
schema: task_run_entity_1.TaskRunSchema,
|
|
28
|
+
},
|
|
29
|
+
]),
|
|
30
|
+
],
|
|
31
|
+
})
|
|
32
|
+
], TaskRepositoryModule);
|
|
33
|
+
//# sourceMappingURL=task.repository.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.repository.module.js","sourceRoot":"","sources":["../../../../../packages/task/src/repository/task.repository.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,+CAAkD;AAClD,oEAAgE;AAChE,4EAAuE;AACvE,wDAAgE;AAChE,gEAA0E;AAmBnE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oDAAoB;+BAApB,oBAAoB;IAjBhC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;QAC9C,OAAO,EAAE,CAAC,gCAAc,EAAE,uCAAiB,CAAC;QAC5C,WAAW,EAAE,EAAE;QACf,OAAO,EAAE;YACP,yBAAc,CAAC,UAAU,CAAC;gBACxB;oBACE,IAAI,EAAE,wBAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,wBAAU;iBACnB;gBACD;oBACE,IAAI,EAAE,+BAAa,CAAC,IAAI;oBACxB,MAAM,EAAE,+BAAa;iBACtB;aACF,CAAC;SACH;KACF,CAAC;GACW,oBAAoB,CAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskRunGetSerialization = void 0;
|
|
4
|
+
const response_1 = require("@tc-libs/response");
|
|
5
|
+
class TaskRunGetSerialization extends response_1.ResponseIdSerialization {
|
|
6
|
+
}
|
|
7
|
+
exports.TaskRunGetSerialization = TaskRunGetSerialization;
|
|
8
|
+
//# sourceMappingURL=task-run.get.serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-run.get.serialization.js","sourceRoot":"","sources":["../../../../../packages/task/src/serializations/task-run.get.serialization.ts"],"names":[],"mappings":";;;AAAA,gDAA4D;AAE5D,MAAa,uBAAwB,SAAQ,kCAAuB;CAAG;AAAvE,0DAAuE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskRunListSerialization = void 0;
|
|
4
|
+
const task_run_get_serialization_1 = require("./task-run.get.serialization");
|
|
5
|
+
class TaskRunListSerialization extends task_run_get_serialization_1.TaskRunGetSerialization {
|
|
6
|
+
}
|
|
7
|
+
exports.TaskRunListSerialization = TaskRunListSerialization;
|
|
8
|
+
//# sourceMappingURL=task-run.list.serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-run.list.serialization.js","sourceRoot":"","sources":["../../../../../packages/task/src/serializations/task-run.list.serialization.ts"],"names":[],"mappings":";;;AAAA,6EAAuE;AAEvE,MAAa,wBAAyB,SAAQ,oDAAuB;CAAG;AAAxE,4DAAwE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskGetSerialization = void 0;
|
|
4
|
+
const response_1 = require("@tc-libs/response");
|
|
5
|
+
class TaskGetSerialization extends response_1.ResponseIdSerialization {
|
|
6
|
+
}
|
|
7
|
+
exports.TaskGetSerialization = TaskGetSerialization;
|
|
8
|
+
//# sourceMappingURL=task.get.serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.get.serialization.js","sourceRoot":"","sources":["../../../../../packages/task/src/serializations/task.get.serialization.ts"],"names":[],"mappings":";;;AAAA,gDAA4D;AAE5D,MAAa,oBAAqB,SAAQ,kCAAuB;CAAG;AAApE,oDAAoE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskListSerialization = void 0;
|
|
4
|
+
const task_get_serialization_1 = require("./task.get.serialization");
|
|
5
|
+
class TaskListSerialization extends task_get_serialization_1.TaskGetSerialization {
|
|
6
|
+
}
|
|
7
|
+
exports.TaskListSerialization = TaskListSerialization;
|
|
8
|
+
//# sourceMappingURL=task.list.serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.list.serialization.js","sourceRoot":"","sources":["../../../../../packages/task/src/serializations/task.list.serialization.ts"],"names":[],"mappings":";;;AAAA,qEAAgE;AAEhE,MAAa,qBAAsB,SAAQ,6CAAoB;CAAG;AAAlE,sDAAkE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RetryPolicyMongoService } from '@tc-libs/retry-policy';
|
|
2
|
+
import { ITcLogService, LogFactory } from '@tc-libs/logger';
|
|
3
|
+
import { ClientSession } from 'mongoose';
|
|
4
|
+
import { TaskRunService } from '../task-run.service';
|
|
5
|
+
import { TaskService } from '../task.service';
|
|
6
|
+
export declare abstract class AbstractCronTask {
|
|
7
|
+
private readonly taskService;
|
|
8
|
+
private readonly taskRunService;
|
|
9
|
+
private readonly mongoRetryPolicy?;
|
|
10
|
+
private isRunning;
|
|
11
|
+
abstract code: string;
|
|
12
|
+
abstract staleMs: number;
|
|
13
|
+
protected readonly logger: ITcLogService;
|
|
14
|
+
protected constructor(loggerFactory: LogFactory, contextName: string, taskService: TaskService, taskRunService: TaskRunService, mongoRetryPolicy?: RetryPolicyMongoService | undefined);
|
|
15
|
+
protected _sleep(ms: number): Promise<unknown>;
|
|
16
|
+
protected run(envName: string): Promise<void>;
|
|
17
|
+
protected abstract work(session?: ClientSession): Promise<void>;
|
|
18
|
+
protected createSession?(): Promise<ClientSession>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractCronTask = void 0;
|
|
4
|
+
class AbstractCronTask {
|
|
5
|
+
constructor(loggerFactory, contextName, taskService, taskRunService, mongoRetryPolicy) {
|
|
6
|
+
this.taskService = taskService;
|
|
7
|
+
this.taskRunService = taskRunService;
|
|
8
|
+
this.mongoRetryPolicy = mongoRetryPolicy;
|
|
9
|
+
this.isRunning = false;
|
|
10
|
+
this.logger = loggerFactory.createLogger(contextName);
|
|
11
|
+
}
|
|
12
|
+
_sleep(ms) {
|
|
13
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
|
+
}
|
|
15
|
+
async run(envName) {
|
|
16
|
+
// lock intra-process
|
|
17
|
+
if (this.isRunning)
|
|
18
|
+
return;
|
|
19
|
+
this.isRunning = true;
|
|
20
|
+
const startedAt = Date.now();
|
|
21
|
+
let session;
|
|
22
|
+
let runId;
|
|
23
|
+
try {
|
|
24
|
+
// 1) ensure + lock cross-instance (DB)
|
|
25
|
+
await this.taskService.ensureTask(this.code, envName);
|
|
26
|
+
const task = await this.taskService.tryAcquireLock(this.code, envName, this.staleMs);
|
|
27
|
+
// Se non prendi il lock: task disattivo oppure già in esecuzione altrove
|
|
28
|
+
if (!task) {
|
|
29
|
+
this.logger.debug?.(`Task ${this.code} is already running elsewhere or inactive.`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// 2) crea TaskRun
|
|
33
|
+
const run = await this.taskRunService.startRun(task);
|
|
34
|
+
runId = run._id.toString();
|
|
35
|
+
// 3) esegui work (con o senza transazione)
|
|
36
|
+
session = await this.createSession?.();
|
|
37
|
+
if (session) {
|
|
38
|
+
if (!this.mongoRetryPolicy) {
|
|
39
|
+
throw new Error(`${this.constructor.name}: createSession() presente ma mongoRetryPolicy non iniettata`);
|
|
40
|
+
}
|
|
41
|
+
await this.mongoRetryPolicy.runInTransactionWithRetry(session, async (s) => {
|
|
42
|
+
await this.work(s);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
await this.work(undefined);
|
|
47
|
+
}
|
|
48
|
+
// 4) success: aggiorna run + task
|
|
49
|
+
const elapsedMs = Date.now() - startedAt;
|
|
50
|
+
if (runId)
|
|
51
|
+
await this.taskRunService.endRun(runId, elapsedMs);
|
|
52
|
+
await this.taskService.markSuccess(this.code, elapsedMs, envName);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
this.logger.notifyError(err);
|
|
56
|
+
const elapsedMs = Date.now() - startedAt;
|
|
57
|
+
if (runId) {
|
|
58
|
+
try {
|
|
59
|
+
await this.taskRunService.failRun(runId, err, elapsedMs);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
this.logger.notifyError(e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
await this.taskService.markError(this.code, err, elapsedMs, envName);
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
this.logger.notifyError(e);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
this.isRunning = false;
|
|
74
|
+
if (session) {
|
|
75
|
+
try {
|
|
76
|
+
await session.endSession();
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
this.logger.notifyError(e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.AbstractCronTask = AbstractCronTask;
|
|
86
|
+
//# sourceMappingURL=task.abstract.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.abstract.service.js","sourceRoot":"","sources":["../../../../../../packages/task/src/services/abstracts/task.abstract.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./task-run.service"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./task.service"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./abstracts/task.abstract.service"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/task/src/services/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,yDAA+B;AAC/B,4EAAkD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { NumberService } from '@tc-libs/helper';
|
|
3
|
+
import { PaginationService } from '@tc-libs/pagination';
|
|
4
|
+
import { AbstractService } from '@tc-libs/service';
|
|
5
|
+
import { TaskRunRepository } from '../repository/repositories/task-run.repository';
|
|
6
|
+
import { TaskRunEntity, TaskRunDoc, TaskDoc } from '../repository';
|
|
7
|
+
export declare class TaskRunService extends AbstractService<TaskRunEntity, TaskRunDoc> {
|
|
8
|
+
private readonly taskRunRepository;
|
|
9
|
+
protected readonly _paging: PaginationService;
|
|
10
|
+
protected readonly _number: NumberService;
|
|
11
|
+
readonly logger: Logger;
|
|
12
|
+
constructor(taskRunRepository: TaskRunRepository, _paging: PaginationService, _number: NumberService);
|
|
13
|
+
startRun(task: TaskDoc): Promise<TaskRunDoc>;
|
|
14
|
+
endRun(runId: string, elapsedMs: number): Promise<void>;
|
|
15
|
+
failRun(runId: string, error: unknown, elapsedMs: number): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var TaskRunService_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TaskRunService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const helper_1 = require("@tc-libs/helper");
|
|
8
|
+
const pagination_1 = require("@tc-libs/pagination");
|
|
9
|
+
const service_1 = require("@tc-libs/service");
|
|
10
|
+
const task_run_repository_1 = require("../repository/repositories/task-run.repository");
|
|
11
|
+
let TaskRunService = TaskRunService_1 = class TaskRunService extends service_1.AbstractService {
|
|
12
|
+
constructor(taskRunRepository, _paging, _number) {
|
|
13
|
+
super(taskRunRepository, _paging);
|
|
14
|
+
this.taskRunRepository = taskRunRepository;
|
|
15
|
+
this._paging = _paging;
|
|
16
|
+
this._number = _number;
|
|
17
|
+
this.logger = new common_1.Logger(TaskRunService_1.name);
|
|
18
|
+
}
|
|
19
|
+
async startRun(task) {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
return this.taskRunRepository.create({
|
|
22
|
+
task: {
|
|
23
|
+
id: task._id.toString(),
|
|
24
|
+
code: task.code,
|
|
25
|
+
env: task.env,
|
|
26
|
+
},
|
|
27
|
+
start: now,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async endRun(runId, elapsedMs) {
|
|
31
|
+
const now = new Date();
|
|
32
|
+
await this.taskRunRepository
|
|
33
|
+
.model()
|
|
34
|
+
.updateOne({ _id: runId }, { $set: { end: now, elapsedMs } });
|
|
35
|
+
}
|
|
36
|
+
async failRun(runId, error, elapsedMs) {
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const errStr = error instanceof Error
|
|
39
|
+
? `${error.name}: ${error.message}\n${error.stack ?? ''}`
|
|
40
|
+
: String(error);
|
|
41
|
+
const truncated = errStr.length > 8000 ? errStr.slice(0, 8000) + '…' : errStr;
|
|
42
|
+
await this.taskRunRepository
|
|
43
|
+
.model()
|
|
44
|
+
.updateOne({ _id: runId }, { $set: { end: now, elapsedMs, error: truncated } });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.TaskRunService = TaskRunService;
|
|
48
|
+
exports.TaskRunService = TaskRunService = TaskRunService_1 = tslib_1.__decorate([
|
|
49
|
+
(0, common_1.Injectable)(),
|
|
50
|
+
tslib_1.__metadata("design:paramtypes", [task_run_repository_1.TaskRunRepository,
|
|
51
|
+
pagination_1.PaginationService,
|
|
52
|
+
helper_1.NumberService])
|
|
53
|
+
], TaskRunService);
|
|
54
|
+
//# sourceMappingURL=task-run.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-run.service.js","sourceRoot":"","sources":["../../../../../packages/task/src/services/task-run.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAAoD;AACpD,4CAAgD;AAChD,oDAAwD;AACxD,8CAAmD;AACnD,wFAAmF;AAI5E,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,yBAA0C;IAG5E,YACmB,iBAAoC,EAClC,OAA0B,EAC1B,OAAsB;QAEzC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAJjB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAClC,YAAO,GAAP,OAAO,CAAmB;QAC1B,YAAO,GAAP,OAAO,CAAe;QALlC,WAAM,GAAW,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IAQ1D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAa;QAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAa;YAC/C,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,GAAI,CAAC,QAAQ,EAAE;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;aACd;YACD,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,SAAiB;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,iBAAiB;aACzB,KAAK,EAAE;aACP,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAa,EACb,KAAc,EACd,SAAiB;QAEjB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GACV,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;YACzD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAE9D,MAAM,IAAI,CAAC,iBAAiB;aACzB,KAAK,EAAE;aACP,SAAS,CACR,EAAE,GAAG,EAAE,KAAK,EAAE,EACd,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CACpD,CAAC;IACN,CAAC;CACF,CAAA;AAnDY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;6CAK2B,uCAAiB;QACzB,8BAAiB;QACjB,sBAAa;GANhC,cAAc,CAmD1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { NumberService } from '@tc-libs/helper';
|
|
3
|
+
import { PaginationService } from '@tc-libs/pagination';
|
|
4
|
+
import { AbstractService } from '@tc-libs/service';
|
|
5
|
+
import { TaskDoc, TaskEntity, TaskRepository } from '../repository';
|
|
6
|
+
export declare class TaskService extends AbstractService<TaskEntity, TaskDoc> {
|
|
7
|
+
private readonly _task;
|
|
8
|
+
protected readonly _paging: PaginationService;
|
|
9
|
+
protected readonly _number: NumberService;
|
|
10
|
+
readonly logger: Logger;
|
|
11
|
+
constructor(_task: TaskRepository, _paging: PaginationService, _number: NumberService);
|
|
12
|
+
ensureTask(code: string, env: string): Promise<TaskDoc>;
|
|
13
|
+
/**
|
|
14
|
+
* Lock atomico: prende il task solo se:
|
|
15
|
+
* - esiste ed è active
|
|
16
|
+
* - è IDLE, oppure RUNNING ma "stale" da oltre staleMs (takeover)
|
|
17
|
+
*/
|
|
18
|
+
tryAcquireLock(code: string, env: string, staleMs: number): Promise<TaskDoc | null>;
|
|
19
|
+
markSuccess(code: string, elapsedMs: number, env: string): Promise<void>;
|
|
20
|
+
markError(code: string, error: unknown, elapsedMs: number, env: string): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var TaskService_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TaskService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const helper_1 = require("@tc-libs/helper");
|
|
8
|
+
const pagination_1 = require("@tc-libs/pagination");
|
|
9
|
+
const service_1 = require("@tc-libs/service");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const repository_1 = require("../repository");
|
|
12
|
+
let TaskService = TaskService_1 = class TaskService extends service_1.AbstractService {
|
|
13
|
+
constructor(_task, _paging, _number) {
|
|
14
|
+
super(_task, _paging);
|
|
15
|
+
this._task = _task;
|
|
16
|
+
this._paging = _paging;
|
|
17
|
+
this._number = _number;
|
|
18
|
+
this.logger = new common_1.Logger(TaskService_1.name);
|
|
19
|
+
}
|
|
20
|
+
async ensureTask(code, env) {
|
|
21
|
+
// upsert: crea se non esiste
|
|
22
|
+
return await this._task.model().findOneAndUpdate({ code, env }, {
|
|
23
|
+
$setOnInsert: {
|
|
24
|
+
code,
|
|
25
|
+
env,
|
|
26
|
+
active: false,
|
|
27
|
+
status: constants_1.TASK_STATUS_ENUM.IDLE,
|
|
28
|
+
},
|
|
29
|
+
}, { upsert: true, new: true });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Lock atomico: prende il task solo se:
|
|
33
|
+
* - esiste ed è active
|
|
34
|
+
* - è IDLE, oppure RUNNING ma "stale" da oltre staleMs (takeover)
|
|
35
|
+
*/
|
|
36
|
+
async tryAcquireLock(code, env, staleMs) {
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const staleDate = new Date(now.getTime() - staleMs);
|
|
39
|
+
return await this._task.model().findOneAndUpdate({
|
|
40
|
+
code,
|
|
41
|
+
env,
|
|
42
|
+
active: true,
|
|
43
|
+
$or: [
|
|
44
|
+
{ status: constants_1.TASK_STATUS_ENUM.IDLE },
|
|
45
|
+
// takeover in caso di crash
|
|
46
|
+
{ status: constants_1.TASK_STATUS_ENUM.RUNNING, lastStart: { $lt: staleDate } },
|
|
47
|
+
],
|
|
48
|
+
}, {
|
|
49
|
+
$set: {
|
|
50
|
+
status: constants_1.TASK_STATUS_ENUM.RUNNING,
|
|
51
|
+
lastStart: now,
|
|
52
|
+
lastError: undefined,
|
|
53
|
+
},
|
|
54
|
+
}, { new: true });
|
|
55
|
+
}
|
|
56
|
+
async markSuccess(code, elapsedMs, env) {
|
|
57
|
+
const now = new Date();
|
|
58
|
+
await this._task.model().updateOne({ code, env }, {
|
|
59
|
+
$set: {
|
|
60
|
+
status: constants_1.TASK_STATUS_ENUM.IDLE,
|
|
61
|
+
lastEnd: now,
|
|
62
|
+
lastElapsedMs: elapsedMs,
|
|
63
|
+
lastError: null,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async markError(code, error, elapsedMs, env) {
|
|
68
|
+
const now = new Date();
|
|
69
|
+
const errStr = error instanceof Error
|
|
70
|
+
? `${error.name}: ${error.message}\n${error.stack ?? ''}`
|
|
71
|
+
: String(error);
|
|
72
|
+
// (opzionale) tronca per capped collection / limiti
|
|
73
|
+
const truncated = errStr.length > 8000 ? errStr.slice(0, 8000) + '…' : errStr;
|
|
74
|
+
await this._task.model().updateOne({ code, env }, {
|
|
75
|
+
$set: {
|
|
76
|
+
// scegli tu se vuoi IDLE oppure ERROR
|
|
77
|
+
status: constants_1.TASK_STATUS_ENUM.IDLE,
|
|
78
|
+
lastEnd: now,
|
|
79
|
+
lastElapsedMs: elapsedMs,
|
|
80
|
+
lastError: truncated,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.TaskService = TaskService;
|
|
86
|
+
exports.TaskService = TaskService = TaskService_1 = tslib_1.__decorate([
|
|
87
|
+
(0, common_1.Injectable)(),
|
|
88
|
+
tslib_1.__metadata("design:paramtypes", [repository_1.TaskRepository,
|
|
89
|
+
pagination_1.PaginationService,
|
|
90
|
+
helper_1.NumberService])
|
|
91
|
+
], TaskService);
|
|
92
|
+
//# sourceMappingURL=task.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../../../../packages/task/src/services/task.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAAoD;AACpD,4CAAgD;AAChD,oDAAwD;AACxD,8CAAmD;AACnD,4CAAgD;AAChD,8CAAoE;AAG7D,IAAM,WAAW,mBAAjB,MAAM,WAAY,SAAQ,yBAAoC;IAGnE,YACmB,KAAqB,EACnB,OAA0B,EAC1B,OAAsB;QAEzC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAJL,UAAK,GAAL,KAAK,CAAgB;QACnB,YAAO,GAAP,OAAO,CAAmB;QAC1B,YAAO,GAAP,OAAO,CAAe;QALlC,WAAM,GAAW,IAAI,eAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAQvD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,GAAW;QACxC,6BAA6B;QAC7B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAC9C,EAAE,IAAI,EAAE,GAAG,EAAE,EACb;YACE,YAAY,EAAE;gBACZ,IAAI;gBACJ,GAAG;gBACH,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,4BAAgB,CAAC,IAAI;aAC9B;SACF,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,IAAY,EACZ,GAAW,EACX,OAAe;QAEf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;QAEpD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAC9C;YACE,IAAI;YACJ,GAAG;YACH,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE;gBACH,EAAE,MAAM,EAAE,4BAAgB,CAAC,IAAI,EAAE;gBACjC,4BAA4B;gBAC5B,EAAE,MAAM,EAAE,4BAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;aACpE;SACF,EACD;YACE,IAAI,EAAE;gBACJ,MAAM,EAAE,4BAAgB,CAAC,OAAO;gBAChC,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,SAAS;aACrB;SACF,EACD,EAAE,GAAG,EAAE,IAAI,EAAE,CACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAAY,EACZ,SAAiB,EACjB,GAAW;QAEX,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAChC,EAAE,IAAI,EAAE,GAAG,EAAE,EACb;YACE,IAAI,EAAE;gBACJ,MAAM,EAAE,4BAAgB,CAAC,IAAI;gBAC7B,OAAO,EAAE,GAAG;gBACZ,aAAa,EAAE,SAAS;gBACxB,SAAS,EAAE,IAAI;aAChB;SACF,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,KAAc,EACd,SAAiB,EACjB,GAAW;QAEX,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GACV,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;YACzD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpB,oDAAoD;QACpD,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAE9D,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAChC,EAAE,IAAI,EAAE,GAAG,EAAE,EACb;YACE,IAAI,EAAE;gBACJ,sCAAsC;gBACtC,MAAM,EAAE,4BAAgB,CAAC,IAAI;gBAC7B,OAAO,EAAE,GAAG;gBACZ,aAAa,EAAE,SAAS;gBACxB,SAAS,EAAE,SAAS;aACrB;SACF,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AA9GY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;6CAKe,2BAAc;QACV,8BAAiB;QACjB,sBAAa;GANhC,WAAW,CA8GvB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const repository_1 = require("./repository");
|
|
7
|
+
const services_1 = require("./services");
|
|
8
|
+
let TaskModule = class TaskModule {
|
|
9
|
+
};
|
|
10
|
+
exports.TaskModule = TaskModule;
|
|
11
|
+
exports.TaskModule = TaskModule = tslib_1.__decorate([
|
|
12
|
+
(0, common_1.Global)(),
|
|
13
|
+
(0, common_1.Module)({
|
|
14
|
+
imports: [repository_1.TaskRepositoryModule],
|
|
15
|
+
exports: [services_1.TaskService, services_1.TaskRunService],
|
|
16
|
+
providers: [services_1.TaskService, services_1.TaskRunService],
|
|
17
|
+
})
|
|
18
|
+
], TaskModule);
|
|
19
|
+
//# sourceMappingURL=task.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.module.js","sourceRoot":"","sources":["../../../../packages/task/src/task.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,6CAAoD;AACpD,yCAAyD;AAQlD,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IANtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iCAAoB,CAAC;QAC/B,OAAO,EAAE,CAAC,sBAAW,EAAE,yBAAc,CAAC;QACtC,SAAS,EAAE,CAAC,sBAAW,EAAE,yBAAc,CAAC;KACzC,CAAC;GACW,UAAU,CAAG"}
|