@nocobase/plugin-workflow 0.7.0-alpha.57 → 0.7.0-alpha.58
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/lib/actions/index.d.ts +3 -1
- package/lib/actions/index.js +3 -1
- package/lib/instructions/query.js +5 -6
- package/lib/models/Workflow.d.ts +1 -4
- package/lib/models/Workflow.js +57 -94
- package/lib/server.d.ts +7 -2
- package/lib/server.js +52 -30
- package/lib/triggers/collection.d.ts +11 -7
- package/lib/triggers/collection.js +79 -42
- package/lib/triggers/index.d.ts +3 -6
- package/lib/triggers/index.js +5 -16
- package/package.json +7 -7
package/lib/actions/index.d.ts
CHANGED
package/lib/actions/index.js
CHANGED
|
@@ -25,7 +25,9 @@ function make(name, mod) {
|
|
|
25
25
|
}), {});
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function _default(
|
|
28
|
+
function _default({
|
|
29
|
+
app
|
|
30
|
+
}) {
|
|
29
31
|
app.actions(_objectSpread(_objectSpread(_objectSpread({}, make('workflows', workflows)), make('workflows.nodes', {
|
|
30
32
|
create: nodes.create,
|
|
31
33
|
destroy: nodes.destroy
|
|
@@ -32,14 +32,13 @@ var _default = {
|
|
|
32
32
|
|
|
33
33
|
const options = execution.getParsedValue(params);
|
|
34
34
|
const result = yield (multiple ? repo.find : repo.findOne).call(repo, _objectSpread(_objectSpread({}, options), {}, {
|
|
35
|
-
// NOTE: `raw` to avoid getting undefined value from Proxied model instance (#380)
|
|
36
|
-
// e.g. Object.prototype.hasOwnProperty.call(result, 'id') // false
|
|
37
|
-
// so the properties can not be get by json-templates(object-path)
|
|
38
|
-
raw: true,
|
|
39
35
|
transaction: execution.tx
|
|
40
|
-
}));
|
|
36
|
+
})); // NOTE: `toJSON()` to avoid getting undefined value from Proxied model instance (#380)
|
|
37
|
+
// e.g. Object.prototype.hasOwnProperty.call(result, 'id') // false
|
|
38
|
+
// so the properties can not be get by json-templates(object-path)
|
|
39
|
+
|
|
41
40
|
return {
|
|
42
|
-
result,
|
|
41
|
+
result: multiple ? result.map(item => item.toJSON()) : result === null || result === void 0 ? void 0 : result.toJSON(),
|
|
43
42
|
status: _constants.JOB_STATUS.RESOLVED
|
|
44
43
|
};
|
|
45
44
|
})();
|
package/lib/models/Workflow.d.ts
CHANGED
|
@@ -21,9 +21,6 @@ export default class WorkflowModel extends Model {
|
|
|
21
21
|
countExecutions: HasManyCountAssociationsMixin;
|
|
22
22
|
getExecutions: HasManyGetAssociationsMixin<ExecutionModel>;
|
|
23
23
|
createExecution: HasManyCreateAssociationMixin<ExecutionModel>;
|
|
24
|
-
static mount(): Promise<void>;
|
|
25
|
-
getHookId(): string;
|
|
26
24
|
getTransaction(options: any): any;
|
|
27
|
-
|
|
28
|
-
trigger(context: Object, options: any): Promise<ExecutionModel>;
|
|
25
|
+
trigger: (context: Object, options?: {}) => Promise<ExecutionModel>;
|
|
29
26
|
}
|
package/lib/models/Workflow.js
CHANGED
|
@@ -15,122 +15,85 @@ function _database() {
|
|
|
15
15
|
return data;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
var _triggers = _interopRequireDefault(require("../triggers"));
|
|
19
|
-
|
|
20
18
|
var _constants = require("../constants");
|
|
21
19
|
|
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
20
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
25
21
|
|
|
26
22
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
27
23
|
|
|
28
24
|
class WorkflowModel extends _database().Model {
|
|
29
|
-
|
|
30
|
-
var _this
|
|
25
|
+
constructor(...args) {
|
|
26
|
+
var _this;
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
super(...args);
|
|
29
|
+
_this = this;
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
this.trigger = /*#__PURE__*/function () {
|
|
32
|
+
var _ref = _asyncToGenerator(function* (context, options = {}) {
|
|
33
|
+
// `null` means not to trigger
|
|
34
|
+
if (context === null) {
|
|
35
|
+
return;
|
|
38
36
|
}
|
|
39
|
-
});
|
|
40
|
-
workflows.forEach(workflow => {
|
|
41
|
-
workflow.toggle();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
_this.addHook('afterCreate', model => model.toggle());
|
|
45
|
-
|
|
46
|
-
_this.addHook('afterUpdate', model => model.toggle());
|
|
47
|
-
|
|
48
|
-
_this.addHook('afterDestroy', model => model.toggle(false));
|
|
49
|
-
})();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
getHookId() {
|
|
53
|
-
return `workflow-${this.get('id')}`;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
getTransaction(options) {
|
|
57
|
-
if (!this.useTransaction) {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return options.transaction && !options.transaction.finished ? options.transaction : this.constructor.database.sequelize.transaction();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
toggle(enable) {
|
|
65
|
-
var _this2 = this;
|
|
66
|
-
|
|
67
|
-
return _asyncToGenerator(function* () {
|
|
68
|
-
const type = _this2.get('type');
|
|
69
37
|
|
|
70
|
-
|
|
71
|
-
on = _triggers$get.on,
|
|
72
|
-
off = _triggers$get.off;
|
|
38
|
+
const transaction = yield _this.getTransaction(options);
|
|
73
39
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
trigger(context, options) {
|
|
83
|
-
var _this3 = this;
|
|
84
|
-
|
|
85
|
-
return _asyncToGenerator(function* () {
|
|
86
|
-
// `null` means not to trigger
|
|
87
|
-
if (context === null) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
40
|
+
if (_this.useTransaction) {
|
|
41
|
+
const existed = yield _this.countExecutions({
|
|
42
|
+
where: {
|
|
43
|
+
transaction: transaction.id
|
|
44
|
+
},
|
|
45
|
+
transaction
|
|
46
|
+
});
|
|
90
47
|
|
|
91
|
-
|
|
48
|
+
if (existed) {
|
|
49
|
+
console.warn(`workflow ${_this.id} has already been triggered in same execution (${transaction.id}), and newly triggering will be skipped.`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
92
53
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
54
|
+
const execution = yield _this.createExecution({
|
|
55
|
+
context,
|
|
56
|
+
status: _constants.EXECUTION_STATUS.STARTED,
|
|
57
|
+
useTransaction: _this.useTransaction,
|
|
58
|
+
transaction: transaction.id
|
|
59
|
+
}, {
|
|
60
|
+
transaction
|
|
61
|
+
});
|
|
62
|
+
execution.workflow = _this;
|
|
63
|
+
yield execution.start({
|
|
98
64
|
transaction
|
|
99
65
|
});
|
|
100
66
|
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
67
|
+
if (!_this.executed) {
|
|
68
|
+
// NOTE: not to trigger afterUpdate hook here
|
|
69
|
+
yield _this.update({
|
|
70
|
+
executed: true
|
|
71
|
+
}, {
|
|
72
|
+
transaction,
|
|
73
|
+
hooks: false
|
|
74
|
+
});
|
|
75
|
+
} // @ts-ignore
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if (transaction && (!options.transaction || options.transaction.finished)) {
|
|
79
|
+
yield transaction.commit();
|
|
104
80
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const execution = yield _this3.createExecution({
|
|
108
|
-
context,
|
|
109
|
-
status: _constants.EXECUTION_STATUS.STARTED,
|
|
110
|
-
useTransaction: _this3.useTransaction,
|
|
111
|
-
transaction: transaction.id
|
|
112
|
-
}, {
|
|
113
|
-
transaction
|
|
114
|
-
});
|
|
115
|
-
execution.workflow = _this3;
|
|
116
|
-
yield execution.start({
|
|
117
|
-
transaction
|
|
81
|
+
|
|
82
|
+
return execution;
|
|
118
83
|
});
|
|
119
84
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
});
|
|
126
|
-
}
|
|
85
|
+
return function (_x) {
|
|
86
|
+
return _ref.apply(this, arguments);
|
|
87
|
+
};
|
|
88
|
+
}();
|
|
89
|
+
}
|
|
127
90
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
91
|
+
getTransaction(options) {
|
|
92
|
+
if (!this.useTransaction) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
131
95
|
|
|
132
|
-
|
|
133
|
-
})();
|
|
96
|
+
return options.transaction && !options.transaction.finished ? options.transaction : this.constructor.database.sequelize.transaction();
|
|
134
97
|
}
|
|
135
98
|
|
|
136
99
|
}
|
package/lib/server.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { Plugin } from '@nocobase/server';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import WorkflowModel from './models/Workflow';
|
|
3
|
+
import { Trigger } from './triggers';
|
|
4
|
+
import { Registry } from '@nocobase/utils';
|
|
5
|
+
export default class extends Plugin {
|
|
6
|
+
triggers: Registry<Trigger>;
|
|
4
7
|
getName(): string;
|
|
8
|
+
load(options?: {}): Promise<void>;
|
|
9
|
+
toggle(workflow: WorkflowModel, enable?: boolean): Promise<void>;
|
|
5
10
|
}
|
package/lib/server.js
CHANGED
|
@@ -31,13 +31,34 @@ var _Execution = _interopRequireDefault(require("./models/Execution"));
|
|
|
31
31
|
|
|
32
32
|
var _actions = _interopRequireDefault(require("./actions"));
|
|
33
33
|
|
|
34
|
+
var _triggers = _interopRequireDefault(require("./triggers"));
|
|
35
|
+
|
|
36
|
+
function _utils() {
|
|
37
|
+
const data = require("@nocobase/utils");
|
|
38
|
+
|
|
39
|
+
_utils = function _utils() {
|
|
40
|
+
return data;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
|
|
34
46
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
35
47
|
|
|
36
48
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
37
49
|
|
|
38
50
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
39
51
|
|
|
40
|
-
class
|
|
52
|
+
class _default extends _server().Plugin {
|
|
53
|
+
constructor(...args) {
|
|
54
|
+
super(...args);
|
|
55
|
+
this.triggers = new (_utils().Registry)();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getName() {
|
|
59
|
+
return this.getPackageName(__dirname);
|
|
60
|
+
}
|
|
61
|
+
|
|
41
62
|
load(options = {}) {
|
|
42
63
|
var _this = this;
|
|
43
64
|
|
|
@@ -50,46 +71,47 @@ class WorkflowPlugin extends _server().Plugin {
|
|
|
50
71
|
yield db.import({
|
|
51
72
|
directory: _path().default.resolve(__dirname, 'collections')
|
|
52
73
|
});
|
|
53
|
-
(0, _actions.default)(_this
|
|
74
|
+
(0, _actions.default)(_this);
|
|
75
|
+
(0, _triggers.default)(_this); // [Life Cycle]:
|
|
54
76
|
// * load all workflows in db
|
|
55
77
|
// * add all hooks for enabled workflows
|
|
56
78
|
// * add hooks for create/update[enabled]/delete workflow to add/remove specific hooks
|
|
57
79
|
|
|
58
80
|
_this.app.on('beforeStart', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
const collection = db.getCollection('workflows');
|
|
82
|
+
const workflows = yield collection.repository.find({
|
|
83
|
+
filter: {
|
|
84
|
+
enabled: true
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
workflows.forEach(workflow => {
|
|
88
|
+
_this.toggle(workflow);
|
|
89
|
+
});
|
|
90
|
+
db.on('workflows.afterCreate', model => _this.toggle(model));
|
|
91
|
+
db.on('workflows.afterUpdate', model => _this.toggle(model));
|
|
92
|
+
db.on('workflows.afterDestroy', model => _this.toggle(model, false));
|
|
63
93
|
})); // [Life Cycle]: initialize all necessary seed data
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
_this.app.on('db.init', /*#__PURE__*/_asyncToGenerator(function* () {})); // const [Automation, AutomationJob] = database.getModels(['automations', 'automations_jobs']);
|
|
67
|
-
// Automation.addHook('afterCreate', async (model: AutomationModel) => {
|
|
68
|
-
// model.get('enabled') && await model.loadJobs();
|
|
69
|
-
// });
|
|
70
|
-
// Automation.addHook('afterUpdate', async (model: AutomationModel) => {
|
|
71
|
-
// if (!model.changed('enabled' as any)) {
|
|
72
|
-
// return;
|
|
73
|
-
// }
|
|
74
|
-
// model.get('enabled') ? await model.loadJobs() : await model.cancelJobs();
|
|
75
|
-
// });
|
|
76
|
-
// Automation.addHook('beforeDestroy', async (model: AutomationModel) => {
|
|
77
|
-
// await model.cancelJobs();
|
|
78
|
-
// });
|
|
79
|
-
// AutomationJob.addHook('afterCreate', async (model: AutomationJobModel) => {
|
|
80
|
-
// await model.bootstrap();
|
|
81
|
-
// });
|
|
82
|
-
// AutomationJob.addHook('beforeDestroy', async (model: AutomationJobModel) => {
|
|
83
|
-
// await model.cancel();
|
|
84
|
-
// });
|
|
94
|
+
// this.app.on('db.init', async () => {});
|
|
85
95
|
|
|
86
96
|
})();
|
|
87
97
|
}
|
|
88
98
|
|
|
89
|
-
|
|
90
|
-
|
|
99
|
+
toggle(workflow, enable) {
|
|
100
|
+
var _this2 = this;
|
|
101
|
+
|
|
102
|
+
return _asyncToGenerator(function* () {
|
|
103
|
+
const type = workflow.get('type');
|
|
104
|
+
|
|
105
|
+
const trigger = _this2.triggers.get(type);
|
|
106
|
+
|
|
107
|
+
if (typeof enable !== 'undefined' ? enable : workflow.get('enabled')) {
|
|
108
|
+
yield trigger.on(workflow);
|
|
109
|
+
} else {
|
|
110
|
+
yield trigger.off(workflow);
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
91
113
|
}
|
|
92
114
|
|
|
93
115
|
}
|
|
94
116
|
|
|
95
|
-
exports.default =
|
|
117
|
+
exports.default = _default;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
import { Trigger } from ".";
|
|
1
2
|
import WorkflowModel from "../models/Workflow";
|
|
2
|
-
export interface
|
|
3
|
+
export interface CollectionChangeTriggerConfig {
|
|
3
4
|
collection: string;
|
|
4
5
|
mode: number;
|
|
5
6
|
condition: any;
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
export default class CollectionTrigger implements Trigger {
|
|
9
|
+
db: any;
|
|
10
|
+
events: Map<any, any>;
|
|
11
|
+
constructor({ app }: {
|
|
12
|
+
app: any;
|
|
13
|
+
});
|
|
14
|
+
on(workflow: WorkflowModel): void;
|
|
15
|
+
off(workflow: WorkflowModel): void;
|
|
16
|
+
}
|
|
@@ -19,46 +19,67 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
19
19
|
|
|
20
20
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
21
21
|
|
|
22
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
23
|
+
|
|
24
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
25
|
+
|
|
26
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
27
|
+
|
|
22
28
|
const MODE_BITMAP = {
|
|
23
29
|
CREATE: 1,
|
|
24
30
|
UPDATE: 2,
|
|
25
31
|
DESTROY: 4
|
|
26
32
|
};
|
|
27
33
|
const MODE_BITMAP_EVENTS = new Map();
|
|
28
|
-
MODE_BITMAP_EVENTS.set(MODE_BITMAP.CREATE, '
|
|
29
|
-
MODE_BITMAP_EVENTS.set(MODE_BITMAP.UPDATE, '
|
|
30
|
-
MODE_BITMAP_EVENTS.set(MODE_BITMAP.DESTROY, 'afterDestroy');
|
|
34
|
+
MODE_BITMAP_EVENTS.set(MODE_BITMAP.CREATE, 'afterCreateWithAssociations');
|
|
35
|
+
MODE_BITMAP_EVENTS.set(MODE_BITMAP.UPDATE, 'afterUpdateWithAssociations');
|
|
36
|
+
MODE_BITMAP_EVENTS.set(MODE_BITMAP.DESTROY, 'afterDestroy');
|
|
31
37
|
|
|
32
|
-
function
|
|
38
|
+
function getHookId(workflow, type) {
|
|
39
|
+
return `${type}#${workflow.id}`;
|
|
40
|
+
} // async function, should return promise
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
function handler(data, options) {
|
|
33
44
|
const _this$config = this.config,
|
|
34
45
|
condition = _this$config.condition,
|
|
35
|
-
changed = _this$config.changed;
|
|
36
|
-
return (data, options) => {
|
|
37
|
-
// NOTE: if no configured fields changed, do not trigger
|
|
38
|
-
if (changed && changed.length && changed.every(name => !data.changed(name))) {
|
|
39
|
-
return;
|
|
40
|
-
} // NOTE: if no configured condition match, do not trigger
|
|
46
|
+
changed = _this$config.changed; // NOTE: if no configured fields changed, do not trigger
|
|
41
47
|
|
|
48
|
+
if (changed && changed.length && changed.every(name => !data.changed(name))) {
|
|
49
|
+
return;
|
|
50
|
+
} // NOTE: if no configured condition match, do not trigger
|
|
42
51
|
|
|
43
|
-
if (condition && condition.$and.length) {// TODO: check all conditions in condition against data
|
|
44
|
-
// const calculation = toCalculation(condition);
|
|
45
|
-
}
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
if (condition && condition.$and.length) {// TODO: check all conditions in condition against data
|
|
54
|
+
// const calculation = toCalculation(condition);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return this.trigger({
|
|
58
|
+
data: data.get()
|
|
59
|
+
}, options);
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
|
|
54
|
-
|
|
62
|
+
class CollectionTrigger {
|
|
63
|
+
constructor({
|
|
64
|
+
app
|
|
65
|
+
}) {
|
|
66
|
+
this.db = void 0;
|
|
67
|
+
this.events = new Map();
|
|
68
|
+
this.db = app.db;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
on(workflow) {
|
|
72
|
+
// NOTE: remove previous listener if config updated
|
|
73
|
+
const prev = workflow.previous();
|
|
74
|
+
|
|
75
|
+
if (prev.config) {
|
|
76
|
+
this.off(_objectSpread(_objectSpread({}, workflow.get()), prev));
|
|
77
|
+
}
|
|
55
78
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
mode = _this$config2.mode;
|
|
61
|
-
const Collection = database.getCollection(collection);
|
|
79
|
+
const _workflow$config = workflow.config,
|
|
80
|
+
collection = _workflow$config.collection,
|
|
81
|
+
mode = _workflow$config.mode;
|
|
82
|
+
const Collection = this.db.getCollection(collection);
|
|
62
83
|
|
|
63
84
|
if (!Collection) {
|
|
64
85
|
return;
|
|
@@ -71,16 +92,24 @@ var _default = {
|
|
|
71
92
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
72
93
|
let _step$value = _slicedToArray(_step.value, 2),
|
|
73
94
|
key = _step$value[0],
|
|
74
|
-
|
|
95
|
+
type = _step$value[1];
|
|
75
96
|
|
|
76
|
-
|
|
77
|
-
|
|
97
|
+
const event = `${collection}.${type}`;
|
|
98
|
+
const name = getHookId(workflow, event);
|
|
78
99
|
|
|
79
|
-
|
|
80
|
-
|
|
100
|
+
if (mode & key) {
|
|
101
|
+
if (!this.events.has(name)) {
|
|
102
|
+
const listener = handler.bind(workflow);
|
|
103
|
+
this.events.set(name, listener);
|
|
104
|
+
this.db.on(event, listener);
|
|
81
105
|
}
|
|
82
106
|
} else {
|
|
83
|
-
|
|
107
|
+
const listener = this.events.get(name);
|
|
108
|
+
|
|
109
|
+
if (listener) {
|
|
110
|
+
this.db.off(event, listener);
|
|
111
|
+
this.events.delete(name);
|
|
112
|
+
}
|
|
84
113
|
}
|
|
85
114
|
}
|
|
86
115
|
} catch (err) {
|
|
@@ -88,14 +117,13 @@ var _default = {
|
|
|
88
117
|
} finally {
|
|
89
118
|
_iterator.f();
|
|
90
119
|
}
|
|
91
|
-
}
|
|
120
|
+
}
|
|
92
121
|
|
|
93
|
-
off() {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const Collection = database.getCollection(collection);
|
|
122
|
+
off(workflow) {
|
|
123
|
+
const _workflow$config2 = workflow.config,
|
|
124
|
+
collection = _workflow$config2.collection,
|
|
125
|
+
mode = _workflow$config2.mode;
|
|
126
|
+
const Collection = this.db.getCollection(collection);
|
|
99
127
|
|
|
100
128
|
if (!Collection) {
|
|
101
129
|
return;
|
|
@@ -108,10 +136,18 @@ var _default = {
|
|
|
108
136
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
109
137
|
let _step2$value = _slicedToArray(_step2.value, 2),
|
|
110
138
|
key = _step2$value[0],
|
|
111
|
-
|
|
139
|
+
type = _step2$value[1];
|
|
140
|
+
|
|
141
|
+
const event = `${collection}.${type}`;
|
|
142
|
+
const name = getHookId(workflow, event);
|
|
112
143
|
|
|
113
144
|
if (mode & key) {
|
|
114
|
-
|
|
145
|
+
const listener = this.events.get(name);
|
|
146
|
+
|
|
147
|
+
if (listener) {
|
|
148
|
+
this.db.off(event, listener);
|
|
149
|
+
this.events.delete(name);
|
|
150
|
+
}
|
|
115
151
|
}
|
|
116
152
|
}
|
|
117
153
|
} catch (err) {
|
|
@@ -121,5 +157,6 @@ var _default = {
|
|
|
121
157
|
}
|
|
122
158
|
}
|
|
123
159
|
|
|
124
|
-
}
|
|
125
|
-
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
exports.default = CollectionTrigger;
|
package/lib/triggers/index.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { Registry } from '@nocobase/utils';
|
|
2
1
|
import WorkflowModel from '../models/Workflow';
|
|
3
2
|
export interface Trigger {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
off(this: WorkflowModel): void;
|
|
3
|
+
on(workflow: WorkflowModel): void;
|
|
4
|
+
off(workflow: WorkflowModel): void;
|
|
7
5
|
}
|
|
8
|
-
export
|
|
9
|
-
export default triggers;
|
|
6
|
+
export default function (plugin: any): void;
|
package/lib/triggers/index.js
CHANGED
|
@@ -3,24 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
function _utils() {
|
|
9
|
-
const data = require("@nocobase/utils");
|
|
10
|
-
|
|
11
|
-
_utils = function _utils() {
|
|
12
|
-
return data;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
6
|
+
exports.default = _default;
|
|
17
7
|
|
|
18
8
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
19
9
|
|
|
20
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
triggers.register(_collection.default.name, _collection.default);
|
|
12
|
+
function _default(plugin) {
|
|
13
|
+
const triggers = plugin.triggers;
|
|
14
|
+
triggers.register('collection', new _collection.default(plugin)); // triggers.register('schedule', new Schedule(plugin));
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/plugin-workflow",
|
|
3
|
-
"version": "0.7.0-alpha.
|
|
3
|
+
"version": "0.7.0-alpha.58",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"licenses": [
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
}
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@nocobase/actions": "0.7.0-alpha.
|
|
14
|
-
"@nocobase/database": "0.7.0-alpha.
|
|
15
|
-
"@nocobase/server": "0.7.0-alpha.
|
|
16
|
-
"@nocobase/utils": "0.7.0-alpha.
|
|
13
|
+
"@nocobase/actions": "0.7.0-alpha.58",
|
|
14
|
+
"@nocobase/database": "0.7.0-alpha.58",
|
|
15
|
+
"@nocobase/server": "0.7.0-alpha.58",
|
|
16
|
+
"@nocobase/utils": "0.7.0-alpha.58",
|
|
17
17
|
"json-templates": "^4.2.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@nocobase/test": "0.7.0-alpha.
|
|
20
|
+
"@nocobase/test": "0.7.0-alpha.58"
|
|
21
21
|
},
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "19ee42257edf17804d548ffd5ba9ddff6dc775d1"
|
|
23
23
|
}
|