work-dispatcher 1.0.0 → 1.1.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.
Files changed (50) hide show
  1. package/dist/config/config.d.ts +12 -0
  2. package/dist/config/config.d.ts.map +1 -0
  3. package/dist/config/config.js +12 -0
  4. package/dist/config/config.js.map +1 -0
  5. package/dist/index.d.ts +12 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +33 -4
  8. package/dist/index.js.map +1 -1
  9. package/dist/utils/HTMLHelper.d.ts +12 -0
  10. package/dist/utils/HTMLHelper.d.ts.map +1 -0
  11. package/dist/utils/HTMLHelper.js +12 -0
  12. package/dist/utils/HTMLHelper.js.map +1 -0
  13. package/dist/utils/dateHelper.d.ts +21 -0
  14. package/dist/utils/dateHelper.d.ts.map +1 -0
  15. package/dist/utils/dateHelper.js +149 -0
  16. package/dist/utils/dateHelper.js.map +1 -0
  17. package/dist/utils/generalUtil.d.ts +4 -0
  18. package/dist/utils/generalUtil.d.ts.map +1 -0
  19. package/dist/utils/generalUtil.js +31 -0
  20. package/dist/utils/generalUtil.js.map +1 -0
  21. package/dist/utils/httpHelper.d.ts +2 -0
  22. package/dist/utils/httpHelper.d.ts.map +1 -0
  23. package/dist/utils/httpHelper.js +16 -0
  24. package/dist/utils/httpHelper.js.map +1 -0
  25. package/dist/utils/logging.d.ts +6 -0
  26. package/dist/utils/logging.d.ts.map +1 -0
  27. package/dist/utils/logging.js +58 -0
  28. package/dist/utils/logging.js.map +1 -0
  29. package/dist/utils/version.d.ts +2 -0
  30. package/dist/utils/version.d.ts.map +1 -0
  31. package/dist/utils/version.js +13 -0
  32. package/dist/utils/version.js.map +1 -0
  33. package/dist/work/featureClass.d.ts +22 -0
  34. package/dist/work/featureClass.d.ts.map +1 -0
  35. package/dist/work/featureClass.js +47 -0
  36. package/dist/work/featureClass.js.map +1 -0
  37. package/dist/work/health.d.ts +11 -0
  38. package/dist/work/health.d.ts.map +1 -0
  39. package/dist/work/health.js +21 -0
  40. package/dist/work/health.js.map +1 -0
  41. package/dist/work/pause.d.ts +2 -0
  42. package/dist/work/pause.d.ts.map +1 -0
  43. package/dist/work/pause.js +16 -0
  44. package/dist/work/pause.js.map +1 -0
  45. package/dist/work/workQ.d.ts +32 -0
  46. package/dist/work/workQ.d.ts.map +1 -0
  47. package/dist/work/workQ.js +198 -0
  48. package/dist/work/workQ.js.map +1 -0
  49. package/package.json +4 -2
  50. package/res/views/index.ejs +129 -0
