@nocobase/plugin-workflow 1.4.0-beta.1 → 1.5.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,24 +11,24 @@ module.exports = {
11
11
  "react": "18.2.0",
12
12
  "@formily/core": "2.3.0",
13
13
  "@formily/react": "2.3.0",
14
- "@nocobase/client": "1.4.0-beta.1",
15
- "@nocobase/utils": "1.4.0-beta.1",
14
+ "@nocobase/client": "1.5.0-alpha.1",
15
+ "@nocobase/utils": "1.5.0-alpha.1",
16
16
  "antd": "5.12.8",
17
17
  "@ant-design/icons": "5.2.6",
18
18
  "react-router-dom": "6.21.0",
19
19
  "react-i18next": "11.18.6",
20
20
  "@formily/shared": "2.3.2",
21
21
  "lodash": "4.17.21",
22
- "@nocobase/database": "1.4.0-beta.1",
23
- "@nocobase/server": "1.4.0-beta.1",
24
- "@nocobase/logger": "1.4.0-beta.1",
25
- "@nocobase/evaluators": "1.4.0-beta.1",
22
+ "@nocobase/database": "1.5.0-alpha.1",
23
+ "@nocobase/server": "1.5.0-alpha.1",
24
+ "@nocobase/logger": "1.5.0-alpha.1",
25
+ "@nocobase/evaluators": "1.5.0-alpha.1",
26
26
  "@formily/antd-v5": "1.1.9",
27
27
  "@formily/reactive": "2.3.0",
28
- "@nocobase/actions": "1.4.0-beta.1",
28
+ "@nocobase/actions": "1.5.0-alpha.1",
29
29
  "dayjs": "1.11.10",
30
- "@nocobase/data-source-manager": "1.4.0-beta.1",
30
+ "@nocobase/data-source-manager": "1.5.0-alpha.1",
31
31
  "sequelize": "6.35.2",
32
- "@nocobase/plugin-workflow-test": "1.4.0-beta.1",
33
- "@nocobase/test": "1.4.0-beta.1"
32
+ "@nocobase/plugin-workflow-test": "1.5.0-alpha.1",
33
+ "@nocobase/test": "1.5.0-alpha.1"
34
34
  };
