@punks/backend-entity-manager 0.0.368 → 0.0.370
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/dist/cjs/index.js +99 -26
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/abstractions/index.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/tests/tasks/manual-task.test.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/__test__/tests/tasks/tasks.d.ts +5 -0
- package/dist/cjs/types/platforms/nest/decorators/tasks.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/extensions/tasks/index.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/extensions/tasks/initializer.d.ts +4 -2
- package/dist/cjs/types/platforms/nest/extensions/tasks/module.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/extensions/tasks/providers/index.d.ts +4 -0
- package/dist/cjs/types/platforms/nest/extensions/tasks/providers/registry/index.d.ts +10 -0
- package/dist/cjs/types/platforms/nest/extensions/tasks/{task-scheduler → providers/scheduler}/index.d.ts +5 -5
- package/dist/cjs/types/platforms/nest/extensions/tasks/{task-shell → providers/shell}/index.d.ts +5 -4
- package/dist/cjs/types/platforms/nest/extensions/tasks/services/index.d.ts +2 -0
- package/dist/cjs/types/platforms/nest/extensions/tasks/services/tasks-service/index.d.ts +10 -0
- package/dist/esm/index.js +100 -27
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/abstractions/index.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/tests/tasks/manual-task.test.d.ts +1 -0
- package/dist/esm/types/platforms/nest/__test__/tests/tasks/tasks.d.ts +5 -0
- package/dist/esm/types/platforms/nest/decorators/tasks.d.ts +1 -1
- package/dist/esm/types/platforms/nest/extensions/tasks/index.d.ts +1 -0
- package/dist/esm/types/platforms/nest/extensions/tasks/initializer.d.ts +4 -2
- package/dist/esm/types/platforms/nest/extensions/tasks/module.d.ts +1 -1
- package/dist/esm/types/platforms/nest/extensions/tasks/providers/index.d.ts +4 -0
- package/dist/esm/types/platforms/nest/extensions/tasks/providers/registry/index.d.ts +10 -0
- package/dist/esm/types/platforms/nest/extensions/tasks/{task-scheduler → providers/scheduler}/index.d.ts +5 -5
- package/dist/esm/types/platforms/nest/extensions/tasks/{task-shell → providers/shell}/index.d.ts +5 -4
- package/dist/esm/types/platforms/nest/extensions/tasks/services/index.d.ts +2 -0
- package/dist/esm/types/platforms/nest/extensions/tasks/services/tasks-service/index.d.ts +10 -0
- package/dist/index.d.ts +37 -19
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -165,6 +165,12 @@ exports.EntitySerializationFormat = void 0;
|
|
|
165
165
|
EntitySerializationFormat["Xlsx"] = "xlsx";
|
|
166
166
|
})(exports.EntitySerializationFormat || (exports.EntitySerializationFormat = {}));
|
|
167
167
|
|
|
168
|
+
exports.TaskRunType = void 0;
|
|
169
|
+
(function (TaskRunType) {
|
|
170
|
+
TaskRunType["Scheduled"] = "Scheduled";
|
|
171
|
+
TaskRunType["OnDemand"] = "OnDemand";
|
|
172
|
+
})(exports.TaskRunType || (exports.TaskRunType = {}));
|
|
173
|
+
|
|
168
174
|
exports.EntityVersionOperation = void 0;
|
|
169
175
|
(function (EntityVersionOperation) {
|
|
170
176
|
EntityVersionOperation["Create"] = "create";
|
|
@@ -34794,12 +34800,6 @@ exports.JobsModule = JobsModule_1 = __decorate([
|
|
|
34794
34800
|
JobsProviderFactory])
|
|
34795
34801
|
], exports.JobsModule);
|
|
34796
34802
|
|
|
34797
|
-
var TaskRunType;
|
|
34798
|
-
(function (TaskRunType) {
|
|
34799
|
-
TaskRunType["Scheduled"] = "Scheduled";
|
|
34800
|
-
TaskRunType["OnDemand"] = "OnDemand";
|
|
34801
|
-
})(TaskRunType || (TaskRunType = {}));
|
|
34802
|
-
|
|
34803
34803
|
const getCronCurrentSchedule = (cronExpression, ref) => {
|
|
34804
34804
|
const interval = parser$1.parseExpression(cronExpression, {
|
|
34805
34805
|
currentDate: ref,
|
|
@@ -34820,40 +34820,42 @@ let TaskShell = TaskShell_1 = class TaskShell {
|
|
|
34820
34820
|
this.operations = operations;
|
|
34821
34821
|
this.logger = backendCore.Log.getLogger(TaskShell_1.name);
|
|
34822
34822
|
}
|
|
34823
|
-
async executeTask(instance, settings) {
|
|
34823
|
+
async executeTask(instance, settings, runType) {
|
|
34824
34824
|
switch (settings.concurrency) {
|
|
34825
34825
|
case exports.TaskConcurrency.Single:
|
|
34826
|
-
return await this.executeTaskSequential(instance, settings);
|
|
34826
|
+
return await this.executeTaskSequential(instance, settings, runType);
|
|
34827
34827
|
case exports.TaskConcurrency.Multiple:
|
|
34828
|
-
return await this.executeTaskParallel(instance, settings);
|
|
34828
|
+
return await this.executeTaskParallel(instance, settings, runType);
|
|
34829
34829
|
default:
|
|
34830
34830
|
throw new Error(`Unknown task concurrency: ${settings.concurrency}`);
|
|
34831
34831
|
}
|
|
34832
34832
|
}
|
|
34833
|
-
async executeTaskParallel(instance, settings) {
|
|
34834
|
-
await this.invokeTask(instance, settings);
|
|
34833
|
+
async executeTaskParallel(instance, settings, runType) {
|
|
34834
|
+
await this.invokeTask(instance, settings, runType);
|
|
34835
34835
|
}
|
|
34836
|
-
async executeTaskSequential(instance, settings) {
|
|
34837
|
-
const currentSchedule =
|
|
34836
|
+
async executeTaskSequential(instance, settings, runType) {
|
|
34837
|
+
const currentSchedule = settings.cronExpression && runType === exports.TaskRunType.Scheduled
|
|
34838
|
+
? getCronCurrentSchedule(settings.cronExpression, new Date())
|
|
34839
|
+
: undefined;
|
|
34838
34840
|
const lockKey = this.getTaskLockKey(settings, currentSchedule);
|
|
34839
34841
|
const lock = await this.operations.acquireLock({
|
|
34840
34842
|
lockUid: lockKey,
|
|
34841
34843
|
});
|
|
34842
34844
|
if (lock.available) {
|
|
34843
|
-
await this.invokeTask(instance, settings);
|
|
34845
|
+
await this.invokeTask(instance, settings, runType);
|
|
34844
34846
|
}
|
|
34845
34847
|
}
|
|
34846
34848
|
getTaskLockKey(settings, cronSchedule) {
|
|
34847
|
-
return `task:${settings.name}:${floorDateToSecond(cronSchedule).toISOString()}`;
|
|
34849
|
+
return `task:${settings.name}:${cronSchedule ? floorDateToSecond(cronSchedule).toISOString() : backendCore.newUuid()}`;
|
|
34848
34850
|
}
|
|
34849
|
-
async invokeTask(instance, settings) {
|
|
34851
|
+
async invokeTask(instance, settings, runType) {
|
|
34850
34852
|
try {
|
|
34851
34853
|
this.logger.info(`Task ${settings.name} -> starting`);
|
|
34852
34854
|
await instance.execute({
|
|
34853
34855
|
name: settings.name,
|
|
34854
34856
|
startedAt: new Date(),
|
|
34855
34857
|
runId: backendCore.newUuid(),
|
|
34856
|
-
runType
|
|
34858
|
+
runType,
|
|
34857
34859
|
});
|
|
34858
34860
|
this.logger.info(`Task ${settings.name} -> completed`);
|
|
34859
34861
|
}
|
|
@@ -34880,19 +34882,22 @@ let TaskScheduler = TaskScheduler_1 = class TaskScheduler {
|
|
|
34880
34882
|
this.schedulerRegistry = schedulerRegistry;
|
|
34881
34883
|
this.jobShell = jobShell;
|
|
34882
34884
|
this.logger = new common.Logger(TaskScheduler_1.name);
|
|
34883
|
-
this.
|
|
34885
|
+
this.cronJobs = [];
|
|
34884
34886
|
}
|
|
34885
|
-
async
|
|
34887
|
+
async scheduleTask(job, instance) {
|
|
34888
|
+
if (!job.cronExpression) {
|
|
34889
|
+
throw new Error(`Task ${job.name} has no cron expression`);
|
|
34890
|
+
}
|
|
34886
34891
|
const cronJob = new dist.CronJob(job.cronExpression, async (context) => {
|
|
34887
|
-
await this.jobShell.executeTask(instance, job);
|
|
34892
|
+
await this.jobShell.executeTask(instance, job, exports.TaskRunType.Scheduled);
|
|
34888
34893
|
});
|
|
34889
34894
|
this.schedulerRegistry.addCronJob(job.name, cronJob);
|
|
34890
34895
|
cronJob.start();
|
|
34891
|
-
this.
|
|
34896
|
+
this.cronJobs.push(cronJob);
|
|
34892
34897
|
this.logger.log(`Jobs ${job.name} registered`);
|
|
34893
34898
|
}
|
|
34894
34899
|
stopAllTasks() {
|
|
34895
|
-
this.
|
|
34900
|
+
this.cronJobs.forEach((job) => {
|
|
34896
34901
|
job.stop();
|
|
34897
34902
|
});
|
|
34898
34903
|
}
|
|
@@ -34903,11 +34908,37 @@ TaskScheduler = TaskScheduler_1 = __decorate([
|
|
|
34903
34908
|
TaskShell])
|
|
34904
34909
|
], TaskScheduler);
|
|
34905
34910
|
|
|
34911
|
+
let TasksRegistry = class TasksRegistry {
|
|
34912
|
+
constructor() {
|
|
34913
|
+
this.tasks = new Map();
|
|
34914
|
+
}
|
|
34915
|
+
registerTask(props, instance) {
|
|
34916
|
+
if (this.tasks.has(props.name)) {
|
|
34917
|
+
throw new Error(`Task with name ${props.name} already registered`);
|
|
34918
|
+
}
|
|
34919
|
+
this.tasks.set(props.name, {
|
|
34920
|
+
instance,
|
|
34921
|
+
props,
|
|
34922
|
+
});
|
|
34923
|
+
}
|
|
34924
|
+
getTask(name) {
|
|
34925
|
+
const task = this.tasks.get(name);
|
|
34926
|
+
if (!task) {
|
|
34927
|
+
throw new Error(`Task with name ${name} not found`);
|
|
34928
|
+
}
|
|
34929
|
+
return task;
|
|
34930
|
+
}
|
|
34931
|
+
};
|
|
34932
|
+
TasksRegistry = __decorate([
|
|
34933
|
+
common.Injectable()
|
|
34934
|
+
], TasksRegistry);
|
|
34935
|
+
|
|
34906
34936
|
var TasksInitializer_1;
|
|
34907
34937
|
let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
34908
|
-
constructor(discover, scheduler) {
|
|
34938
|
+
constructor(discover, scheduler, registry) {
|
|
34909
34939
|
this.discover = discover;
|
|
34910
34940
|
this.scheduler = scheduler;
|
|
34941
|
+
this.registry = registry;
|
|
34911
34942
|
this.logger = new common.Logger(TasksInitializer_1.name);
|
|
34912
34943
|
}
|
|
34913
34944
|
async initialize(app) {
|
|
@@ -34923,7 +34954,10 @@ let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
|
34923
34954
|
.join(", ")}`);
|
|
34924
34955
|
}
|
|
34925
34956
|
for (const task of tasks) {
|
|
34926
|
-
|
|
34957
|
+
this.registry.registerTask(task.meta, task.discoveredClass.instance);
|
|
34958
|
+
if (task.meta.cronExpression) {
|
|
34959
|
+
await this.scheduler.scheduleTask(task.meta, task.discoveredClass.instance);
|
|
34960
|
+
}
|
|
34927
34961
|
}
|
|
34928
34962
|
}
|
|
34929
34963
|
async discoverTasks() {
|
|
@@ -34933,9 +34967,47 @@ let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
|
34933
34967
|
TasksInitializer = TasksInitializer_1 = __decorate([
|
|
34934
34968
|
WpAppInitializer(),
|
|
34935
34969
|
__metadata("design:paramtypes", [exports.CustomDiscoveryService,
|
|
34936
|
-
TaskScheduler
|
|
34970
|
+
TaskScheduler,
|
|
34971
|
+
TasksRegistry])
|
|
34937
34972
|
], TasksInitializer);
|
|
34938
34973
|
|
|
34974
|
+
const TasksModuleProviders = [TaskScheduler, TaskShell, TasksRegistry];
|
|
34975
|
+
|
|
34976
|
+
var TasksService_1;
|
|
34977
|
+
exports.TasksService = TasksService_1 = class TasksService {
|
|
34978
|
+
constructor(jobShell, registry) {
|
|
34979
|
+
this.jobShell = jobShell;
|
|
34980
|
+
this.registry = registry;
|
|
34981
|
+
this.logger = new common.Logger(TasksService_1.name);
|
|
34982
|
+
}
|
|
34983
|
+
async triggerTask(name) {
|
|
34984
|
+
this.logger.log(`Manual task ${name} -> trigger`);
|
|
34985
|
+
const task = this.registry.getTask(name);
|
|
34986
|
+
this.jobShell
|
|
34987
|
+
.executeTask(task.instance, task.props, exports.TaskRunType.OnDemand)
|
|
34988
|
+
.then(() => {
|
|
34989
|
+
this.logger.log(`Manual task ${name} -> completed`);
|
|
34990
|
+
})
|
|
34991
|
+
.catch((e) => {
|
|
34992
|
+
this.logger.error(`Manual task ${name} -> error: ${e.message}`);
|
|
34993
|
+
});
|
|
34994
|
+
this.logger.log(`Manual task ${name} -> triggered`);
|
|
34995
|
+
}
|
|
34996
|
+
async invokeTask(name) {
|
|
34997
|
+
this.logger.log(`Manual task ${name} -> invoke`);
|
|
34998
|
+
const task = this.registry.getTask(name);
|
|
34999
|
+
await this.jobShell.executeTask(task.instance, task.props, exports.TaskRunType.OnDemand);
|
|
35000
|
+
this.logger.log(`Manual task ${name} -> completed`);
|
|
35001
|
+
}
|
|
35002
|
+
};
|
|
35003
|
+
exports.TasksService = TasksService_1 = __decorate([
|
|
35004
|
+
common.Injectable(),
|
|
35005
|
+
__metadata("design:paramtypes", [TaskShell,
|
|
35006
|
+
TasksRegistry])
|
|
35007
|
+
], exports.TasksService);
|
|
35008
|
+
|
|
35009
|
+
const TaskModuleServices = [exports.TasksService];
|
|
35010
|
+
|
|
34939
35011
|
exports.TasksModule = class TasksModule {
|
|
34940
35012
|
constructor(scheduler) {
|
|
34941
35013
|
this.scheduler = scheduler;
|
|
@@ -34947,7 +35019,8 @@ exports.TasksModule = class TasksModule {
|
|
|
34947
35019
|
exports.TasksModule = __decorate([
|
|
34948
35020
|
common.Module({
|
|
34949
35021
|
imports: [exports.EntityManagerModule],
|
|
34950
|
-
providers: [TasksInitializer,
|
|
35022
|
+
providers: [TasksInitializer, ...TasksModuleProviders, ...TaskModuleServices],
|
|
35023
|
+
exports: [...TaskModuleServices],
|
|
34951
35024
|
}),
|
|
34952
35025
|
__metadata("design:paramtypes", [TaskScheduler])
|
|
34953
35026
|
], exports.TasksModule);
|