@nocobase/plugin-workflow 2.2.0-beta.2 → 2.2.0-beta.3

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 (35) hide show
  1. package/dist/client/Branch.d.ts +1 -1
  2. package/dist/client/index.js +1 -1
  3. package/dist/client/triggers/collection.d.ts +29 -2
  4. package/dist/externalVersion.js +13 -12
  5. package/dist/locale/de-DE.json +1 -0
  6. package/dist/locale/en-US.json +4 -0
  7. package/dist/locale/es-ES.json +1 -0
  8. package/dist/locale/fr-FR.json +1 -0
  9. package/dist/locale/hu-HU.json +1 -0
  10. package/dist/locale/id-ID.json +1 -0
  11. package/dist/locale/it-IT.json +1 -0
  12. package/dist/locale/ja-JP.json +1 -0
  13. package/dist/locale/ko-KR.json +1 -0
  14. package/dist/locale/nl-NL.json +1 -0
  15. package/dist/locale/pt-BR.json +1 -0
  16. package/dist/locale/ru-RU.json +1 -0
  17. package/dist/locale/tr-TR.json +1 -0
  18. package/dist/locale/uk-UA.json +1 -0
  19. package/dist/locale/vi-VN.json +1 -0
  20. package/dist/locale/zh-CN.json +4 -0
  21. package/dist/locale/zh-TW.json +1 -0
  22. package/dist/node_modules/cron-parser/package.json +1 -1
  23. package/dist/node_modules/joi/package.json +1 -1
  24. package/dist/node_modules/lru-cache/package.json +1 -1
  25. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  26. package/dist/server/Processor.d.ts +16 -0
  27. package/dist/server/Processor.js +112 -0
  28. package/dist/server/index.d.ts +1 -1
  29. package/dist/server/instructions/CreateInstruction.js +6 -2
  30. package/dist/server/instructions/DestroyInstruction.js +2 -1
  31. package/dist/server/instructions/QueryInstruction.js +2 -1
  32. package/dist/server/instructions/UpdateInstruction.js +2 -1
  33. package/dist/server/triggers/CollectionTrigger.d.ts +5 -0
  34. package/dist/server/triggers/CollectionTrigger.js +26 -1
  35. package/package.json +2 -2
@@ -46,6 +46,7 @@ var import_database = require("@nocobase/database");
46
46
  var import_data_source_manager = require("@nocobase/data-source-manager");
47
47
  var import__ = __toESM(require("."));
48
48
  var import_utils2 = require("../utils");
49
+ var import_constants = require("../constants");
49
50
  const MODE_BITMAP = {
50
51
  CREATE: 1,
51
52
  UPDATE: 2,
@@ -96,6 +97,7 @@ class CollectionTrigger extends import__.default {
96
97
  otherwise: import_joi.default.forbidden()
97
98
  }),
98
99
  condition: import_joi.default.object(),
100
+ rollbackOnFailure: import_joi.default.boolean().optional(),
99
101
  appends: import_joi.default.when("mode", {
100
102
  is: (mode) => mode !== MODE_BITMAP.DESTROY,
101
103
  then: import_joi.default.array().items(import_joi.default.string()).optional(),
@@ -112,6 +114,7 @@ class CollectionTrigger extends import__.default {
112
114
  events = /* @__PURE__ */ new Map();
113
115
  // async function, should return promise
114
116
  static async handler(workflowId, eventType, data, options) {
117
+ var _a, _b;
115
118
  const workflow = this.workflow.enabledCache.get(workflowId);
116
119
  const { skipWorkflow = false, stack } = options.context ?? {};
117
120
  if (skipWorkflow) {
@@ -130,10 +133,25 @@ class CollectionTrigger extends import__.default {
130
133
  });
131
134
  return;
132
135
  }
133
- await this.workflow.trigger(workflow, ctx, {
136
+ const processor = await this.workflow.trigger(workflow, ctx, {
134
137
  transaction,
135
138
  stack
136
139
  });
140
+ const execution = processor ? processor.execution : null;
141
+ const lastSavedJob = processor ? processor.lastSavedJob : null;
142
+ if (workflow.config.rollbackOnFailure && (!execution || execution.status < import_constants.EXECUTION_STATUS.STARTED)) {
143
+ this.workflow.getLogger(workflow.id).error("[CollectionTrigger] source operation rolled back because sync workflow failed", {
144
+ workflowId: workflow.id,
145
+ workflowKey: workflow.key,
146
+ workflowTitle: workflow.title,
147
+ executionId: execution == null ? void 0 : execution.id,
148
+ executionStatus: execution == null ? void 0 : execution.status,
149
+ lastJobId: lastSavedJob == null ? void 0 : lastSavedJob.id,
150
+ lastJobStatus: lastSavedJob == null ? void 0 : lastSavedJob.status,
151
+ lastJobResult: lastSavedJob == null ? void 0 : lastSavedJob.result
152
+ });
153
+ throw this.createRollbackOnFailureError((_b = (_a = options.context) == null ? void 0 : _a.getCurrentLocale) == null ? void 0 : _b.call(_a));
154
+ }
137
155
  } else {
138
156
  if (transaction) {
139
157
  transaction.afterCommit(() => {
@@ -144,6 +162,13 @@ class CollectionTrigger extends import__.default {
144
162
  }
145
163
  }
146
164
  }
165
+ createRollbackOnFailureError(locale) {
166
+ const message = this.workflow.t("System process failed, please contact administrator.", locale ? { lng: locale } : {}).toString();
167
+ const error = new Error(message);
168
+ error.status = 422;
169
+ error.code = "WORKFLOW_ROLLBACK_ON_FAILURE";
170
+ return error;
171
+ }
147
172
  async prepare(workflow, data, options) {
148
173
  const { condition, changed, mode, appends } = workflow.config;
149
174
  const [dataSourceName, collectionName] = (0, import_data_source_manager.parseCollectionName)(workflow.config.collection);
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
7
7
  "description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
8
8
  "description.ru-RU": "Мощный инструмент BPM, обеспечивающий базовую поддержку автоматизации бизнес-процессов с возможностью неограниченного расширения триггеров и узлов.",
9
- "version": "2.2.0-beta.2",
9
+ "version": "2.2.0-beta.3",
10
10
  "license": "Apache-2.0",
11
11
  "main": "./dist/server/index.js",
12
12
  "homepage": "https://docs.nocobase.com/handbook/workflow",
@@ -49,7 +49,7 @@
49
49
  "@nocobase/test": "2.x",
50
50
  "@nocobase/utils": "2.x"
51
51
  },
52
- "gitHead": "2fe3e6a86fc1d0cd039349a68b2e4d1d6945ce45",
52
+ "gitHead": "7b16bb2cfd427c110c6671252138cd85155723c5",
53
53
  "keywords": [
54
54
  "Workflow"
55
55
  ]