namirasoft-core 1.4.99 → 1.4.100

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.
@@ -3,4 +3,5 @@ export declare class CronOperation {
3
3
  static isValid(pattern: string): boolean;
4
4
  static check(pattern: string): void;
5
5
  static getNumbers(pattern: string, min: number, max: number): number[];
6
+ static getNext(current: number, pattern: string, min: number, max?: number): number;
6
7
  }
@@ -54,6 +54,53 @@ class CronOperation {
54
54
  });
55
55
  return ans;
56
56
  }
57
+ static getNext(current, pattern, min, max) {
58
+ function getNextLoop(current, start, end, step) {
59
+ if (current < start)
60
+ return start;
61
+ const offset = Math.ceil((current - start + 1) / step) * step;
62
+ const next = start + offset;
63
+ if (end == null)
64
+ return next;
65
+ return next > end ? start : next;
66
+ }
67
+ function forwardDistance(current, candidate, min, max) {
68
+ if (max == null)
69
+ return candidate > current ? candidate - current : Infinity;
70
+ const ring = max - min + 1;
71
+ const curIdx = current - min;
72
+ const candIdx = candidate - min;
73
+ let dist = (candIdx - curIdx + ring) % ring;
74
+ if (dist === 0)
75
+ dist = ring;
76
+ return dist;
77
+ }
78
+ let patterns = CronOperation.splitPatterns(pattern);
79
+ let ans = null;
80
+ let bestDist = Infinity;
81
+ for (let i = 0; i < patterns.length; i++) {
82
+ const element = patterns[i];
83
+ let ts = element.split('/').map(p => p.trim());
84
+ let step = ts.length == 1 ? 1 : parseInt(ts[1]);
85
+ let candidate;
86
+ if (element.includes("-")) {
87
+ let ns = element.split('-').map(p => p.trim());
88
+ let start = Math.max(min, parseInt(ns[0]));
89
+ let end = Math.min(max !== null && max !== void 0 ? max : parseInt(ns[1]), parseInt(ns[1]));
90
+ candidate = getNextLoop(current, start, end, step);
91
+ }
92
+ else if (element.includes("*"))
93
+ candidate = getNextLoop(current, min, max, step);
94
+ else
95
+ candidate = parseInt(element);
96
+ const dist = forwardDistance(current, candidate, min, max);
97
+ if (dist < bestDist) {
98
+ bestDist = dist;
99
+ ans = candidate;
100
+ }
101
+ }
102
+ return ans !== null && ans !== void 0 ? ans : current;
103
+ }
57
104
  }
58
105
  exports.CronOperation = CronOperation;
59
106
  //# sourceMappingURL=CronOperation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CronOperation.js","sourceRoot":"","sources":["../src/CronOperation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CronOperation.js","sourceRoot":"","sources":["../src/CronOperation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "framework": "npm",
9
9
  "application": "package",
10
10
  "private": false,
11
- "version": "1.4.99",
11
+ "version": "1.4.100",
12
12
  "author": "Amir Abolhasani",
13
13
  "license": "MIT",
14
14
  "main": "./dist/index.js",
@@ -17,7 +17,7 @@
17
17
  "build": ""
18
18
  },
19
19
  "dependencies": {
20
- "@types/node": "^24.7.2",
20
+ "@types/node": "^24.8.1",
21
21
  "async-mutex": "^0.5.0",
22
22
  "axios": "^1.12.2",
23
23
  "buffer": "^6.0.3",
@@ -60,4 +60,60 @@ export class CronOperation
60
60
  });
61
61
  return ans;
62
62
  }
63
+ static getNext(current: number, pattern: string, min: number, max?: number): number
64
+ {
65
+ function getNextLoop(current: number, start: number, end: number | undefined, step: number)
66
+ {
67
+ if (current < start)
68
+ return start;
69
+ const offset = Math.ceil((current - start + 1) / step) * step;
70
+ const next = start + offset;
71
+ if (end == null)
72
+ return next;
73
+ return next > end ? start : next;
74
+ }
75
+ function forwardDistance(current: number, candidate: number, min: number, max?: number): number
76
+ {
77
+ if (max == null)
78
+ return candidate > current ? candidate - current : Infinity;
79
+ const ring = max - min + 1;
80
+ const curIdx = current - min;
81
+ const candIdx = candidate - min;
82
+ let dist = (candIdx - curIdx + ring) % ring;
83
+ if (dist === 0)
84
+ dist = ring;
85
+ return dist;
86
+ }
87
+
88
+ let patterns = CronOperation.splitPatterns(pattern);
89
+ let ans: number | null = null;
90
+ let bestDist = Infinity;
91
+ for (let i = 0; i < patterns.length; i++)
92
+ {
93
+ const element = patterns[i];
94
+ let ts = element.split('/').map(p => p.trim());
95
+ let step = ts.length == 1 ? 1 : parseInt(ts[1]);
96
+ let candidate: number;
97
+ if (element.includes("-"))
98
+ {
99
+ let ns = element.split('-').map(p => p.trim());
100
+ let start = Math.max(min, parseInt(ns[0]));
101
+ let end = Math.min(max ?? parseInt(ns[1]), parseInt(ns[1]));
102
+ candidate = getNextLoop(current, start, end, step);
103
+ }
104
+ else if (element.includes("*"))
105
+ candidate = getNextLoop(current, min, max, step);
106
+ else
107
+ candidate = parseInt(element);
108
+
109
+ const dist = forwardDistance(current, candidate, min, max);
110
+
111
+ if (dist < bestDist)
112
+ {
113
+ bestDist = dist;
114
+ ans = candidate;
115
+ }
116
+ }
117
+ return ans ?? current;
118
+ }
63
119
  }