iobroker.javascript 9.0.2 → 9.0.4

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.
@@ -47,17 +47,13 @@ exports.patternCompareFunctions = {
47
47
  case 'ne':
48
48
  return (event) => event.newState.val !== event.oldState.val;
49
49
  case 'gt':
50
- // @ts-expect-error we assume it could be null
51
- return (event) => event.newState.val > event.oldState.val;
50
+ return (event) => (event.newState.val ?? 0) > (event.oldState.val ?? 0);
52
51
  case 'ge':
53
- // @ts-expect-error we assume it could be null
54
- return (event) => event.newState.val >= event.oldState.val;
52
+ return (event) => (event.newState.val ?? 0) >= (event.oldState.val ?? 0);
55
53
  case 'lt':
56
- // @ts-expect-error we assume it could be null
57
- return (event) => event.newState.val < event.oldState.val;
54
+ return (event) => (event.newState.val ?? 0) < (event.oldState.val ?? 0);
58
55
  case 'le':
59
- // @ts-expect-error we assume it could be null
60
- return (event) => event.newState.val <= event.oldState.val;
56
+ return (event) => (event.newState.val ?? 0) <= (event.oldState.val ?? 0);
61
57
  default:
62
58
  return (_event) => true;
63
59
  // on any other logic, just signal about a message
@@ -89,23 +85,19 @@ exports.patternCompareFunctions = {
89
85
  },
90
86
  valGt: (pattern) => {
91
87
  const pValGt = pattern.valGt;
92
- // @ts-expect-error we assume it could be null
93
- return (event) => event.newState.val > pValGt;
88
+ return (event) => (event.newState.val ?? 0) > (pValGt ?? 0);
94
89
  },
95
90
  valGe: (pattern) => {
96
91
  const pValGe = pattern.valGe;
97
- // @ts-expect-error we assume it could be null
98
- return (event) => event.newState.val >= pValGe;
92
+ return (event) => (event.newState.val ?? 0) >= (pValGe ?? 0);
99
93
  },
100
94
  valLt: (pattern) => {
101
95
  const pValLt = pattern.valLt;
102
- // @ts-expect-error we assume it could be null
103
- return (event) => event.newState.val < pValLt;
96
+ return (event) => (event.newState.val ?? 0) < (pValLt ?? 0);
104
97
  },
105
98
  valLe: (pattern) => {
106
99
  const pValLe = pattern.valLe;
107
- // @ts-expect-error we assume it could be null
108
- return (event) => event.newState.val <= pValLe;
100
+ return (event) => (event.newState.val ?? 0) <= (pValLe ?? 0);
109
101
  },
110
102
  valNe: (pattern) => {
111
103
  const pValNe = pattern.valNe;
@@ -117,23 +109,19 @@ exports.patternCompareFunctions = {
117
109
  },
118
110
  oldValGt: (pattern) => {
119
111
  const pOldValGt = pattern.oldValGt;
120
- // @ts-expect-error we assume it could be null
121
- return (event) => event.oldState.val > pOldValGt;
112
+ return (event) => (event.oldState.val ?? 0) > (pOldValGt ?? 0);
122
113
  },
123
114
  oldValGe: (pattern) => {
124
115
  const pOldValGe = pattern.oldValGe;
125
- // @ts-expect-error we assume it could be null
126
- return (event) => event.oldState.val >= pOldValGe;
116
+ return (event) => (event.oldState.val ?? 0) >= (pOldValGe ?? 0);
127
117
  },
128
118
  oldValLt: (pattern) => {
129
119
  const pOldValLt = pattern.oldValLt;
130
- // @ts-expect-error we assume it could be null
131
- return (event) => event.oldState.val < pOldValLt;
120
+ return (event) => (event.oldState.val ?? 0) < (pOldValLt ?? 0);
132
121
  },
133
122
  oldValLe: (pattern) => {
134
123
  const pOldValLe = pattern.oldValLe;
135
- // @ts-expect-error we assume it could be null
136
- return (event) => event.oldState.val <= pOldValLe;
124
+ return (event) => (event.oldState.val ?? 0) <= (pOldValLe ?? 0);
137
125
  },
138
126
  oldValNe: (pattern) => {
139
127
  const pOldValNe = pattern.oldValNe;
@@ -145,23 +133,19 @@ exports.patternCompareFunctions = {
145
133
  },
146
134
  tsGt: (pattern) => {
147
135
  const ptsGt = pattern.tsGt;
148
- // @ts-expect-error we assume it could be null
149
- return (event) => event.newState.ts > ptsGt;
136
+ return (event) => event.newState.ts > (ptsGt ?? 0);
150
137
  },
151
138
  tsGe: (pattern) => {
152
139
  const ptsGe = pattern.tsGe;
153
- // @ts-expect-error we assume it could be null
154
- return (event) => event.newState.ts >= ptsGe;
140
+ return (event) => event.newState.ts >= (ptsGe ?? 0);
155
141
  },
156
142
  tsLt: (pattern) => {
157
143
  const ptsLt = pattern.tsLt;
158
- // @ts-expect-error we assume it could be null
159
- return (event) => event.newState.ts < ptsLt;
144
+ return (event) => event.newState.ts < (ptsLt ?? 0);
160
145
  },
161
146
  tsLe: (pattern) => {
162
147
  const ptsLe = pattern.tsLe;
163
- // @ts-expect-error we assume it could be null
164
- return (event) => event.newState.ts <= ptsLe;
148
+ return (event) => event.newState.ts <= (ptsLe ?? 0);
165
149
  },
166
150
  oldTs: (pattern) => {
167
151
  const pOldTs = pattern.oldTs;
@@ -169,23 +153,19 @@ exports.patternCompareFunctions = {
169
153
  },
170
154
  oldTsGt: (pattern) => {
171
155
  const pOldTsGt = pattern.oldTsGt;
172
- // @ts-expect-error we assume it could be null
173
- return (event) => event.oldState.ts > pOldTsGt;
156
+ return (event) => event.oldState.ts > (pOldTsGt ?? 0);
174
157
  },
175
158
  oldTsGe: (pattern) => {
176
159
  const pOldTsGe = pattern.oldTsGe;
177
- // @ts-expect-error we assume it could be null
178
- return (event) => event.oldState.ts >= pOldTsGe;
160
+ return (event) => event.oldState.ts >= (pOldTsGe ?? 0);
179
161
  },
180
162
  oldTsLt: (pattern) => {
181
163
  const pOldTsLt = pattern.oldTsLt;
182
- // @ts-expect-error we assume it could be null
183
- return (event) => event.oldState.ts < pOldTsLt;
164
+ return (event) => event.oldState.ts < (pOldTsLt ?? 0);
184
165
  },
185
166
  oldTsLe: (pattern) => {
186
167
  const pOldTsLe = pattern.oldTsLe;
187
- // @ts-expect-error we assume it could be null
188
- return (event) => event.oldState.ts <= pOldTsLe;
168
+ return (event) => event.oldState.ts <= (pOldTsLe ?? 0);
189
169
  },
190
170
  lc: (pattern) => {
191
171
  const plc = pattern.lc;
@@ -193,23 +173,19 @@ exports.patternCompareFunctions = {
193
173
  },
194
174
  lcGt: (pattern) => {
195
175
  const plcGt = pattern.lcGt;
196
- // @ts-expect-error we assume it could be null
197
- return (event) => event.newState.lc > plcGt;
176
+ return (event) => event.newState.lc > (plcGt ?? 0);
198
177
  },
199
178
  lcGe: (pattern) => {
200
179
  const plcGe = pattern.lcGe;
201
- // @ts-expect-error we assume it could be null
202
- return (event) => event.newState.lc >= plcGe;
180
+ return (event) => event.newState.lc >= (plcGe ?? 0);
203
181
  },
204
182
  lcLt: (pattern) => {
205
183
  const plcLt = pattern.lcLt;
206
- // @ts-expect-error we assume it could be null
207
- return (event) => event.newState.lc < plcLt;
184
+ return (event) => event.newState.lc < (plcLt ?? 0);
208
185
  },
209
186
  lcLe: (pattern) => {
210
187
  const plcLe = pattern.lcLe;
211
- // @ts-expect-error we assume it could be null
212
- return (event) => event.newState.lc <= plcLe;
188
+ return (event) => event.newState.lc <= (plcLe ?? 0);
213
189
  },
214
190
  oldLc: (pattern) => {
215
191
  const pOldLc = pattern.oldLc;
@@ -217,23 +193,19 @@ exports.patternCompareFunctions = {
217
193
  },
218
194
  oldLcGt: (pattern) => {
219
195
  const pOldLcGt = pattern.oldLcGt;
220
- // @ts-expect-error we assume it could be null
221
- return (event) => event.oldState.lc > pOldLcGt;
196
+ return (event) => event.oldState.lc > (pOldLcGt ?? 0);
222
197
  },
223
198
  oldLcGe: (pattern) => {
224
199
  const pOldLcGe = pattern.oldLcGe;
225
- // @ts-expect-error we assume it could be null
226
- return (event) => event.oldState.lc >= pOldLcGe;
200
+ return (event) => event.oldState.lc >= (pOldLcGe ?? 0);
227
201
  },
228
202
  oldLcLt: (pattern) => {
229
203
  const pOldLcLt = pattern.oldLcLt;
230
- // @ts-expect-error we assume it could be null
231
- return (event) => event.oldState.lc < pOldLcLt;
204
+ return (event) => event.oldState.lc < (pOldLcLt ?? 0);
232
205
  },
233
206
  oldLcLe: (pattern) => {
234
207
  const pOldLcLe = pattern.oldLcLe;
235
- // @ts-expect-error we assume it could be null
236
- return (event) => event.oldState.lc <= pOldLcLe;
208
+ return (event) => event.oldState.lc <= (pOldLcLe ?? 0);
237
209
  },
238
210
  from: (pattern) => stringOrRegExpCompare(pattern, 'from', event => event && event.newState && event.newState.from),
239
211
  fromNe: (pattern) => stringOrRegExpCompare(pattern, 'fromNe', event => event && event.newState && event.newState.from, true),
@@ -1 +1 @@
1
- {"version":3,"file":"patternCompareFunctions.js","sourceRoot":"","sources":["../../src/lib/patternCompareFunctions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Pattern } from '../types';\nimport { type EventObj } from './eventObj';\n\nfunction isRegExp(obj: any): boolean {\n return !!(obj?.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));\n}\n\nexport type PatternEventCompareFunction = (event: EventObj) => boolean;\n\n/**\n * @param pattern The pattern object to use\n * @param propName The name of the property to compare\n * @param eventPropertyExtractor If given, this function is used to extract the property value from the event object. Otherwise, the propName is used\n * @param invert Whether to invert the result\n */\nfunction stringOrRegExpCompare(\n pattern: Pattern,\n propName: string,\n eventPropertyExtractor?: (event: EventObj) => any,\n invert?: boolean,\n): PatternEventCompareFunction {\n const field: RegExp | string | string[] = (pattern as Record<string, RegExp | string | string[]>)[propName];\n const hasExtractor = typeof eventPropertyExtractor === 'function';\n\n if (isRegExp(field)) {\n return function (event: EventObj): boolean {\n const eventValue: any = hasExtractor\n ? eventPropertyExtractor(event)\n : (event as Record<string, any>)[propName];\n const ret = eventValue != null && (field as RegExp).test(eventValue);\n return invert ? !ret : ret;\n };\n }\n\n if (Array.isArray(field)) {\n return function (event: EventObj): boolean {\n const eventValue = hasExtractor ? eventPropertyExtractor(event) : (event as Record<string, any>)[propName];\n // An array matches when any element is found that satisfies the constraint\n const ret = eventValue != null && field.find(f => f === eventValue) != null;\n return invert ? !ret : ret;\n };\n }\n\n return function (event: EventObj): boolean {\n const eventValue = hasExtractor ? eventPropertyExtractor(event) : (event as Record<string, any>)[propName];\n const ret = eventValue != null && field === eventValue;\n return invert ? !ret : ret;\n };\n}\n\nexport const patternCompareFunctions = {\n logic: (_pattern: Pattern): void => {},\n\n id: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'id'),\n\n name: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'name'),\n\n change: (pattern: Pattern): PatternEventCompareFunction => {\n switch (pattern.change) {\n case 'eq':\n return (event: EventObj): boolean => event.newState.val === event.oldState.val;\n case 'ne':\n return (event: EventObj): boolean => event.newState.val !== event.oldState.val;\n case 'gt':\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val > event.oldState.val;\n case 'ge':\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val >= event.oldState.val;\n case 'lt':\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val < event.oldState.val;\n case 'le':\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val <= event.oldState.val;\n default:\n return (_event: EventObj): boolean => true;\n // on any other logic, just signal about a message\n }\n },\n\n ack: (pattern: Pattern): PatternEventCompareFunction => {\n if (pattern.ack === true || pattern.ack === 'true') {\n return (event: EventObj): boolean => event.newState.ack === true;\n }\n return (event: EventObj): boolean => event.newState.ack === false;\n },\n oldAck: (pattern: Pattern): PatternEventCompareFunction => {\n if (pattern.oldAck === true || pattern.oldAck === 'true') {\n return (event: EventObj): boolean => event.oldState.ack === true;\n }\n return (event: EventObj): boolean => event.oldState.ack === false;\n },\n\n q: (pattern: Pattern): PatternEventCompareFunction => {\n const q = pattern.q;\n return (event: EventObj): boolean => q === '*' || q === event.newState.q;\n },\n oldQ: (pattern: Pattern): PatternEventCompareFunction => {\n const q = pattern.oldQ;\n return (event: EventObj): boolean => q === '*' || q === event.oldState.q;\n },\n\n val: (pattern: Pattern): PatternEventCompareFunction => {\n const pVal = pattern.val;\n return (event: EventObj): boolean => pVal === event.newState.val;\n },\n valGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pValGt = pattern.valGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val > pValGt;\n },\n valGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValGe = pattern.valGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val >= pValGe;\n },\n valLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pValLt = pattern.valLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val < pValLt;\n },\n valLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValLe = pattern.valLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.val <= pValLe;\n },\n valNe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValNe = pattern.valNe;\n return (event: EventObj): boolean => event.newState.val !== pValNe;\n },\n\n oldVal: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldVal = pattern.oldVal;\n return (event: EventObj): boolean => pOldVal === event.oldState.val;\n },\n oldValGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValGt = pattern.oldValGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.val > pOldValGt;\n },\n oldValGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValGe = pattern.oldValGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.val >= pOldValGe;\n },\n oldValLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValLt = pattern.oldValLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.val < pOldValLt;\n },\n oldValLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValLe = pattern.oldValLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.val <= pOldValLe;\n },\n oldValNe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValNe = pattern.oldValNe;\n return (event: EventObj): boolean => event.oldState.val !== pOldValNe;\n },\n\n ts: (pattern: Pattern): PatternEventCompareFunction => {\n const pts = pattern.ts;\n return (event: EventObj): boolean => pts === event.newState.ts;\n },\n tsGt: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsGt = pattern.tsGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.ts > ptsGt;\n },\n tsGe: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsGe = pattern.tsGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.ts >= ptsGe;\n },\n tsLt: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsLt = pattern.tsLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.ts < ptsLt;\n },\n tsLe: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsLe = pattern.tsLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.ts <= ptsLe;\n },\n\n oldTs: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTs = pattern.oldTs;\n return (event: EventObj): boolean => pOldTs === event.oldState.ts;\n },\n oldTsGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsGt = pattern.oldTsGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.ts > pOldTsGt;\n },\n oldTsGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsGe = pattern.oldTsGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.ts >= pOldTsGe;\n },\n oldTsLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsLt = pattern.oldTsLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.ts < pOldTsLt;\n },\n oldTsLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsLe = pattern.oldTsLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.ts <= pOldTsLe;\n },\n\n lc: (pattern: Pattern): PatternEventCompareFunction => {\n const plc = pattern.lc;\n return (event: EventObj): boolean => plc === event.newState.lc;\n },\n lcGt: (pattern: Pattern): PatternEventCompareFunction => {\n const plcGt = pattern.lcGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.lc > plcGt;\n },\n lcGe: (pattern: Pattern): PatternEventCompareFunction => {\n const plcGe = pattern.lcGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.lc >= plcGe;\n },\n lcLt: (pattern: Pattern): PatternEventCompareFunction => {\n const plcLt = pattern.lcLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.lc < plcLt;\n },\n lcLe: (pattern: Pattern): PatternEventCompareFunction => {\n const plcLe = pattern.lcLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.newState.lc <= plcLe;\n },\n\n oldLc: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLc = pattern.oldLc;\n return (event: EventObj): boolean => pOldLc === event.oldState.lc;\n },\n oldLcGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcGt = pattern.oldLcGt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.lc > pOldLcGt;\n },\n oldLcGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcGe = pattern.oldLcGe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.lc >= pOldLcGe;\n },\n oldLcLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcLt = pattern.oldLcLt;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.lc < pOldLcLt;\n },\n oldLcLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcLe = pattern.oldLcLe;\n // @ts-expect-error we assume it could be null\n return (event: EventObj): boolean => event.oldState.lc <= pOldLcLe;\n },\n\n from: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'from', event => event && event.newState && event.newState.from),\n\n fromNe: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'fromNe', event => event && event.newState && event.newState.from, true),\n\n oldFrom: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'oldFrom', event => event && event.oldState && event.oldState.from),\n\n oldFromNe: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'oldFromNe', event => event && event.oldState && event.oldState.from, true),\n\n channelId: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'channelId'),\n channelName: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'channelName'),\n deviceId: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'deviceId'),\n deviceName: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'deviceName'),\n\n enumId: (pattern: Pattern): PatternEventCompareFunction => {\n const pEnumId: RegExp | string | string[] | undefined = pattern.enumId;\n\n function ensureEnumIDsIsArray(enumIds: any): boolean {\n if (!Array.isArray(enumIds)) {\n console.error(\n `enumIds is of type ${typeof enumIds} but should be an array: ${JSON.stringify(enumIds)}`,\n );\n return false;\n }\n return true;\n }\n\n if (isRegExp(pEnumId)) {\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n // Test if any enum name matches the regex:\n return enumIds.find(e => (pEnumId as RegExp).test(e)) != null;\n };\n }\n\n if (Array.isArray(pEnumId)) {\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n // Test if the enum names of the event and the given array intersect\n return enumIds.find(e => pEnumId.includes(e)) != null;\n };\n }\n\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n return enumIds && enumIds.includes(pEnumId as string);\n };\n },\n\n enumName: (pattern: Pattern): PatternEventCompareFunction => {\n const pEnumName: RegExp | string | string[] | undefined = pattern.enumName;\n\n function ensureEnumNamesIsArray(enumNames: any): boolean {\n if (!Array.isArray(enumNames)) {\n console.error(\n `enumNames is of type ${typeof enumNames} but should be an array: ${JSON.stringify(enumNames)}`,\n );\n return false;\n }\n return true;\n }\n\n if (isRegExp(pEnumName)) {\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n // Test if any enum name matches the regex:\n return enumNames.find(e => (pEnumName as RegExp).test(e)) != null;\n };\n }\n if (Array.isArray(pEnumName)) {\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n // Test if the enum names of the event and the given array intersect\n return enumNames.find(e => pEnumName.includes(e)) != null;\n };\n }\n\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n return enumNames?.includes(pEnumName as string);\n };\n },\n};\n"]}
1
+ {"version":3,"file":"patternCompareFunctions.js","sourceRoot":"","sources":["../../src/lib/patternCompareFunctions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Pattern } from '../types';\nimport { type EventObj } from './eventObj';\n\nfunction isRegExp(obj: any): boolean {\n return !!(obj?.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));\n}\n\nexport type PatternEventCompareFunction = (event: EventObj) => boolean;\n\n/**\n * @param pattern The pattern object to use\n * @param propName The name of the property to compare\n * @param eventPropertyExtractor If given, this function is used to extract the property value from the event object. Otherwise, the propName is used\n * @param invert Whether to invert the result\n */\nfunction stringOrRegExpCompare(\n pattern: Pattern,\n propName: string,\n eventPropertyExtractor?: (event: EventObj) => any,\n invert?: boolean,\n): PatternEventCompareFunction {\n const field: RegExp | string | string[] = (pattern as Record<string, RegExp | string | string[]>)[propName];\n const hasExtractor = typeof eventPropertyExtractor === 'function';\n\n if (isRegExp(field)) {\n return function (event: EventObj): boolean {\n const eventValue: any = hasExtractor\n ? eventPropertyExtractor(event)\n : (event as Record<string, any>)[propName];\n const ret = eventValue != null && (field as RegExp).test(eventValue);\n return invert ? !ret : ret;\n };\n }\n\n if (Array.isArray(field)) {\n return function (event: EventObj): boolean {\n const eventValue = hasExtractor ? eventPropertyExtractor(event) : (event as Record<string, any>)[propName];\n // An array matches when any element is found that satisfies the constraint\n const ret = eventValue != null && field.find(f => f === eventValue) != null;\n return invert ? !ret : ret;\n };\n }\n\n return function (event: EventObj): boolean {\n const eventValue = hasExtractor ? eventPropertyExtractor(event) : (event as Record<string, any>)[propName];\n const ret = eventValue != null && field === eventValue;\n return invert ? !ret : ret;\n };\n}\n\nexport const patternCompareFunctions = {\n logic: (_pattern: Pattern): void => {},\n\n id: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'id'),\n\n name: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'name'),\n\n change: (pattern: Pattern): PatternEventCompareFunction => {\n switch (pattern.change) {\n case 'eq':\n return (event: EventObj): boolean => event.newState.val === event.oldState.val;\n case 'ne':\n return (event: EventObj): boolean => event.newState.val !== event.oldState.val;\n case 'gt':\n return (event: EventObj): boolean => (event.newState.val ?? 0) > (event.oldState.val ?? 0);\n case 'ge':\n return (event: EventObj): boolean => (event.newState.val ?? 0) >= (event.oldState.val ?? 0);\n case 'lt':\n return (event: EventObj): boolean => (event.newState.val ?? 0) < (event.oldState.val ?? 0);\n case 'le':\n return (event: EventObj): boolean => (event.newState.val ?? 0) <= (event.oldState.val ?? 0);\n default:\n return (_event: EventObj): boolean => true;\n // on any other logic, just signal about a message\n }\n },\n\n ack: (pattern: Pattern): PatternEventCompareFunction => {\n if (pattern.ack === true || pattern.ack === 'true') {\n return (event: EventObj): boolean => event.newState.ack === true;\n }\n return (event: EventObj): boolean => event.newState.ack === false;\n },\n oldAck: (pattern: Pattern): PatternEventCompareFunction => {\n if (pattern.oldAck === true || pattern.oldAck === 'true') {\n return (event: EventObj): boolean => event.oldState.ack === true;\n }\n return (event: EventObj): boolean => event.oldState.ack === false;\n },\n\n q: (pattern: Pattern): PatternEventCompareFunction => {\n const q = pattern.q;\n return (event: EventObj): boolean => q === '*' || q === event.newState.q;\n },\n oldQ: (pattern: Pattern): PatternEventCompareFunction => {\n const q = pattern.oldQ;\n return (event: EventObj): boolean => q === '*' || q === event.oldState.q;\n },\n\n val: (pattern: Pattern): PatternEventCompareFunction => {\n const pVal = pattern.val;\n return (event: EventObj): boolean => pVal === event.newState.val;\n },\n valGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pValGt = pattern.valGt;\n return (event: EventObj): boolean => (event.newState.val ?? 0) > (pValGt ?? 0);\n },\n valGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValGe = pattern.valGe;\n return (event: EventObj): boolean => (event.newState.val ?? 0) >= (pValGe ?? 0);\n },\n valLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pValLt = pattern.valLt;\n return (event: EventObj): boolean => (event.newState.val ?? 0) < (pValLt ?? 0);\n },\n valLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValLe = pattern.valLe;\n return (event: EventObj): boolean => (event.newState.val ?? 0) <= (pValLe ?? 0);\n },\n valNe: (pattern: Pattern): PatternEventCompareFunction => {\n const pValNe = pattern.valNe;\n return (event: EventObj): boolean => event.newState.val !== pValNe;\n },\n\n oldVal: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldVal = pattern.oldVal;\n return (event: EventObj): boolean => pOldVal === event.oldState.val;\n },\n oldValGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValGt = pattern.oldValGt;\n return (event: EventObj): boolean => (event.oldState.val ?? 0) > (pOldValGt ?? 0);\n },\n oldValGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValGe = pattern.oldValGe;\n return (event: EventObj): boolean => (event.oldState.val ?? 0) >= (pOldValGe ?? 0);\n },\n oldValLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValLt = pattern.oldValLt;\n return (event: EventObj): boolean => (event.oldState.val ?? 0) < (pOldValLt ?? 0);\n },\n oldValLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValLe = pattern.oldValLe;\n return (event: EventObj): boolean => (event.oldState.val ?? 0) <= (pOldValLe ?? 0);\n },\n oldValNe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldValNe = pattern.oldValNe;\n return (event: EventObj): boolean => event.oldState.val !== pOldValNe;\n },\n\n ts: (pattern: Pattern): PatternEventCompareFunction => {\n const pts = pattern.ts;\n return (event: EventObj): boolean => pts === event.newState.ts;\n },\n tsGt: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsGt = pattern.tsGt;\n return (event: EventObj): boolean => event.newState.ts > (ptsGt ?? 0);\n },\n tsGe: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsGe = pattern.tsGe;\n return (event: EventObj): boolean => event.newState.ts >= (ptsGe ?? 0);\n },\n tsLt: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsLt = pattern.tsLt;\n return (event: EventObj): boolean => event.newState.ts < (ptsLt ?? 0);\n },\n tsLe: (pattern: Pattern): PatternEventCompareFunction => {\n const ptsLe = pattern.tsLe;\n return (event: EventObj): boolean => event.newState.ts <= (ptsLe ?? 0);\n },\n\n oldTs: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTs = pattern.oldTs;\n return (event: EventObj): boolean => pOldTs === event.oldState.ts;\n },\n oldTsGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsGt = pattern.oldTsGt;\n return (event: EventObj): boolean => event.oldState.ts > (pOldTsGt ?? 0);\n },\n oldTsGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsGe = pattern.oldTsGe;\n return (event: EventObj): boolean => event.oldState.ts >= (pOldTsGe ?? 0);\n },\n oldTsLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsLt = pattern.oldTsLt;\n return (event: EventObj): boolean => event.oldState.ts < (pOldTsLt ?? 0);\n },\n oldTsLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldTsLe = pattern.oldTsLe;\n return (event: EventObj): boolean => event.oldState.ts <= (pOldTsLe ?? 0);\n },\n\n lc: (pattern: Pattern): PatternEventCompareFunction => {\n const plc = pattern.lc;\n return (event: EventObj): boolean => plc === event.newState.lc;\n },\n lcGt: (pattern: Pattern): PatternEventCompareFunction => {\n const plcGt = pattern.lcGt;\n return (event: EventObj): boolean => event.newState.lc > (plcGt ?? 0);\n },\n lcGe: (pattern: Pattern): PatternEventCompareFunction => {\n const plcGe = pattern.lcGe;\n return (event: EventObj): boolean => event.newState.lc >= (plcGe ?? 0);\n },\n lcLt: (pattern: Pattern): PatternEventCompareFunction => {\n const plcLt = pattern.lcLt;\n return (event: EventObj): boolean => event.newState.lc < (plcLt ?? 0);\n },\n lcLe: (pattern: Pattern): PatternEventCompareFunction => {\n const plcLe = pattern.lcLe;\n return (event: EventObj): boolean => event.newState.lc <= (plcLe ?? 0);\n },\n\n oldLc: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLc = pattern.oldLc;\n return (event: EventObj): boolean => pOldLc === event.oldState.lc;\n },\n oldLcGt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcGt = pattern.oldLcGt;\n return (event: EventObj): boolean => event.oldState.lc > (pOldLcGt ?? 0);\n },\n oldLcGe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcGe = pattern.oldLcGe;\n return (event: EventObj): boolean => event.oldState.lc >= (pOldLcGe ?? 0);\n },\n oldLcLt: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcLt = pattern.oldLcLt;\n return (event: EventObj): boolean => event.oldState.lc < (pOldLcLt ?? 0);\n },\n oldLcLe: (pattern: Pattern): PatternEventCompareFunction => {\n const pOldLcLe = pattern.oldLcLe;\n return (event: EventObj): boolean => event.oldState.lc <= (pOldLcLe ?? 0);\n },\n\n from: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'from', event => event && event.newState && event.newState.from),\n\n fromNe: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'fromNe', event => event && event.newState && event.newState.from, true),\n\n oldFrom: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'oldFrom', event => event && event.oldState && event.oldState.from),\n\n oldFromNe: (pattern: Pattern): PatternEventCompareFunction =>\n stringOrRegExpCompare(pattern, 'oldFromNe', event => event && event.oldState && event.oldState.from, true),\n\n channelId: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'channelId'),\n channelName: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'channelName'),\n deviceId: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'deviceId'),\n deviceName: (pattern: Pattern): PatternEventCompareFunction => stringOrRegExpCompare(pattern, 'deviceName'),\n\n enumId: (pattern: Pattern): PatternEventCompareFunction => {\n const pEnumId: RegExp | string | string[] | undefined = pattern.enumId;\n\n function ensureEnumIDsIsArray(enumIds: any): boolean {\n if (!Array.isArray(enumIds)) {\n console.error(\n `enumIds is of type ${typeof enumIds} but should be an array: ${JSON.stringify(enumIds)}`,\n );\n return false;\n }\n return true;\n }\n\n if (isRegExp(pEnumId)) {\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n // Test if any enum name matches the regex:\n return enumIds.find(e => (pEnumId as RegExp).test(e)) != null;\n };\n }\n\n if (Array.isArray(pEnumId)) {\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n // Test if the enum names of the event and the given array intersect\n return enumIds.find(e => pEnumId.includes(e)) != null;\n };\n }\n\n return (event: EventObj): boolean => {\n const enumIds = event.enumIds;\n if (enumIds == null || !ensureEnumIDsIsArray(enumIds)) {\n return false;\n }\n return enumIds && enumIds.includes(pEnumId as string);\n };\n },\n\n enumName: (pattern: Pattern): PatternEventCompareFunction => {\n const pEnumName: RegExp | string | string[] | undefined = pattern.enumName;\n\n function ensureEnumNamesIsArray(enumNames: any): boolean {\n if (!Array.isArray(enumNames)) {\n console.error(\n `enumNames is of type ${typeof enumNames} but should be an array: ${JSON.stringify(enumNames)}`,\n );\n return false;\n }\n return true;\n }\n\n if (isRegExp(pEnumName)) {\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n // Test if any enum name matches the regex:\n return enumNames.find(e => (pEnumName as RegExp).test(e)) != null;\n };\n }\n if (Array.isArray(pEnumName)) {\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n // Test if the enum names of the event and the given array intersect\n return enumNames.find(e => pEnumName.includes(e)) != null;\n };\n }\n\n return (event: EventObj): boolean => {\n const enumNames = event.enumNames;\n if (enumNames == null || !ensureEnumNamesIsArray(enumNames)) {\n return false;\n }\n return enumNames?.includes(pEnumName as string);\n };\n },\n};\n"]}
@@ -53,9 +53,6 @@ class Scheduler {
53
53
  info: function (text) {
54
54
  console.log(text);
55
55
  },
56
- log: function (text) {
57
- console.log(text);
58
- },
59
56
  warn: function (text) {
60
57
  console.warn(text);
61
58
  },
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/lib/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["// const DEFAULT = {\n// time: {\n// exactTime: false,\n//\n// start: '00:00',\n// end: '23:59',\n//\n// mode: 'hours',\n// interval: 1,\n// },\n// period: {\n// once: '',\n// days: 1,\n// dows: '',\n// dates: '',\n// weeks: 0,\n// months: '',\n//\n// years: 0,\n// yearMonth: 0,\n// yearDate: 0,\n// },\n// valid: {\n// from: '',\n// to: ''\n// }\n// };\n\nimport type {\n GetMoonIlluminationResult,\n GetMoonPositionResult,\n GetMoonTimes,\n GetSunPositionResult,\n GetTimesResult,\n} from 'suncalc';\n\ninterface SunCalc {\n getTimes: (date: Date, latitude: number, longitude: number, height?: number) => GetTimesResult;\n addTime: (angleInDegrees: number, morningName: string, eveningName: string) => void;\n getPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetSunPositionResult;\n getMoonPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetMoonPositionResult;\n getMoonIllumination: (timeAndDate: Date) => GetMoonIlluminationResult;\n getMoonTimes: (date: Date, latitude: number, longitude: number, inUTC?: boolean) => GetMoonTimes;\n}\n\nexport type AstroEventName =\n | 'dawn'\n | 'dusk'\n | 'goldenHour'\n | 'goldenHourEnd'\n | 'nadir'\n | 'nauticalDawn'\n | 'nauticalDusk'\n | 'night'\n | 'nightEnd'\n | 'solarNoon'\n | 'sunrise'\n | 'sunriseEnd'\n | 'sunset'\n | 'sunsetStart';\n\ntype AstroEventNameLow =\n | 'dawn'\n | 'dusk'\n | 'goldenhour'\n | 'goldenhourend'\n | 'nadir'\n | 'nauticaldawn'\n | 'nauticaldusk'\n | 'night'\n | 'nightend'\n | 'solarnoon'\n | 'sunrise'\n | 'sunriseend'\n | 'sunset'\n | 'sunsetstart';\n\ntype SchedulerContext = {\n now: number;\n minutesOfDay: number;\n y: number;\n M: number;\n d: number;\n h: number;\n m: number;\n dow: number;\n};\n\nexport type SchedulerRule = {\n time: {\n start?: string;\n end?: string;\n mode?: 'minutes' | 'hours';\n interval?: number;\n exactTime?: boolean;\n };\n period: {\n once?: string;\n\n days?: number;\n dows?: string;\n dates?: string;\n weeks?: number;\n months?: string;\n\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n };\n valid?: {\n from?: string;\n to?: string;\n };\n};\n\ntype SchedulerRuleParsed = {\n id: string;\n original: string;\n period: {\n fromDate?: Date;\n months?: number | number[];\n days?: number;\n dows?: number[];\n weeks?: number;\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n dates?: number[];\n once?: { y: number; M: number; d: number };\n };\n time?: {\n exactTime: boolean;\n start: number | AstroEventName;\n end: number | AstroEventName;\n mode: 60 | 3600;\n interval: number;\n };\n valid?: {\n from?: { y: number; M: number; d: number };\n to?: { y: number; M: number; d: number };\n fromDate?: number | Date;\n };\n scriptName: string;\n cb: (id: string) => void;\n};\n\nexport type ScheduleName = {\n id: `schedule_${string}`;\n type: 'schedule';\n schedule: string;\n scriptName: string;\n};\n\nexport class Scheduler {\n private readonly list: Record<string, SchedulerRuleParsed>;\n private readonly Date: typeof Date;\n private readonly suncalc: SunCalc;\n private readonly latitude: number;\n private readonly longitude: number;\n private log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n };\n private timer: NodeJS.Timeout | null = null;\n private todaysAstroTimes: Record<AstroEventName, Date>;\n private yesterdaysAstroTimes: Record<AstroEventName, Date>;\n private readonly astroList: AstroEventName[] | undefined;\n private astroListLow: AstroEventNameLow[] | undefined;\n\n constructor(\n log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n },\n DateTest: typeof Date | null,\n suncalc: SunCalc,\n latitude: number,\n longitude: number,\n ) {\n this.list = {};\n this.Date = DateTest || Date;\n this.suncalc = suncalc;\n this.latitude = latitude;\n this.longitude = longitude;\n this.log = log || {\n debug: function (text: string): void {\n console.log(text);\n },\n info: function (text: string): void {\n console.log(text);\n },\n log: function (text: string): void {\n console.log(text);\n },\n warn: function (text: string): void {\n console.warn(text);\n },\n error: function (text: string): void {\n console.error(text);\n },\n silly: function (text: string): void {\n console.log(text);\n },\n };\n\n // this._setAstroVars();\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n\n this.astroList = [\n 'dawn',\n 'dusk',\n 'goldenHour',\n 'goldenHourEnd',\n 'nadir',\n 'nauticalDawn',\n 'nauticalDusk',\n 'night',\n 'nightEnd',\n 'solarNoon',\n 'sunrise',\n 'sunriseEnd',\n 'sunset',\n 'sunsetStart',\n ];\n this.astroListLow = [\n 'dawn',\n 'dusk',\n 'goldenhour',\n 'goldenhourend',\n 'nadir',\n 'nauticaldawn',\n 'nauticaldusk',\n 'night',\n 'nightend',\n 'solarnoon',\n 'sunrise',\n 'sunriseend',\n 'sunset',\n 'sunsetstart',\n ];\n }\n\n _getId(): string {\n return `${Math.round(Math.random() * 1000000)}.${this.Date.now()}`;\n }\n\n recalculate(): void {\n const count = Object.keys(this.list).length;\n if (count && !this.timer) {\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n } else if (!count && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n getContext(): SchedulerContext {\n const now = new this.Date();\n return {\n now: now.getTime(),\n minutesOfDay: now.getHours() * 60 + now.getMinutes(),\n y: now.getFullYear(),\n M: now.getMonth(),\n d: now.getDate(),\n h: now.getHours(),\n m: now.getMinutes(),\n dow: now.getDay(),\n };\n }\n\n checkSchedules(notBeforeTime?: number): void {\n const context = this.getContext();\n\n // Work around for not those precise RTCs in some system\n if (notBeforeTime !== undefined && context.now < notBeforeTime) {\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n notBeforeTime - this.Date.now(),\n notBeforeTime,\n );\n return;\n }\n\n for (const id in this.list) {\n if (!Object.prototype.hasOwnProperty.call(this.list, id)) {\n continue;\n }\n if (this.checkSchedule(context, this.list[id])) {\n setImmediate(id => this.list[id] && typeof this.list[id].cb === 'function' && this.list[id].cb(id), id);\n }\n }\n\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n }\n\n monthDiff(d1: Date, d2: Date): number {\n let months: number;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n }\n\n checkSchedule(context: SchedulerContext, schedule: SchedulerRuleParsed): boolean {\n if (schedule.valid) {\n if (\n schedule.valid.from &&\n !this.isPast(context, schedule.valid.from) &&\n !this.isToday(context, schedule.valid.from)\n ) {\n return false;\n }\n // \"to\" this.Date is in the past => delete it from a list\n if (schedule.valid.to && this.isPast(context, schedule.valid.to)) {\n delete this.list[schedule.id];\n return false;\n }\n }\n if (schedule.period) {\n if (schedule.period.once && !this.isToday(context, schedule.period.once)) {\n if (this.isPast(context, schedule.period.once)) {\n delete this.list[schedule.id];\n }\n return false;\n } else if (schedule.period.days) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n } else if (schedule.period.days > 1) {\n // @ts-expect-error period of days cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24) + 0.5);\n if (diff % schedule.period.days) {\n return false;\n }\n }\n } else if (schedule.period.weeks) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n }\n if (schedule.period.weeks > 1) {\n // @ts-expect-error period of weeks cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24 * 7) + 0.5);\n if (diff % schedule.period.weeks) {\n return false;\n }\n }\n } else if (schedule.period.months) {\n if (Array.isArray(schedule.period.months) && !schedule.period.months.includes(context.M)) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.months === 'number' &&\n schedule.period.months > 1\n ) {\n const diff = this.monthDiff(schedule.period.fromDate, new this.Date(context.now));\n if (diff % schedule.period.months) {\n return false;\n }\n }\n if (schedule.period.dates && !schedule.period.dates.includes(context.d)) {\n return false;\n }\n } else if (schedule.period.years) {\n if (schedule.period.yearMonth !== undefined && schedule.period.yearMonth !== context.M) {\n return false;\n }\n if (schedule.period.yearDate && schedule.period.yearDate !== context.d) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.years === 'number' &&\n schedule.period.years > 1\n ) {\n const diff = Math.floor(this.monthDiff(schedule.period.fromDate, new this.Date(context.now)) / 12);\n if (diff % schedule.period.years) {\n return false;\n }\n }\n }\n }\n\n if (schedule.time) {\n let start: number;\n let end: number;\n const now = new this.Date(context.now);\n if (now.getDate() !== this.todaysAstroTimes.sunrise.getDate()) {\n this._setAstroVars();\n }\n if (typeof schedule.time.start === 'string') {\n const astroNameStart = this._getAstroName(schedule.time.start);\n if (astroNameStart) {\n let times = this.todaysAstroTimes;\n\n if (times[astroNameStart].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const startDate: Date = times[astroNameStart];\n start = startDate.getHours() * 60 + startDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.start}\"`);\n return false;\n }\n } else {\n start = schedule.time.start;\n }\n if (typeof schedule.time.end === 'string') {\n const astroNameEnd = this._getAstroName(schedule.time.end);\n if (astroNameEnd) {\n let times = this.todaysAstroTimes;\n if (times[astroNameEnd].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const endDate: Date = times[astroNameEnd];\n end = endDate.getHours() * 60 + endDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.end}\"`);\n return false;\n }\n } else {\n end = schedule.time.end;\n }\n\n start = start || 0;\n end = end || 60 * 24;\n\n if (schedule.time.exactTime) {\n if (context.minutesOfDay !== start) {\n return false;\n }\n } else {\n if (start >= context.minutesOfDay || (end && end < context.minutesOfDay)) {\n return false;\n }\n if (schedule.time.mode === 60) {\n if (schedule.time.interval > 1 && (context.minutesOfDay - start) % schedule.time.interval) {\n return false;\n }\n } else if (schedule.time.mode === 3600) {\n if ((context.minutesOfDay - start) % (schedule.time.interval * 60)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n string2date(date: string): { y: number; M: number; d: number } {\n let parts = date.split('.');\n let d: Date;\n if (parts.length !== 3) {\n parts = date.split('-');\n d = new this.Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n } else {\n d = new this.Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));\n }\n return { y: d.getFullYear(), M: d.getMonth(), d: d.getDate() };\n }\n\n isPast(context: SchedulerContext, date: { y: number; M: number; d: number } | undefined): boolean {\n if (date) {\n if (date.y < context.y) {\n return true;\n }\n if (date.y === context.y) {\n if (date.M < context.M) {\n return true;\n }\n if (date.M === context.M) {\n if (date.d < context.d) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n isToday(context: SchedulerContext, date: { y: number; M: number; d: number }): boolean {\n return date && date.y === context.y && date.M === context.M && date.d === context.d;\n }\n\n add(schedule: SchedulerRule | string, scriptName: string, cb: (id: string) => void): string | null {\n let oSchedule: SchedulerRule;\n if (typeof schedule === 'string') {\n try {\n oSchedule = JSON.parse(schedule);\n } catch {\n this.log.error(`Cannot parse schedule: ${schedule}`);\n return null;\n }\n } else {\n oSchedule = schedule;\n }\n\n const id = this._getId();\n if (typeof oSchedule !== 'object' || !oSchedule.period) {\n this.log.error(`Invalid schedule structure: ${JSON.stringify(oSchedule)}`);\n return null;\n }\n const context = this.getContext();\n const sch: SchedulerRuleParsed = JSON.parse(JSON.stringify(oSchedule));\n sch.scriptName = scriptName;\n sch.original = JSON.stringify(oSchedule);\n sch.id = id;\n sch.cb = cb;\n\n if (oSchedule.time?.start) {\n const astroNameStart = this._getAstroName(oSchedule.time.start);\n if (astroNameStart && sch.time) {\n sch.time.start = astroNameStart;\n } else if (oSchedule.time.start.includes(':')) {\n const parts = oSchedule.time.start.split(':');\n if (sch.time) {\n sch.time.start = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.start}\"`);\n return null;\n }\n }\n\n if (oSchedule.time?.end) {\n const astroNameEnd = this._getAstroName(oSchedule.time.end);\n if (astroNameEnd && sch.time) {\n sch.time.end = astroNameEnd;\n } else if (oSchedule.time.end.includes(':')) {\n const parts = oSchedule.time.end.split(':');\n if (sch.time) {\n sch.time.end = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.end}\"`);\n return null;\n }\n }\n\n if (sch.time) {\n if (oSchedule.time.mode === 'minutes') {\n sch.time.mode = 60;\n } else if (oSchedule.time.mode === 'hours') {\n sch.time.mode = 3600;\n }\n }\n\n if (oSchedule.period.once) {\n sch.period.once = this.string2date(oSchedule.period.once);\n }\n\n if (oSchedule.valid && sch.valid) {\n if (oSchedule.valid.from) {\n sch.valid.from = this.string2date(oSchedule.valid.from);\n }\n if (oSchedule.valid.to) {\n sch.valid.to = this.string2date(oSchedule.valid.to);\n }\n\n if (this.isPast(context, sch.valid.to)) {\n this.log.warn('End of schedule is in the past');\n return null;\n }\n\n if (typeof oSchedule.period.days === 'number' && oSchedule.period.days > 1 && sch.valid.from) {\n // fromDate must be unix time\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d).getTime();\n } else if (typeof oSchedule.period.weeks === 'number' && oSchedule.period.weeks > 1) {\n const fromDate: Date = sch.valid.from\n ? new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d)\n : new this.Date();\n //sch.valid.fromDate.setDate(-sch.valid.fromDate.getDate() - sch.valid.fromDate.getDay());\n // fromDate must be unix time\n sch.valid.fromDate = fromDate.getTime();\n } else if (sch.valid.from && typeof oSchedule.period.months === 'number' && oSchedule.period.months > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n } else if (sch.valid.from && typeof oSchedule.period.years === 'number' && oSchedule.period.years > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n }\n }\n if (\n sch.period &&\n ((typeof sch.period.days === 'number' && sch.period.days > 1) ||\n (typeof sch.period.weeks === 'number' && sch.period.weeks > 1) ||\n (typeof sch.period.months === 'number' && sch.period.months > 1) ||\n (typeof sch.period.years === 'number' && sch.period.years > 1)) &&\n (!sch.valid || !sch.valid.fromDate)\n ) {\n this.log.warn(\n 'Invalid Schedule definition: Period day/weeks/months/years only allowed with a valid.from date!',\n );\n return null;\n }\n\n if (oSchedule.period.dows) {\n try {\n sch.period.dows = JSON.parse(oSchedule.period.dows);\n } catch {\n this.log.error(`Cannot parse day of weeks: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n if (!Array.isArray(sch.period.dows)) {\n this.log.error(`day of weeks is no array: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n }\n\n if (oSchedule.period.months && typeof oSchedule.period.months !== 'number') {\n // can be number or array-string\n try {\n sch.period.months = JSON.parse(oSchedule.period.months) as number[];\n } catch {\n this.log.error(`Cannot parse day of months: ${JSON.stringify(sch.period.months)}`);\n return null;\n }\n sch.period.months = sch.period.months.map(m => m - 1);\n }\n\n if (oSchedule.period.dates) {\n try {\n sch.period.dates = JSON.parse(oSchedule.period.dates) as number[];\n } catch {\n this.log.error(`Cannot parse day of dates: ${JSON.stringify(sch.period.dates)}`);\n return null;\n }\n }\n if (oSchedule.period.yearMonth) {\n sch.period.yearMonth = oSchedule.period.yearMonth - 1;\n }\n this.list[id] = sch;\n this.recalculate();\n return id;\n }\n\n remove(id: string | ScheduleName): boolean {\n if (\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n if (this.list[id.id.substring('schedule_'.length)]) {\n delete this.list[id.id.substring('schedule_'.length)];\n this.recalculate();\n return true;\n }\n return false;\n }\n if (typeof id === 'string' && this.list[id]) {\n delete this.list[id];\n this.recalculate();\n return true;\n }\n return false;\n }\n\n getList(): ScheduleName[] {\n return Object.keys(this.list).map(id => ({\n id: `schedule_${id}`,\n type: 'schedule',\n schedule: this.list[id].original,\n scriptName: this.list[id].scriptName,\n }));\n }\n\n get(id: string | ScheduleName): SchedulerRuleParsed | null {\n if (\n id &&\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n return this.list[id.id.substring('schedule_'.length)];\n }\n if (typeof id === 'string') {\n return this.list[id];\n }\n return null;\n }\n\n private _setAstroVars(): void {\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n }\n\n private _getAstroName(evt: string): AstroEventName | null {\n if (typeof evt === 'string') {\n const pos = (this.astroListLow as string[]).indexOf(evt.toLowerCase() as AstroEventNameLow);\n if (pos > -1) {\n return (this.astroList as string[])[pos] as AstroEventName;\n }\n }\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/lib/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["// const DEFAULT = {\n// time: {\n// exactTime: false,\n//\n// start: '00:00',\n// end: '23:59',\n//\n// mode: 'hours',\n// interval: 1,\n// },\n// period: {\n// once: '',\n// days: 1,\n// dows: '',\n// dates: '',\n// weeks: 0,\n// months: '',\n//\n// years: 0,\n// yearMonth: 0,\n// yearDate: 0,\n// },\n// valid: {\n// from: '',\n// to: ''\n// }\n// };\n\nimport type {\n GetMoonIlluminationResult,\n GetMoonPositionResult,\n GetMoonTimes,\n GetSunPositionResult,\n GetTimesResult,\n} from 'suncalc';\n\ninterface SunCalc {\n getTimes: (date: Date, latitude: number, longitude: number, height?: number) => GetTimesResult;\n addTime: (angleInDegrees: number, morningName: string, eveningName: string) => void;\n getPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetSunPositionResult;\n getMoonPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetMoonPositionResult;\n getMoonIllumination: (timeAndDate: Date) => GetMoonIlluminationResult;\n getMoonTimes: (date: Date, latitude: number, longitude: number, inUTC?: boolean) => GetMoonTimes;\n}\n\nexport type AstroEventName =\n | 'dawn'\n | 'dusk'\n | 'goldenHour'\n | 'goldenHourEnd'\n | 'nadir'\n | 'nauticalDawn'\n | 'nauticalDusk'\n | 'night'\n | 'nightEnd'\n | 'solarNoon'\n | 'sunrise'\n | 'sunriseEnd'\n | 'sunset'\n | 'sunsetStart';\n\ntype AstroEventNameLow =\n | 'dawn'\n | 'dusk'\n | 'goldenhour'\n | 'goldenhourend'\n | 'nadir'\n | 'nauticaldawn'\n | 'nauticaldusk'\n | 'night'\n | 'nightend'\n | 'solarnoon'\n | 'sunrise'\n | 'sunriseend'\n | 'sunset'\n | 'sunsetstart';\n\ntype SchedulerContext = {\n now: number;\n minutesOfDay: number;\n y: number;\n M: number;\n d: number;\n h: number;\n m: number;\n dow: number;\n};\n\nexport type SchedulerRule = {\n time: {\n start?: string;\n end?: string;\n mode?: 'minutes' | 'hours';\n interval?: number;\n exactTime?: boolean;\n };\n period: {\n once?: string;\n\n days?: number;\n dows?: string;\n dates?: string;\n weeks?: number;\n months?: string;\n\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n };\n valid?: {\n from?: string;\n to?: string;\n };\n};\n\ntype SchedulerRuleParsed = {\n id: string;\n original: string;\n period: {\n fromDate?: Date;\n months?: number | number[];\n days?: number;\n dows?: number[];\n weeks?: number;\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n dates?: number[];\n once?: { y: number; M: number; d: number };\n };\n time?: {\n exactTime: boolean;\n start: number | AstroEventName;\n end: number | AstroEventName;\n mode: 60 | 3600;\n interval: number;\n };\n valid?: {\n from?: { y: number; M: number; d: number };\n to?: { y: number; M: number; d: number };\n fromDate?: number | Date;\n };\n scriptName: string;\n cb: (id: string) => void;\n};\n\nexport type ScheduleName = {\n id: `schedule_${string}`;\n type: 'schedule';\n schedule: string;\n scriptName: string;\n};\n\nexport class Scheduler {\n private readonly list: Record<string, SchedulerRuleParsed>;\n private readonly Date: typeof Date;\n private readonly suncalc: SunCalc;\n private readonly latitude: number;\n private readonly longitude: number;\n private log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n };\n private timer: NodeJS.Timeout | null = null;\n private todaysAstroTimes: Record<AstroEventName, Date>;\n private yesterdaysAstroTimes: Record<AstroEventName, Date>;\n private readonly astroList: AstroEventName[] | undefined;\n private astroListLow: AstroEventNameLow[] | undefined;\n\n constructor(\n log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n },\n DateTest: typeof Date | null,\n suncalc: SunCalc,\n latitude: number,\n longitude: number,\n ) {\n this.list = {};\n this.Date = DateTest || Date;\n this.suncalc = suncalc;\n this.latitude = latitude;\n this.longitude = longitude;\n this.log = log || {\n debug: function (text: string): void {\n console.log(text);\n },\n info: function (text: string): void {\n console.log(text);\n },\n warn: function (text: string): void {\n console.warn(text);\n },\n error: function (text: string): void {\n console.error(text);\n },\n silly: function (text: string): void {\n console.log(text);\n },\n };\n\n // this._setAstroVars();\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n\n this.astroList = [\n 'dawn',\n 'dusk',\n 'goldenHour',\n 'goldenHourEnd',\n 'nadir',\n 'nauticalDawn',\n 'nauticalDusk',\n 'night',\n 'nightEnd',\n 'solarNoon',\n 'sunrise',\n 'sunriseEnd',\n 'sunset',\n 'sunsetStart',\n ];\n this.astroListLow = [\n 'dawn',\n 'dusk',\n 'goldenhour',\n 'goldenhourend',\n 'nadir',\n 'nauticaldawn',\n 'nauticaldusk',\n 'night',\n 'nightend',\n 'solarnoon',\n 'sunrise',\n 'sunriseend',\n 'sunset',\n 'sunsetstart',\n ];\n }\n\n _getId(): string {\n return `${Math.round(Math.random() * 1000000)}.${this.Date.now()}`;\n }\n\n recalculate(): void {\n const count = Object.keys(this.list).length;\n if (count && !this.timer) {\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n } else if (!count && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n getContext(): SchedulerContext {\n const now = new this.Date();\n return {\n now: now.getTime(),\n minutesOfDay: now.getHours() * 60 + now.getMinutes(),\n y: now.getFullYear(),\n M: now.getMonth(),\n d: now.getDate(),\n h: now.getHours(),\n m: now.getMinutes(),\n dow: now.getDay(),\n };\n }\n\n checkSchedules(notBeforeTime?: number): void {\n const context = this.getContext();\n\n // Work around for not those precise RTCs in some system\n if (notBeforeTime !== undefined && context.now < notBeforeTime) {\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n notBeforeTime - this.Date.now(),\n notBeforeTime,\n );\n return;\n }\n\n for (const id in this.list) {\n if (!Object.prototype.hasOwnProperty.call(this.list, id)) {\n continue;\n }\n if (this.checkSchedule(context, this.list[id])) {\n setImmediate(id => this.list[id] && typeof this.list[id].cb === 'function' && this.list[id].cb(id), id);\n }\n }\n\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n }\n\n monthDiff(d1: Date, d2: Date): number {\n let months: number;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n }\n\n checkSchedule(context: SchedulerContext, schedule: SchedulerRuleParsed): boolean {\n if (schedule.valid) {\n if (\n schedule.valid.from &&\n !this.isPast(context, schedule.valid.from) &&\n !this.isToday(context, schedule.valid.from)\n ) {\n return false;\n }\n // \"to\" this.Date is in the past => delete it from a list\n if (schedule.valid.to && this.isPast(context, schedule.valid.to)) {\n delete this.list[schedule.id];\n return false;\n }\n }\n if (schedule.period) {\n if (schedule.period.once && !this.isToday(context, schedule.period.once)) {\n if (this.isPast(context, schedule.period.once)) {\n delete this.list[schedule.id];\n }\n return false;\n } else if (schedule.period.days) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n } else if (schedule.period.days > 1) {\n // @ts-expect-error period of days cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24) + 0.5);\n if (diff % schedule.period.days) {\n return false;\n }\n }\n } else if (schedule.period.weeks) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n }\n if (schedule.period.weeks > 1) {\n // @ts-expect-error period of weeks cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24 * 7) + 0.5);\n if (diff % schedule.period.weeks) {\n return false;\n }\n }\n } else if (schedule.period.months) {\n if (Array.isArray(schedule.period.months) && !schedule.period.months.includes(context.M)) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.months === 'number' &&\n schedule.period.months > 1\n ) {\n const diff = this.monthDiff(schedule.period.fromDate, new this.Date(context.now));\n if (diff % schedule.period.months) {\n return false;\n }\n }\n if (schedule.period.dates && !schedule.period.dates.includes(context.d)) {\n return false;\n }\n } else if (schedule.period.years) {\n if (schedule.period.yearMonth !== undefined && schedule.period.yearMonth !== context.M) {\n return false;\n }\n if (schedule.period.yearDate && schedule.period.yearDate !== context.d) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.years === 'number' &&\n schedule.period.years > 1\n ) {\n const diff = Math.floor(this.monthDiff(schedule.period.fromDate, new this.Date(context.now)) / 12);\n if (diff % schedule.period.years) {\n return false;\n }\n }\n }\n }\n\n if (schedule.time) {\n let start: number;\n let end: number;\n const now = new this.Date(context.now);\n if (now.getDate() !== this.todaysAstroTimes.sunrise.getDate()) {\n this._setAstroVars();\n }\n if (typeof schedule.time.start === 'string') {\n const astroNameStart = this._getAstroName(schedule.time.start);\n if (astroNameStart) {\n let times = this.todaysAstroTimes;\n\n if (times[astroNameStart].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const startDate: Date = times[astroNameStart];\n start = startDate.getHours() * 60 + startDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.start}\"`);\n return false;\n }\n } else {\n start = schedule.time.start;\n }\n if (typeof schedule.time.end === 'string') {\n const astroNameEnd = this._getAstroName(schedule.time.end);\n if (astroNameEnd) {\n let times = this.todaysAstroTimes;\n if (times[astroNameEnd].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const endDate: Date = times[astroNameEnd];\n end = endDate.getHours() * 60 + endDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.end}\"`);\n return false;\n }\n } else {\n end = schedule.time.end;\n }\n\n start = start || 0;\n end = end || 60 * 24;\n\n if (schedule.time.exactTime) {\n if (context.minutesOfDay !== start) {\n return false;\n }\n } else {\n if (start >= context.minutesOfDay || (end && end < context.minutesOfDay)) {\n return false;\n }\n if (schedule.time.mode === 60) {\n if (schedule.time.interval > 1 && (context.minutesOfDay - start) % schedule.time.interval) {\n return false;\n }\n } else if (schedule.time.mode === 3600) {\n if ((context.minutesOfDay - start) % (schedule.time.interval * 60)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n string2date(date: string): { y: number; M: number; d: number } {\n let parts = date.split('.');\n let d: Date;\n if (parts.length !== 3) {\n parts = date.split('-');\n d = new this.Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n } else {\n d = new this.Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));\n }\n return { y: d.getFullYear(), M: d.getMonth(), d: d.getDate() };\n }\n\n isPast(context: SchedulerContext, date: { y: number; M: number; d: number } | undefined): boolean {\n if (date) {\n if (date.y < context.y) {\n return true;\n }\n if (date.y === context.y) {\n if (date.M < context.M) {\n return true;\n }\n if (date.M === context.M) {\n if (date.d < context.d) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n isToday(context: SchedulerContext, date: { y: number; M: number; d: number }): boolean {\n return date && date.y === context.y && date.M === context.M && date.d === context.d;\n }\n\n add(schedule: SchedulerRule | string, scriptName: string, cb: (id: string) => void): string | null {\n let oSchedule: SchedulerRule;\n if (typeof schedule === 'string') {\n try {\n oSchedule = JSON.parse(schedule);\n } catch {\n this.log.error(`Cannot parse schedule: ${schedule}`);\n return null;\n }\n } else {\n oSchedule = schedule;\n }\n\n const id = this._getId();\n if (typeof oSchedule !== 'object' || !oSchedule.period) {\n this.log.error(`Invalid schedule structure: ${JSON.stringify(oSchedule)}`);\n return null;\n }\n const context = this.getContext();\n const sch: SchedulerRuleParsed = JSON.parse(JSON.stringify(oSchedule));\n sch.scriptName = scriptName;\n sch.original = JSON.stringify(oSchedule);\n sch.id = id;\n sch.cb = cb;\n\n if (oSchedule.time?.start) {\n const astroNameStart = this._getAstroName(oSchedule.time.start);\n if (astroNameStart && sch.time) {\n sch.time.start = astroNameStart;\n } else if (oSchedule.time.start.includes(':')) {\n const parts = oSchedule.time.start.split(':');\n if (sch.time) {\n sch.time.start = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.start}\"`);\n return null;\n }\n }\n\n if (oSchedule.time?.end) {\n const astroNameEnd = this._getAstroName(oSchedule.time.end);\n if (astroNameEnd && sch.time) {\n sch.time.end = astroNameEnd;\n } else if (oSchedule.time.end.includes(':')) {\n const parts = oSchedule.time.end.split(':');\n if (sch.time) {\n sch.time.end = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.end}\"`);\n return null;\n }\n }\n\n if (sch.time) {\n if (oSchedule.time.mode === 'minutes') {\n sch.time.mode = 60;\n } else if (oSchedule.time.mode === 'hours') {\n sch.time.mode = 3600;\n }\n }\n\n if (oSchedule.period.once) {\n sch.period.once = this.string2date(oSchedule.period.once);\n }\n\n if (oSchedule.valid && sch.valid) {\n if (oSchedule.valid.from) {\n sch.valid.from = this.string2date(oSchedule.valid.from);\n }\n if (oSchedule.valid.to) {\n sch.valid.to = this.string2date(oSchedule.valid.to);\n }\n\n if (this.isPast(context, sch.valid.to)) {\n this.log.warn('End of schedule is in the past');\n return null;\n }\n\n if (typeof oSchedule.period.days === 'number' && oSchedule.period.days > 1 && sch.valid.from) {\n // fromDate must be unix time\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d).getTime();\n } else if (typeof oSchedule.period.weeks === 'number' && oSchedule.period.weeks > 1) {\n const fromDate: Date = sch.valid.from\n ? new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d)\n : new this.Date();\n //sch.valid.fromDate.setDate(-sch.valid.fromDate.getDate() - sch.valid.fromDate.getDay());\n // fromDate must be unix time\n sch.valid.fromDate = fromDate.getTime();\n } else if (sch.valid.from && typeof oSchedule.period.months === 'number' && oSchedule.period.months > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n } else if (sch.valid.from && typeof oSchedule.period.years === 'number' && oSchedule.period.years > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n }\n }\n if (\n sch.period &&\n ((typeof sch.period.days === 'number' && sch.period.days > 1) ||\n (typeof sch.period.weeks === 'number' && sch.period.weeks > 1) ||\n (typeof sch.period.months === 'number' && sch.period.months > 1) ||\n (typeof sch.period.years === 'number' && sch.period.years > 1)) &&\n (!sch.valid || !sch.valid.fromDate)\n ) {\n this.log.warn(\n 'Invalid Schedule definition: Period day/weeks/months/years only allowed with a valid.from date!',\n );\n return null;\n }\n\n if (oSchedule.period.dows) {\n try {\n sch.period.dows = JSON.parse(oSchedule.period.dows);\n } catch {\n this.log.error(`Cannot parse day of weeks: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n if (!Array.isArray(sch.period.dows)) {\n this.log.error(`day of weeks is no array: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n }\n\n if (oSchedule.period.months && typeof oSchedule.period.months !== 'number') {\n // can be number or array-string\n try {\n sch.period.months = JSON.parse(oSchedule.period.months) as number[];\n } catch {\n this.log.error(`Cannot parse day of months: ${JSON.stringify(sch.period.months)}`);\n return null;\n }\n sch.period.months = sch.period.months.map(m => m - 1);\n }\n\n if (oSchedule.period.dates) {\n try {\n sch.period.dates = JSON.parse(oSchedule.period.dates) as number[];\n } catch {\n this.log.error(`Cannot parse day of dates: ${JSON.stringify(sch.period.dates)}`);\n return null;\n }\n }\n if (oSchedule.period.yearMonth) {\n sch.period.yearMonth = oSchedule.period.yearMonth - 1;\n }\n this.list[id] = sch;\n this.recalculate();\n return id;\n }\n\n remove(id: string | ScheduleName): boolean {\n if (\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n if (this.list[id.id.substring('schedule_'.length)]) {\n delete this.list[id.id.substring('schedule_'.length)];\n this.recalculate();\n return true;\n }\n return false;\n }\n if (typeof id === 'string' && this.list[id]) {\n delete this.list[id];\n this.recalculate();\n return true;\n }\n return false;\n }\n\n getList(): ScheduleName[] {\n return Object.keys(this.list).map(id => ({\n id: `schedule_${id}`,\n type: 'schedule',\n schedule: this.list[id].original,\n scriptName: this.list[id].scriptName,\n }));\n }\n\n get(id: string | ScheduleName): SchedulerRuleParsed | null {\n if (\n id &&\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n return this.list[id.id.substring('schedule_'.length)];\n }\n if (typeof id === 'string') {\n return this.list[id];\n }\n return null;\n }\n\n private _setAstroVars(): void {\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n }\n\n private _getAstroName(evt: string): AstroEventName | null {\n if (typeof evt === 'string') {\n const pos = (this.astroListLow as string[]).indexOf(evt.toLowerCase() as AstroEventNameLow);\n if (pos > -1) {\n return (this.astroList as string[])[pos] as AstroEventName;\n }\n }\n return null;\n }\n}\n"]}