@cleverbrush/scheduler 1.0.0-beta.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/dist/ScheduleCalculator.js +5 -6
- package/dist/ScheduleCalculator.js.map +1 -1
- package/dist/index.d.ts +39 -0
- package/dist/index.js +64 -33
- package/dist/index.js.map +1 -1
- package/dist/jobRepository.js +1 -5
- package/dist/jobRepository.js.map +1 -1
- package/dist/types.d.ts +652 -339
- package/dist/types.js +45 -61
- package/dist/types.js.map +1 -1
- package/package.json +31 -16
- package/src/ScheduleCalculator.test.ts +0 -484
- package/src/ScheduleCalculator.ts +0 -358
- package/src/index.ts +0 -522
- package/src/jobRepository.ts +0 -142
- package/src/types.ts +0 -228
- package/tsconfig.json +0 -17
package/dist/types.js
CHANGED
|
@@ -1,75 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const registry = new schema_1.SchemaRegistry()
|
|
6
|
-
.addPreprocessor('StringToDate', (value) => {
|
|
7
|
-
if (typeof value === 'undefined')
|
|
8
|
-
return value;
|
|
9
|
-
if (typeof value === 'string') {
|
|
10
|
-
const time = Date.parse(value);
|
|
11
|
-
if (Number.isNaN(time))
|
|
12
|
-
return value;
|
|
13
|
-
return new Date(time);
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
})
|
|
17
|
-
.addSchema('Common.Date', ({ object }) => object()
|
|
18
|
-
.mapToType()
|
|
19
|
-
.addValidator((value) => value instanceof Date && !Number.isNaN(value)
|
|
20
|
-
? {
|
|
21
|
-
valid: true
|
|
22
|
-
}
|
|
23
|
-
: {
|
|
24
|
-
valid: false,
|
|
25
|
-
errors: ['should be a valid Date object']
|
|
26
|
-
}))
|
|
27
|
-
.addSchema('Templates.Schedule', ({ object, number, alias }) => object({
|
|
28
|
-
/** Number of days between repeats */
|
|
1
|
+
import { date, object, func, number, string, array, union } from '@cleverbrush/schema';
|
|
2
|
+
const ScheduleSchemaBase = object({
|
|
3
|
+
/** Number of intervals (days, months, minutes or weeks)
|
|
4
|
+
* between repeats. Interval type depends of `every` value */
|
|
29
5
|
interval: number().min(1).max(356),
|
|
30
6
|
/** Hour (0-23) */
|
|
31
7
|
hour: number().min(0).max(23).optional(),
|
|
32
8
|
/** Minute (0-59) */
|
|
33
9
|
minute: number().min(0).max(59).optional(),
|
|
34
10
|
/** Do not start earlier than this date */
|
|
35
|
-
startsOn:
|
|
11
|
+
startsOn: date().acceptJsonString().optional(),
|
|
36
12
|
/** Do not repeat after this date */
|
|
37
|
-
endsOn:
|
|
13
|
+
endsOn: date().acceptJsonString().optional(),
|
|
38
14
|
/** Max number of repeats (min 1) */
|
|
39
15
|
maxOccurences: number().min(1).optional(),
|
|
40
16
|
/** Skip this number of repeats. Min value is 1. */
|
|
41
17
|
skipFirst: number().min(1).optional()
|
|
42
|
-
})
|
|
43
|
-
.setPropPreprocessor('endsOn', 'StringToDate')
|
|
44
|
-
.addValidator((val) => {
|
|
18
|
+
}).addValidator((val) => {
|
|
45
19
|
if ('endsOn' in val &&
|
|
46
20
|
'maxOccurences' in val &&
|
|
47
|
-
|
|
48
|
-
typeof val.endsOf !== 'undefined') {
|
|
21
|
+
typeof val.endsOn !== 'undefined') {
|
|
49
22
|
return {
|
|
50
23
|
valid: false,
|
|
51
|
-
errors: ['either endsOn or maxOccurences is required']
|
|
24
|
+
errors: [{ message: 'either endsOn or maxOccurences is required' }]
|
|
52
25
|
};
|
|
53
26
|
}
|
|
54
27
|
return { valid: true };
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
.
|
|
58
|
-
.removeProp('minute')
|
|
28
|
+
});
|
|
29
|
+
const ScheduleMinuteSchema = ScheduleSchemaBase.omit('hour')
|
|
30
|
+
.omit('minute')
|
|
59
31
|
.addProps({
|
|
60
32
|
/** Repeat every minute */
|
|
61
33
|
every: string('minute')
|
|
62
|
-
})
|
|
63
|
-
|
|
34
|
+
});
|
|
35
|
+
const ScheduleDaySchema = ScheduleSchemaBase.addProps({
|
|
64
36
|
/** Repeat every day */
|
|
65
37
|
every: string('day')
|
|
66
|
-
})
|
|
67
|
-
|
|
38
|
+
});
|
|
39
|
+
const ScheduleWeekSchema = ScheduleSchemaBase.addProps({
|
|
68
40
|
/** Repeat every week */
|
|
69
41
|
every: string('week'),
|
|
70
|
-
/**
|
|
42
|
+
/** Days of week for schedule */
|
|
71
43
|
dayOfWeek: array()
|
|
72
|
-
.
|
|
44
|
+
.of(number().min(1).max(7))
|
|
73
45
|
.minLength(1)
|
|
74
46
|
.maxLength(7)
|
|
75
47
|
.addValidator((val) => {
|
|
@@ -78,7 +50,7 @@ const registry = new schema_1.SchemaRegistry()
|
|
|
78
50
|
if (map[val[i]]) {
|
|
79
51
|
return {
|
|
80
52
|
valid: false,
|
|
81
|
-
errors: ['no duplicates allowed']
|
|
53
|
+
errors: [{ message: 'no duplicates allowed' }]
|
|
82
54
|
};
|
|
83
55
|
}
|
|
84
56
|
map[val[i]] = true;
|
|
@@ -87,34 +59,37 @@ const registry = new schema_1.SchemaRegistry()
|
|
|
87
59
|
valid: true
|
|
88
60
|
};
|
|
89
61
|
})
|
|
90
|
-
})
|
|
91
|
-
|
|
62
|
+
});
|
|
63
|
+
const ScheduleMonthSchema = ScheduleSchemaBase.addProps({
|
|
92
64
|
/** Repeat every month */
|
|
93
65
|
every: string('month'),
|
|
94
66
|
/** Day - 'last' or number from 1 to 28 */
|
|
95
|
-
day: union(string('last')
|
|
96
|
-
})
|
|
97
|
-
|
|
67
|
+
day: union(string('last')).or(number().min(1).max(28))
|
|
68
|
+
});
|
|
69
|
+
const ScheduleYearSchema = ScheduleSchemaBase.addProps({
|
|
98
70
|
/** Repeat every year */
|
|
99
71
|
every: string('year'),
|
|
100
72
|
/** Day - 'last' or number from 1 to 28 */
|
|
101
73
|
day: union(string('last')).or(number().min(1).max(28)),
|
|
102
74
|
/** Month - number from 1 to 12 */
|
|
103
75
|
month: number().min(1).max(12)
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
.
|
|
107
|
-
.
|
|
76
|
+
});
|
|
77
|
+
const ScheduleSchema = union(ScheduleMinuteSchema)
|
|
78
|
+
.or(ScheduleDaySchema)
|
|
79
|
+
.or(ScheduleWeekSchema)
|
|
80
|
+
.or(ScheduleMonthSchema)
|
|
81
|
+
.or(ScheduleYearSchema);
|
|
82
|
+
const CreateJobRequestSchema = object({
|
|
108
83
|
/** Id of job, must be uniq */
|
|
109
84
|
id: string(),
|
|
110
85
|
/** Path to js file (relative to root folder) */
|
|
111
86
|
path: string().minLength(1),
|
|
112
87
|
/** Job's schedule */
|
|
113
|
-
schedule:
|
|
88
|
+
schedule: ScheduleSchema,
|
|
114
89
|
/** Timeout for job (in milliseconds) */
|
|
115
90
|
timeout: number().min(0).optional(),
|
|
116
91
|
/** Arbitrary props for job (can be a callback returning props or Promise<props>) */
|
|
117
|
-
props: union(object().
|
|
92
|
+
props: union(object().acceptUnknownProps()).or(func()).optional(),
|
|
118
93
|
/** Job will be considered as disabled when more than that count of runs fails consequently
|
|
119
94
|
* unlimited if negative
|
|
120
95
|
*/
|
|
@@ -122,7 +97,16 @@ exports.schemaRegistry = registry
|
|
|
122
97
|
/**
|
|
123
98
|
* Job will be retried right away this times. Job will be retried on next schedule run if this number is exceeded.
|
|
124
99
|
*/
|
|
125
|
-
maxRetries: number().optional().min(
|
|
126
|
-
})
|
|
127
|
-
|
|
100
|
+
maxRetries: number().optional().min(1)
|
|
101
|
+
});
|
|
102
|
+
export const Schemas = {
|
|
103
|
+
ScheduleSchemaBase,
|
|
104
|
+
ScheduleSchema,
|
|
105
|
+
CreateJobRequestSchema,
|
|
106
|
+
ScheduleMinuteSchema,
|
|
107
|
+
ScheduleDaySchema,
|
|
108
|
+
ScheduleWeekSchema,
|
|
109
|
+
ScheduleMonthSchema,
|
|
110
|
+
ScheduleYearSchema
|
|
111
|
+
};
|
|
128
112
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@cleverbrush/scheduler",
|
|
3
|
-
"version": "1.0.0-beta.6",
|
|
4
|
-
"keywords": [
|
|
5
|
-
"task scheduler"
|
|
6
|
-
],
|
|
7
2
|
"author": "Andrew Zolotukhin <andrew_zol@cleverbrush.com>",
|
|
8
|
-
"
|
|
3
|
+
"bugs": {
|
|
4
|
+
"url": "https://github.com/cleverbrush/framework/issues",
|
|
5
|
+
"email": "andrew_zol@cleverbrush.com"
|
|
6
|
+
},
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@cleverbrush/schema": "1.1.0"
|
|
9
|
+
},
|
|
10
|
+
"description": "Job Scheduler for NodeJS",
|
|
9
11
|
"files": [
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://docs.cleverbrush.com/v1.0.0/modules/Job_Scheduler.html",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"task scheduler",
|
|
17
|
+
"task runner",
|
|
18
|
+
"scheduler",
|
|
19
|
+
"cleverbrush"
|
|
12
20
|
],
|
|
21
|
+
"license": "BSD 3-Clause",
|
|
13
22
|
"main": "./dist/index.js",
|
|
14
|
-
"
|
|
23
|
+
"name": "@cleverbrush/scheduler",
|
|
24
|
+
"readme": "https://github.com/cleverbrush/framework/tree/master/libs/scheduler#readme",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "github:cleverbrush/framework"
|
|
28
|
+
},
|
|
15
29
|
"scripts": {
|
|
16
30
|
"watch": "tsc --watch",
|
|
17
31
|
"build": "tsc"
|
|
18
32
|
},
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
33
|
+
"type": "module",
|
|
34
|
+
"typedoc": {
|
|
35
|
+
"entryPoint": "./src/index.ts",
|
|
36
|
+
"readmeFile": "./README.md",
|
|
37
|
+
"displayName": "Job Scheduler",
|
|
38
|
+
"tsconfig": "./tsconfig.json"
|
|
25
39
|
},
|
|
26
|
-
"types": "./dist/index.d.ts"
|
|
40
|
+
"types": "./dist/index.d.ts",
|
|
41
|
+
"version": "1.1.0"
|
|
27
42
|
}
|