@@ -1 +1 @@
1
- {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2024-11-19T15:04:19.419Z"}
1
+ {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2024-11-19T15:55:44.890Z"}
@@ -1 +1 @@
1
- {"name":"lru-cache","description":"A cache object that deletes the least-recently-used items.","version":"8.0.5","author":"Isaac Z. Schlueter <i@izs.me>","keywords":["mru","lru","cache"],"sideEffects":false,"scripts":{"build":"npm run prepare","preprepare":"rm -rf dist","prepare":"tsc -p tsconfig.json && tsc -p tsconfig-esm.json","postprepare":"bash fixup.sh","pretest":"npm run prepare","presnap":"npm run prepare","test":"c8 tap","snap":"c8 tap","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write .","typedoc":"typedoc --tsconfig tsconfig-esm.json ./src/*.ts","benchmark-results-typedoc":"bash scripts/benchmark-results-typedoc.sh","prebenchmark":"npm run prepare","benchmark":"make -C benchmark","preprofile":"npm run prepare","profile":"make -C benchmark profile"},"main":"./dist/cjs/index-cjs.js","module":"./dist/mjs/index.js","types":"./dist/mjs/index.d.ts","exports":{"./min":{"import":{"types":"./dist/mjs/index.d.ts","default":"./dist/mjs/index.min.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.min.js"}},".":{"import":{"types":"./dist/mjs/index.d.ts","default":"./dist/mjs/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index-cjs.js"}}},"repository":"git://github.com/isaacs/node-lru-cache.git","devDependencies":{"@size-limit/preset-small-lib":"^7.0.8","@types/node":"^17.0.31","@types/tap":"^15.0.6","benchmark":"^2.1.4","c8":"^7.11.2","clock-mock":"^1.0.6","esbuild":"^0.17.11","eslint-config-prettier":"^8.5.0","marked":"^4.2.12","mkdirp":"^2.1.5","prettier":"^2.6.2","size-limit":"^7.0.8","tap":"^16.3.4","ts-node":"^10.7.0","tslib":"^2.4.0","typedoc":"^0.23.24","typescript":"^4.6.4"},"license":"ISC","files":["dist"],"engines":{"node":">=16.14"},"prettier":{"semi":false,"printWidth":70,"tabWidth":2,"useTabs":false,"singleQuote":true,"jsxSingleQuote":false,"bracketSameLine":true,"arrowParens":"avoid","endOfLine":"lf"},"tap":{"coverage":false,"node-arg":["--expose-gc","--no-warnings","--loader","ts-node/esm"],"ts":false},"size-limit":[{"path":"./dist/mjs/index.js"}],"_lastModified":"2024-11-19T15:04:18.981Z"}
1
+ {"name":"lru-cache","description":"A cache object that deletes the least-recently-used items.","version":"8.0.5","author":"Isaac Z. Schlueter <i@izs.me>","keywords":["mru","lru","cache"],"sideEffects":false,"scripts":{"build":"npm run prepare","preprepare":"rm -rf dist","prepare":"tsc -p tsconfig.json && tsc -p tsconfig-esm.json","postprepare":"bash fixup.sh","pretest":"npm run prepare","presnap":"npm run prepare","test":"c8 tap","snap":"c8 tap","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write .","typedoc":"typedoc --tsconfig tsconfig-esm.json ./src/*.ts","benchmark-results-typedoc":"bash scripts/benchmark-results-typedoc.sh","prebenchmark":"npm run prepare","benchmark":"make -C benchmark","preprofile":"npm run prepare","profile":"make -C benchmark profile"},"main":"./dist/cjs/index-cjs.js","module":"./dist/mjs/index.js","types":"./dist/mjs/index.d.ts","exports":{"./min":{"import":{"types":"./dist/mjs/index.d.ts","default":"./dist/mjs/index.min.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.min.js"}},".":{"import":{"types":"./dist/mjs/index.d.ts","default":"./dist/mjs/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index-cjs.js"}}},"repository":"git://github.com/isaacs/node-lru-cache.git","devDependencies":{"@size-limit/preset-small-lib":"^7.0.8","@types/node":"^17.0.31","@types/tap":"^15.0.6","benchmark":"^2.1.4","c8":"^7.11.2","clock-mock":"^1.0.6","esbuild":"^0.17.11","eslint-config-prettier":"^8.5.0","marked":"^4.2.12","mkdirp":"^2.1.5","prettier":"^2.6.2","size-limit":"^7.0.8","tap":"^16.3.4","ts-node":"^10.7.0","tslib":"^2.4.0","typedoc":"^0.23.24","typescript":"^4.6.4"},"license":"ISC","files":["dist"],"engines":{"node":">=16.14"},"prettier":{"semi":false,"printWidth":70,"tabWidth":2,"useTabs":false,"singleQuote":true,"jsxSingleQuote":false,"bracketSameLine":true,"arrowParens":"avoid","endOfLine":"lf"},"tap":{"coverage":false,"node-arg":["--expose-gc","--no-warnings","--loader","ts-node/esm"],"ts":false},"size-limit":[{"path":"./dist/mjs/index.js"}],"_lastModified":"2024-11-19T15:55:44.476Z"}
@@ -36,7 +36,7 @@ export default class PluginWorkflowServer extends Plugin {
36
36
  private meter;
37
37
  private checker;
38
38
  private onBeforeSave;
39
- onSync(message: any): Promise<void>;
39
+ handleSyncMessage(message: any): Promise<void>;
40
40
  /**
41
41
  * @experimental
42
42
  */
@@ -71,7 +71,7 @@ class PluginWorkflowServer extends import_server.Plugin {
71
71
  loggerCache;
72
72
  meter = null;
73
73
  checker = null;
74
- onBeforeSave = async (instance, options) => {
74
+ onBeforeSave = async (instance, { transaction }) => {
75
75
  const Model = instance.constructor;
76
76
  if (instance.enabled) {
77
77
  instance.set("current", true);
@@ -80,7 +80,7 @@ class PluginWorkflowServer extends import_server.Plugin {
80
80
  where: {
81
81
  key: instance.key
82
82
  },
83
- transaction: options.transaction
83
+ transaction
84
84
  });
85
85
  if (!count) {
86
86
  instance.set("current", true);
@@ -97,39 +97,37 @@ class PluginWorkflowServer extends import_server.Plugin {
97
97
  [import_database.Op.ne]: instance.id
98
98
  }
99
99
  },
100
- transaction: options.transaction
100
+ transaction
101
101
  });
102
102
  if (previous) {
103
103
  await previous.update(
104
104
  { enabled: false, current: null },
105
105
  {
106
- transaction: options.transaction,
106
+ transaction,
107
107
  hooks: false
108
108
  }
109
109
  );
110
- this.toggle(previous, false);
110
+ this.toggle(previous, false, { transaction });
111
111
  }
112
112
  };
113
- async onSync(message) {
113
+ async handleSyncMessage(message) {
114
114
  if (message.type === "statusChange") {
115
- const workflowId = Number.parseInt(message.workflowId, 10);
116
- const enabled = Number.parseInt(message.enabled, 10);
117
- if (enabled) {
118
- let workflow = this.enabledCache.get(workflowId);
115
+ if (message.enabled) {
116
+ let workflow = this.enabledCache.get(message.workflowId);
119
117
  if (workflow) {
120
118
  await workflow.reload();
121
119
  } else {
122
120
  workflow = await this.db.getRepository("workflows").findOne({
123
- filterByTk: workflowId
121
+ filterByTk: message.workflowId
124
122
  });
125
123
  }
126
124
  if (workflow) {
127
- this.toggle(workflow, true, true);
125
+ this.toggle(workflow, true, { silent: true });
128
126
  }
129
127
  } else {
130
- const workflow = this.enabledCache.get(workflowId);
128
+ const workflow = this.enabledCache.get(message.workflowId);
131
129
  if (workflow) {
132
- this.toggle(workflow, false, true);
130
+ this.toggle(workflow, false, { silent: true });
133
131
  }
134
132
  }
135
133
  }
@@ -248,13 +246,19 @@ class PluginWorkflowServer extends import_server.Plugin {
248
246
  }
249
247
  });
250
248
  db.on("workflows.beforeSave", this.onBeforeSave);
251
- db.on("workflows.afterCreate", (model) => {
249
+ db.on("workflows.afterCreate", (model, { transaction }) => {
252
250
  if (model.enabled) {
253
- this.toggle(model);
251
+ this.toggle(model, true, { transaction });
254
252
  }
255
253
  });
256
- db.on("workflows.afterUpdate", (model) => this.toggle(model));
257
- db.on("workflows.beforeDestroy", (model) => this.toggle(model, false));
254
+ db.on(
255
+ "workflows.afterUpdate",
256
+ (model, { transaction }) => this.toggle(model, model.enabled, { transaction })
257
+ );
258
+ db.on(
259
+ "workflows.afterDestroy",
260
+ (model, { transaction }) => this.toggle(model, false, { transaction })
261
+ );
258
262
  this.app.on("afterStart", async () => {
259
263
  this.app.setMaintainingMessage("check for not started executions");
260
264
  this.ready = true;
@@ -263,7 +267,7 @@ class PluginWorkflowServer extends import_server.Plugin {
263
267
  filter: { enabled: true }
264
268
  });
265
269
  workflows.forEach((workflow) => {
266
- this.toggle(workflow);
270
+ this.toggle(workflow, true, { silent: true });
267
271
  });
268
272
  this.checker = setInterval(() => {
269
273
  this.dispatch();
@@ -272,7 +276,7 @@ class PluginWorkflowServer extends import_server.Plugin {
272
276
  });
273
277
  this.app.on("beforeStop", async () => {
274
278
  for (const workflow of this.enabledCache.values()) {
275
- this.toggle(workflow, false);
279
+ this.toggle(workflow, false, { silent: true });
276
280
  }
277
281
  this.ready = false;
278
282
  if (this.events.length) {
@@ -286,7 +290,7 @@ class PluginWorkflowServer extends import_server.Plugin {
286
290
  }
287
291
  });
288
292
  }
289
- toggle(workflow, enable, silent = false) {
293
+ toggle(workflow, enable, { silent, transaction } = {}) {
290
294
  const type = workflow.get("type");
291
295
  const trigger = this.triggers.get(type);
292
296
  if (!trigger) {
@@ -306,15 +310,22 @@ class PluginWorkflowServer extends import_server.Plugin {
306
310
  this.enabledCache.delete(workflow.id);
307
311
  }
308
312
  if (!silent) {
309
- this.sync({
310
- type: "statusChange",
311
- workflowId: `${workflow.id}`,
312
- enabled: `${Number(next)}`
313
- });
313
+ this.sendSyncMessage(
314
+ {
315
+ type: "statusChange",
316
+ workflowId: workflow.id,
317
+ enabled: next
318
+ },
319
+ { transaction }
320
+ );
314
321
  }
315
322
  }
316
323
  trigger(workflow, context, options = {}) {
317
324
  const logger = this.getLogger(workflow.id);
325
+ if (!workflow.enabled) {
326
+ logger.warn(`workflow ${workflow.id} is not enabled, event will be ignored`);
327
+ return;
328
+ }
318
329
  if (!this.ready) {
319
330
  logger.warn(`app is not ready, event of workflow ${workflow.id} will be ignored`);
320
331
  logger.debug(`ignored event data:`, context);
package/package.json CHANGED
@@ -4,13 +4,13 @@
4
4
  "displayName.zh-CN": "工作流",
5
5
  "description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
6
6
  "description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
7
- "version": "1.4.0-beta.1",
7
+ "version": "1.5.0-alpha.1",
8
8
  "license": "AGPL-3.0",
9
9
  "main": "./dist/server/index.js",
10
10
  "homepage": "https://docs.nocobase.com/handbook/workflow",
11
11
  "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/workflow",
12
12
  "dependencies": {
13
- "@nocobase/plugin-workflow-test": "1.4.0-beta.1"
13
+ "@nocobase/plugin-workflow-test": "1.5.0-alpha.1"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@ant-design/icons": "5.x",
@@ -44,7 +44,7 @@
44
44
  "@nocobase/test": "1.x",
45
45
  "@nocobase/utils": "1.x"
46
46
  },
47
- "gitHead": "1ece4e558ba445088dbb658bd458eb0004295326",
47
+ "gitHead": "abe58fad69534a13c2502a47da86425a597c3ba3",
48
48
  "keywords": [
49
49
  "Workflow"
50
50
  ]