@tachybase/module-cron 0.23.8

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/.turbo/turbo-build.log +14 -0
  2. package/README.md +1 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/components/EndsByField.d.ts +5 -0
  6. package/dist/client/components/FieldsSelect.d.ts +2 -0
  7. package/dist/client/components/OnField.d.ts +5 -0
  8. package/dist/client/components/RepeatField.d.ts +5 -0
  9. package/dist/client/components/locale/Cron.zh-CN.d.ts +34 -0
  10. package/dist/client/cron-jobs-table/CronJobsTable.d.ts +7 -0
  11. package/dist/client/cron-jobs-table/CronJobsTable.schema.d.ts +1241 -0
  12. package/dist/client/index.d.ts +7 -0
  13. package/dist/client/index.js +36 -0
  14. package/dist/client/locale.d.ts +3 -0
  15. package/dist/collections/cronJobs.d.ts +3 -0
  16. package/dist/collections/cronJobs.js +200 -0
  17. package/dist/constants.d.ts +6 -0
  18. package/dist/constants.js +37 -0
  19. package/dist/externalVersion.js +11 -0
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.js +39 -0
  22. package/dist/locale/en-US.json +36 -0
  23. package/dist/locale/zh-CN.json +36 -0
  24. package/dist/node_modules/cron-parser/LICENSE +21 -0
  25. package/dist/node_modules/cron-parser/lib/date.js +252 -0
  26. package/dist/node_modules/cron-parser/lib/expression.js +1002 -0
  27. package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
  28. package/dist/node_modules/cron-parser/lib/field_stringify.js +58 -0
  29. package/dist/node_modules/cron-parser/lib/parser.js +1 -0
  30. package/dist/node_modules/cron-parser/package.json +1 -0
  31. package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
  32. package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
  33. package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
  34. package/dist/server/actions/cron-jobs-controller.d.ts +4 -0
  35. package/dist/server/actions/cron-jobs-controller.js +94 -0
  36. package/dist/server/collections/cronJobs.d.ts +1 -0
  37. package/dist/server/collections/cronJobs.js +33 -0
  38. package/dist/server/index.d.ts +1 -0
  39. package/dist/server/index.js +33 -0
  40. package/dist/server/model/CronJobModel.d.ts +19 -0
  41. package/dist/server/model/CronJobModel.js +29 -0
  42. package/dist/server/plugin.d.ts +11 -0
  43. package/dist/server/plugin.js +104 -0
  44. package/dist/server/service/StaticScheduleTrigger.d.ts +15 -0
  45. package/dist/server/service/StaticScheduleTrigger.js +298 -0
  46. package/dist/server/utils/index.d.ts +1 -0
  47. package/dist/server/utils/index.js +29 -0
  48. package/package.json +23 -0
  49. package/server.d.ts +2 -0
  50. package/server.js +1 -0