@@ -0,0 +1,12 @@
1
+ declare const dispatcherConfig: {
2
+ FINE_MODE: number;
3
+ DEBUG_MODE: number;
4
+ DEBUG_GET_CALLS: number;
5
+ handlers: {
6
+ emptyQHandler: () => Promise<void>;
7
+ errorHandler: (errorMessage: string, stackTrace: string | undefined) => Promise<void>;
8
+ };
9
+ allFeatureSet: any[];
10
+ };
11
+ export { dispatcherConfig };
12
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB;;;;;;qCAMiB,MAAM,cAAc,MAAM,GAAG,SAAS;;mBAEtD,GAAG,EAAE;CAC3B,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ const dispatcherConfig = {
2
+ FINE_MODE: 1,
3
+ DEBUG_MODE: 1,
4
+ DEBUG_GET_CALLS: 0,
5
+ handlers: {
6
+ emptyQHandler: () => Promise.resolve(),
7
+ errorHandler: async (errorMessage, stackTrace) => console.log('Error handler not set!', errorMessage, stackTrace),
8
+ },
9
+ allFeatureSet: [],
10
+ };
11
+ export { dispatcherConfig };
12
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;IACvB,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,eAAe,EAAE,CAAC;IAClB,QAAQ,EAAE;QACR,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QACtC,YAAY,EAAE,KAAK,EAAE,YAAoB,EAAE,UAA8B,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,YAAY,EAAE,UAAU,CAAC;KAC9I;IACD,aAAa,EAAE,EAAW;CAC3B,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,13 @@
1
- declare function sayHello(name: string): string;
2
- export { sayHello };
1
+ export { getDispatcherVersion } from './utils/version.js';
2
+ export { fine, debug, info, warn, error } from './utils/logging.js';
3
+ export { SPACE, QUOTATION, HASHTAG, AMPERSAND, APOSTROPHE, BRACKET_OPEN, BRACKET_CLOSE, SMALLER, EQUALS, TILDE, AE } from './utils/HTMLHelper.js';
4
+ export { sleep, pad, waitSyncMS } from './utils/generalUtil.js';
5
+ export { dateToIsoString, dateToICALString, dateToJQLString, getDateByDayAndSetPos, getNextWeekday, getPreviousWeekday, getDateFromString, getStringFromDate, cloneDate, minutesToString, dateToWeekNumber } from './utils/dateHelper.js';
6
+ export { dispatcherConfig } from './config/config.js';
7
+ export { _callUrl } from './utils/httpHelper.js';
8
+ export { Feature, FEATURE_STATUS } from './work/featureClass.js';
9
+ export { addFeaturesToQ, terminate, resetQ, addEventToList, getCurrentQ, getPastQ, getCurrentFeature, startWorking, setCurrentlyWorkingOn, currentlyWorkingOn, cancelFeatureRequested, setFeatureResult, addToFeatureResult, skipCurrentlyWorkingFeature, } from './work/workQ.js';
10
+ export { getHealth } from './work/health.js';
11
+ export { pauseFeature } from './work/pause.js';
12
+ export declare function init(handlers: any, allFeatureSet: any[]): void;
3
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAClJ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1O,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,cAAc,EACd,SAAS,EACT,MAAM,EACN,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,wBAAgB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,QAiBvD"}
package/dist/index.js CHANGED
@@ -1,6 +1,35 @@
1
- console.log('Work Dispatcher Module Loaded');
2
- function sayHello(name) {
3
- return `Hello, ${name}! Sam says`;
1
+ import { dispatcherConfig } from './config/config.js';
2
+ import { error, info } from './utils/logging.js';
3
+ import { getDispatcherVersion } from './utils/version.js';
4
+ export { getDispatcherVersion } from './utils/version.js';
5
+ export { fine, debug, info, warn, error } from './utils/logging.js';
6
+ export { SPACE, QUOTATION, HASHTAG, AMPERSAND, APOSTROPHE, BRACKET_OPEN, BRACKET_CLOSE, SMALLER, EQUALS, TILDE, AE } from './utils/HTMLHelper.js';
7
+ export { sleep, pad, waitSyncMS } from './utils/generalUtil.js';
8
+ export { dateToIsoString, dateToICALString, dateToJQLString, getDateByDayAndSetPos, getNextWeekday, getPreviousWeekday, getDateFromString, getStringFromDate, cloneDate, minutesToString, dateToWeekNumber } from './utils/dateHelper.js';
9
+ export { dispatcherConfig } from './config/config.js';
10
+ export { _callUrl } from './utils/httpHelper.js';
11
+ export { Feature, FEATURE_STATUS } from './work/featureClass.js';
12
+ export { addFeaturesToQ, terminate, resetQ, addEventToList, getCurrentQ, getPastQ, getCurrentFeature, startWorking, setCurrentlyWorkingOn, currentlyWorkingOn, cancelFeatureRequested, setFeatureResult, addToFeatureResult, skipCurrentlyWorkingFeature, } from './work/workQ.js';
13
+ export { getHealth } from './work/health.js';
14
+ export { pauseFeature } from './work/pause.js';
15
+ export function init(handlers, allFeatureSet) {
16
+ info('DISPATCHER.JS', 'Now initializing');
17
+ info('DISPATCHER.JS', 'Currently running with work-dispatcher version', getDispatcherVersion());
18
+ if (!handlers.errorHandler) {
19
+ error('DISPATCHER.JS', 'No errorHandler was provided which is needed for dispatcher.js to start. Application will now exit');
20
+ process.exit(1);
21
+ }
22
+ if (!handlers.emptyQHandler) {
23
+ handlers.emptyQHandler = doNothing;
24
+ }
25
+ dispatcherConfig.handlers = handlers;
26
+ dispatcherConfig.allFeatureSet = allFeatureSet;
27
+ if (process.env['DOCKER_ENV'] === 'ci-test') {
28
+ info('DISPATCHER.JS', 'Running in CI test mode, not starting server or cron jobs.');
29
+ process.exit(0);
30
+ }
31
+ }
32
+ async function doNothing() {
33
+ // intentionally empty
4
34
  }
5
- export { sayHello };
6
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAE7C,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,UAAU,IAAI,YAAY,CAAC;AACpC,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAClJ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1O,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,cAAc,EACd,SAAS,EACT,MAAM,EACN,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,IAAI,CAAC,QAAa,EAAE,aAAoB;IACtD,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAC1C,IAAI,CAAC,eAAe,EAAE,gDAAgD,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,KAAK,CAAC,eAAe,EAAE,oGAAoG,CAAC,CAAC;QAC7H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;IACrC,CAAC;IACD,gBAAgB,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrC,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC;IAE/C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,eAAe,EAAE,4DAA4D,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,sBAAsB;AACxB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const SPACE = "%20";
2
+ export declare const QUOTATION = "%22";
3
+ export declare const HASHTAG = "%23";
4
+ export declare const AMPERSAND = "%26";
5
+ export declare const APOSTROPHE = "%27";
6
+ export declare const BRACKET_OPEN = "%28";
7
+ export declare const BRACKET_CLOSE = "%29";
8
+ export declare const SMALLER = "%3C";
9
+ export declare const EQUALS = "%3D";
10
+ export declare const TILDE = "%7E";
11
+ export declare const AE = "%C3%A4";
12
+ //# sourceMappingURL=HTMLHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLHelper.d.ts","sourceRoot":"","sources":["../../src/utils/HTMLHelper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,QAAgB,CAAC;AACnC,eAAO,MAAM,SAAS,QAAY,CAAC;AACnC,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,SAAS,QAAY,CAAC;AACnC,eAAO,MAAM,UAAU,QAAW,CAAC;AACnC,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,MAAM,QAAe,CAAC;AACnC,eAAO,MAAM,KAAK,QAAgB,CAAC;AACnC,eAAO,MAAM,EAAE,WAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export const SPACE = '%20';
2
+ export const QUOTATION = '%22';
3
+ export const HASHTAG = '%23';
4
+ export const AMPERSAND = '%26';
5
+ export const APOSTROPHE = '%27';
6
+ export const BRACKET_OPEN = '%28';
7
+ export const BRACKET_CLOSE = '%29';
8
+ export const SMALLER = '%3C';
9
+ export const EQUALS = '%3D';
10
+ export const TILDE = '%7E';
11
+ export const AE = '%C3%A4';
12
+ //# sourceMappingURL=HTMLHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLHelper.js","sourceRoot":"","sources":["../../src/utils/HTMLHelper.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAW,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAO,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAS,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAO,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAM,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAI,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAS,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,MAAM,GAAU,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,KAAK,GAAW,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,EAAE,GAAc,QAAQ,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare function dateToIsoString(date: Date | string): string;
2
+ export declare function dateToICALString(date: Date | string): string;
3
+ export declare function dateToJQLString(date: Date | string): string;
4
+ export declare function dateToWeekNumber(date: Date | string): number;
5
+ export declare function addDaysToDate(date: Date, days: number): Date;
6
+ export declare function addWeeksToDate(date: Date, weeks: number): Date;
7
+ export declare function addHoursToDate(date: Date, hours: number): Date;
8
+ export declare function addMinutesToDate(date: Date, minutes: number): Date;
9
+ export declare function addMonthsToDate(date: Date, months: number): Date;
10
+ export declare function addMSToDate(date: Date, ms: number): Date;
11
+ export declare function getDateByDayAndSetPos(date: Date, day: string, setPos: number, interval: string): Date;
12
+ export declare function getNextWeekday(date: Date, dayOfWeek: number): Date;
13
+ export declare function getPreviousWeekday(date: Date, dayOfWeek: number): Date;
14
+ export declare function getDateFromString(input: string): Date;
15
+ export declare function getStringFromDate(date: Date): string;
16
+ export declare function cloneDate(date: Date): Date;
17
+ export declare function minutesToString(minutes: number, showMinutes?: boolean): string;
18
+ export declare const _testing_date_helper: {
19
+ getDateByDayAndSetPos: typeof getDateByDayAndSetPos;
20
+ };
21
+ //# sourceMappingURL=dateHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateHelper.d.ts","sourceRoot":"","sources":["../../src/utils/dateHelper.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAsB3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAQ5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGxD;AAwBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgBrG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAGlE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAWrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAGpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAG1C;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,UAAO,GAAG,MAAM,CAM3E;AAGD,eAAO,MAAM,oBAAoB;;CAEhC,CAAC"}
@@ -0,0 +1,149 @@
1
+ import { pad } from './generalUtil.js';
2
+ import { error } from './logging.js';
3
+ export function dateToIsoString(date) {
4
+ if (typeof date === 'string')
5
+ date = getDateFromString(date);
6
+ const tzo = -date.getTimezoneOffset();
7
+ const dif = tzo >= 0 ? '+' : '-';
8
+ return (date.getFullYear() +
9
+ '-' +
10
+ pad(date.getMonth() + 1, 2) +
11
+ '-' +
12
+ pad(date.getDate(), 2) +
13
+ 'T' +
14
+ pad(date.getHours(), 2) +
15
+ ':' +
16
+ pad(date.getMinutes(), 2) +
17
+ ':' +
18
+ pad(date.getSeconds(), 2) +
19
+ dif +
20
+ pad(Math.floor(Math.abs(tzo) / 60), 2) +
21
+ ':' +
22
+ pad(Math.abs(tzo) % 60, 2));
23
+ }
24
+ export function dateToICALString(date) {
25
+ if (typeof date === 'string')
26
+ date = getDateFromString(date);
27
+ return date.getFullYear() + pad(date.getMonth() + 1, 2) + pad(date.getDate(), 2) + 'T' + pad(date.getHours(), 2) + pad(date.getMinutes(), 2) + pad(date.getSeconds(), 2);
28
+ }
29
+ export function dateToJQLString(date) {
30
+ if (typeof date === 'string')
31
+ date = getDateFromString(date);
32
+ return date.getFullYear() + '-' + pad(date.getMonth() + 1, 2) + '-' + pad(date.getDate(), 2) + ' ' + pad(date.getHours(), 2) + ':' + pad(date.getMinutes(), 2);
33
+ }
34
+ export function dateToWeekNumber(date) {
35
+ let target = new Date(date);
36
+ target.setHours(0, 0, 0, 0);
37
+ target.setDate(target.getDate() + 3 - ((target.getDay() + 6) % 7));
38
+ let firstThursday = new Date(target.getFullYear(), 0, 4);
39
+ firstThursday.setDate(firstThursday.getDate() + 3 - ((firstThursday.getDay() + 6) % 7));
40
+ let weekNumber = 1 + Math.round(((target.getTime() - firstThursday.getTime()) / 86400000 - 3 + ((firstThursday.getDay() + 6) % 7)) / 7);
41
+ return weekNumber;
42
+ }
43
+ export function addDaysToDate(date, days) {
44
+ date.setDate(date.getDate() + days);
45
+ return date;
46
+ }
47
+ export function addWeeksToDate(date, weeks) {
48
+ date.setDate(date.getDate() + weeks * 7);
49
+ return date;
50
+ }
51
+ export function addHoursToDate(date, hours) {
52
+ date.setHours(date.getHours() + hours);
53
+ return date;
54
+ }
55
+ export function addMinutesToDate(date, minutes) {
56
+ date.setMinutes(date.getMinutes() + minutes);
57
+ return date;
58
+ }
59
+ export function addMonthsToDate(date, months) {
60
+ date.setMonth(date.getMonth() + months);
61
+ return date;
62
+ }
63
+ export function addMSToDate(date, ms) {
64
+ date.setMilliseconds(date.getMilliseconds() + ms);
65
+ return date;
66
+ }
67
+ function getDayOfWeekByString(dayString) {
68
+ switch (dayString) {
69
+ case 'SU':
70
+ return 0;
71
+ case 'MO':
72
+ return 1;
73
+ case 'TU':
74
+ return 2;
75
+ case 'WE':
76
+ return 3;
77
+ case 'TH':
78
+ return 4;
79
+ case 'FR':
80
+ return 5;
81
+ case 'SA':
82
+ return 6;
83
+ default:
84
+ error('DATE', 'Unknown date string:', dayString);
85
+ return -1;
86
+ }
87
+ }
88
+ export function getDateByDayAndSetPos(date, day, setPos, interval) {
89
+ const intervalNum = Number.parseInt(interval) ? Number.parseInt(interval) : 1;
90
+ const weekDay = getDayOfWeekByString(day);
91
+ if (setPos > 0) {
92
+ date.setMonth(date.getMonth() + intervalNum, 1);
93
+ for (let i = date.getDay() % 7 === weekDay ? 1 : 0; i < setPos; i++) {
94
+ date = getNextWeekday(date, weekDay);
95
+ }
96
+ }
97
+ else {
98
+ date.setMonth(date.getMonth() + intervalNum + 1, 0);
99
+ for (let i = date.getDay() % 7 === weekDay ? 1 : 0; i < setPos * -1; i++) {
100
+ date = getPreviousWeekday(date, weekDay);
101
+ }
102
+ }
103
+ return date;
104
+ }
105
+ export function getNextWeekday(date, dayOfWeek) {
106
+ date.setDate(date.getDate() + 7 - ((date.getDay() + 7 - dayOfWeek) % 7));
107
+ return date;
108
+ }
109
+ export function getPreviousWeekday(date, dayOfWeek) {
110
+ return addWeeksToDate(getNextWeekday(date, dayOfWeek), -1);
111
+ }
112
+ export function getDateFromString(input) {
113
+ let res;
114
+ res = new Date(input);
115
+ if (!isValidDate(res)) {
116
+ while (input.length > 8 && input.length < 15)
117
+ input += '0';
118
+ res = new Date(input.substring(0, 4) + '-' + input.substring(4, 6) + '-' + input.substring(6, 11) + ':' + input.substring(11, 13) + ':' + input.substring(13, 15));
119
+ }
120
+ if (!isValidDate(res)) {
121
+ error('DAHE', 'Terminating! Invalid Date! Input:', input, 'date', res);
122
+ }
123
+ return res;
124
+ }
125
+ export function getStringFromDate(date) {
126
+ // (date.getTimezoneOffset() / 60)
127
+ return '' + date.getFullYear() + pad(date.getMonth() + 1, 2) + pad(date.getDate(), 2) + 'T' + pad(date.getHours(), 2) + pad(date.getMinutes(), 2) + pad(date.getSeconds(), 2);
128
+ }
129
+ export function cloneDate(date) {
130
+ const stringDate = dateToIsoString(date);
131
+ return getDateFromString(stringDate);
132
+ }
133
+ function isValidDate(d) {
134
+ return d instanceof Date && !isNaN(d.getTime());
135
+ }
136
+ export function minutesToString(minutes, showMinutes = true) {
137
+ const hours = Math.floor(minutes / 60);
138
+ const minutesLeft = Math.floor(minutes % 60);
139
+ if (hours === 0)
140
+ return minutesLeft + ' min';
141
+ if (showMinutes)
142
+ return hours + ' h ' + minutesLeft + ' min';
143
+ return hours + ' h';
144
+ }
145
+ // ****** TEST SETUP ******
146
+ export const _testing_date_helper = {
147
+ getDateByDayAndSetPos: getDateByDayAndSetPos,
148
+ };
149
+ //# sourceMappingURL=dateHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateHelper.js","sourceRoot":"","sources":["../../src/utils/dateHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function pad(num: number, size: number): string;
2
+ export declare function sleep(mins: number): Promise<void>;
3
+ export declare function waitSyncMS(ms: number): void;
4
+ //# sourceMappingURL=generalUtil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalUtil.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtil.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM3C"}
@@ -0,0 +1,31 @@
1
+ export function pad(num, size) {
2
+ let numStr = num.toString();
3
+ while (numStr.length < size)
4
+ numStr = '0' + numStr;
5
+ return numStr;
6
+ }
7
+ export async function sleep(mins) {
8
+ return new Promise((resolve) => setTimeout(resolve, mins * 60 * 1000));
9
+ }
10
+ export function waitSyncMS(ms) {
11
+ const start = Date.now();
12
+ let now = start;
13
+ while (now - start < ms) {
14
+ now = Date.now();
15
+ }
16
+ }
17
+ // Object.byString = function (o, s) {
18
+ // s = s.replace(/\[(\w+)]/g, '.$1'); // convert indexes to properties
19
+ // s = s.replace(/^\./, ''); // strip a leading dot
20
+ // const a = s.split('.');
21
+ // for (let i = 0, n = a.length; i < n; ++i) {
22
+ // const k = a[i];
23
+ // if (k in o) {
24
+ // o = o[k];
25
+ // } else {
26
+ // return undefined;
27
+ // }
28
+ // }
29
+ // return o;
30
+ // };
31
+ //# sourceMappingURL=generalUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalUtil.js","sourceRoot":"","sources":["../../src/utils/generalUtil.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAY;IAC3C,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI;QAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,OAAO,GAAG,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC;QACxB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,wEAAwE;AACxE,qDAAqD;AACrD,4BAA4B;AAC5B,gDAAgD;AAChD,sBAAsB;AACtB,oBAAoB;AACpB,kBAAkB;AAClB,eAAe;AACf,0BAA0B;AAC1B,QAAQ;AACR,MAAM;AACN,cAAc;AACd,KAAK"}
@@ -0,0 +1,2 @@
1
+ export declare function _callUrl(method: string, url: string, data: string | null): Promise<any>;
2
+ //# sourceMappingURL=httpHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHelper.d.ts","sourceRoot":"","sources":["../../src/utils/httpHelper.ts"],"names":[],"mappings":"AAEA,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAa7F"}
@@ -0,0 +1,16 @@
1
+ import { warn } from './logging.js';
2
+ export async function _callUrl(method, url, data) {
3
+ warn('HTTP', 'deprecated call to _callURL with method', method, 'url', url);
4
+ const error = new Error();
5
+ console.log(error.stack);
6
+ const rawResponse = await fetch(url, {
7
+ method: method,
8
+ headers: {
9
+ Accept: 'application/json',
10
+ 'Content-Type': 'application/json',
11
+ },
12
+ body: data,
13
+ });
14
+ return rawResponse.json();
15
+ }
16
+ //# sourceMappingURL=httpHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHelper.js","sourceRoot":"","sources":["../../src/utils/httpHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAE,IAAmB;IAC7E,IAAI,CAAC,MAAM,EAAE,yCAAyC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function fine(source: string, ...data: any): void;
2
+ export declare function debug(source: string, ...data: any): void;
3
+ export declare function info(source: string, ...data: any): void;
4
+ export declare function warn(source: string, ...data: any): void;
5
+ export declare function error(source: string, ...data: any): void;
6
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAIA,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAEhD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAEjD;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAEhD;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAEhD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAGjD"}
@@ -0,0 +1,58 @@
1
+ import { dispatcherConfig } from '../config/config.js';
2
+ import { getCurrentFeature } from '../work/workQ.js';
3
+ import { dateToIsoString } from './dateHelper.js';
4
+ export function fine(source, ...data) {
5
+ if (dispatcherConfig.FINE_MODE)
6
+ log('FINE', COLOR.Dim + COLOR.FgWhite, source, data);
7
+ }
8
+ export function debug(source, ...data) {
9
+ if (dispatcherConfig.DEBUG_MODE)
10
+ log('DEBUG', COLOR.FgWhite, source, data);
11
+ }
12
+ export function info(source, ...data) {
13
+ log('INFO', COLOR.Reset, source, data);
14
+ }
15
+ export function warn(source, ...data) {
16
+ log('WARN', COLOR.Bright + COLOR.FgYellow, source, data);
17
+ }
18
+ export function error(source, ...data) {
19
+ log('ERROR', COLOR.Bright + COLOR.FgRed, source, data);
20
+ throw new Error('[' + source + '] ' + JSON.stringify(data));
21
+ }
22
+ function log(level, color, source, data) {
23
+ const args = Array.prototype.slice.call(data);
24
+ const featureString = getCurrentFeature() ? getCurrentFeature().name : 'NO_FEATURE';
25
+ let message = color;
26
+ if (process.env['NODE_ENV'] !== 'TEST')
27
+ message += dateToIsoString(new Date());
28
+ message += '[' + level + ']' + '[' + featureString + ']' + '[' + source + ']';
29
+ args.unshift(message);
30
+ args.push(COLOR.Reset);
31
+ console.log.apply(console, args);
32
+ }
33
+ const COLOR = {
34
+ Reset: '\x1b[0m',
35
+ Bright: '\x1b[1m',
36
+ Dim: '\x1b[2m',
37
+ Underscore: '\x1b[4m',
38
+ Blink: '\x1b[5m',
39
+ Reverse: '\x1b[7m',
40
+ Hidden: '\x1b[8m',
41
+ FgBlack: '\x1b[30m',
42
+ FgRed: '\x1b[31m',
43
+ FgGreen: '\x1b[32m',
44
+ FgYellow: '\x1b[33m',
45
+ FgBlue: '\x1b[34m',
46
+ FgMagenta: '\x1b[35m',
47
+ FgCyan: '\x1b[36m',
48
+ FgWhite: '\x1b[37m',
49
+ BgBlack: '\x1b[40m',
50
+ BgRed: '\x1b[41m',
51
+ BgGreen: '\x1b[42m',
52
+ BgYellow: '\x1b[43m',
53
+ BgBlue: '\x1b[44m',
54
+ BgMagenta: '\x1b[45m',
55
+ BgCyan: '\x1b[46m',
56
+ BgWhite: '\x1b[47m',
57
+ };
58
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,GAAG,IAAS;IAC/C,IAAI,gBAAgB,CAAC,SAAS;QAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,GAAG,IAAS;IAChD,IAAI,gBAAgB,CAAC,UAAU;QAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,GAAG,IAAS;IAC/C,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,GAAG,IAAS;IAC/C,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,GAAG,IAAS;IAChD,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc,EAAE,IAAS;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IACrF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/E,OAAO,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;IAC9E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IAEjB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IAEnB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;CACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getDispatcherVersion(): string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,WAOnC"}
@@ -0,0 +1,13 @@
1
+ import { warn } from './logging.js';
2
+ import versionData from './../../package.json' with { type: 'json' };
3
+ ;
4
+ export function getDispatcherVersion() {
5
+ try {
6
+ return versionData.version;
7
+ }
8
+ catch (err) {
9
+ warn('DISPATCHER.JS', 'Unable to read version information:', err);
10
+ }
11
+ return 'unknown';
12
+ }
13
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,WAAW,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAAA,CAAC;AAEtE,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,EAAE,qCAAqC,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const FEATURE_STATUS: {
2
+ ACTIVE: string;
3
+ INACTIVE: string;
4
+ };
5
+ export declare class Feature {
6
+ name: string;
7
+ status: string;
8
+ entry: Function;
9
+ params: any;
10
+ timeAdded: Date;
11
+ prerequisites: string[];
12
+ result: any;
13
+ startDate: Date;
14
+ errorForFeature: Error | null;
15
+ getDurationString: Function;
16
+ durationString: string;
17
+ constructor(name: string, entry: Function, prerequisites?: string[]);
18
+ clone(): Feature;
19
+ getPrerequisitesAndFeature(): Feature[];
20
+ setInactive(): this;
21
+ }
22
+ //# sourceMappingURL=featureClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featureClass.d.ts","sourceRoot":"","sources":["../../src/work/featureClass.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;CAG1B,CAAC;AAEF,qBAAa,OAAO;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,SAAyB;IAC/B,KAAK,WAAC;IACN,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,IAAI,CAAc;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,MAAM,EAAE,GAAG,CAAQ;IACnB,SAAS,EAAE,IAAI,CAAc;IAC7B,eAAe,EAAE,KAAK,GAAG,IAAI,CAAQ;IACrC,iBAAiB,EAAE,QAAQ,CAAY;IACvC,cAAc,EAAE,MAAM,CAAM;gBAEhB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAE,MAAM,EAAO;IAMvE,KAAK;IASL,0BAA0B;IAW1B,WAAW;CAIZ"}
@@ -0,0 +1,47 @@
1
+ import { dispatcherConfig } from '../config/config.js';
2
+ export const FEATURE_STATUS = {
3
+ ACTIVE: 'ACTIVE',
4
+ INACTIVE: 'INACTIVE',
5
+ };
6
+ export class Feature {
7
+ name;
8
+ status = FEATURE_STATUS.ACTIVE;
9
+ entry;
10
+ params;
11
+ timeAdded = new Date();
12
+ prerequisites = [];
13
+ result = null;
14
+ startDate = new Date();
15
+ errorForFeature = null;
16
+ getDurationString = () => '';
17
+ durationString = '';
18
+ constructor(name, entry, prerequisites = []) {
19
+ this.name = name;
20
+ this.entry = entry;
21
+ this.prerequisites = prerequisites;
22
+ }
23
+ clone() {
24
+ const newFeature = new Feature(this.name, this.entry, this.prerequisites);
25
+ newFeature.status = this.status;
26
+ newFeature.params = this.params;
27
+ newFeature.timeAdded = this.timeAdded;
28
+ newFeature.result = this.result;
29
+ return newFeature;
30
+ }
31
+ getPrerequisitesAndFeature() {
32
+ if (!this.prerequisites)
33
+ return [this.clone()];
34
+ const res = [];
35
+ this.prerequisites.forEach((item) => {
36
+ if (dispatcherConfig.allFeatureSet[item])
37
+ res.push(...dispatcherConfig.allFeatureSet[item].getPrerequisitesAndFeature());
38
+ });
39
+ res.push(this.clone());
40
+ return res;
41
+ }
42
+ setInactive() {
43
+ this.status = FEATURE_STATUS.INACTIVE;
44
+ return this;
45
+ }
46
+ }
47
+ //# sourceMappingURL=featureClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featureClass.js","sourceRoot":"","sources":["../../src/work/featureClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,OAAO,OAAO;IAClB,IAAI,CAAS;IACb,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAC/B,KAAK,CAAC;IACN,MAAM,CAAM;IACZ,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAC7B,aAAa,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAQ,IAAI,CAAC;IACnB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAC7B,eAAe,GAAiB,IAAI,CAAC;IACrC,iBAAiB,GAAa,GAAG,EAAE,CAAC,EAAE,CAAC;IACvC,cAAc,GAAW,EAAE,CAAC;IAE5B,YAAY,IAAY,EAAE,KAAe,EAAE,gBAA0B,EAAE;QACrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1E,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0BAA0B;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE/C,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YACvC,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;QAC3H,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ export declare function featureSuccess(name: string): void;
2
+ export declare function featureError(name: string, message: string): void;
3
+ export declare function getHealth(): {
4
+ health: string;
5
+ error: undefined | {
6
+ feature: string;
7
+ date: Date | undefined;
8
+ message: string | undefined;
9
+ };
10
+ };
11
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/work/health.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhE;AAED,wBAAgB,SAAS,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,CAG3I"}
@@ -0,0 +1,21 @@
1
+ let errorFeature = undefined;
2
+ let errorDate = undefined;
3
+ let errorMessage = undefined;
4
+ export function featureSuccess(name) {
5
+ if (name === errorFeature) {
6
+ errorFeature = undefined;
7
+ errorDate = undefined;
8
+ errorMessage = undefined;
9
+ }
10
+ }
11
+ export function featureError(name, message) {
12
+ errorFeature = name;
13
+ errorDate = new Date();
14
+ errorMessage = message;
15
+ }
16
+ export function getHealth() {
17
+ if (!errorFeature)
18
+ return { health: 'ok', error: undefined };
19
+ return { health: 'error', error: { feature: errorFeature, date: errorDate, message: errorMessage } };
20
+ }
21
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/work/health.ts"],"names":[],"mappings":"AAAA,IAAI,YAAY,GAAuB,SAAS,CAAC;AACjD,IAAI,SAAS,GAAqB,SAAS,CAAC;AAC5C,IAAI,YAAY,GAAuB,SAAS,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,YAAY,GAAG,SAAS,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC;QACtB,YAAY,GAAG,SAAS,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe;IACxD,YAAY,GAAG,IAAI,CAAC;IACpB,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AACvG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function pauseFeature(): Promise<void>;
2
+ //# sourceMappingURL=pause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../../src/work/pause.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAUlD"}
@@ -0,0 +1,16 @@
1
+ import { sleep } from '../utils/generalUtil.js';
2
+ import { info, warn } from '../utils/logging.js';
3
+ import { cancelFeatureRequested } from './workQ.js';
4
+ const PAUSE_DURATION_IN_MINUTES = 60;
5
+ export async function pauseFeature() {
6
+ info('SLEE', 'Starting to sleep for', PAUSE_DURATION_IN_MINUTES, 'minutes.');
7
+ for (let i = 0; i < PAUSE_DURATION_IN_MINUTES; i++) {
8
+ await sleep(1);
9
+ if (cancelFeatureRequested) {
10
+ warn('SLEE', 'cancelFeatureRequested was found true');
11
+ break;
12
+ }
13
+ }
14
+ info('SLEE', 'Sleep for', PAUSE_DURATION_IN_MINUTES, 'minutes is now over.');
15
+ }
16
+ //# sourceMappingURL=pause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.js","sourceRoot":"","sources":["../../src/work/pause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,UAAU,CAAC,CAAC;IAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;YACtD,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Feature } from './featureClass.js';
2
+ type Event = {
3
+ name: string;
4
+ params: any;
5
+ timeAdded: Date;
6
+ startDate: Date;
7
+ type: 'EVENT';
8
+ };
9
+ export declare let currentlyWorkingOn: string;
10
+ export declare let cancelFeatureRequested: boolean;
11
+ export declare function addFeaturesToQ(featureSet: Feature[]): void;
12
+ declare function workOnNextFeature(): Promise<void>;
13
+ export declare function terminate(): void;
14
+ export declare function resetQ(): Promise<void>;
15
+ export declare function addEventToList(name: string, params: any): void;
16
+ export declare function getCurrentQ(): (Feature | Event)[];
17
+ export declare function getPastQ(): (Feature | Event)[];
18
+ export declare function getCurrentFeature(): Feature | null;
19
+ export declare function startWorking(): Promise<void>;
20
+ export declare function setCurrentlyWorkingOn(text: string): void;
21
+ export declare function addToFeatureResult(text: string): void;
22
+ export declare function setFeatureResult(text: string): void;
23
+ export declare function skipCurrentlyWorkingFeature(): Promise<void>;
24
+ export declare const _testing_workQ: {
25
+ resetAfterUnitTest: typeof resetAfterUnitTest;
26
+ workOnNextFeature: typeof workOnNextFeature;
27
+ skipCurrentlyWorkingFeature: typeof skipCurrentlyWorkingFeature;
28
+ startWorking: typeof startWorking;
29
+ };
30
+ declare function resetAfterUnitTest(): void;
31
+ export {};
32
+ //# sourceMappingURL=workQ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workQ.d.ts","sourceRoot":"","sources":["../../src/work/workQ.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAG5D,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAQF,eAAO,IAAI,kBAAkB,QAAK,CAAC;AACnC,eAAO,IAAI,sBAAsB,SAAQ,CAAC;AAE1C,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,QA2BnD;AAED,iBAAe,iBAAiB,kBA+C/B;AAOD,wBAAgB,SAAS,SAKxB;AAED,wBAAsB,MAAM,kBAM3B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAcvD;AAED,wBAAgB,WAAW,wBAM1B;AAED,wBAAgB,QAAQ,wBAMvB;AAED,wBAAgB,iBAAiB,mBAEhC;AAED,wBAAsB,YAAY,kBAajC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,QAEjD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,QAW9C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,QAG5C;AAED,wBAAsB,2BAA2B,kBAYhD;AAGD,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC;AAEF,iBAAS,kBAAkB,SAM1B"}
@@ -0,0 +1,198 @@
1
+ import { dispatcherConfig } from '../config/config.js';
2
+ import { sleep, waitSyncMS } from '../utils/generalUtil.js';
3
+ import { debug, fine, info, warn } from '../utils/logging.js';
4
+ import { Feature, FEATURE_STATUS } from './featureClass.js';
5
+ import { featureError, featureSuccess } from './health.js';
6
+ let Q = [];
7
+ let pastQ = [];
8
+ let eventList = [];
9
+ let currentFeature = null;
10
+ let eventCutoffDate = new Date(new Date().setHours(new Date().getHours() - 1));
11
+ let terminating = false;
12
+ export let currentlyWorkingOn = '';
13
+ export let cancelFeatureRequested = false;
14
+ export function addFeaturesToQ(featureSet) {
15
+ featureSet = featureSet.filter((item) => item && item.status === FEATURE_STATUS.ACTIVE);
16
+ const expandedFeatureSet = [];
17
+ featureSet.map((item) => expandedFeatureSet.push(...item.getPrerequisitesAndFeature()));
18
+ // expandedFeatureSet.push(FEATURES.CLEAR_CACHES.clone());
19
+ if (Q.length > 50) {
20
+ warn('WORK', 'Q was full. Max amount is 50. Did not add:', expandedFeatureSet.map((item) => item.name));
21
+ // if (Q[Q.length - 1].name !== 'CLEAR_CACHES') {
22
+ // Q.push(FEATURES.CLEAR_CACHES.clone());
23
+ // waitSyncMS(1);
24
+ // }
25
+ }
26
+ else {
27
+ info('WORK', 'Adding features to Q', expandedFeatureSet.map((item) => item.name));
28
+ for (const item of expandedFeatureSet) {
29
+ item.timeAdded = new Date();
30
+ waitSyncMS(1);
31
+ }
32
+ Q.push(...expandedFeatureSet);
33
+ }
34
+ }
35
+ async function workOnNextFeature() {
36
+ currentFeature = Q.shift();
37
+ currentFeature.startDate = new Date();
38
+ currentFeature.errorForFeature = null;
39
+ currentFeature.getDurationString = function () {
40
+ const runInSeconds = Math.abs(new Date().getTime() - this.startDate.getTime()) / 1000;
41
+ return Math.floor(runInSeconds / 60) + 'm ' + Math.floor(runInSeconds % 60) + 's';
42
+ };
43
+ eventCutoffDate = currentFeature.timeAdded;
44
+ info('WORK', 'Now working on feature', currentFeature.name, 'with params', currentFeature.params);
45
+ if (currentFeature.status === FEATURE_STATUS.ACTIVE) {
46
+ try {
47
+ currentlyWorkingOn = '';
48
+ cancelFeatureRequested = false;
49
+ await currentFeature.entry();
50
+ featureSuccess(currentFeature.name);
51
+ if (Q.length == 0 && dispatcherConfig.handlers && dispatcherConfig.handlers.emptyQHandler)
52
+ await dispatcherConfig.handlers.emptyQHandler();
53
+ }
54
+ catch (e) {
55
+ let err;
56
+ if (e instanceof Error) {
57
+ err = e;
58
+ }
59
+ else {
60
+ err = new Error(typeof e === 'string' ? e : 'Unknown error');
61
+ }
62
+ try {
63
+ await dispatcherConfig.handlers.errorHandler(err.message?.length > 0 ? err.message : err.name, err.stack);
64
+ }
65
+ catch (e2) {
66
+ warn('WORK', 'Unable to send mail:', e2);
67
+ }
68
+ featureError(currentFeature.name, err.message?.length > 0 ? err.message : err.name);
69
+ addErrorToCurrentFeature(err);
70
+ console.log(err.stack);
71
+ await resetQ();
72
+ info('WORK', 'Clearing cache after error');
73
+ }
74
+ // printStatistics();
75
+ }
76
+ else {
77
+ info('WORK', 'Feature is disabled.');
78
+ }
79
+ if (currentFeature.errorForFeature)
80
+ warn('WORK', 'Feature errors:', currentFeature.errorForFeature);
81
+ const runInSeconds = Math.abs(new Date().getTime() - currentFeature.startDate.getTime()) / 1000;
82
+ const durationString = Math.floor(runInSeconds / 60) + 'm ' + Math.floor(runInSeconds % 60) + 's';
83
+ info('WORK', 'run duration:', durationString);
84
+ currentFeature.durationString = durationString;
85
+ pastQ.unshift(currentFeature);
86
+ currentFeature = null;
87
+ waitSyncMS(1);
88
+ }
89
+ function addErrorToCurrentFeature(error) {
90
+ if (!currentFeature)
91
+ return;
92
+ currentFeature.errorForFeature = error;
93
+ }
94
+ export function terminate() {
95
+ info('WORK', 'TERMINATE INITIATED!');
96
+ Q = [];
97
+ terminating = true;
98
+ cancelFeatureRequested = true;
99
+ }
100
+ export async function resetQ() {
101
+ info('WORK', 'Reset Q!');
102
+ cancelFeatureRequested = true;
103
+ Q = [];
104
+ addFeaturesToQ([]);
105
+ await dispatcherConfig.handlers.emptyQHandler();
106
+ }
107
+ export function addEventToList(name, params) {
108
+ debug('WORK', 'Adding event to EventList', name, 'PARAMS', params);
109
+ const eventItem = {};
110
+ if (name.indexOf('EVENT') === -1) {
111
+ eventItem.name = 'EVENT ' + name;
112
+ }
113
+ else {
114
+ eventItem.name = name;
115
+ }
116
+ eventItem.params = params;
117
+ eventItem.timeAdded = new Date();
118
+ eventItem.startDate = eventItem.timeAdded;
119
+ eventItem.type = 'EVENT';
120
+ eventList.push(eventItem);
121
+ waitSyncMS(1);
122
+ }
123
+ export function getCurrentQ() {
124
+ let returnQ = [];
125
+ returnQ = returnQ.concat(eventList.filter((item) => item.timeAdded > eventCutoffDate));
126
+ returnQ = returnQ.concat(Q);
127
+ returnQ = returnQ.sort((a, b) => a.timeAdded.getTime() - b.timeAdded.getTime());
128
+ return returnQ;
129
+ }
130
+ export function getPastQ() {
131
+ let returnQ = [];
132
+ returnQ = returnQ.concat(eventList.filter((item) => item.timeAdded <= eventCutoffDate));
133
+ returnQ = returnQ.concat(pastQ);
134
+ returnQ = returnQ.sort((a, b) => b.timeAdded.getTime() - a.timeAdded.getTime());
135
+ return returnQ.slice(0, 200);
136
+ }
137
+ export function getCurrentFeature() {
138
+ return currentFeature;
139
+ }
140
+ export async function startWorking() {
141
+ while (!terminating) {
142
+ if (Q.length === 0) {
143
+ await sleep(0.1);
144
+ }
145
+ else {
146
+ await workOnNextFeature();
147
+ info('WORK', 'Q', Q.map((item) => item.name));
148
+ }
149
+ }
150
+ }
151
+ export function setCurrentlyWorkingOn(text) {
152
+ currentlyWorkingOn = text;
153
+ }
154
+ export function addToFeatureResult(text) {
155
+ if (!currentFeature || !text || text.length <= 0) {
156
+ return;
157
+ }
158
+ if (currentFeature.result && currentFeature.result.length > 0) {
159
+ currentFeature.result += '<br>' + text;
160
+ }
161
+ else {
162
+ currentFeature.result = text;
163
+ }
164
+ fine('WORK', 'Setting result to:', currentFeature.result);
165
+ }
166
+ export function setFeatureResult(text) {
167
+ if (!currentFeature)
168
+ return;
169
+ currentFeature.result = text;
170
+ }
171
+ export async function skipCurrentlyWorkingFeature() {
172
+ if (!currentFeature) {
173
+ warn('WORK', 'No current feature to skip');
174
+ return;
175
+ }
176
+ const oldFeatureName = currentFeature.name;
177
+ warn('WORK', 'Skipping current feature', currentFeature.name);
178
+ cancelFeatureRequested = true;
179
+ while (currentFeature && currentFeature.name === oldFeatureName) {
180
+ await sleep(0.001);
181
+ }
182
+ warn('WORK', 'Feature', oldFeatureName, 'was skipped.');
183
+ }
184
+ // ****** TEST SETUP ******
185
+ export const _testing_workQ = {
186
+ resetAfterUnitTest: resetAfterUnitTest,
187
+ workOnNextFeature: workOnNextFeature,
188
+ skipCurrentlyWorkingFeature: skipCurrentlyWorkingFeature,
189
+ startWorking: startWorking,
190
+ };
191
+ function resetAfterUnitTest() {
192
+ Q = [];
193
+ eventList = [];
194
+ pastQ = [];
195
+ currentFeature = null;
196
+ eventCutoffDate = new Date(new Date().setHours(new Date().getHours() - 1));
197
+ }
198
+ //# sourceMappingURL=workQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workQ.js","sourceRoot":"","sources":["../../src/work/workQ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAU3D,IAAI,CAAC,GAAc,EAAE,CAAC;AACtB,IAAI,KAAK,GAAc,EAAE,CAAC;AAC1B,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,IAAI,cAAc,GAAmB,IAAI,CAAC;AAC1C,IAAI,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,CAAC,IAAI,kBAAkB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,IAAI,sBAAsB,GAAG,KAAK,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,UAAqB;IAClD,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC;IACxF,MAAM,kBAAkB,GAAc,EAAE,CAAC;IACzC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IACxF,0DAA0D;IAC1D,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAClB,IAAI,CACF,MAAM,EACN,4CAA4C,EAC5C,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5C,CAAC;QACF,iDAAiD;QACjD,yCAAyC;QACzC,iBAAiB;QACjB,IAAI;IACN,CAAC;SAAM,CAAC;QACN,IAAI,CACF,MAAM,EACN,sBAAsB,EACtB,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5C,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,UAAU,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,CAAC,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,cAAc,GAAG,CAAC,CAAC,KAAK,EAAG,CAAC;IAC5B,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACtC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,iBAAiB,GAAG;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;QACtF,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;IACpF,CAAC,CAAC;IACF,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,wBAAwB,EAAE,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAClG,IAAI,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,kBAAkB,GAAG,EAAE,CAAC;YACxB,sBAAsB,GAAG,KAAK,CAAC;YAC/B,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YAC7B,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,CAAC,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,aAAa;gBAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7I,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,GAAG,CAAC;YACR,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5G,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpF,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC7C,CAAC;QACD,qBAAqB;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,cAAc,CAAC,eAAe;QAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACpG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAChG,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;IAClG,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC9C,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC;IAC/C,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9B,cAAc,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAY;IAC5C,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,cAAc,CAAC,eAAe,GAAG,KAAK,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrC,CAAC,GAAG,EAAE,CAAC;IACP,WAAW,GAAG,IAAI,CAAC;IACnB,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzB,sBAAsB,GAAG,IAAI,CAAC;IAC9B,CAAC,GAAG,EAAE,CAAC;IACP,cAAc,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,gBAAgB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAW;IACtD,KAAK,CAAC,MAAM,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,EAAW,CAAC;IAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAC1C,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;IACzB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,GAAG,EAAyB,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC;IACvF,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,IAAI,OAAO,GAAG,EAAyB,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC;IACxF,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,iBAAiB,EAAE,CAAC;YAC1B,IAAI,CACF,MAAM,EACN,GAAG,EACH,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,kBAAkB,GAAG,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,cAAc,CAAC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,0BAA0B,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9D,sBAAsB,GAAG,IAAI,CAAC;IAC9B,OAAO,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAChE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB,EAAE,kBAAkB;IACtC,iBAAiB,EAAE,iBAAiB;IACpC,2BAA2B,EAAE,2BAA2B;IACxD,YAAY,EAAE,YAAY;CAC3B,CAAC;AAEF,SAAS,kBAAkB;IACzB,CAAC,GAAG,EAAE,CAAC;IACP,SAAS,GAAG,EAAE,CAAC;IACf,KAAK,GAAG,EAAE,CAAC;IACX,cAAc,GAAG,IAAI,CAAC;IACtB,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "work-dispatcher",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Typescript library to handle task or work scheduling",
5
5
  "keywords": [
6
6
  "typescript"
@@ -19,7 +19,7 @@
19
19
  "main": "index.ts",
20
20
  "scripts": {
21
21
  "build": "tsc",
22
- "test": "vitest"
22
+ "test": "NODE_ENV=TEST vitest --coverage"
23
23
  },
24
24
  "release": {
25
25
  "branches": [
@@ -27,6 +27,8 @@
27
27
  ]
28
28
  },
29
29
  "devDependencies": {
30
+ "@types/node": "^25.0.3",
31
+ "@vitest/coverage-v8": "^4.0.16",
30
32
  "semantic-release": "^25.0.2",
31
33
  "typescript": "^5.9.3",
32
34
  "vitest": "^4.0.16"
@@ -0,0 +1,129 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title><%= pageTitle; %></title>
7
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Condensed" />
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous" />
9
+ <link rel="stylesheet" href="status.css" />
10
+ <script>
11
+ document.addEventListener('DOMContentLoaded', function (event) {
12
+ var scrollpos = localStorage.getItem('scrollpos');
13
+ if (scrollpos) window.scrollTo(0, scrollpos);
14
+
15
+ setTimeout(function () {
16
+ localStorage.setItem('scrollpos', window.scrollY);
17
+ window.location.href = window.location.pathname; // This removes query parameters
18
+ }, 2000); // 2 seconds, same as your meta refresh
19
+ });
20
+
21
+ window.onbeforeunload = function (e) {
22
+ localStorage.setItem('scrollpos', window.scrollY);
23
+ };
24
+ </script>
25
+ </head>
26
+
27
+ <body>
28
+ <p style="text-align: center"><%= pageTitle; %> <%= softwareVersion; %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Startup: <%= startupTime; %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dispatcher.js <%= dispatcherVersion; %></p>
29
+
30
+ <div style="display: flex; justify-content: center; gap: 2em">
31
+ <div>
32
+ <form action="/trigger" method="get" id="triggerForm">
33
+ <button type="submit" class="btn btn-outline-primary btn-sm" form="triggerForm">TRIGGER</button>
34
+ </form>
35
+ </div>
36
+ <div>
37
+ <form action="/skip" method="get" id="skipForm">
38
+ <button type="submit" class="btn btn-outline-primary btn-sm" form="skipForm">SKIP</button>
39
+ </form>
40
+ </div>
41
+ <div>
42
+ <form action="/pause" method="get" id="pauseForm">
43
+ <button type="submit" class="btn btn-outline-primary btn-sm" form="pauseForm">PAUSE</button>
44
+ </form>
45
+ </div>
46
+ <div>
47
+ <form action="/reset" method="get" id="resetForm">
48
+ <button type="submit" class="btn btn-outline-primary btn-sm" form="resetForm">RESET</button>
49
+ </form>
50
+ </div>
51
+ <div>
52
+ <form action="/reboot" method="get" id="rebootForm">
53
+ <button type="submit" class="btn btn-outline-primary btn-sm" form="rebootForm">REBOOT</button>
54
+ </form>
55
+ </div>
56
+ </div>
57
+
58
+ <br />
59
+
60
+ <!-- current feature -->
61
+ <% if (currentFeature) { %>
62
+ <div class="flexContainer currentFeature">
63
+ <%= currentFeature.name; %>
64
+ <b> <%= currentFeature.getDurationString(); %> </b>
65
+ <% if (currentFeature.params) { %>
66
+ <br /><span>Params: <%= currentFeature.params; %></span>
67
+ <% } %>
68
+ <span style="font-size: 0.5rem">Added: <%= currentFeature.timeAdded.toLocaleDateString(undefined, dateOptions); %></span>
69
+
70
+ <% if (currentlyWorkingOn.length> 0) { %>
71
+ <br /><span>CWO: <%= currentlyWorkingOn; %></span>
72
+ <% } %> <% if (currentFeature.result && currentFeature.result.length> 0) { %>
73
+ <br /><span
74
+ ><b>Result</b><br />
75
+ <%- currentFeature.result; %></span
76
+ >
77
+ <% } %>
78
+ </div>
79
+ <% } %>
80
+
81
+ <div class="leftHalf">
82
+ <span class="counter">Counter: <%= currentQ.length; %></span>
83
+ <ul>
84
+ <% for(var i=0; i < currentQ.length; i++) { %>
85
+ <li class="flexContainer currentQ<%= (currentQ[i].type === 'EVENT') ? ' eventType' : '' %>">
86
+ <span style="flex: 1 0 45%"> <%= currentQ[i].name; %> </span>
87
+ <% if (currentQ[i].params) { %>
88
+ <br /><span>Params: <%= currentQ[i].params; %></span>
89
+ <% } %>
90
+ <span style="flex: 1 0 45%; font-size: 0.5rem; text-align: right">Added: <%= currentQ[i].timeAdded.toLocaleDateString( undefined, dateOptions); %></span>
91
+ </li>
92
+ <% } %>
93
+ </ul>
94
+ </div>
95
+
96
+ <div class="rightHalf">
97
+ <span class="counter">Counter: <%= pastQ.length; %></span>
98
+ <ul>
99
+ <% for(var i=0; i < pastQ.length; i++) { %>
100
+ <li
101
+ class="flexContainer <%= (pastQ[i].errorForFeature && pastQ[i].errorForFeature.length > 0) ? 'pastError' : (pastQ[i].result && pastQ[i].result.length > 0) ? 'pastResult' : 'pastQ' %> <%= (pastQ[i].type === 'EVENT') ? ' eventType' : '' %>"
102
+ >
103
+ <span style="flex: 2 0 40%"> <%= pastQ[i].name; %> </span>
104
+ <span style="flex: 1 0 20%; text-align: right"><b> <%= pastQ[i].durationString; %> </b></span>
105
+ <% if (pastQ[i].params) { %>
106
+ <br /><span>Params: <%= pastQ[i].params; %></span>
107
+ <% } %>
108
+
109
+ <span style="flex: 1 0 20%; font-size: 0.5rem; text-align: right">
110
+ Added: <%= pastQ[i].timeAdded.toLocaleDateString( undefined, dateOptions); %> <br />
111
+ Finished: <%= new Date(pastQ[i].startDate).toLocaleDateString(undefined, dateOptions); %>
112
+ </span>
113
+ <% if (pastQ[i].result && pastQ[i].result.length> 0) { %>
114
+ <span>
115
+ <b>Result</b><br />
116
+ <%- pastQ[i].result; %>
117
+ </span>
118
+ <% } %> <% if (pastQ[i].errorForFeature && pastQ[i].errorForFeature.length > 0) { %>
119
+ <span>
120
+ <b>Error</b><br />
121
+ <%- pastQ[i].errorForFeature; %>
122
+ </span>
123
+ <% } %>
124
+ </li>
125
+ <% } %>
126
+ </ul>
127
+ </div>
128
+ </body>
129
+ </html>