@nocobase/plugin-workflow 2.1.0-alpha.10 → 2.1.0-alpha.12
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/dist/client/93d3f3f8ced1c194.js +10 -0
- package/dist/client/c46a9a8d11a5be44.js +10 -0
- package/dist/client/cd221313681d6736.js +10 -0
- package/dist/client/e9463c8cd2a45481.js +10 -0
- package/dist/client/index.js +1 -1
- package/dist/client/nodes/create.d.ts +10 -0
- package/dist/client/nodes/destroy.d.ts +10 -0
- package/dist/client/nodes/query.d.ts +10 -0
- package/dist/client/nodes/update.d.ts +10 -0
- package/dist/client/triggers/collection.d.ts +14 -1
- package/dist/client/triggers/index.d.ts +4 -0
- package/dist/client/triggers/schedule/constants.d.ts +4 -0
- package/dist/client/triggers/schedule/index.d.ts +15 -0
- package/dist/externalVersion.js +12 -12
- package/dist/locale/zh-CN.json +1 -0
- package/dist/node_modules/cron-parser/package.json +1 -1
- package/dist/node_modules/joi/dist/joi-browser.min.js +1 -0
- package/dist/node_modules/joi/lib/annotate.js +175 -0
- package/dist/node_modules/joi/lib/base.js +1069 -0
- package/dist/node_modules/joi/lib/cache.js +143 -0
- package/dist/node_modules/joi/lib/common.js +216 -0
- package/dist/node_modules/joi/lib/compile.js +283 -0
- package/dist/node_modules/joi/lib/errors.js +271 -0
- package/dist/node_modules/joi/lib/extend.js +312 -0
- package/dist/node_modules/joi/lib/index.d.ts +2365 -0
- package/dist/node_modules/joi/lib/index.js +1 -0
- package/dist/node_modules/joi/lib/manifest.js +476 -0
- package/dist/node_modules/joi/lib/messages.js +178 -0
- package/dist/node_modules/joi/lib/modify.js +267 -0
- package/dist/node_modules/joi/lib/ref.js +414 -0
- package/dist/node_modules/joi/lib/schemas.js +302 -0
- package/dist/node_modules/joi/lib/state.js +166 -0
- package/dist/node_modules/joi/lib/template.js +463 -0
- package/dist/node_modules/joi/lib/trace.js +346 -0
- package/dist/node_modules/joi/lib/types/alternatives.js +364 -0
- package/dist/node_modules/joi/lib/types/any.js +174 -0
- package/dist/node_modules/joi/lib/types/array.js +809 -0
- package/dist/node_modules/joi/lib/types/binary.js +100 -0
- package/dist/node_modules/joi/lib/types/boolean.js +150 -0
- package/dist/node_modules/joi/lib/types/date.js +233 -0
- package/dist/node_modules/joi/lib/types/function.js +93 -0
- package/dist/node_modules/joi/lib/types/keys.js +1067 -0
- package/dist/node_modules/joi/lib/types/link.js +168 -0
- package/dist/node_modules/joi/lib/types/number.js +363 -0
- package/dist/node_modules/joi/lib/types/object.js +22 -0
- package/dist/node_modules/joi/lib/types/string.js +850 -0
- package/dist/node_modules/joi/lib/types/symbol.js +102 -0
- package/dist/node_modules/joi/lib/validator.js +750 -0
- package/dist/node_modules/joi/lib/values.js +263 -0
- package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.d.ts +60 -0
- package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.js +225 -0
- package/dist/node_modules/joi/node_modules/@hapi/topo/package.json +30 -0
- package/dist/node_modules/joi/package.json +1 -0
- package/dist/node_modules/lru-cache/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/server/Plugin.d.ts +1 -0
- package/dist/server/Plugin.js +26 -0
- package/dist/server/actions/nodes.d.ts +5 -0
- package/dist/server/actions/nodes.js +34 -2
- package/dist/server/actions/workflows.d.ts +6 -0
- package/dist/server/actions/workflows.js +38 -0
- package/dist/server/instructions/CreateInstruction.d.ts +3 -0
- package/dist/server/instructions/CreateInstruction.js +21 -0
- package/dist/server/instructions/DestroyInstruction.d.ts +3 -0
- package/dist/server/instructions/DestroyInstruction.js +22 -0
- package/dist/server/instructions/EndInstruction.d.ts +2 -0
- package/dist/server/instructions/EndInstruction.js +4 -0
- package/dist/server/instructions/QueryInstruction.d.ts +3 -0
- package/dist/server/instructions/QueryInstruction.js +21 -0
- package/dist/server/instructions/UpdateInstruction.d.ts +3 -0
- package/dist/server/instructions/UpdateInstruction.js +22 -0
- package/dist/server/instructions/index.d.ts +4 -0
- package/dist/server/instructions/index.js +18 -0
- package/dist/server/triggers/CollectionTrigger.d.ts +3 -0
- package/dist/server/triggers/CollectionTrigger.js +23 -0
- package/dist/server/triggers/ScheduleTrigger/index.d.ts +3 -0
- package/dist/server/triggers/ScheduleTrigger/index.js +18 -3
- package/dist/server/triggers/index.d.ts +3 -0
- package/dist/server/triggers/index.js +18 -0
- package/dist/server/utils.d.ts +2 -0
- package/dist/server/utils.js +22 -2
- package/package.json +3 -2
- package/dist/client/0e7da88f89e15485.js +0 -10
- package/dist/client/37560b46d530bcf9.js +0 -10
- package/dist/client/4464fed3a8411375.js +0 -10
- package/dist/client/973723cf75f1e4e9.js +0 -10
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Assert = require('@hapi/hoek/lib/assert');
|
|
4
|
+
const DeepEqual = require('@hapi/hoek/lib/deepEqual');
|
|
5
|
+
|
|
6
|
+
const Common = require('./common');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
const internals = {};
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
module.exports = internals.Values = class {
|
|
13
|
+
|
|
14
|
+
constructor(values, refs) {
|
|
15
|
+
|
|
16
|
+
this._values = new Set(values);
|
|
17
|
+
this._refs = new Set(refs);
|
|
18
|
+
this._lowercase = internals.lowercases(values);
|
|
19
|
+
|
|
20
|
+
this._override = false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get length() {
|
|
24
|
+
|
|
25
|
+
return this._values.size + this._refs.size;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
add(value, refs) {
|
|
29
|
+
|
|
30
|
+
// Reference
|
|
31
|
+
|
|
32
|
+
if (Common.isResolvable(value)) {
|
|
33
|
+
if (!this._refs.has(value)) {
|
|
34
|
+
this._refs.add(value);
|
|
35
|
+
|
|
36
|
+
if (refs) { // Skipped in a merge
|
|
37
|
+
refs.register(value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Value
|
|
45
|
+
|
|
46
|
+
if (!this.has(value, null, null, false)) {
|
|
47
|
+
this._values.add(value);
|
|
48
|
+
|
|
49
|
+
if (typeof value === 'string') {
|
|
50
|
+
this._lowercase.set(value.toLowerCase(), value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static merge(target, source, remove) {
|
|
56
|
+
|
|
57
|
+
target = target || new internals.Values();
|
|
58
|
+
|
|
59
|
+
if (source) {
|
|
60
|
+
if (source._override) {
|
|
61
|
+
return source.clone();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
for (const item of [...source._values, ...source._refs]) {
|
|
65
|
+
target.add(item);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (remove) {
|
|
70
|
+
for (const item of [...remove._values, ...remove._refs]) {
|
|
71
|
+
target.remove(item);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return target.length ? target : null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
remove(value) {
|
|
79
|
+
|
|
80
|
+
// Reference
|
|
81
|
+
|
|
82
|
+
if (Common.isResolvable(value)) {
|
|
83
|
+
this._refs.delete(value);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Value
|
|
88
|
+
|
|
89
|
+
this._values.delete(value);
|
|
90
|
+
|
|
91
|
+
if (typeof value === 'string') {
|
|
92
|
+
this._lowercase.delete(value.toLowerCase());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
has(value, state, prefs, insensitive) {
|
|
97
|
+
|
|
98
|
+
return !!this.get(value, state, prefs, insensitive);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
get(value, state, prefs, insensitive) {
|
|
102
|
+
|
|
103
|
+
if (!this.length) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Simple match
|
|
108
|
+
|
|
109
|
+
if (this._values.has(value)) {
|
|
110
|
+
return { value };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Case insensitive string match
|
|
114
|
+
|
|
115
|
+
if (typeof value === 'string' &&
|
|
116
|
+
value &&
|
|
117
|
+
insensitive) {
|
|
118
|
+
|
|
119
|
+
const found = this._lowercase.get(value.toLowerCase());
|
|
120
|
+
if (found) {
|
|
121
|
+
return { value: found };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!this._refs.size &&
|
|
126
|
+
typeof value !== 'object') {
|
|
127
|
+
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Objects
|
|
132
|
+
|
|
133
|
+
if (typeof value === 'object') {
|
|
134
|
+
for (const item of this._values) {
|
|
135
|
+
if (DeepEqual(item, value)) {
|
|
136
|
+
return { value: item };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// References
|
|
142
|
+
|
|
143
|
+
if (state) {
|
|
144
|
+
for (const ref of this._refs) {
|
|
145
|
+
const resolved = ref.resolve(value, state, prefs, null, { in: true });
|
|
146
|
+
if (resolved === undefined) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const items = !ref.in || typeof resolved !== 'object'
|
|
151
|
+
? [resolved]
|
|
152
|
+
: Array.isArray(resolved) ? resolved : Object.keys(resolved);
|
|
153
|
+
|
|
154
|
+
for (const item of items) {
|
|
155
|
+
if (typeof item !== typeof value) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (insensitive &&
|
|
160
|
+
value &&
|
|
161
|
+
typeof value === 'string') {
|
|
162
|
+
|
|
163
|
+
if (item.toLowerCase() === value.toLowerCase()) {
|
|
164
|
+
return { value: item, ref };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
if (DeepEqual(item, value)) {
|
|
169
|
+
return { value: item, ref };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
override() {
|
|
180
|
+
|
|
181
|
+
this._override = true;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
values(options) {
|
|
185
|
+
|
|
186
|
+
if (options &&
|
|
187
|
+
options.display) {
|
|
188
|
+
|
|
189
|
+
const values = [];
|
|
190
|
+
|
|
191
|
+
for (const item of [...this._values, ...this._refs]) {
|
|
192
|
+
if (item !== undefined) {
|
|
193
|
+
values.push(item);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return values;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return Array.from([...this._values, ...this._refs]);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
clone() {
|
|
204
|
+
|
|
205
|
+
const set = new internals.Values(this._values, this._refs);
|
|
206
|
+
set._override = this._override;
|
|
207
|
+
return set;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
concat(source) {
|
|
211
|
+
|
|
212
|
+
Assert(!source._override, 'Cannot concat override set of values');
|
|
213
|
+
|
|
214
|
+
const set = new internals.Values([...this._values, ...source._values], [...this._refs, ...source._refs]);
|
|
215
|
+
set._override = this._override;
|
|
216
|
+
return set;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
describe() {
|
|
220
|
+
|
|
221
|
+
const normalized = [];
|
|
222
|
+
|
|
223
|
+
if (this._override) {
|
|
224
|
+
normalized.push({ override: true });
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
for (const value of this._values.values()) {
|
|
228
|
+
normalized.push(value && typeof value === 'object' ? { value } : value);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
for (const value of this._refs.values()) {
|
|
232
|
+
normalized.push(value.describe());
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return normalized;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
internals.Values.prototype[Common.symbols.values] = true;
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
// Aliases
|
|
244
|
+
|
|
245
|
+
internals.Values.prototype.slice = internals.Values.prototype.clone;
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
// Helpers
|
|
249
|
+
|
|
250
|
+
internals.lowercases = function (from) {
|
|
251
|
+
|
|
252
|
+
const map = new Map();
|
|
253
|
+
|
|
254
|
+
if (from) {
|
|
255
|
+
for (const value of from) {
|
|
256
|
+
if (typeof value === 'string') {
|
|
257
|
+
map.set(value.toLowerCase(), value);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return map;
|
|
263
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export class Sorter<T> {
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* An array of the topologically sorted nodes. This list is renewed upon each call to topo.add().
|
|
5
|
+
*/
|
|
6
|
+
nodes: T[];
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Adds a node or list of nodes to be added and topologically sorted
|
|
10
|
+
*
|
|
11
|
+
* @param nodes - A mixed value or array of mixed values to be added as nodes to the topologically sorted list.
|
|
12
|
+
* @param options - Optional sorting information about the nodes.
|
|
13
|
+
*
|
|
14
|
+
* @returns Returns an array of the topologically sorted nodes.
|
|
15
|
+
*/
|
|
16
|
+
add(nodes: T | T[], options?: Options): T[];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Merges another Sorter object into the current object.
|
|
20
|
+
*
|
|
21
|
+
* @param others - The other object or array of objects to be merged into the current one.
|
|
22
|
+
*
|
|
23
|
+
* @returns Returns an array of the topologically sorted nodes.
|
|
24
|
+
*/
|
|
25
|
+
merge(others: Sorter<T> | Sorter<T>[]): T[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Sorts the nodes array (only required if the manual option is used when adding items)
|
|
29
|
+
*/
|
|
30
|
+
sort(): T[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export interface Options {
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The sorting group the added items belong to
|
|
38
|
+
*/
|
|
39
|
+
readonly group?: string;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The group or groups the added items must come before
|
|
43
|
+
*/
|
|
44
|
+
readonly before?: string | string[];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The group or groups the added items must come after
|
|
48
|
+
*/
|
|
49
|
+
readonly after?: string | string[];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A number used to sort items with equal before/after requirements
|
|
53
|
+
*/
|
|
54
|
+
readonly sort?: number;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* If true, the array is not sorted automatically until sort() is called
|
|
58
|
+
*/
|
|
59
|
+
readonly manual?: boolean;
|
|
60
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Assert = require('@hapi/hoek/lib/assert');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const internals = {};
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.Sorter = class {
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
|
|
13
|
+
this._items = [];
|
|
14
|
+
this.nodes = [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
add(nodes, options) {
|
|
18
|
+
|
|
19
|
+
options = options || {};
|
|
20
|
+
|
|
21
|
+
// Validate rules
|
|
22
|
+
|
|
23
|
+
const before = [].concat(options.before || []);
|
|
24
|
+
const after = [].concat(options.after || []);
|
|
25
|
+
const group = options.group || '?';
|
|
26
|
+
const sort = options.sort || 0; // Used for merging only
|
|
27
|
+
|
|
28
|
+
Assert(!before.includes(group), `Item cannot come before itself: ${group}`);
|
|
29
|
+
Assert(!before.includes('?'), 'Item cannot come before unassociated items');
|
|
30
|
+
Assert(!after.includes(group), `Item cannot come after itself: ${group}`);
|
|
31
|
+
Assert(!after.includes('?'), 'Item cannot come after unassociated items');
|
|
32
|
+
|
|
33
|
+
if (!Array.isArray(nodes)) {
|
|
34
|
+
nodes = [nodes];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
for (const node of nodes) {
|
|
38
|
+
const item = {
|
|
39
|
+
seq: this._items.length,
|
|
40
|
+
sort,
|
|
41
|
+
before,
|
|
42
|
+
after,
|
|
43
|
+
group,
|
|
44
|
+
node
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
this._items.push(item);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Insert event
|
|
51
|
+
|
|
52
|
+
if (!options.manual) {
|
|
53
|
+
const valid = this._sort();
|
|
54
|
+
Assert(valid, 'item', group !== '?' ? `added into group ${group}` : '', 'created a dependencies error');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return this.nodes;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
merge(others) {
|
|
61
|
+
|
|
62
|
+
if (!Array.isArray(others)) {
|
|
63
|
+
others = [others];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
for (const other of others) {
|
|
67
|
+
if (other) {
|
|
68
|
+
for (const item of other._items) {
|
|
69
|
+
this._items.push(Object.assign({}, item)); // Shallow cloned
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Sort items
|
|
75
|
+
|
|
76
|
+
this._items.sort(internals.mergeSort);
|
|
77
|
+
for (let i = 0; i < this._items.length; ++i) {
|
|
78
|
+
this._items[i].seq = i;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const valid = this._sort();
|
|
82
|
+
Assert(valid, 'merge created a dependencies error');
|
|
83
|
+
|
|
84
|
+
return this.nodes;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
sort() {
|
|
88
|
+
|
|
89
|
+
const valid = this._sort();
|
|
90
|
+
Assert(valid, 'sort created a dependencies error');
|
|
91
|
+
|
|
92
|
+
return this.nodes;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
_sort() {
|
|
96
|
+
|
|
97
|
+
// Construct graph
|
|
98
|
+
|
|
99
|
+
const graph = {};
|
|
100
|
+
const graphAfters = Object.create(null); // A prototype can bungle lookups w/ false positives
|
|
101
|
+
const groups = Object.create(null);
|
|
102
|
+
|
|
103
|
+
for (const item of this._items) {
|
|
104
|
+
const seq = item.seq; // Unique across all items
|
|
105
|
+
const group = item.group;
|
|
106
|
+
|
|
107
|
+
// Determine Groups
|
|
108
|
+
|
|
109
|
+
groups[group] = groups[group] || [];
|
|
110
|
+
groups[group].push(seq);
|
|
111
|
+
|
|
112
|
+
// Build intermediary graph using 'before'
|
|
113
|
+
|
|
114
|
+
graph[seq] = item.before;
|
|
115
|
+
|
|
116
|
+
// Build second intermediary graph with 'after'
|
|
117
|
+
|
|
118
|
+
for (const after of item.after) {
|
|
119
|
+
graphAfters[after] = graphAfters[after] || [];
|
|
120
|
+
graphAfters[after].push(seq);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Expand intermediary graph
|
|
125
|
+
|
|
126
|
+
for (const node in graph) {
|
|
127
|
+
const expandedGroups = [];
|
|
128
|
+
|
|
129
|
+
for (const graphNodeItem in graph[node]) {
|
|
130
|
+
const group = graph[node][graphNodeItem];
|
|
131
|
+
groups[group] = groups[group] || [];
|
|
132
|
+
expandedGroups.push(...groups[group]);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
graph[node] = expandedGroups;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Merge intermediary graph using graphAfters into final graph
|
|
139
|
+
|
|
140
|
+
for (const group in graphAfters) {
|
|
141
|
+
if (groups[group]) {
|
|
142
|
+
for (const node of groups[group]) {
|
|
143
|
+
graph[node].push(...graphAfters[group]);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Compile ancestors
|
|
149
|
+
|
|
150
|
+
const ancestors = {};
|
|
151
|
+
for (const node in graph) {
|
|
152
|
+
const children = graph[node];
|
|
153
|
+
for (const child of children) {
|
|
154
|
+
ancestors[child] = ancestors[child] || [];
|
|
155
|
+
ancestors[child].push(node);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Topo sort
|
|
160
|
+
|
|
161
|
+
const visited = {};
|
|
162
|
+
const sorted = [];
|
|
163
|
+
|
|
164
|
+
for (let i = 0; i < this._items.length; ++i) { // Looping through item.seq values out of order
|
|
165
|
+
let next = i;
|
|
166
|
+
|
|
167
|
+
if (ancestors[i]) {
|
|
168
|
+
next = null;
|
|
169
|
+
for (let j = 0; j < this._items.length; ++j) { // As above, these are item.seq values
|
|
170
|
+
if (visited[j] === true) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (!ancestors[j]) {
|
|
175
|
+
ancestors[j] = [];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const shouldSeeCount = ancestors[j].length;
|
|
179
|
+
let seenCount = 0;
|
|
180
|
+
for (let k = 0; k < shouldSeeCount; ++k) {
|
|
181
|
+
if (visited[ancestors[j][k]]) {
|
|
182
|
+
++seenCount;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (seenCount === shouldSeeCount) {
|
|
187
|
+
next = j;
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (next !== null) {
|
|
194
|
+
visited[next] = true;
|
|
195
|
+
sorted.push(next);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (sorted.length !== this._items.length) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const seqIndex = {};
|
|
204
|
+
for (const item of this._items) {
|
|
205
|
+
seqIndex[item.seq] = item;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
this._items = [];
|
|
209
|
+
this.nodes = [];
|
|
210
|
+
|
|
211
|
+
for (const value of sorted) {
|
|
212
|
+
const sortedItem = seqIndex[value];
|
|
213
|
+
this.nodes.push(sortedItem.node);
|
|
214
|
+
this._items.push(sortedItem);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
internals.mergeSort = (a, b) => {
|
|
223
|
+
|
|
224
|
+
return a.sort === b.sort ? 0 : (a.sort < b.sort ? -1 : 1);
|
|
225
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hapi/topo",
|
|
3
|
+
"description": "Topological sorting with grouping support",
|
|
4
|
+
"version": "5.1.0",
|
|
5
|
+
"repository": "git://github.com/hapijs/topo",
|
|
6
|
+
"main": "lib/index.js",
|
|
7
|
+
"types": "lib/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"lib"
|
|
10
|
+
],
|
|
11
|
+
"keywords": [
|
|
12
|
+
"topological",
|
|
13
|
+
"sort",
|
|
14
|
+
"toposort",
|
|
15
|
+
"topsort"
|
|
16
|
+
],
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@hapi/hoek": "^9.0.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@hapi/code": "8.x.x",
|
|
22
|
+
"@hapi/lab": "24.x.x",
|
|
23
|
+
"typescript": "~4.0.2"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "lab -a @hapi/code -t 100 -L -Y",
|
|
27
|
+
"test-cov-html": "lab -a @hapi/code -t 100 -L -r html -o coverage.html"
|
|
28
|
+
},
|
|
29
|
+
"license": "BSD-3-Clause"
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"joi","description":"Object schema validation","version":"17.13.3","repository":"git://github.com/hapijs/joi","main":"lib/index.js","types":"lib/index.d.ts","browser":"dist/joi-browser.min.js","files":["lib/**/*","dist/*"],"keywords":["schema","validation"],"dependencies":{"@hapi/hoek":"^9.3.0","@hapi/topo":"^5.1.0","@sideway/address":"^4.1.5","@sideway/formula":"^3.0.1","@sideway/pinpoint":"^2.0.0"},"devDependencies":{"@hapi/bourne":"2.x.x","@hapi/code":"8.x.x","@hapi/joi-legacy-test":"npm:@hapi/joi@15.x.x","@hapi/lab":"^25.1.3","@types/node":"^14.18.63","typescript":"4.3.x"},"scripts":{"prepublishOnly":"cd browser && npm install && npm run build","test":"lab -t 100 -a @hapi/code -L -Y","test-cov-html":"lab -r html -o coverage.html -a @hapi/code"},"license":"BSD-3-Clause","_lastModified":"2026-03-25T14:11:03.033Z"}
|
|
@@ -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":"2026-03-
|
|
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":"2026-03-25T14:11:02.047Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"nodejs-snowflake","collaborators":["Utkarsh Srivastava <utkarsh@sagacious.dev>"],"description":"Generate time sortable 64 bits unique ids for distributed systems (inspired from twitter snowflake)","version":"2.0.1","license":"Apache 2.0","repository":{"type":"git","url":"https://github.com/utkarsh-pro/nodejs-snowflake.git"},"files":["nodejs_snowflake_bg.wasm","nodejs_snowflake.js","nodejs_snowflake.d.ts"],"main":"nodejs_snowflake.js","types":"nodejs_snowflake.d.ts","_lastModified":"2026-03-
|
|
1
|
+
{"name":"nodejs-snowflake","collaborators":["Utkarsh Srivastava <utkarsh@sagacious.dev>"],"description":"Generate time sortable 64 bits unique ids for distributed systems (inspired from twitter snowflake)","version":"2.0.1","license":"Apache 2.0","repository":{"type":"git","url":"https://github.com/utkarsh-pro/nodejs-snowflake.git"},"files":["nodejs_snowflake_bg.wasm","nodejs_snowflake.js","nodejs_snowflake.d.ts"],"main":"nodejs_snowflake.js","types":"nodejs_snowflake.d.ts","_lastModified":"2026-03-25T14:11:01.841Z"}
|
package/dist/server/Plugin.d.ts
CHANGED
package/dist/server/Plugin.js
CHANGED
|
@@ -49,6 +49,8 @@ var import_utils = require("@nocobase/utils");
|
|
|
49
49
|
var import_Dispatcher = __toESM(require("./Dispatcher"));
|
|
50
50
|
var import_Processor = __toESM(require("./Processor"));
|
|
51
51
|
var import_actions = __toESM(require("./actions"));
|
|
52
|
+
var import_nodes = require("./actions/nodes");
|
|
53
|
+
var import_workflows = require("./actions/workflows");
|
|
52
54
|
var import_functions = __toESM(require("./functions"));
|
|
53
55
|
var import_CollectionTrigger = __toESM(require("./triggers/CollectionTrigger"));
|
|
54
56
|
var import_ScheduleTrigger = __toESM(require("./triggers/ScheduleTrigger"));
|
|
@@ -280,6 +282,29 @@ class PluginWorkflowServer extends import_server.Plugin {
|
|
|
280
282
|
this.registerInstruction(name, instruction);
|
|
281
283
|
}
|
|
282
284
|
}
|
|
285
|
+
registerErrorHandlers() {
|
|
286
|
+
const PluginErrorHandler = this.app.pm.get("error-handler");
|
|
287
|
+
if (PluginErrorHandler == null ? void 0 : PluginErrorHandler.errorHandler) {
|
|
288
|
+
PluginErrorHandler.errorHandler.register(
|
|
289
|
+
(err) => err instanceof import_nodes.NodeValidationError || err.name === "NodeValidationError",
|
|
290
|
+
(err, ctx) => {
|
|
291
|
+
ctx.status = err.status;
|
|
292
|
+
ctx.body = {
|
|
293
|
+
errors: Object.values(err.errors).map((message) => ({ message }))
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
);
|
|
297
|
+
PluginErrorHandler.errorHandler.register(
|
|
298
|
+
(err) => err instanceof import_workflows.WorkflowValidationError || err.name === "WorkflowValidationError",
|
|
299
|
+
(err, ctx) => {
|
|
300
|
+
ctx.status = err.status;
|
|
301
|
+
ctx.body = {
|
|
302
|
+
errors: Object.values(err.errors).map((message) => ({ message }))
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
283
308
|
async beforeLoad() {
|
|
284
309
|
this.db.registerRepositories({
|
|
285
310
|
WorkflowRepository: import_WorkflowRepository.default
|
|
@@ -302,6 +327,7 @@ class PluginWorkflowServer extends import_server.Plugin {
|
|
|
302
327
|
this.initTriggers(options.triggers);
|
|
303
328
|
this.initInstructions(options.instructions);
|
|
304
329
|
(0, import_functions.default)(this, options.functions);
|
|
330
|
+
this.registerErrorHandlers();
|
|
305
331
|
this.functions.register("instanceId", () => this.app.instanceId);
|
|
306
332
|
this.functions.register("epoch", () => 1605024e3);
|
|
307
333
|
this.functions.register("genSnowflakeId", () => this.app.snowflakeIdGenerator.generate());
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { Context } from '@nocobase/actions';
|
|
10
|
+
export declare class NodeValidationError extends Error {
|
|
11
|
+
status: number;
|
|
12
|
+
errors: Record<string, string>;
|
|
13
|
+
constructor(errors: Record<string, string>);
|
|
14
|
+
}
|
|
10
15
|
export declare function create(context: Context, next: any): Promise<void>;
|
|
11
16
|
export declare function duplicate(context: Context, next: any): Promise<void>;
|
|
12
17
|
export declare function destroy(context: Context, next: any): Promise<void>;
|