@push.rocks/taskbuffer 3.2.0 → 3.5.0

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.
Files changed (49) hide show
  1. package/LICENSE +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/ts/index.d.ts +13 -0
  4. package/dist_ts_web/ts/index.js +12 -0
  5. package/dist_ts_web/ts/taskbuffer.classes.bufferrunner.d.ts +8 -0
  6. package/dist_ts_web/ts/taskbuffer.classes.bufferrunner.js +28 -0
  7. package/dist_ts_web/ts/taskbuffer.classes.cyclecounter.d.ts +13 -0
  8. package/dist_ts_web/ts/taskbuffer.classes.cyclecounter.js +31 -0
  9. package/dist_ts_web/ts/taskbuffer.classes.distributedcoordinator.d.ts +27 -0
  10. package/dist_ts_web/ts/taskbuffer.classes.distributedcoordinator.js +5 -0
  11. package/dist_ts_web/ts/taskbuffer.classes.task.d.ts +86 -0
  12. package/dist_ts_web/ts/taskbuffer.classes.task.js +257 -0
  13. package/dist_ts_web/ts/taskbuffer.classes.taskchain.d.ts +14 -0
  14. package/dist_ts_web/ts/taskbuffer.classes.taskchain.js +51 -0
  15. package/dist_ts_web/ts/taskbuffer.classes.taskdebounced.d.ts +10 -0
  16. package/dist_ts_web/ts/taskbuffer.classes.taskdebounced.js +20 -0
  17. package/dist_ts_web/ts/taskbuffer.classes.taskmanager.d.ts +49 -0
  18. package/dist_ts_web/ts/taskbuffer.classes.taskmanager.js +208 -0
  19. package/dist_ts_web/ts/taskbuffer.classes.taskonce.d.ts +11 -0
  20. package/dist_ts_web/ts/taskbuffer.classes.taskonce.js +20 -0
  21. package/dist_ts_web/ts/taskbuffer.classes.taskparallel.d.ts +7 -0
  22. package/dist_ts_web/ts/taskbuffer.classes.taskparallel.js +23 -0
  23. package/dist_ts_web/ts/taskbuffer.classes.taskrunner.d.ts +30 -0
  24. package/dist_ts_web/ts/taskbuffer.classes.taskrunner.js +54 -0
  25. package/dist_ts_web/ts/taskbuffer.classes.taskstep.d.ts +27 -0
  26. package/dist_ts_web/ts/taskbuffer.classes.taskstep.js +37 -0
  27. package/dist_ts_web/ts/taskbuffer.interfaces.d.ts +36 -0
  28. package/dist_ts_web/ts/taskbuffer.interfaces.js +2 -0
  29. package/dist_ts_web/ts/taskbuffer.logging.d.ts +2 -0
  30. package/dist_ts_web/ts/taskbuffer.logging.js +3 -0
  31. package/dist_ts_web/ts/taskbuffer.plugins.d.ts +8 -0
  32. package/dist_ts_web/ts/taskbuffer.plugins.js +9 -0
  33. package/dist_ts_web/ts_web/00_commitinfo_data.d.ts +8 -0
  34. package/dist_ts_web/ts_web/00_commitinfo_data.js +9 -0
  35. package/dist_ts_web/ts_web/demorunner.d.ts +1 -0
  36. package/dist_ts_web/ts_web/demorunner.js +33 -0
  37. package/dist_ts_web/ts_web/elements/taskbuffer-dashboard.demo.d.ts +2 -0
  38. package/dist_ts_web/ts_web/elements/taskbuffer-dashboard.demo.js +285 -0
  39. package/dist_ts_web/ts_web/index.d.ts +2 -0
  40. package/dist_ts_web/ts_web/index.js +3 -0
  41. package/dist_ts_web/ts_web/taskbuffer-dashboard.d.ts +24 -0
  42. package/dist_ts_web/ts_web/taskbuffer-dashboard.js +549 -0
  43. package/package.json +13 -12
  44. package/readme.md +429 -930
  45. package/ts/00_commitinfo_data.ts +1 -1
  46. package/ts_web/00_commitinfo_data.ts +1 -1
  47. package/ts_web/elements/taskbuffer-dashboard.demo.ts +311 -0
  48. package/ts_web/index.ts +12 -0
  49. package/ts_web/taskbuffer-dashboard.ts +541 -0