@@ -0,0 +1,94 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
26
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
27
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
28
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
29
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
30
+ var __runInitializers = (array, flags, self, value) => {
31
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
32
+ return value;
33
+ };
34
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
35
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
36
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
37
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
38
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
39
+ return __privateGet(this, extra);
40
+ }, set [name](x) {
41
+ return __privateSet(this, extra, x);
42
+ } }, name));
43
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
44
+ for (var i = decorators.length - 1; i >= 0; i--) {
45
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
46
+ if (k) {
47
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
48
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
49
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
50
+ }
51
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
52
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
53
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
54
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
55
+ }
56
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
57
+ };
58
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
59
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
60
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
61
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
62
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
63
+ var cron_jobs_controller_exports = {};
64
+ __export(cron_jobs_controller_exports, {
65
+ CronJobsController: () => CronJobsController
66
+ });
67
+ module.exports = __toCommonJS(cron_jobs_controller_exports);
68
+ var import_utils = require("@tachybase/utils");
69
+ var _clearLimitExecuted_dec, _CronJobsController_decorators, _init;
70
+ _CronJobsController_decorators = [(0, import_utils.Controller)("cronJobs")], _clearLimitExecuted_dec = [(0, import_utils.Action)("clearLimitExecuted")];
71
+ class CronJobsController {
72
+ constructor() {
73
+ __runInitializers(_init, 5, this);
74
+ }
75
+ async clearLimitExecuted(ctx, next) {
76
+ const { id } = ctx.action.params;
77
+ await ctx.db.getRepository("cronJobs").update({
78
+ values: {
79
+ limitExecuted: 0
80
+ },
81
+ filter: {
82
+ id
83
+ }
84
+ });
85
+ }
86
+ }
87
+ _init = __decoratorStart(null);
88
+ __decorateElement(_init, 1, "clearLimitExecuted", _clearLimitExecuted_dec, CronJobsController);
89
+ CronJobsController = __decorateElement(_init, 0, "CronJobsController", _CronJobsController_decorators, CronJobsController);
90
+ __runInitializers(_init, 1, CronJobsController);
91
+ // Annotate the CommonJS export names for ESM import in node:
92
+ 0 && (module.exports = {
93
+ CronJobsController
94
+ });
@@ -0,0 +1 @@
1
+ export { default } from '../../collections/cronJobs';
@@ -0,0 +1,33 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var cronJobs_exports = {};
29
+ __export(cronJobs_exports, {
30
+ default: () => import_cronJobs.default
31
+ });
32
+ module.exports = __toCommonJS(cronJobs_exports);
33
+ var import_cronJobs = __toESM(require("../../collections/cronJobs"));
@@ -0,0 +1 @@
1
+ export { default } from './plugin';
@@ -0,0 +1,33 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var server_exports = {};
29
+ __export(server_exports, {
30
+ default: () => import_plugin.default
31
+ });
32
+ module.exports = __toCommonJS(server_exports);
33
+ var import_plugin = __toESM(require("./plugin"));
@@ -0,0 +1,19 @@
1
+ import { Model } from '@tachybase/database';
2
+ import { SCHEDULE_MODE } from '../../constants';
3
+ export declare class CronJobModel extends Model {
4
+ id: number;
5
+ title: string;
6
+ description?: string;
7
+ startsOn: Date;
8
+ mode: SCHEDULE_MODE;
9
+ endsOn?: Date;
10
+ repeat: string;
11
+ limit?: number;
12
+ enabled: boolean;
13
+ createdAt: Date;
14
+ updatedAt: Date;
15
+ allExecuted: number;
16
+ workflowKey: string;
17
+ nextTime?: Date;
18
+ limitExecuted: number;
19
+ }
@@ -0,0 +1,29 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var CronJobModel_exports = {};
19
+ __export(CronJobModel_exports, {
20
+ CronJobModel: () => CronJobModel
21
+ });
22
+ module.exports = __toCommonJS(CronJobModel_exports);
23
+ var import_database = require("@tachybase/database");
24
+ class CronJobModel extends import_database.Model {
25
+ }
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ CronJobModel
29
+ });
@@ -0,0 +1,11 @@
1
+ import { Plugin } from '@tachybase/server';
2
+ export declare class PluginCronJobServer extends Plugin {
3
+ afterAdd(): Promise<void>;
4
+ beforeLoad(): Promise<void>;
5
+ load(): Promise<void>;
6
+ install(): Promise<void>;
7
+ afterEnable(): Promise<void>;
8
+ afterDisable(): Promise<void>;
9
+ remove(): Promise<void>;
10
+ }
11
+ export default PluginCronJobServer;
@@ -0,0 +1,104 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
26
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
27
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
28
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
29
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
30
+ var __runInitializers = (array, flags, self, value) => {
31
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
32
+ return value;
33
+ };
34
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
35
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
36
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
37
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
38
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
39
+ return __privateGet(this, extra);
40
+ }, set [name](x) {
41
+ return __privateSet(this, extra, x);
42
+ } }, name));
43
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
44
+ for (var i = decorators.length - 1; i >= 0; i--) {
45
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
46
+ if (k) {
47
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
48
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
49
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
50
+ }
51
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
52
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
53
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
54
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
55
+ }
56
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
57
+ };
58
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
59
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
60
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
61
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
62
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
63
+ var plugin_exports = {};
64
+ __export(plugin_exports, {
65
+ PluginCronJobServer: () => PluginCronJobServer,
66
+ default: () => plugin_default
67
+ });
68
+ module.exports = __toCommonJS(plugin_exports);
69
+ var import_server = require("@tachybase/server");
70
+ var import_cron_jobs_controller = require("./actions/cron-jobs-controller");
71
+ var import_CronJobModel = require("./model/CronJobModel");
72
+ var import_StaticScheduleTrigger = require("./service/StaticScheduleTrigger");
73
+ var _PluginCronJobServer_decorators, _init, _a;
74
+ _PluginCronJobServer_decorators = [(0, import_server.InjectedPlugin)({
75
+ Controllers: [import_cron_jobs_controller.CronJobsController],
76
+ Services: [import_StaticScheduleTrigger.StaticScheduleTrigger]
77
+ })];
78
+ class PluginCronJobServer extends (_a = import_server.Plugin) {
79
+ async afterAdd() {
80
+ }
81
+ async beforeLoad() {
82
+ this.app.db.registerModels({
83
+ CronJobModel: import_CronJobModel.CronJobModel
84
+ });
85
+ }
86
+ async load() {
87
+ }
88
+ async install() {
89
+ }
90
+ async afterEnable() {
91
+ }
92
+ async afterDisable() {
93
+ }
94
+ async remove() {
95
+ }
96
+ }
97
+ _init = __decoratorStart(_a);
98
+ PluginCronJobServer = __decorateElement(_init, 0, "PluginCronJobServer", _PluginCronJobServer_decorators, PluginCronJobServer);
99
+ __runInitializers(_init, 1, PluginCronJobServer);
100
+ var plugin_default = PluginCronJobServer;
101
+ // Annotate the CommonJS export names for ESM import in node:
102
+ 0 && (module.exports = {
103
+ PluginCronJobServer
104
+ });
@@ -0,0 +1,15 @@
1
+ import { CronJobModel } from '../model/CronJobModel';
2
+ export declare class StaticScheduleTrigger {
3
+ private static readonly inspectFields;
4
+ private app;
5
+ private readonly db;
6
+ private readonly logger;
7
+ private timers;
8
+ load(): Promise<void>;
9
+ inspect(cronJobs: CronJobModel[]): void;
10
+ getNextTime(cronJob: CronJobModel, currentDate: Date, nextSecond?: boolean): number;
11
+ schedule(cronJob: CronJobModel, nextTime: number, toggle?: boolean): void;
12
+ trigger(cronJobId: number, time: number): Promise<void>;
13
+ on(cronJob: CronJobModel): void;
14
+ off(cronJob: CronJobModel): void;
15
+ }
@@ -0,0 +1,298 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
8
+ var __typeError = (msg) => {
9
+ throw TypeError(msg);
10
+ };
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+ var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
35
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
36
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
37
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
38
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
39
+ var __runInitializers = (array, flags, self, value) => {
40
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
41
+ return value;
42
+ };
43
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
44
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
45
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
46
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
47
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
48
+ return __privateGet(this, extra);
49
+ }, set [name](x) {
50
+ return __privateSet(this, extra, x);
51
+ } }, name));
52
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
53
+ for (var i = decorators.length - 1; i >= 0; i--) {
54
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
55
+ if (k) {
56
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
57
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
58
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
59
+ }
60
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
61
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
62
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
63
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
64
+ }
65
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
66
+ };
67
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
68
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
69
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
70
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
71
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
72
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
73
+ var StaticScheduleTrigger_exports = {};
74
+ __export(StaticScheduleTrigger_exports, {
75
+ StaticScheduleTrigger: () => StaticScheduleTrigger
76
+ });
77
+ module.exports = __toCommonJS(StaticScheduleTrigger_exports);
78
+ var import_module_workflow = require("@tachybase/module-workflow");
79
+ var import_utils = require("@tachybase/utils");
80
+ var import_cron_parser = __toESM(require("cron-parser"));
81
+ var import_constants = require("../../constants");
82
+ var import_utils2 = require("../utils");
83
+ var _logger_dec, _db_dec, _app_dec, _StaticScheduleTrigger_decorators, _init;
84
+ const MAX_SAFE_INTERVAL = 2147483647;
85
+ _StaticScheduleTrigger_decorators = [(0, import_utils.Service)()], _app_dec = [(0, import_utils.App)()], _db_dec = [(0, import_utils.Db)()], _logger_dec = [(0, import_utils.InjectLog)()];
86
+ let _StaticScheduleTrigger = class _StaticScheduleTrigger {
87
+ constructor() {
88
+ __publicField(this, "app", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
89
+ __publicField(this, "db", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
90
+ __publicField(this, "logger", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
91
+ __publicField(this, "timers", /* @__PURE__ */ new Map());
92
+ }
93
+ async load() {
94
+ this.app.on("afterStart", async (app) => {
95
+ const cronJobs = await app.db.getRepository("cronJobs").find({
96
+ filter: { mode: import_constants.SCHEDULE_MODE.STATIC, enabled: true }
97
+ });
98
+ this.inspect(cronJobs);
99
+ });
100
+ this.app.on("beforeStop", () => {
101
+ for (const timer of this.timers.values()) {
102
+ clearInterval(timer);
103
+ }
104
+ });
105
+ this.db.on(`${import_constants.DATABASE_CRON_JOBS}.beforeSave`, async (cronjob, options) => {
106
+ let changed = false;
107
+ for (const field of options.fields) {
108
+ if (_StaticScheduleTrigger.inspectFields.includes(field)) {
109
+ changed = true;
110
+ break;
111
+ }
112
+ }
113
+ if (!changed) {
114
+ return;
115
+ }
116
+ this.off(cronjob);
117
+ });
118
+ this.db.on(`${import_constants.DATABASE_CRON_JOBS}.afterSave`, async (cronjob, options) => {
119
+ let changed = false;
120
+ for (const field of options.fields) {
121
+ if (_StaticScheduleTrigger.inspectFields.includes(field)) {
122
+ changed = true;
123
+ break;
124
+ }
125
+ }
126
+ if (!changed) {
127
+ return;
128
+ }
129
+ this.on(cronjob);
130
+ });
131
+ this.db.on(`${import_constants.DATABASE_CRON_JOBS}.afterDestroy`, async (cronjob) => {
132
+ this.off(cronjob);
133
+ });
134
+ this.app.resourcer.use(
135
+ async (ctx, next) => {
136
+ const { resourceName, actionName } = ctx.action;
137
+ await next();
138
+ if (resourceName === "cronJobs" && actionName === "list") {
139
+ const rows = ctx.body.rows;
140
+ rows.forEach((cronJob) => {
141
+ if (!cronJob.enabled) {
142
+ return;
143
+ }
144
+ const nextTime = this.getNextTime(cronJob, /* @__PURE__ */ new Date());
145
+ if (nextTime) {
146
+ cronJob.nextTime = new Date(nextTime);
147
+ }
148
+ });
149
+ }
150
+ },
151
+ { tag: "addNextTimeToCronJobs" }
152
+ );
153
+ }
154
+ inspect(cronJobs) {
155
+ const now = /* @__PURE__ */ new Date();
156
+ cronJobs.forEach((cronJob) => {
157
+ const nextTime = this.getNextTime(cronJob, now);
158
+ if (nextTime) {
159
+ this.logger.info(
160
+ `cronJobs [${cronJob.id}] caching scheduled workflow [${cronJob.workflowKey}] will run at: ${new Date(nextTime).toISOString()}`
161
+ );
162
+ } else {
163
+ this.logger.info(`cronJobs [${cronJob.id}] workflow [${cronJob.workflowKey}] will not be scheduled`);
164
+ }
165
+ this.schedule(cronJob, nextTime, nextTime >= now.getTime());
166
+ });
167
+ }
168
+ getNextTime(cronJob, currentDate, nextSecond = false) {
169
+ if (cronJob.limit && cronJob.limitExecuted >= cronJob.limit) {
170
+ return null;
171
+ }
172
+ if (!cronJob.startsOn) {
173
+ return null;
174
+ }
175
+ currentDate.setMilliseconds(nextSecond ? 1e3 : 0);
176
+ const timestamp = currentDate.getTime();
177
+ const startTime = (0, import_utils2.parseDateWithoutMs)(cronJob.startsOn);
178
+ if (startTime > timestamp) {
179
+ return startTime;
180
+ }
181
+ if (cronJob.repeat) {
182
+ const endTime = cronJob.endsOn ? (0, import_utils2.parseDateWithoutMs)(cronJob.endsOn) : null;
183
+ if (endTime && endTime < timestamp) {
184
+ return null;
185
+ }
186
+ if (cronJob.repeat && isNaN(+cronJob.repeat)) {
187
+ const interval = import_cron_parser.default.parseExpression(cronJob.repeat, { currentDate });
188
+ const next = interval.next();
189
+ return next.getTime();
190
+ } else if (!isNaN(+cronJob.repeat)) {
191
+ const repeat = +cronJob.repeat;
192
+ const next = timestamp + repeat - (timestamp - startTime) % repeat;
193
+ return next;
194
+ } else {
195
+ return null;
196
+ }
197
+ } else {
198
+ if (startTime < timestamp) {
199
+ return null;
200
+ }
201
+ return timestamp;
202
+ }
203
+ }
204
+ schedule(cronJob, nextTime, toggle = true) {
205
+ if (toggle) {
206
+ const key = `${cronJob.id}@${nextTime}`;
207
+ if (!this.timers.has(key)) {
208
+ const interval = Math.max(nextTime - Date.now(), 0);
209
+ if (interval > MAX_SAFE_INTERVAL) {
210
+ this.timers.set(
211
+ key,
212
+ setTimeout(() => {
213
+ this.timers.delete(key);
214
+ this.schedule(cronJob, nextTime);
215
+ }, MAX_SAFE_INTERVAL)
216
+ );
217
+ } else {
218
+ this.timers.set(key, setTimeout(this.trigger.bind(this, cronJob.id, nextTime), interval));
219
+ }
220
+ }
221
+ } else {
222
+ for (const [key, timer] of this.timers.entries()) {
223
+ if (key.startsWith(`${cronJob.id}@`)) {
224
+ clearTimeout(timer);
225
+ this.timers.delete(key);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ async trigger(cronJobId, time) {
231
+ var _a, _b;
232
+ try {
233
+ const cronJob = await this.db.getRepository(import_constants.DATABASE_CRON_JOBS).findOne({ filterByTk: cronJobId });
234
+ if (!cronJob) {
235
+ this.logger.warn(`Scheduled cron job ${cronJobId} no longer exists`);
236
+ const eventKey2 = `${cronJobId}@${time}`;
237
+ this.timers.delete(eventKey2);
238
+ return;
239
+ }
240
+ const eventKey = `${cronJob.id}@${time}`;
241
+ this.timers.delete(eventKey);
242
+ const pluginWorkflow = this.app.getPlugin(import_module_workflow.PluginWorkflow);
243
+ const workflow = await this.db.getRepository("workflows").findOne({
244
+ filter: { key: cronJob.workflowKey, enabled: true }
245
+ });
246
+ if (!workflow) {
247
+ return;
248
+ }
249
+ let error = null;
250
+ let process = null;
251
+ try {
252
+ process = await pluginWorkflow.trigger(workflow, { date: new Date(time) }, { eventKey });
253
+ } catch (e) {
254
+ error = e;
255
+ this.logger.error(`cronJobs [${cronJob.id}] workflow [${cronJob.workflowKey}] failed: ${e.message}`);
256
+ } finally {
257
+ if (!error && (((_a = process == null ? void 0 : process.execution) == null ? void 0 : _a.status) === import_module_workflow.EXECUTION_STATUS.QUEUEING || ((_b = process == null ? void 0 : process.execution) == null ? void 0 : _b.status) >= 0)) {
258
+ await cronJob.increment(["limitExecuted", "allExecuted", "successExecuted"]);
259
+ cronJob.update({
260
+ lastTime: /* @__PURE__ */ new Date()
261
+ });
262
+ } else {
263
+ await cronJob.increment(["limitExecuted", "allExecuted"]);
264
+ cronJob.update({
265
+ lastTime: /* @__PURE__ */ new Date()
266
+ });
267
+ }
268
+ }
269
+ if (!cronJob.repeat || cronJob.limit && cronJob.limitExecuted >= cronJob.limit) {
270
+ return;
271
+ }
272
+ const nextTime = this.getNextTime(cronJob, /* @__PURE__ */ new Date(), true);
273
+ if (nextTime) {
274
+ this.schedule(cronJob, nextTime);
275
+ }
276
+ } catch (e) {
277
+ this.logger.error(`cronJobs [${cronJobId}] failed: ${e.message}`);
278
+ }
279
+ }
280
+ on(cronJob) {
281
+ this.inspect([cronJob]);
282
+ }
283
+ off(cronJob) {
284
+ this.schedule(cronJob, null, false);
285
+ }
286
+ };
287
+ _init = __decoratorStart(null);
288
+ __decorateElement(_init, 5, "app", _app_dec, _StaticScheduleTrigger);
289
+ __decorateElement(_init, 5, "db", _db_dec, _StaticScheduleTrigger);
290
+ __decorateElement(_init, 5, "logger", _logger_dec, _StaticScheduleTrigger);
291
+ _StaticScheduleTrigger = __decorateElement(_init, 0, "StaticScheduleTrigger", _StaticScheduleTrigger_decorators, _StaticScheduleTrigger);
292
+ __publicField(_StaticScheduleTrigger, "inspectFields", ["startsOn", "mode", "endsOn", "repeat", "limit", "enabled", "limitExecuted"]);
293
+ __runInitializers(_init, 1, _StaticScheduleTrigger);
294
+ let StaticScheduleTrigger = _StaticScheduleTrigger;
295
+ // Annotate the CommonJS export names for ESM import in node:
296
+ 0 && (module.exports = {
297
+ StaticScheduleTrigger
298
+ });
@@ -0,0 +1 @@
1
+ export declare function parseDateWithoutMs(date: Date): number;