@punks/backend-entity-manager 0.0.369 → 0.0.371
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 -20
- package/dist/cjs/index.js.map +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 +2 -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 +14 -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 +14 -0
- package/dist/esm/index.js +100 -21
- package/dist/esm/index.js.map +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 +2 -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 +14 -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 +14 -0
- package/dist/index.d.ts +46 -19
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -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,40 @@ 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
|
+
getTasks() {
|
|
34932
|
+
return Array.from(this.tasks.values());
|
|
34933
|
+
}
|
|
34934
|
+
};
|
|
34935
|
+
TasksRegistry = __decorate([
|
|
34936
|
+
common.Injectable()
|
|
34937
|
+
], TasksRegistry);
|
|
34938
|
+
|
|
34906
34939
|
var TasksInitializer_1;
|
|
34907
34940
|
let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
34908
|
-
constructor(discover, scheduler) {
|
|
34941
|
+
constructor(discover, scheduler, registry) {
|
|
34909
34942
|
this.discover = discover;
|
|
34910
34943
|
this.scheduler = scheduler;
|
|
34944
|
+
this.registry = registry;
|
|
34911
34945
|
this.logger = new common.Logger(TasksInitializer_1.name);
|
|
34912
34946
|
}
|
|
34913
34947
|
async initialize(app) {
|
|
@@ -34923,7 +34957,10 @@ let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
|
34923
34957
|
.join(", ")}`);
|
|
34924
34958
|
}
|
|
34925
34959
|
for (const task of tasks) {
|
|
34926
|
-
|
|
34960
|
+
this.registry.registerTask(task.meta, task.discoveredClass.instance);
|
|
34961
|
+
if (task.meta.cronExpression) {
|
|
34962
|
+
await this.scheduler.scheduleTask(task.meta, task.discoveredClass.instance);
|
|
34963
|
+
}
|
|
34927
34964
|
}
|
|
34928
34965
|
}
|
|
34929
34966
|
async discoverTasks() {
|
|
@@ -34933,9 +34970,50 @@ let TasksInitializer = TasksInitializer_1 = class TasksInitializer {
|
|
|
34933
34970
|
TasksInitializer = TasksInitializer_1 = __decorate([
|
|
34934
34971
|
WpAppInitializer(),
|
|
34935
34972
|
__metadata("design:paramtypes", [exports.CustomDiscoveryService,
|
|
34936
|
-
TaskScheduler
|
|
34973
|
+
TaskScheduler,
|
|
34974
|
+
TasksRegistry])
|
|
34937
34975
|
], TasksInitializer);
|
|
34938
34976
|
|
|
34977
|
+
const TasksModuleProviders = [TaskScheduler, TaskShell, TasksRegistry];
|
|
34978
|
+
|
|
34979
|
+
var TasksService_1;
|
|
34980
|
+
exports.TasksService = TasksService_1 = class TasksService {
|
|
34981
|
+
constructor(jobShell, registry) {
|
|
34982
|
+
this.jobShell = jobShell;
|
|
34983
|
+
this.registry = registry;
|
|
34984
|
+
this.logger = new common.Logger(TasksService_1.name);
|
|
34985
|
+
}
|
|
34986
|
+
async triggerTask(name) {
|
|
34987
|
+
this.logger.log(`Manual task ${name} -> trigger`);
|
|
34988
|
+
const task = this.registry.getTask(name);
|
|
34989
|
+
this.jobShell
|
|
34990
|
+
.executeTask(task.instance, task.props, exports.TaskRunType.OnDemand)
|
|
34991
|
+
.then(() => {
|
|
34992
|
+
this.logger.log(`Manual task ${name} -> completed`);
|
|
34993
|
+
})
|
|
34994
|
+
.catch((e) => {
|
|
34995
|
+
this.logger.error(`Manual task ${name} -> error: ${e.message}`);
|
|
34996
|
+
});
|
|
34997
|
+
this.logger.log(`Manual task ${name} -> triggered`);
|
|
34998
|
+
}
|
|
34999
|
+
async invokeTask(name) {
|
|
35000
|
+
this.logger.log(`Manual task ${name} -> invoke`);
|
|
35001
|
+
const task = this.registry.getTask(name);
|
|
35002
|
+
await this.jobShell.executeTask(task.instance, task.props, exports.TaskRunType.OnDemand);
|
|
35003
|
+
this.logger.log(`Manual task ${name} -> completed`);
|
|
35004
|
+
}
|
|
35005
|
+
async getTasks() {
|
|
35006
|
+
return this.registry.getTasks();
|
|
35007
|
+
}
|
|
35008
|
+
};
|
|
35009
|
+
exports.TasksService = TasksService_1 = __decorate([
|
|
35010
|
+
common.Injectable(),
|
|
35011
|
+
__metadata("design:paramtypes", [TaskShell,
|
|
35012
|
+
TasksRegistry])
|
|
35013
|
+
], exports.TasksService);
|
|
35014
|
+
|
|
35015
|
+
const TaskModuleServices = [exports.TasksService];
|
|
35016
|
+
|
|
34939
35017
|
exports.TasksModule = class TasksModule {
|
|
34940
35018
|
constructor(scheduler) {
|
|
34941
35019
|
this.scheduler = scheduler;
|
|
@@ -34947,7 +35025,8 @@ exports.TasksModule = class TasksModule {
|
|
|
34947
35025
|
exports.TasksModule = __decorate([
|
|
34948
35026
|
common.Module({
|
|
34949
35027
|
imports: [exports.EntityManagerModule],
|
|
34950
|
-
providers: [TasksInitializer,
|
|
35028
|
+
providers: [TasksInitializer, ...TasksModuleProviders, ...TaskModuleServices],
|
|
35029
|
+
exports: [...TaskModuleServices],
|
|
34951
35030
|
}),
|
|
34952
35031
|
__metadata("design:paramtypes", [TaskScheduler])
|
|
34953
35032
|
], exports.TasksModule);
|