@@ -0,0 +1,49 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ import { AbstractDistributedCoordinator } from './taskbuffer.classes.distributedcoordinator.js';
4
+ import type { ITaskMetadata, ITaskExecutionReport, IScheduledTaskInfo } from './taskbuffer.interfaces.js';
5
+ export interface ICronJob {
6
+ cronString: string;
7
+ taskName: string;
8
+ job: any;
9
+ }
10
+ export interface ITaskManagerConstructorOptions {
11
+ distributedCoordinator?: AbstractDistributedCoordinator;
12
+ }
13
+ export declare class TaskManager {
14
+ randomId: string;
15
+ taskMap: plugins.lik.ObjectMap<Task<any, any>>;
16
+ private cronJobManager;
17
+ options: ITaskManagerConstructorOptions;
18
+ constructor(options?: ITaskManagerConstructorOptions);
19
+ getTaskByName(taskName: string): Task<any, any>;
20
+ addTask(task: Task<any, any>): void;
21
+ addAndScheduleTask(task: Task<any, any>, cronString: string): void;
22
+ triggerTaskByName(taskName: string): Promise<any>;
23
+ triggerTask(task: Task<any, any>): Promise<any>;
24
+ scheduleTaskByName(taskName: string, cronString: string): void;
25
+ private handleTaskScheduling;
26
+ private logTaskState;
27
+ private performDistributedConsultation;
28
+ descheduleTaskByName(taskName: string): void;
29
+ descheduleTask(task: Task<any, any>): Promise<void>;
30
+ getScheduleForTaskName(taskName: string): string | null;
31
+ start(): Promise<void>;
32
+ stop(): Promise<void>;
33
+ getTaskMetadata(taskName: string): ITaskMetadata | null;
34
+ getAllTasksMetadata(): ITaskMetadata[];
35
+ getScheduledTasks(): IScheduledTaskInfo[];
36
+ getNextScheduledRuns(limit?: number): Array<{
37
+ taskName: string;
38
+ nextRun: Date;
39
+ schedule: string;
40
+ }>;
41
+ addExecuteRemoveTask<T, TSteps extends ReadonlyArray<{
42
+ name: string;
43
+ description: string;
44
+ percentage: number;
45
+ }>>(task: Task<T, TSteps>, options?: {
46
+ schedule?: string;
47
+ trackProgress?: boolean;
48
+ }): Promise<ITaskExecutionReport>;
49
+ }
@@ -0,0 +1,208 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ import { AbstractDistributedCoordinator, } from './taskbuffer.classes.distributedcoordinator.js';
4
+ export class TaskManager {
5
+ constructor(options = {}) {
6
+ this.randomId = plugins.smartunique.shortId();
7
+ this.taskMap = new plugins.lik.ObjectMap();
8
+ this.cronJobManager = new plugins.smarttime.CronManager();
9
+ this.options = {
10
+ distributedCoordinator: null,
11
+ };
12
+ this.options = Object.assign(this.options, options);
13
+ }
14
+ getTaskByName(taskName) {
15
+ return this.taskMap.findSync((task) => task.name === taskName);
16
+ }
17
+ addTask(task) {
18
+ if (!task.name) {
19
+ throw new Error('Task must have a name to be added to taskManager');
20
+ }
21
+ this.taskMap.add(task);
22
+ }
23
+ addAndScheduleTask(task, cronString) {
24
+ this.addTask(task);
25
+ this.scheduleTaskByName(task.name, cronString);
26
+ }
27
+ async triggerTaskByName(taskName) {
28
+ const taskToTrigger = this.getTaskByName(taskName);
29
+ if (!taskToTrigger) {
30
+ throw new Error(`No task with the name ${taskName} found.`);
31
+ }
32
+ return taskToTrigger.trigger();
33
+ }
34
+ async triggerTask(task) {
35
+ return task.trigger();
36
+ }
37
+ scheduleTaskByName(taskName, cronString) {
38
+ const taskToSchedule = this.getTaskByName(taskName);
39
+ if (!taskToSchedule) {
40
+ throw new Error(`No task with the name ${taskName} found.`);
41
+ }
42
+ this.handleTaskScheduling(taskToSchedule, cronString);
43
+ }
44
+ handleTaskScheduling(task, cronString) {
45
+ const cronJob = this.cronJobManager.addCronjob(cronString, async (triggerTime) => {
46
+ this.logTaskState(task);
47
+ if (this.options.distributedCoordinator) {
48
+ const announcementResult = await this.performDistributedConsultation(task, triggerTime);
49
+ if (!announcementResult.shouldTrigger) {
50
+ console.log('Distributed coordinator result: NOT EXECUTING');
51
+ return;
52
+ }
53
+ else {
54
+ console.log('Distributed coordinator result: CHOSEN AND EXECUTING');
55
+ }
56
+ }
57
+ await task.trigger();
58
+ });
59
+ task.cronJob = cronJob;
60
+ }
61
+ logTaskState(task) {
62
+ console.log(`Taskbuffer schedule triggered task >>${task.name}<<`);
63
+ const bufferState = task.buffered
64
+ ? `buffered with max ${task.bufferMax} buffered calls`
65
+ : `unbuffered`;
66
+ console.log(`Task >>${task.name}<< is ${bufferState}`);
67
+ }
68
+ async performDistributedConsultation(task, triggerTime) {
69
+ console.log('Found a distributed coordinator, performing consultation.');
70
+ return this.options.distributedCoordinator.fireDistributedTaskRequest({
71
+ submitterId: this.randomId,
72
+ requestResponseId: plugins.smartunique.shortId(),
73
+ status: 'requesting',
74
+ taskExecutionParallel: 1,
75
+ taskExecutionTime: triggerTime,
76
+ taskExecutionTimeout: task.timeout,
77
+ taskName: task.name,
78
+ taskVersion: task.version,
79
+ });
80
+ }
81
+ descheduleTaskByName(taskName) {
82
+ const task = this.getTaskByName(taskName);
83
+ if (task && task.cronJob) {
84
+ this.cronJobManager.removeCronjob(task.cronJob);
85
+ task.cronJob = null;
86
+ }
87
+ if (this.cronJobManager.cronjobs.isEmpty) {
88
+ this.cronJobManager.stop();
89
+ }
90
+ }
91
+ async descheduleTask(task) {
92
+ await this.descheduleTaskByName(task.name);
93
+ }
94
+ getScheduleForTaskName(taskName) {
95
+ const task = this.getTaskByName(taskName);
96
+ return task && task.cronJob ? task.cronJob.cronExpression : null;
97
+ }
98
+ async start() {
99
+ if (this.options.distributedCoordinator) {
100
+ await this.options.distributedCoordinator.start();
101
+ }
102
+ this.cronJobManager.start();
103
+ }
104
+ async stop() {
105
+ this.cronJobManager.stop();
106
+ if (this.options.distributedCoordinator) {
107
+ await this.options.distributedCoordinator.stop();
108
+ }
109
+ }
110
+ // Get metadata for a specific task
111
+ getTaskMetadata(taskName) {
112
+ const task = this.getTaskByName(taskName);
113
+ if (!task)
114
+ return null;
115
+ return task.getMetadata();
116
+ }
117
+ // Get metadata for all tasks
118
+ getAllTasksMetadata() {
119
+ return this.taskMap.getArray().map(task => task.getMetadata());
120
+ }
121
+ // Get scheduled tasks with their schedules and next run times
122
+ getScheduledTasks() {
123
+ const scheduledTasks = [];
124
+ for (const task of this.taskMap.getArray()) {
125
+ if (task.cronJob) {
126
+ scheduledTasks.push({
127
+ name: task.name || 'unnamed',
128
+ schedule: task.cronJob.cronExpression,
129
+ nextRun: new Date(task.cronJob.getNextExecutionTime()),
130
+ lastRun: task.lastRun,
131
+ steps: task.getStepsMetadata?.(),
132
+ metadata: task.getMetadata(),
133
+ });
134
+ }
135
+ }
136
+ return scheduledTasks;
137
+ }
138
+ // Get next scheduled runs across all tasks
139
+ getNextScheduledRuns(limit = 10) {
140
+ const scheduledRuns = this.getScheduledTasks()
141
+ .map(task => ({
142
+ taskName: task.name,
143
+ nextRun: task.nextRun,
144
+ schedule: task.schedule,
145
+ }))
146
+ .sort((a, b) => a.nextRun.getTime() - b.nextRun.getTime())
147
+ .slice(0, limit);
148
+ return scheduledRuns;
149
+ }
150
+ // Add, execute, and remove a task while collecting metadata
151
+ async addExecuteRemoveTask(task, options) {
152
+ // Add task to manager
153
+ this.addTask(task);
154
+ // Optionally schedule it
155
+ if (options?.schedule) {
156
+ this.scheduleTaskByName(task.name, options.schedule);
157
+ }
158
+ const startTime = Date.now();
159
+ const progressUpdates = [];
160
+ try {
161
+ // Execute the task
162
+ const result = await task.trigger();
163
+ // Collect execution report
164
+ const report = {
165
+ taskName: task.name || 'unnamed',
166
+ startTime,
167
+ endTime: Date.now(),
168
+ duration: Date.now() - startTime,
169
+ steps: task.getStepsMetadata(),
170
+ stepsCompleted: task.getStepsMetadata()
171
+ .filter(step => step.status === 'completed')
172
+ .map(step => step.name),
173
+ progress: task.getProgress(),
174
+ result,
175
+ };
176
+ // Remove task from manager
177
+ this.taskMap.remove(task);
178
+ // Deschedule if it was scheduled
179
+ if (options?.schedule && task.name) {
180
+ this.descheduleTaskByName(task.name);
181
+ }
182
+ return report;
183
+ }
184
+ catch (error) {
185
+ // Create error report
186
+ const errorReport = {
187
+ taskName: task.name || 'unnamed',
188
+ startTime,
189
+ endTime: Date.now(),
190
+ duration: Date.now() - startTime,
191
+ steps: task.getStepsMetadata(),
192
+ stepsCompleted: task.getStepsMetadata()
193
+ .filter(step => step.status === 'completed')
194
+ .map(step => step.name),
195
+ progress: task.getProgress(),
196
+ error: error,
197
+ };
198
+ // Remove task from manager even on error
199
+ this.taskMap.remove(task);
200
+ // Deschedule if it was scheduled
201
+ if (options?.schedule && task.name) {
202
+ this.descheduleTaskByName(task.name);
203
+ }
204
+ throw errorReport;
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2ttYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5jbGFzc2VzLnRhc2ttYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BELE9BQU8sRUFDTCw4QkFBOEIsR0FFL0IsTUFBTSxnREFBZ0QsQ0FBQztBQWF4RCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUFZLFVBQTBDLEVBQUU7UUFQakQsYUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQWtCLENBQUM7UUFDckQsbUJBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsWUFBTyxHQUFtQztZQUMvQyxzQkFBc0IsRUFBRSxJQUFJO1NBQzdCLENBQUM7UUFHQSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sYUFBYSxDQUFDLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFvQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFD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
@@ -0,0 +1,11 @@
1
+ import { Task, type ITaskFunction } from './taskbuffer.classes.task.js';
2
+ /**
3
+ * TaskOnce is run exactly once, no matter how often it is triggered
4
+ */
5
+ export declare class TaskOnce extends Task {
6
+ hasTriggered: boolean;
7
+ constructor(optionsArg: {
8
+ name?: string;
9
+ taskFunction: ITaskFunction;
10
+ });
11
+ }
@@ -0,0 +1,20 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ /**
4
+ * TaskOnce is run exactly once, no matter how often it is triggered
5
+ */
6
+ export class TaskOnce extends Task {
7
+ constructor(optionsArg) {
8
+ super({
9
+ name: optionsArg.name,
10
+ taskFunction: async () => {
11
+ if (!this.hasTriggered) {
12
+ this.hasTriggered = true;
13
+ await optionsArg.taskFunction();
14
+ }
15
+ },
16
+ });
17
+ this.hasTriggered = false;
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tvbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5jbGFzc2VzLnRhc2tvbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLElBQUksRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsSUFBSTtJQUVoQyxZQUFZLFVBQTBEO1FBQ3BFLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixNQUFNLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7UUFWTCxpQkFBWSxHQUFZLEtBQUssQ0FBQztJQVc5QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,7 @@
1
+ import { Task } from './taskbuffer.classes.task.js';
2
+ export declare class Taskparallel extends Task {
3
+ taskArray: Task[];
4
+ constructor(optionsArg: {
5
+ taskArray: Task[];
6
+ });
7
+ }
@@ -0,0 +1,23 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ export class Taskparallel extends Task {
4
+ constructor(optionsArg) {
5
+ const options = {
6
+ ...optionsArg,
7
+ ...{
8
+ taskFunction: () => {
9
+ const done = plugins.smartpromise.defer();
10
+ const promiseArray = []; // stores promises of all tasks, since they run in parallel
11
+ this.taskArray.forEach(function (taskArg) {
12
+ promiseArray.push(taskArg.trigger());
13
+ });
14
+ Promise.all(promiseArray).then(done.resolve);
15
+ return done.promise;
16
+ },
17
+ },
18
+ };
19
+ super(options);
20
+ this.taskArray = optionsArg.taskArray;
21
+ }
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2twYXJhbGxlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Rhc2tidWZmZXIuY2xhc3Nlcy50YXNrcGFyYWxsZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFcEQsTUFBTSxPQUFPLFlBQWEsU0FBUSxJQUFJO0lBRXBDLFlBQVksVUFBaUM7UUFDM0MsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLFVBQVU7WUFDYixHQUFHO2dCQUNELFlBQVksRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sWUFBWSxHQUFtQixFQUFFLENBQUMsQ0FBQywyREFBMkQ7b0JBQ3BHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsT0FBTzt3QkFDdEMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3RCLENBQUM7YUFDRjtTQUNGLENBQUM7UUFDRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztDQUNGIn0=
@@ -0,0 +1,30 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ export declare class TaskRunner {
4
+ maxParrallelJobs: number;
5
+ status: 'stopped' | 'running';
6
+ runningTasks: plugins.lik.ObjectMap<Task>;
7
+ qeuedTasks: Task[];
8
+ constructor();
9
+ /**
10
+ * adds a task to the qeue
11
+ */
12
+ addTask(taskArg: Task): void;
13
+ /**
14
+ * set amount of parallel tasks
15
+ * be careful, you might loose dependability of tasks
16
+ */
17
+ setMaxParallelJobs(maxParrallelJobsArg: number): void;
18
+ /**
19
+ * starts the task queue
20
+ */
21
+ start(): Promise<void>;
22
+ /**
23
+ * checks wether execution is on point
24
+ */
25
+ checkExecution(): Promise<void>;
26
+ /**
27
+ * stops the task queue
28
+ */
29
+ stop(): Promise<void>;
30
+ }
@@ -0,0 +1,54 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ import { Task } from './taskbuffer.classes.task.js';
3
+ export class TaskRunner {
4
+ constructor() {
5
+ this.maxParrallelJobs = 1;
6
+ this.status = 'stopped';
7
+ this.runningTasks = new plugins.lik.ObjectMap();
8
+ this.qeuedTasks = [];
9
+ this.runningTasks.eventSubject.subscribe(async (eventArg) => {
10
+ this.checkExecution();
11
+ });
12
+ }
13
+ /**
14
+ * adds a task to the qeue
15
+ */
16
+ addTask(taskArg) {
17
+ this.qeuedTasks.push(taskArg);
18
+ this.checkExecution();
19
+ }
20
+ /**
21
+ * set amount of parallel tasks
22
+ * be careful, you might loose dependability of tasks
23
+ */
24
+ setMaxParallelJobs(maxParrallelJobsArg) {
25
+ this.maxParrallelJobs = maxParrallelJobsArg;
26
+ }
27
+ /**
28
+ * starts the task queue
29
+ */
30
+ async start() {
31
+ this.status = 'running';
32
+ }
33
+ /**
34
+ * checks wether execution is on point
35
+ */
36
+ async checkExecution() {
37
+ if (this.runningTasks.getArray().length < this.maxParrallelJobs &&
38
+ this.status === 'running' &&
39
+ this.qeuedTasks.length > 0) {
40
+ const nextJob = this.qeuedTasks.shift();
41
+ this.runningTasks.add(nextJob);
42
+ await nextJob.trigger();
43
+ this.runningTasks.remove(nextJob);
44
+ this.checkExecution();
45
+ }
46
+ }
47
+ /**
48
+ * stops the task queue
49
+ */
50
+ async stop() {
51
+ this.status = 'stopped';
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFza3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sVUFBVTtJQU9yQjtRQU5PLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUM3QixXQUFNLEdBQTBCLFNBQVMsQ0FBQztRQUMxQyxpQkFBWSxHQUNqQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFRLENBQUM7UUFDN0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUc3QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxPQUFhO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsbUJBQTJCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsY0FBYztRQUN6QixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFDM0QsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDMUIsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzFCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,27 @@
1
+ export interface ITaskStep {
2
+ name: string;
3
+ description: string;
4
+ percentage: number;
5
+ status: 'pending' | 'active' | 'completed';
6
+ startTime?: number;
7
+ endTime?: number;
8
+ duration?: number;
9
+ }
10
+ export declare class TaskStep implements ITaskStep {
11
+ name: string;
12
+ description: string;
13
+ percentage: number;
14
+ status: 'pending' | 'active' | 'completed';
15
+ startTime?: number;
16
+ endTime?: number;
17
+ duration?: number;
18
+ constructor(config: {
19
+ name: string;
20
+ description: string;
21
+ percentage: number;
22
+ });
23
+ start(): void;
24
+ complete(): void;
25
+ reset(): void;
26
+ toJSON(): ITaskStep;
27
+ }
@@ -0,0 +1,37 @@
1
+ export class TaskStep {
2
+ constructor(config) {
3
+ this.status = 'pending';
4
+ this.name = config.name;
5
+ this.description = config.description;
6
+ this.percentage = config.percentage;
7
+ }
8
+ start() {
9
+ this.status = 'active';
10
+ this.startTime = Date.now();
11
+ }
12
+ complete() {
13
+ if (this.startTime) {
14
+ this.endTime = Date.now();
15
+ this.duration = this.endTime - this.startTime;
16
+ }
17
+ this.status = 'completed';
18
+ }
19
+ reset() {
20
+ this.status = 'pending';
21
+ this.startTime = undefined;
22
+ this.endTime = undefined;
23
+ this.duration = undefined;
24
+ }
25
+ toJSON() {
26
+ return {
27
+ name: this.name,
28
+ description: this.description,
29
+ percentage: this.percentage,
30
+ status: this.status,
31
+ startTime: this.startTime,
32
+ endTime: this.endTime,
33
+ duration: this.duration,
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2tzdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5jbGFzc2VzLnRhc2tzdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sT0FBTyxRQUFRO0lBU25CLFlBQVksTUFBaUU7UUFMdEUsV0FBTSxHQUF1QyxTQUFTLENBQUM7UUFNNUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,36 @@
1
+ import type { ITaskStep } from './taskbuffer.classes.taskstep.js';
2
+ export interface ITaskMetadata {
3
+ name: string;
4
+ version?: string;
5
+ status: 'idle' | 'running' | 'completed' | 'failed';
6
+ steps: ITaskStep[];
7
+ currentStep?: string;
8
+ currentProgress: number;
9
+ lastRun?: Date;
10
+ nextRun?: Date;
11
+ runCount: number;
12
+ averageDuration?: number;
13
+ cronSchedule?: string;
14
+ buffered?: boolean;
15
+ bufferMax?: number;
16
+ timeout?: number;
17
+ }
18
+ export interface ITaskExecutionReport {
19
+ taskName: string;
20
+ startTime: number;
21
+ endTime: number;
22
+ duration: number;
23
+ steps: ITaskStep[];
24
+ stepsCompleted: string[];
25
+ progress: number;
26
+ result?: any;
27
+ error?: Error;
28
+ }
29
+ export interface IScheduledTaskInfo {
30
+ name: string;
31
+ schedule: string;
32
+ nextRun: Date;
33
+ lastRun?: Date;
34
+ steps?: ITaskStep[];
35
+ metadata?: ITaskMetadata;
36
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,2 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ export declare const logger: plugins.smartlog.ConsoleLog;
@@ -0,0 +1,3 @@
1
+ import * as plugins from './taskbuffer.plugins.js';
2
+ export const logger = new plugins.smartlog.ConsoleLog();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5sb2dnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5sb2dnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyJ9
@@ -0,0 +1,8 @@
1
+ import * as lik from '@push.rocks/lik';
2
+ import * as smartlog from '@push.rocks/smartlog';
3
+ import * as smartpromise from '@push.rocks/smartpromise';
4
+ import * as smartdelay from '@push.rocks/smartdelay';
5
+ import * as smartrx from '@push.rocks/smartrx';
6
+ import * as smarttime from '@push.rocks/smarttime';
7
+ import * as smartunique from '@push.rocks/smartunique';
8
+ export { lik, smartlog, smartpromise, smartdelay, smartrx, smarttime, smartunique, };
@@ -0,0 +1,9 @@
1
+ import * as lik from '@push.rocks/lik';
2
+ import * as smartlog from '@push.rocks/smartlog';
3
+ import * as smartpromise from '@push.rocks/smartpromise';
4
+ import * as smartdelay from '@push.rocks/smartdelay';
5
+ import * as smartrx from '@push.rocks/smartrx';
6
+ import * as smarttime from '@push.rocks/smarttime';
7
+ import * as smartunique from '@push.rocks/smartunique';
8
+ export { lik, smartlog, smartpromise, smartdelay, smartrx, smarttime, smartunique, };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdGFza2J1ZmZlci5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUNMLEdBQUcsRUFDSCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixPQUFPLEVBQ1AsU0FBUyxFQUNULFdBQVcsR0FDWixDQUFDIn0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@push.rocks/taskbuffer',
6
+ version: '3.5.0',
7
+ description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSw4SUFBOEk7Q0FDNUosQ0FBQSJ9
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { html, render } from '@design.estate/dees-element';
2
+ import { taskbufferDashboardDemo } from './index.js';
3
+ // Main demo runner
4
+ class DemoRunner {
5
+ constructor() {
6
+ this.init();
7
+ }
8
+ async init() {
9
+ // Wait for DOM to be ready
10
+ await this.domReady();
11
+ // Render the demo
12
+ this.renderDemo();
13
+ }
14
+ domReady() {
15
+ return new Promise((resolve) => {
16
+ if (document.readyState === 'complete' || document.readyState === 'interactive') {
17
+ resolve();
18
+ }
19
+ else {
20
+ document.addEventListener('DOMContentLoaded', () => resolve());
21
+ }
22
+ });
23
+ }
24
+ renderDemo() {
25
+ // Get the demo function result
26
+ const demoTemplate = taskbufferDashboardDemo();
27
+ // Render to body
28
+ render(demoTemplate, document.body);
29
+ }
30
+ }
31
+ // Start the demo runner
32
+ new DemoRunner();
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtb3J1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9kZW1vcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJELG1CQUFtQjtBQUNuQixNQUFNLFVBQVU7SUFDZDtRQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLDJCQUEyQjtRQUMzQixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0QixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxRQUFRO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDaEYsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDaEIsK0JBQStCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFFL0MsaUJBQWlCO1FBQ2pCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUVELHdCQUF3QjtBQUN4QixJQUFJLFVBQVUsRUFBRSxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import '../taskbuffer-dashboard.js';
2
+ export declare const demoFunc: () => import("@design.estate/dees-element").TemplateResult<1>;